StatusControlSchedule.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. using SHJX.Service.Control.Extends;
  2. namespace SHJX.Service.Control.Schedules
  3. {
  4. [EnableScheduling]
  5. public class StatusControlSchedule : IScheduler
  6. {
  7. private static TaskExtend _extend;
  8. private static IDataManager _dataManager;
  9. public StatusControlSchedule(IDataManager dataManager, TaskExtend extend)
  10. {
  11. _extend = extend;
  12. _dataManager = dataManager;
  13. }
  14. [Scheduled("ScanCache", 1000)]
  15. public void ScanCache()
  16. {
  17. if (_dataManager.Query<EquipmentTask>().Where(it => it.RouteStep.Equals(PipeName.TITRATION) && it.Status.Equals(TaskState.New)).Exist(_dataManager.Query<EquipmentTask>().Where(it => it.RouteID.Equals(3)).Or(it => it.RouteStep.Equals(PipeName.TITRATION_GOBACK) && it.Status.In(TaskState.New, TaskState.Waiting, TaskState.Doing), it => it.RouteStep.Equals(PipeName.TITRATION) && it.Status.In(TaskState.Waiting, TaskState.Doing)), ExistPattern.None).Any())
  18. {
  19. return;
  20. }
  21. if (_dataManager.Query<EquipmentTask>().Where(it => it.RouteStep.Equals(PipeName.TITRATION2) && it.Status.Equals(TaskState.New)).Exist(_dataManager.Query<EquipmentTask>().Where(it => it.RouteID.Equals(4)).Or(it => it.RouteStep.Equals(PipeName.TITRATION2_GOBACK) && it.Status.In(TaskState.New, TaskState.Waiting, TaskState.Doing), it => it.RouteStep.Equals(PipeName.TITRATION2) && it.Status.In(TaskState.Waiting, TaskState.Doing)), ExistPattern.None).Any())
  22. {
  23. return;
  24. }
  25. StateMachine status = _dataManager.Query<StateMachine>().Where(item => item.Name.Equals(StateMachineName.MOTOR_LOCK)).First();
  26. if (status is null || status.Status >= 1)
  27. {
  28. return;
  29. }
  30. List<RouteCache> caches = _dataManager.Query<RouteCache>().Where(it => it.Status.In(RouteCacheState.Waiting, RouteCacheState.Doing)).ToList();
  31. if (!caches.Any() || caches.Where(item => item.Status.Equals(RouteCacheState.Doing)).Any())
  32. {
  33. return;
  34. }
  35. RouteCache canExecute = FindWriteTask();
  36. if (canExecute is null)
  37. {
  38. return;
  39. }
  40. canExecute.Status = RouteCacheState.Doing;
  41. _dataManager.Update(canExecute);
  42. UpdateWaitingTask(canExecute);
  43. status.Status = 1;
  44. _dataManager.Update(status);
  45. }
  46. private static void UpdateWaitingTask(RouteCache canExecute)
  47. {
  48. EquipmentTask task = _dataManager.Query<EquipmentTask>().Where(it => it.SerialKey.Equals(canExecute.TaskKey) && it.Source.Equals(canExecute.Source)).First();
  49. if (task is null)
  50. {
  51. return;
  52. }
  53. task.Status = TaskState.Doing;
  54. _dataManager.Update(task);
  55. }
  56. private static bool flag1 = false;
  57. private static RouteCache FindWriteTask()
  58. {
  59. bool aheadRes = _extend.ChangeMoveStateCheckAheadFinishDissolveTask();
  60. if (!aheadRes)
  61. {
  62. flag1 = true;
  63. Thread.Sleep(2 * 1000);
  64. return null;
  65. }
  66. if (flag1)
  67. {
  68. flag1 = false;
  69. Thread.Sleep(1000);
  70. return null;
  71. }
  72. #region 弃用
  73. /*List<RouteCache> waitingCache = _dataManager.Query<RouteCache>(@"SELECT * FROM (
  74. SELECT RC.*,TP.Priority FROM (
  75. SELECT OD.*,ROW_NUMBER() OVER(PARTITION BY OD.RouteType ORDER BY OD.indexId,OD.CreateTime ASC) AS orderId
  76. FROM (SELECT *,CASE RouteStep
  77. WHEN 'DissolveGoback' THEN 1
  78. WHEN 'Goback' THEN 2
  79. ELSE 3
  80. END AS indexId
  81. FROM routecache) AS OD) AS RC
  82. LEFT JOIN task_priority AS TP
  83. ON RC.RouteType=TP.OperateType
  84. WHERE RC.Status='1'
  85. ORDER BY TP.Priority DESC
  86. ) AS RS
  87. WHERE RS.orderId='1'").ToList();*/
  88. #endregion
  89. // List<RouteCache> waitingCache = _dataManager.Query<RouteCache>(@"SELECT * FROM (
  90. //SELECT RC.*,TP.Priority FROM (
  91. //SELECT *,ROW_NUMBER() OVER(PARTITION BY RouteStep ORDER BY CreateTime ASC) AS orderId FROM routecache
  92. //) RC
  93. //LEFT JOIN task_priority AS TP
  94. //ON RC.RouteStep=TP.Step
  95. //WHERE RC.Status=@Status
  96. //ORDER BY TP.Priority DESC
  97. //) AS RS
  98. //WHERE RS.orderId='1'", new { Status = RouteCacheState.Waiting }).ToList();
  99. //List<RouteCache> waitingCache = _dataManager.Query<RouteCache>(@"SELECT * FROM routecache WHERE Status=@Status ORDER BY Priority DESC", new { Status = RouteCacheState.Waiting }).ToList();
  100. //foreach (RouteCache item in from item in waitingCache let res = _extend.GetDissolveDateDifference(item) where res select item)
  101. //{
  102. // return item; DissolveGoback
  103. //}
  104. RouteCache waitingCache = _dataManager.Query<RouteCache>(@"SELECT * FROM routecache WHERE Status=@Status ORDER BY Priority DESC", new { Status = RouteCacheState.Waiting }).First();
  105. if (waitingCache.RouteStep != "DissolveGoback")
  106. {
  107. if (waitingCache.RouteStep == "TitrationGoback")
  108. {
  109. EquipmentArea area = _dataManager.Query<EquipmentArea>().Where(it => it.AreaName.Equals(AreaName.TITRATION_POSITION2) && it.Enable.Equals(true)).First();
  110. if (area is null)
  111. {
  112. return waitingCache;
  113. }
  114. }
  115. if (waitingCache.RouteStep == "Titration2Goback")
  116. {
  117. EquipmentArea area2 = _dataManager.Query<EquipmentArea>().Where(it => it.AreaName.Equals(AreaName.TITRATION_POSITION) && it.Enable.Equals(true)).First();
  118. if (area2 is null)
  119. {
  120. return waitingCache;
  121. }
  122. }
  123. if (_extend.GetDissolveDateDifference(waitingCache))
  124. {
  125. return waitingCache;
  126. }
  127. else
  128. return null;
  129. }
  130. else
  131. return waitingCache;
  132. //return null;
  133. }
  134. }
  135. }