SampleChangeState.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. using System;
  2. using System.Linq;
  3. using SHJX.Service.Model.Dao;
  4. using System.Collections.Generic;
  5. using SHJX.Service.Common.ReadXML;
  6. using SHJX.Service.Control.Interface;
  7. namespace SHJX.Service.Control.TimerControl.ChangeTaskState
  8. {
  9. public class SampleChangeState : ChangeTaskStateImp
  10. {
  11. public SampleChangeState(ReadConfigUtil config) : base(config)
  12. {
  13. }
  14. #region ChangeTaskState
  15. public override void ChangeEquipmentTaskStateEvent()
  16. {
  17. //如果没有状态为新建的任务,则返回不做处理
  18. if (!DataManager.GetTaskByStateNew("SY"))
  19. return;
  20. //Tip这里有任务优先级,一般来说,如果有比当前优先级高的就不做任务下发
  21. if (DataManager.CheckTaskByPriority(300))
  22. {
  23. //例外的情况:当标定任务存在的时候,如果标定任务处在冷却中 则可以进行水样任务的下发
  24. if (!DataManager.GetBdTaskIsCooling())
  25. return;
  26. //步骤只能到达加热这一步骤
  27. if (DataManager.GetSYRouteIDIsNotOne())
  28. return;
  29. }
  30. ChangeTaskStateEvent(1);
  31. }
  32. private void ChangeTaskStateEvent(int routeId)
  33. {
  34. try
  35. {
  36. switch (routeId)
  37. {
  38. case 1:
  39. CheckRouteIsFirst(routeId);
  40. break;
  41. case 2 or 5:
  42. CheckRouteIsTwoOrFive(routeId);
  43. break;
  44. case 7:
  45. CheckRouteIsStir(routeId);
  46. break;
  47. case 10:
  48. CheckRouteIsTitration(routeId);
  49. break;
  50. default:
  51. CheckRouteOthers(routeId);
  52. break;
  53. }
  54. }
  55. catch (Exception ex)
  56. {
  57. throw new Exception(ex.Message);
  58. }
  59. }
  60. private void CheckRouteOthers(int routeId)
  61. {
  62. var tasks = DataManager.GetTaskByRouteId(routeId);
  63. if (tasks.Any() && !DataManager.GetLessThanRouteId(routeId))
  64. {
  65. var defaultTasks = tasks.Where(item => item.Status.Equals(TaskState.New)).ToList();
  66. foreach (var item in defaultTasks)
  67. {
  68. if (item.TaskType != "补杯")
  69. {
  70. if (defaultTasks.Any())
  71. ChangeTaskState(defaultTasks, "");
  72. return;
  73. }
  74. }
  75. if (routeId.Equals(11)) return;
  76. ChangeTaskStateEvent(++routeId);
  77. }
  78. else
  79. {
  80. if (routeId.Equals(11)) return;
  81. ChangeTaskStateEvent(++routeId);
  82. }
  83. }
  84. private void CheckRouteIsTwoOrFive(int routeId)
  85. {
  86. if (DataManager.CheckElseRouteId(routeId))
  87. {
  88. var tasks = DataManager.GetTaskByRouteId(routeId);
  89. if (!tasks.Any() || DataManager.GetLessThanRouteId(routeId)) return;
  90. var defaultTasks = tasks.Where(item => item.Status.Equals(TaskState.New)).ToList();
  91. if (defaultTasks.Any())
  92. {
  93. ChangeTaskState(defaultTasks, "");
  94. }
  95. }
  96. else
  97. {
  98. ChangeTaskStateEvent(++routeId);
  99. }
  100. }
  101. private void CheckRouteIsFirst(int routeId)
  102. {
  103. var bl1 = DataManager.CheckRouteIdNew();
  104. var bl2 = DataManager.CheckElseRouteId(routeId);
  105. if (bl1 && bl2)
  106. {
  107. var taskIsReadyRow = 24 - DataManager.RouteIdStateEqualsDoing(routeId);
  108. var tasks = DataManager.GetTaskByRouteId(routeId).Where(item => item.Status.Equals(TaskState.New))
  109. .ToList();
  110. var sendRow = tasks.Count - taskIsReadyRow > 0 ? taskIsReadyRow : tasks.Count;
  111. var route1Sends = tasks.Take(sendRow).ToList();
  112. if (!route1Sends.Any()) return;
  113. route1Sends.ForEach(item => item.Status = TaskState.Doing);
  114. DataManager.Update(route1Sends);
  115. }
  116. else
  117. {
  118. ChangeTaskStateEvent(++routeId);
  119. }
  120. }
  121. /// <summary>
  122. /// 检查搅拌任务
  123. /// </summary>
  124. /// <param name="routeId"></param>
  125. /// <returns></returns>
  126. private void CheckRouteIsStir(int routeId)
  127. {
  128. var tasks = DataManager.GetTaskByRouteId(routeId);
  129. var taskDoing = tasks.Where(item => item.Status.Equals(TaskState.Doing)).ToList();
  130. var nextRouteId = routeId + 1;
  131. var tasksNext = DataManager.GetTaskByRouteId(nextRouteId);
  132. if (tasks.Any(item => item.Status is TaskState.New /* or TaskState.Doing*/)
  133. && !taskDoing.Any()
  134. && !tasksNext.Any())
  135. {
  136. var task = tasks.FirstOrDefault(item => item.Status.Equals(TaskState.New));
  137. if (task is null) return;
  138. ChangeTaskState(task,"jb");
  139. }
  140. else
  141. {
  142. ChangeTaskStateEvent(++routeId);
  143. }
  144. }
  145. /// <summary>
  146. /// 检查滴定任务
  147. /// </summary>
  148. /// <param name="routeId"></param>
  149. /// <returns></returns>
  150. private void CheckRouteIsTitration(int routeId)
  151. {
  152. var tasks = DataManager.GetTaskByRouteId(routeId);
  153. var nextRouteId = routeId + 1;
  154. var tasksNext = DataManager.GetTaskByRouteId(nextRouteId);
  155. if (tasks.Any(item => item.Status is TaskState.New or TaskState.Doing)
  156. && !tasksNext.Any()
  157. && !tasks.Any(item => item.Status.Equals(TaskState.Doing))
  158. && DataManager.CheckElseRouteId(routeId))
  159. {
  160. var taskIsNew = tasks.Any(item => item.Status.Equals(TaskState.New));
  161. if (!taskIsNew) return;
  162. var task = tasks.FirstOrDefault(item => item.Status.Equals(TaskState.New));
  163. ChangeTaskState(task,"dd");
  164. }
  165. else
  166. {
  167. ChangeTaskStateEvent(++routeId);
  168. }
  169. }
  170. /// <summary>
  171. /// 改变任务状态
  172. /// </summary>
  173. private void ChangeTaskState(EquipmentTask defaultTask,string typejbOrDd)
  174. {
  175. var tasks = new List<EquipmentTask>()
  176. {
  177. defaultTask
  178. };
  179. ChangeTaskState(tasks, typejbOrDd);
  180. }
  181. /// <summary>
  182. /// 改变任务状态
  183. /// </summary>
  184. /// <param name="defaultTasks"></param>
  185. private void ChangeTaskState(List<EquipmentTask> defaultTasks,string typejbOrDd)
  186. {
  187. foreach (var item in defaultTasks)
  188. {
  189. if (typejbOrDd == "jb" && item.TaskType == "补杯" && item.RouteId == 7 && item.RouteStepId == 1)
  190. {
  191. item.Status = TaskState.Doing;
  192. }
  193. var res = item.RouteId.GetEquipmentAreaPoint(out var areaPoint, item.RouteType,item.SampleConcentration);
  194. if (!res) continue;
  195. item.To = !string.IsNullOrWhiteSpace(areaPoint) ? areaPoint : item.To;
  196. item.Status = TaskState.Doing;
  197. }
  198. DataManager.Update(defaultTasks);
  199. }
  200. #endregion
  201. }
  202. }