Kaynağa Gözat

优化任务同步逻辑和日志记录

1. 修改日志信息,增加任务类型和状态检查。
2. 修改数据库查询锁类型为 NoLock。
3. 优化任务列表遍历方式,改为遍历任务ID。
4. 增加任务状态检查和相应日志记录。
林豪 左 10 ay önce
ebeveyn
işleme
103cba514d

+ 21 - 6
YWGC/FJK/WCS.WorkEngineering/Systems/UpLoadSystems.cs

@@ -46,7 +46,7 @@ public class UpLoadSystems : DeviceSystem<Device<IStation520>>
                     taskIdList.Add(task); //更新成功
                     isEnd = true;
                 }
-                World.Log($"出库放货完成状态同步失败:{task.ID}[{res.ResMsg}]");
+                World.Log($"入库任务完成同步:出库放货完成状态同步失败:{task.ID}[{res.ResMsg}]");
             }
 
             //拆分防止锁表
@@ -66,26 +66,41 @@ public class UpLoadSystems : DeviceSystem<Device<IStation520>>
             var taskIdList = new List<WCS_TaskOld>();
             var nowTime = DateTime.Now;
             var db = _db.Default;
-            var taskList = db.Queryable<WCS_TaskOld>().UpdLock()
+            var taskList = db.Queryable<WCS_TaskOld>().NoLock()
                 .Where(x => ((x.Type == TaskType.SetPlate && x.WarehouseCode.Contains("R"))
                             || ((x.Type == TaskType.EnterDepot || x.Type == TaskType.OutDepot) && !x.WarehouseCode.Contains("R"))
-                            || (x.Type == TaskType.EnterDepot && x.WarehouseCode.Contains("CRZP"))
+                            || (x.Type == TaskType.EnterDepot && x.WarehouseCode.Contains("CRZP"))   
                             || (x.Type == TaskType.OutDepot && x.Device == "CR")
                             || (x.Type == TaskType.OutDepot && x.AddrFrom.Contains("NSTJ") && x.AddrTo.Contains("NSTJ")))
                            && x.Status == TaskStatus.Finish && x.Uploaded != TaskStatus.Finish)
                 .SplitTable(x => x.Take(2)).ToList();
 
             var isEnd = false;
-            foreach (var task in taskList)
+            foreach (var taskId in taskList.Select(x=>x.Id))
             {
                 if (isEnd) continue;
-                var res = WmsApi.CompleteTask(task.Id);
+                var task=db.Queryable<WCS_TaskOld>().UpdLock().Where(x => x.Id == taskId).SplitTable(x=>x.Take(2)).First();
+                if (task==null)
+                {
+                    World.Log($"入库任务完成同步:没有找到对应的任务:[{taskId}]");
+                    continue;
+                }
+                if (task is { Status: TaskStatus.Finish, Uploaded: TaskStatus.Finish })
+                {
+                    World.Log($"入库任务完成同步:任务状态不符合条件:任务号[{task.Id}]状态[{task.Status.GetDescription()}]同步状态[{task.Uploaded.GetDescription()}]");
+                    continue;
+                }
+                var res = WmsApi.CompleteTask(taskId);
                 if (res.ResCode == ResponseStatusCodeEnum.Sucess)
                 {
                     taskIdList.Add(task);
                     isEnd = true;
                 }
-                World.Log($"入库完成状态同步失败:{task.Id}[{res.ResMsg}]");
+                else
+                {
+                    World.Log($"入库任务完成同步:入库完成状态同步失败:{taskId}[{res.ResMsg}]");
+                }
+               
             }
 
             //拆分防止锁表