商丘12345 后端

CallPlanWork.cs 4.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using CallCenterApi.Model;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace CallCenter.QuartzService
  8. {
  9. public class CallPlanWork : QuartzJob
  10. {
  11. public CallPlanWork()
  12. {
  13. CronExpression = "/30 * * * * ?";
  14. DoWork += MyWork_DoWork;
  15. }
  16. private readonly CallCenterApi.BLL.T_CTI_Task taskBLL = new CallCenterApi.BLL.T_CTI_Task();
  17. private readonly CallCenterApi.BLL.T_Call_TaskTelNum taskNumBLL = new CallCenterApi.BLL.T_Call_TaskTelNum();
  18. private readonly CallCenterApi.BLL.T_Sys_SystemConfig sysConfigBLL = new CallCenterApi.BLL.T_Sys_SystemConfig();
  19. private List<long> taskIdList = new List<long>();
  20. private void MyWork_DoWork(object sender, EventArgs e)
  21. {
  22. var now = DateTime.Now;
  23. var taskList = taskBLL.DataTableToList(taskBLL.GetTaskList(" State>0 ").Tables[0]).Where(x => x.PlanStartDate < now && now < x.PlanEndDate).ToList();
  24. #region 语音自动回访任务启动状态判断 & 号码清除 taskid=-10002 是语音自动回访任务,固定,仅可以修改内容
  25. var autoVoiceNotice = taskBLL.GetModel(-10002);
  26. if (autoVoiceNotice != null)
  27. {
  28. var autoCallBack = sysConfigBLL.GetParamValueByParamCode("AutoCallBack");
  29. if (autoCallBack == "1")
  30. {
  31. taskBLL.UpdateState(-10002, 1);
  32. }
  33. else
  34. {
  35. taskBLL.UpdateState(-10002, 2);
  36. taskNumBLL.DeleteListWhere(" F_TaskId=-10002 and F_HCState=0 ");
  37. }
  38. }
  39. #endregion
  40. #region 外呼任务状态由【暂停】=>【处理中】
  41. var startList = taskList.Where(x => x.State == (int)EnumTaskState.暂停 && ((x.StartTime1.TimeOfDay < now.TimeOfDay && now.TimeOfDay < x.EndTime1.TimeOfDay) || (x.StartTime2.TimeOfDay < now.TimeOfDay && now.TimeOfDay < x.EndTime2.TimeOfDay))).ToList();
  42. if (startList.Count > 0)
  43. {
  44. var startFlag = taskBLL.UpdateStateBatch($" where TaskID in ({string.Join(", ", startList.Select(x => x.TaskID).ToArray())})", (int)EnumTaskState.处理中);
  45. }
  46. #endregion
  47. #region 外呼任务状态由【处理中】=>【处理完成】
  48. var query = taskList.Where(x => x.State == (int)EnumTaskState.处理中).ToList();
  49. foreach (var item in query)
  50. {
  51. var taskNumList = taskNumBLL.DataTableToList(taskNumBLL.GetList(" F_TaskId=" + item.TaskID).Tables[0]);
  52. var allCount = taskNumList.Count();
  53. var connected = taskNumList.Where(x => x.F_YJState == 1).Count();
  54. //item.LoopTime 默认为0; F_HCCount默认为0; 所以这里判断要用 item.LoopTime + 1
  55. var notconnected = taskNumList.Where(x => x.F_YJState == 0 && x.F_HCCount == (item.LoopTime + 1)).Count();
  56. if (allCount == (connected + notconnected))
  57. {
  58. taskIdList.Add(item.TaskID);
  59. }
  60. }
  61. if (taskIdList.Count > 0)
  62. {
  63. taskBLL.UpdateStateBatch($" where TaskID in ({string.Join(", ", taskIdList.Select(x => x).ToArray())})", (int)EnumTaskState.处理完成);
  64. }
  65. #endregion
  66. #region 外呼任务状态由【处理中】=>【暂停】
  67. var closeList = query.Where(x => x.State == (int)EnumTaskState.处理中 && (x.StartTime1.TimeOfDay > now.TimeOfDay || (now.TimeOfDay > x.EndTime1.TimeOfDay && now.TimeOfDay < x.StartTime2.TimeOfDay) || now.TimeOfDay > x.EndTime2.TimeOfDay)).ToList();
  68. if (closeList.Count > 0)
  69. {
  70. var closeFlag = taskBLL.UpdateStateBatch($" where TaskID in ({string.Join(", ", closeList.Select(x => x.TaskID).ToArray())})", (int)EnumTaskState.暂停);
  71. }
  72. #endregion
  73. }
  74. }
  75. }