CreateTask.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. using SHJX.Service.Model.Dao;
  2. namespace SHJX.Service.Control.Extends
  3. {
  4. public static class CreateTask
  5. {
  6. private static IDataManager _dataManager;
  7. public static void Init(IDataManager dataManager)
  8. {
  9. _dataManager = dataManager;
  10. }
  11. /// <summary>
  12. /// 创建水样任务
  13. /// </summary>
  14. /// <returns></returns>
  15. public static EquipmentTask CreateSampleTask(this SampleDetail args, string waveKey)
  16. {
  17. string operateType = args.SampleType switch
  18. {
  19. TaskTypeName.SAMPLE_ZH or TaskTypeName.BLANK_ZH => TaskTypeName.SAMPLE,
  20. _ => throw new ArgumentNullException(args.SampleType)
  21. };
  22. Route route = _dataManager.Query<Route>().Where(it => it.TaskType.Equals(operateType))
  23. .OrderBy(it => it.RouteID).First();
  24. if (route is null)
  25. {
  26. throw new ArgumentException("未找到对应路由");
  27. }
  28. RouteStep step = _dataManager.Query<RouteStep>().Where(it => it.RouteID.Equals(route.RouteID)).OrderBy(it => it.Order).First();
  29. if (step is null)
  30. {
  31. throw new ArgumentException("未找到对应路由步骤");
  32. }
  33. EquipmentTask task = new()
  34. {
  35. WaveKey = waveKey,
  36. Source = args.NodeName,
  37. Status = TaskState.New,
  38. From = args.NodeName,
  39. To = args.NodeName,
  40. RouteID = route.RouteID,
  41. RouteStep = step.Step,
  42. RouteType = operateType,
  43. AcidBaseProp = args.AcidBaseProp,
  44. CalibrationEnable = args.IsCalibration,
  45. TaskDetailName = args.DetailInfo,
  46. SampleVolume = args.SampleVolume,
  47. SampleMultiple = args.SampleMultiple,
  48. TaskType = args.SampleType,
  49. QuicklyTitration = args.QuicklyTitration
  50. };
  51. return task;
  52. }
  53. /// <summary>
  54. /// 创建Wash任务
  55. /// </summary>
  56. /// <returns></returns>
  57. public static EquipmentTask CreateWashTask(this string type) => new()
  58. {
  59. TaskType = type,
  60. Status = TaskState.New,
  61. From = string.Empty,
  62. To = string.Empty,
  63. RouteType = TaskTypeName.WASH,
  64. RouteStep = TaskTypeName.WASH
  65. };
  66. /// <summary>
  67. /// 创建标定任务
  68. /// </summary>
  69. /// <param name="task"></param>
  70. /// <returns></returns>
  71. public static EquipmentTask CreateCalibrationTask(this EquipmentTask task) => new()
  72. {
  73. Source = task.Source,
  74. WaveKey = task.WaveKey,
  75. From = task.Source,
  76. To = task.Source,
  77. Target = nameof(task.From),
  78. Status = TaskState.Execute,
  79. RouteStep = PipeName.TITRATION,
  80. QuicklyTitration = true,
  81. Record = string.Empty,
  82. TaskType = TaskTypeName.CALIBRATION_ZH,
  83. AcidBaseProp = task.AcidBaseProp,
  84. RouteType = TaskTypeName.SAMPLE,
  85. TaskDetailName = TaskTypeName.CALIBRATION_ZH
  86. };
  87. /// <summary>
  88. /// 创建标定任务
  89. /// </summary>
  90. /// <param name="task"></param>
  91. /// <returns></returns>
  92. public static EquipmentTask CreateCalibration2Task(this EquipmentTask task) => new()
  93. {
  94. Source = task.Source,
  95. WaveKey = task.WaveKey,
  96. From = task.Source,
  97. To = task.Source,
  98. Target = nameof(task.From),
  99. Status = TaskState.Execute,
  100. RouteStep = PipeName.TITRATION2,
  101. QuicklyTitration = true,
  102. Record = string.Empty,
  103. TaskType = TaskTypeName.CALIBRATION_ZH,
  104. AcidBaseProp = task.AcidBaseProp,
  105. RouteType = TaskTypeName.SAMPLE,
  106. TaskDetailName = TaskTypeName.CALIBRATION_ZH
  107. };
  108. /// <summary>
  109. /// 获取WaveKey
  110. /// </summary>
  111. /// <returns></returns>
  112. public static string GetWavekey()
  113. {
  114. List<EquipmentTask> equipmentTasks = _dataManager.Query<EquipmentTask>().Where(it => it.Status.In(TaskState.New, TaskState.Waiting, TaskState.Doing, TaskState.Hit, TaskState.AddLiquid, TaskState.Dissolve, TaskState.Titration, TaskState.Titration2, TaskState.Execute)).ToList();
  115. if (equipmentTasks.Any())
  116. {
  117. return equipmentTasks.GroupBy(item => item.WaveKey).FirstOrDefault()?.Key;
  118. }
  119. Batch batch = _dataManager.Query<Batch>().First();
  120. if (batch is null)
  121. {
  122. batch = new Batch
  123. {
  124. CurrentValue = 1,
  125. Createtime = DateTime.Now
  126. };
  127. _dataManager.Add(batch);
  128. }
  129. else
  130. {
  131. if (batch.Createtime.ToString("yyyyMMdd").Equals(DateTime.Now.ToString("yyyyMMdd")))
  132. {
  133. batch.CurrentValue++;
  134. }
  135. else
  136. {
  137. batch.Createtime = DateTime.Now;
  138. batch.CurrentValue = 1;
  139. }
  140. _dataManager.Update(batch);
  141. }
  142. Wavekey wavakey = new()
  143. {
  144. WaveKey = $"{DateTime.Now:yyyyMMdd}{batch.CurrentValue.ToString().PadLeft(3, '0')}"
  145. };
  146. _dataManager.Add(wavakey);
  147. return wavakey.WaveKey;
  148. }
  149. }
  150. }