Эх сурвалжийг харах

优化车间叫料任务堆垛机的发货逻辑

林豪 左 3 жил өмнө
parent
commit
8d3ea8c0d8

+ 15 - 0
Projects/永冠OPP/WCS.Service/Extensions/TaskExtension.cs

@@ -24,6 +24,19 @@ namespace WCS.Service.Extensions
         /// <returns></returns>
         public static Task[] GetOutTask(this List<WCS_TASK> tasks)
         {
+            var tasklist = tasks.Select(v => v.Create<Task>());
+            var task = tasklist.FirstOrDefault() ?? throw new WarnException("无可用出库任务--GetOutTask");
+            //AGV任务ID不为零表示为车间叫料任务
+            if (task.AgvTask != 0)
+            {
+                //按照AGV任务ID分一次组
+                tasklist = tasklist.OrderByDescending(v => v.Priority)
+                                   .ThenBy(v => v.CREATETIME)
+                                   .GroupBy(v => v.AgvTask)
+                                   .FirstOrDefault() ?? throw new WarnException("无可用叫料任务--GetOutTask");
+                //无论这个AGV任务绑定的货物相隔多远都必须要一起出出去
+                return tasklist.OrderBy(v => v.Col).ToArray();
+            }
             return tasks.Select(v => v.Create<Task>())
                         .OrderByDescending(v => v.Priority)
                         .ThenBy(v => v.Line)
@@ -108,6 +121,8 @@ namespace WCS.Service.Extensions
             TUNNEL = task.TUNNEL;
             DEVICE = task.DEVICE;
             Priority = task.Priority;
+            AgvTask = task.AgvTask;
+            CREATETIME = task.CREATETIME; ;
 
             ID = task.ID;
             Line = addrFrom[0].ToShort();

+ 1 - 6
Projects/永冠OPP/WCS.Service/Works/SRM/SRMWork.cs

@@ -319,13 +319,8 @@ namespace WCS.Service.Works.SRM
                                 })
                                 .ThenBy(v => v.CREATETIME)
                                 .GroupBy(v => v.ADDRTO)
-                                .FirstOrDefault();
+                                .FirstOrDefault() ?? throw new WarnException("无可执行出库任务");
 
-                        if (outDepot == null)
-                        {
-                            Ltc.Log($"{deviceCode}无出库任务可执行");
-                            return;
-                        }
                         //获取两个个可执行任务,此时这两个任务的目标地址是一致的
                         var tasks = outDepot.Select(v => v).ToList().GetOutTask();