CalibrationChangeState.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. using System.Linq;
  2. using System.Collections.Generic;
  3. using SHJX.Service.Model.Dao;
  4. using SHJX.Service.Common.ReadXML;
  5. using SHJX.Service.Control.Interface;
  6. namespace SHJX.Service.Control.TimerControl.ChangeTaskState
  7. {
  8. public class CalibrationChangeState : ChangeTaskStateImp
  9. {
  10. public CalibrationChangeState(ReadConfigUtil config) : base(config)
  11. { }
  12. #region ChangeTaskState
  13. public override void ChangeEquipmentTaskStateEvent()
  14. {
  15. //如果没有状态为新建的任务,则返回不做处理
  16. if (!DataManager.GetTaskByStateNew("BD")) return;
  17. //Tip:这里有任务优先级,一般来说,如果有比当前优先级高的
  18. if (DataManager.CheckTaskByPriority(400)) return;
  19. ChangeTaskStateEvent();
  20. }
  21. private void ChangeTaskStateEvent(int routeId = 1)
  22. {
  23. switch (routeId)
  24. {
  25. case 8:
  26. CheckBdRouteIsTitration(routeId);
  27. break;
  28. case 5:
  29. CheckRouteIsStir(routeId);
  30. break;
  31. default:
  32. CheckBdRouteOthers(routeId);
  33. break;
  34. }
  35. }
  36. /// <summary>
  37. /// 检查搅拌任务
  38. /// </summary>
  39. /// <param name="routeId"></param>
  40. /// <returns></returns>
  41. private void CheckRouteIsStir(int routeId)
  42. {
  43. var tasks = DataManager.GetBdTaskByRouteId(routeId);
  44. var taskDoing = tasks.Where(item => item.Status.Equals(TaskState.Doing)).ToList();
  45. var nextRouteId = routeId + 1;
  46. var tasksNext = DataManager.GetBdTaskByRouteId(nextRouteId);
  47. if (tasks.Any(item => item.Status is TaskState.New /* or TaskState.Doing*/)
  48. && !taskDoing.Any()
  49. && !tasksNext.Any())
  50. {
  51. var task = tasks.FirstOrDefault(item => item.Status.Equals(TaskState.New));
  52. if (task is null) return;
  53. ChangeTaskState(new List<EquipmentTask>() { task });
  54. }
  55. else
  56. {
  57. ChangeTaskStateEvent(++routeId);
  58. }
  59. }
  60. /// <summary>
  61. /// 检查标定路由的滴定任务
  62. /// </summary>
  63. /// <param name="routeId"></param>
  64. private void CheckBdRouteIsTitration(int routeId)
  65. {
  66. if (DataManager.CheckSampleTask()) return;
  67. var tasks = DataManager.GetBdTaskByRouteId(routeId);
  68. var tasksNext = DataManager.GetBdTaskByRouteId(routeId + 1);
  69. if (tasks.Any(item => item.Status is TaskState.New or TaskState.Doing) && !tasksNext.Any()
  70. && !tasks.Any(item => item.Status.Equals(TaskState.Doing))
  71. && DataManager.CheckElseBdRouteId(routeId))
  72. {
  73. var taskIsNew = tasks.Any(item => item.Status.Equals(TaskState.New));
  74. if (!taskIsNew) return;
  75. var task = tasks.FirstOrDefault(item => item.Status.Equals(TaskState.New));
  76. ChangeTaskState(new List<EquipmentTask>() { task });
  77. }
  78. else
  79. {
  80. ChangeTaskStateEvent(++routeId);
  81. }
  82. }
  83. private void CheckBdRouteOthers(int routeId)
  84. {
  85. var tasks = DataManager.GetBdTaskByRouteId(routeId);
  86. var res = DataManager.GetLessThanRouteId(routeId);
  87. if (tasks.Any() && !res)
  88. {
  89. var defaultTasks = tasks.Where(item => item.Status.Equals(TaskState.New)).ToList();
  90. if (defaultTasks.Any()) ChangeTaskState(defaultTasks);
  91. }
  92. else
  93. {
  94. if (routeId.Equals(10)) return;
  95. ChangeTaskStateEvent(++routeId);
  96. }
  97. }
  98. private void ChangeTaskState(List<EquipmentTask> defaultTasks)
  99. {
  100. foreach (var item in defaultTasks)
  101. {
  102. var res = item.RouteId.GetEquipmentAreaPoint(out var areaPoint, item.RouteType,item.SampleConcentration);
  103. if (!res) continue;
  104. item.To = !string.IsNullOrWhiteSpace(areaPoint) ? areaPoint : item.To;
  105. item.Status = TaskState.Doing;
  106. }
  107. DataManager.Update(defaultTasks);
  108. }
  109. #endregion
  110. }
  111. }