| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- using SHJX.Service.Control.Extends;
- namespace SHJX.Service.Control.Schedules
- {
- [EnableScheduling]
- public class StatusControlSchedule : IScheduler
- {
- private static TaskExtend _extend;
- private static IDataManager _dataManager;
- public StatusControlSchedule(IDataManager dataManager, TaskExtend extend)
- {
- _extend = extend;
- _dataManager = dataManager;
- }
- [Scheduled("ScanCache", 1000)]
- public void ScanCache()
- {
- 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())
- {
- return;
- }
- 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())
- {
- return;
- }
- StateMachine status = _dataManager.Query<StateMachine>().Where(item => item.Name.Equals(StateMachineName.MOTOR_LOCK)).First();
- if (status is null || status.Status >= 1)
- {
- return;
- }
- List<RouteCache> caches = _dataManager.Query<RouteCache>().Where(it => it.Status.In(RouteCacheState.Waiting, RouteCacheState.Doing)).ToList();
- if (!caches.Any() || caches.Where(item => item.Status.Equals(RouteCacheState.Doing)).Any())
- {
- return;
- }
- RouteCache canExecute = FindWriteTask();
- if (canExecute is null)
- {
- return;
- }
- canExecute.Status = RouteCacheState.Doing;
- _dataManager.Update(canExecute);
- UpdateWaitingTask(canExecute);
- status.Status = 1;
- _dataManager.Update(status);
- }
- private static void UpdateWaitingTask(RouteCache canExecute)
- {
- EquipmentTask task = _dataManager.Query<EquipmentTask>().Where(it => it.SerialKey.Equals(canExecute.TaskKey) && it.Source.Equals(canExecute.Source)).First();
- if (task is null)
- {
- return;
- }
- task.Status = TaskState.Doing;
- _dataManager.Update(task);
- }
- private static bool flag1 = false;
- private static RouteCache FindWriteTask()
- {
- bool aheadRes = _extend.ChangeMoveStateCheckAheadFinishDissolveTask();
- if (!aheadRes)
- {
- flag1 = true;
- Thread.Sleep(2 * 1000);
- return null;
-
- }
- if (flag1)
- {
- flag1 = false;
- Thread.Sleep(1000);
- return null;
- }
-
- #region 弃用
- /*List<RouteCache> waitingCache = _dataManager.Query<RouteCache>(@"SELECT * FROM (
- SELECT RC.*,TP.Priority FROM (
- SELECT OD.*,ROW_NUMBER() OVER(PARTITION BY OD.RouteType ORDER BY OD.indexId,OD.CreateTime ASC) AS orderId
- FROM (SELECT *,CASE RouteStep
- WHEN 'DissolveGoback' THEN 1
- WHEN 'Goback' THEN 2
- ELSE 3
- END AS indexId
- FROM routecache) AS OD) AS RC
- LEFT JOIN task_priority AS TP
- ON RC.RouteType=TP.OperateType
- WHERE RC.Status='1'
- ORDER BY TP.Priority DESC
- ) AS RS
- WHERE RS.orderId='1'").ToList();*/
- #endregion
- // List<RouteCache> waitingCache = _dataManager.Query<RouteCache>(@"SELECT * FROM (
- //SELECT RC.*,TP.Priority FROM (
- //SELECT *,ROW_NUMBER() OVER(PARTITION BY RouteStep ORDER BY CreateTime ASC) AS orderId FROM routecache
- //) RC
- //LEFT JOIN task_priority AS TP
- //ON RC.RouteStep=TP.Step
- //WHERE RC.Status=@Status
- //ORDER BY TP.Priority DESC
- //) AS RS
- //WHERE RS.orderId='1'", new { Status = RouteCacheState.Waiting }).ToList();
- //List<RouteCache> waitingCache = _dataManager.Query<RouteCache>(@"SELECT * FROM routecache WHERE Status=@Status ORDER BY Priority DESC", new { Status = RouteCacheState.Waiting }).ToList();
- //foreach (RouteCache item in from item in waitingCache let res = _extend.GetDissolveDateDifference(item) where res select item)
- //{
- // return item; DissolveGoback
- //}
- RouteCache waitingCache = _dataManager.Query<RouteCache>(@"SELECT * FROM routecache WHERE Status=@Status ORDER BY Priority DESC", new { Status = RouteCacheState.Waiting }).First();
- if (waitingCache.RouteStep != "DissolveGoback")
- {
- if (waitingCache.RouteStep == "TitrationGoback")
- {
- EquipmentArea area = _dataManager.Query<EquipmentArea>().Where(it => it.AreaName.Equals(AreaName.TITRATION_POSITION2) && it.Enable.Equals(true)).First();
- if (area is null)
- {
- return waitingCache;
- }
- }
- if (waitingCache.RouteStep == "Titration2Goback")
- {
- EquipmentArea area2 = _dataManager.Query<EquipmentArea>().Where(it => it.AreaName.Equals(AreaName.TITRATION_POSITION) && it.Enable.Equals(true)).First();
- if (area2 is null)
- {
- return waitingCache;
- }
- }
- if (_extend.GetDissolveDateDifference(waitingCache))
- {
- return waitingCache;
- }
- else
- return null;
- }
- else
- return waitingCache;
- //return null;
- }
- }
- }
|