CreateScheduleTaskExcutor.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. using JLHHJSvr.BLL;
  2. using JLHHJSvr.Com;
  3. using JLHHJSvr.Com.Model;
  4. using JLHHJSvr.Helper;
  5. using JLHHJSvr.LJException;
  6. using LJLib.Net.SPI.Server;
  7. using LJLib.SQLEX;
  8. using System;
  9. using System.Diagnostics;
  10. using System.Linq;
  11. namespace JLHHJSvr.Excutor
  12. {
  13. internal sealed class CreateScheduleTaskExcutor : ExcutorBase<CreateScheduleTaskRequest, CreateScheduleTaskResponse>
  14. {
  15. protected override void ExcuteInternal(CreateScheduleTaskRequest request, object state, CreateScheduleTaskResponse rslt)
  16. {
  17. var tokendata = BllHelper.GetToken(request.token);
  18. if (tokendata == null)
  19. {
  20. rslt.ErrMsg = "会话已经中断,请重新登录";
  21. return;
  22. }
  23. if (string.IsNullOrEmpty(request.task_type))
  24. {
  25. rslt.ErrMsg = "缺少任务类型";
  26. return;
  27. }
  28. if (request.schedule_time == null)
  29. {
  30. rslt.ErrMsg = "缺少计划执行时间";
  31. return;
  32. }
  33. if (request.items == null || !request.items.Any())
  34. {
  35. rslt.ErrMsg = "至少提交一条任务明细";
  36. return;
  37. }
  38. if (request.task_type != ScheduleTaskHelper.TaskTypeMattressRecalc)
  39. {
  40. rslt.ErrMsg = "暂不支持的任务类型:" + request.task_type;
  41. return;
  42. }
  43. var scheduleTime = request.schedule_time.Value;
  44. if (scheduleTime < DateTime.Now.AddMinutes(-1))
  45. {
  46. throw new LJCommonException("计划执行时间不能早于当前时间");
  47. }
  48. using (var con = GlobalVar.ConnectionString.NewSqlConnection())
  49. using (var cmd = con.CreateCommand())
  50. {
  51. con.Open();
  52. var mattressHelper = HelperBase.GetHelper<MattressHelper>(cmd);
  53. var items = request.items
  54. .Where(t => t > 0)
  55. .GroupBy(t => t)
  56. .Select(g => g.First())
  57. .ToList();
  58. var mattressList = mattressHelper.GetMattressList(request.items,"mattressid,mattresscode,mattressname");
  59. var start_time = DateTime.Now;
  60. if (!mattressList.Any()) throw new LJCommonException("没有有效的任务明细");
  61. using (cmd.Transaction = con.BeginTransaction())
  62. {
  63. try
  64. {
  65. var taskid = ScheduleTaskHelper.CreateTaskLog(cmd, new u_task_log
  66. {
  67. task_type = request.task_type,
  68. run_mode = 2,
  69. schedule_time = scheduleTime,
  70. status = 0,
  71. total_count = mattressList.Count,
  72. request_json = request.request_json,
  73. create_emp = tokendata.username,
  74. start_time = start_time
  75. });
  76. var printid = 1;
  77. ScheduleTaskHelper.InsertTaskLogItems(cmd, taskid, mattressList.Select(item => new u_task_log_mx
  78. {
  79. printid = printid++,
  80. biz_id = item.mattressid,
  81. biz_code = item.mattresscode,
  82. biz_name = item.mattressname,
  83. status = 0,
  84. start_time = start_time
  85. }).ToList());
  86. cmd.Transaction.Commit();
  87. rslt.taskid = taskid;
  88. rslt.task_type = request.task_type;
  89. rslt.schedule_time = scheduleTime;
  90. rslt.total_count = mattressList.Count;
  91. rslt.logMsg = $"已创建定时任务,任务号:{taskid},计划时间:{scheduleTime:yyyy-MM-dd HH:mm},共{items.Count}条。";
  92. Trace.Write(rslt.logMsg);
  93. }
  94. catch (Exception ex)
  95. {
  96. cmd.Transaction.Rollback();
  97. rslt.ErrMsg = ex.Message;
  98. }
  99. }
  100. }
  101. }
  102. }
  103. }