ControlSchedule.cs 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. using SHJX.Service.Control.Extends;
  2. using SHJX.Service.Control.Pipeline.Contents;
  3. namespace SHJX.Service.Control.Schedules
  4. {
  5. [EnableScheduling]
  6. public class ControlSchedule : IScheduler
  7. {
  8. private static readonly ILogger logger = LogFactory.BuildLogger(typeof(ControlSchedule));
  9. private static TaskExtend _taskExtend;
  10. private static IDataManager _dataManager;
  11. public ControlSchedule(IDataManager dataManager, TaskExtend taskExtend)
  12. {
  13. _taskExtend = taskExtend;
  14. _dataManager = dataManager;
  15. }
  16. [Scheduled("AddLiquidControl", 1000)]
  17. public void AddLiquidControl()
  18. {
  19. EquipmentTask task = _dataManager.Query<EquipmentTask>().Where(it => it.Status.Equals(TaskState.AddLiquid)).First();
  20. if (task is null)
  21. {
  22. return;
  23. }
  24. task.Status = TaskState.Execute;
  25. _dataManager.Update(task);
  26. string type = task.AcidBaseProp switch
  27. {
  28. AcidBase.Acid => PipeName.ACID_ADD_LIQUID,
  29. AcidBase.Alkali => PipeName.ALKALI_ADD_LIQUID,
  30. _ => throw new ArgumentNullException(nameof(task.AcidBaseProp)),
  31. };
  32. PipeContent.Factory(type).Invoke(task);
  33. _taskExtend.UpdateStep(task);
  34. }
  35. [Scheduled("DissolveControl", 1000)]
  36. public void DissolveControl()
  37. {
  38. List<DissolveDate> DissolveDates = _dataManager.Query<DissolveDate>().Where(it => it.Start.Equals(true)).ToList();
  39. if (!DissolveDates.Any())
  40. {
  41. return;
  42. }
  43. ExecuteTime executeTime = _dataManager.Query<ExecuteTime>().Where(it => it.TypeName.Equals(ExecuteTimeName.DISSOLVE_TIME)).First();
  44. foreach (DissolveDate DissolveDate in DissolveDates)
  45. {
  46. double minutes = DissolveDate.LastTryTime.GetMinDifferenceValue();
  47. if (minutes < executeTime.Value)
  48. {
  49. string earlyLocation = DataCache.Instance.Get<string>(CacheState.Early);
  50. if (string.IsNullOrWhiteSpace(earlyLocation))
  51. {
  52. continue;
  53. }
  54. if (earlyLocation != DissolveDate.SampleSource)
  55. {
  56. continue;
  57. }
  58. }
  59. DissolveDate.Start = false;
  60. EquipmentTask task = _dataManager.Query<EquipmentTask>().Where(it => it.RouteStep.Equals(PipeName.DISSOLVE) && it.Status.Equals(TaskState.Dissolve) && it.Source.Equals(DissolveDate.SampleSource)).First();
  61. if (task is null)
  62. {
  63. logger.LogDebug("未找到对应的消解任务!");
  64. continue;
  65. }
  66. DissolveDate.SampleSource = string.Empty;
  67. _dataManager.Update(DissolveDate);
  68. logger.LogDebug($"{task.Source}消解结束,进入下一段任务!");
  69. _taskExtend.UpdateStep(task);
  70. if (string.IsNullOrWhiteSpace(DataCache.Instance.Get<string>(CacheState.Early)))
  71. {
  72. return;
  73. }
  74. if (DataCache.Instance.Get<string>(CacheState.Early).Equals(task.Source))
  75. {
  76. DataCache.Instance.Remove(CacheState.Early);
  77. }
  78. }
  79. }
  80. [Scheduled("TitrationControl", 1000)]
  81. public void TitrationControl()
  82. {
  83. EquipmentTask task = _dataManager.Query<EquipmentTask>().Where(it => it.Status.Equals(TaskState.Titration)).First();
  84. if (task is null)
  85. {
  86. return;
  87. }
  88. task.Status = TaskState.Execute;
  89. _dataManager.Update(task);
  90. string type = task.AcidBaseProp switch
  91. {
  92. AcidBase.Acid => PipeName.ACID_TITRATION,
  93. AcidBase.Alkali => PipeName.ALKALI_TITRATION,
  94. _ => throw new ArgumentNullException(nameof(task.AcidBaseProp)),
  95. };
  96. PipeContent.Factory(type).Invoke(task);
  97. #region 标定任务
  98. if (task.CalibrationEnable)
  99. {
  100. EquipmentTask newCreateTask = task.CreateCalibrationTask();
  101. _dataManager.Add(newCreateTask);
  102. EquipmentTask calibrationTask = _dataManager.Query<EquipmentTask>().Where(it => it.WaveKey.Equals(task.WaveKey) && it.Source.Equals(task.Source) && it.TaskType.Equals(TaskTypeName.CALIBRATION_ZH)).First();
  103. PipeContent.Factory(PipeName.ACID_TITRATION).Invoke(calibrationTask);
  104. task.Result = calibrationTask.Result; //当前标定出来结果后刷新当前空白的值
  105. calibrationTask.Result = 0;
  106. calibrationTask.Status = TaskState.Finished;
  107. _dataManager.Update(calibrationTask);
  108. }
  109. #endregion
  110. _taskExtend.UpdateStep(task);
  111. #region 删掉记录任务
  112. LiquidRecord record = _dataManager.Query<LiquidRecord>().Where(it => it.Point.Equals(task.Source)).First();
  113. if (record != null)
  114. {
  115. _dataManager.Delete(record);
  116. }
  117. #endregion
  118. }
  119. [Scheduled("Titration2Control", 1000)]
  120. public void Titration2Control()
  121. {
  122. EquipmentTask task = _dataManager.Query<EquipmentTask>().Where(it => it.Status.Equals(TaskState.Titration2)).First();
  123. if (task is null)
  124. {
  125. return;
  126. }
  127. task.Status = TaskState.Execute;
  128. _dataManager.Update(task);
  129. string type = task.AcidBaseProp switch
  130. {
  131. AcidBase.Acid => PipeName.ACID_TITRATION2,
  132. AcidBase.Alkali => PipeName.ALKALI_TITRATION2,
  133. _ => throw new ArgumentNullException(nameof(task.AcidBaseProp)),
  134. };
  135. PipeContent.Factory(type).Invoke(task);
  136. #region 标定任务
  137. if (task.CalibrationEnable)
  138. {
  139. EquipmentTask newCreateTask = task.CreateCalibration2Task();
  140. _dataManager.Add(newCreateTask);
  141. EquipmentTask calibrationTask = _dataManager.Query<EquipmentTask>().Where(it => it.WaveKey.Equals(task.WaveKey) && it.Source.Equals(task.Source) && it.TaskType.Equals(TaskTypeName.CALIBRATION_ZH)).First();
  142. PipeContent.Factory(PipeName.ACID_TITRATION2).Invoke(calibrationTask);
  143. task.Result = calibrationTask.Result; //当前标定出来结果后刷新当前空白的值
  144. calibrationTask.Result = 0;
  145. calibrationTask.Status = TaskState.Finished;
  146. _dataManager.Update(calibrationTask);
  147. }
  148. #endregion
  149. _taskExtend.UpdateStep(task);
  150. #region 删掉记录任务
  151. LiquidRecord record = _dataManager.Query<LiquidRecord>().Where(it => it.Point.Equals(task.Source)).First();
  152. if (record != null)
  153. {
  154. _dataManager.Delete(record);
  155. }
  156. #endregion
  157. }
  158. }
  159. }