Browse Source

优化死锁

林豪 左 10 months ago
parent
commit
0e45c1b029
1 changed files with 7 additions and 3 deletions
  1. 7 3
      YWGC/FJK/WCS.WorkEngineering/Systems/环形库码垛结束.cs

+ 7 - 3
YWGC/FJK/WCS.WorkEngineering/Systems/环形库码垛结束.cs

@@ -46,10 +46,16 @@ namespace WCS.WorkEngineering.Systems
                     return;
                 } 
                 var deliveryTask = db.Queryable<WCS_TaskInfo>().RowLock().Single(x => x.Type == TaskType.Delivery && x.AddrTo == obj.Entity.Code && x.Status >= TaskStatus.RgvExecution && x.Status < TaskStatus.Finish) ?? throw new KnownException($"未找到当前站台对应的托盘搬运任务", LogLevelEnum.High);
-                var taskInfo = db.Queryable<WCS_TaskInfo>().RowLock().Single(x => x.Status <= TaskStatus.RgvCompleted && x.AddrFrom == obj.Entity.Code && x.Type == TaskType.EnterDepot);
+                var taskInfo = db.Queryable<WCS_TaskInfo>().RowLock().Single(x => x.Status == TaskStatus.WaitingToExecute && x.AddrFrom == obj.Entity.Code && x.Type == TaskType.EnterDepot);
                 if (deliveryTask.Status != TaskStatus.RgvCompleted) throw new KnownException($"搬运任务状态异常:{deliveryTask.ID}", LogLevelEnum.High);
                 if (taskInfo == null)
                 {
+                   var task=db.Queryable<WCS_TaskInfo>().NoLock().Single(x => x.Status <= TaskStatus.RgvExecution && x.AddrFrom == obj.Entity.Code && x.Type == TaskType.EnterDepot);
+                    if (task != null)
+                    {
+                        World.Log($"环线库码垛工位[{obj.Entity.Code}]存在状态为[{task.Status.GetDescription()}]的任务,任务号是[{task.ID}].请找到此任务确认并进行处理");
+                        return;
+                    }
                     //开始获取当前位置的空托盘搬运任务信息
                     var cbrCode = db.Queryable<WCS_TaskInfo>().First(x => x.Status == TaskStatus.RgvCompleted && x.AddrTo == obj.Entity.Code);
                     try
@@ -72,8 +78,6 @@ namespace WCS.WorkEngineering.Systems
                     return;
                 }
 
-                if (taskInfo.Status != TaskStatus.WaitingToExecute) return;
-
                 foreach (var item in tasks)
                 {
                     item.Status = TaskStatus.Finish;