林豪 左 1 vuosi sitten
vanhempi
commit
0c4af477fd

+ 57 - 72
业务工程/分拣库/WCS.WorkEngineering/Systems/NoInteractionSystems.cs

@@ -77,35 +77,7 @@ namespace WCS.WorkEngineering.Systems
                             case TaskType.EnterDepot:
                                 if (task.LastInteractionPoint == "2")
                                 {
-                                    string sta = "";
-                                    if (task.WarehouseCode.Contains("1"))
-                                    {
-                                        var n = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && v.Station.Contains("25"))
-                                                    .SplitTable(v => v.Take(2)).Count();
-                                        var s = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && v.Station.Contains("27"))
-                                                    .SplitTable(v => v.Take(2)).Count();
-                                        sta = n > s ? "2701" : "2501";
-                                    }
-                                    else if (task.WarehouseCode.Contains("2"))
-                                    {
-                                        var n2 = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && v.Station.Contains("29"))
-                                                    .SplitTable(v => v.Take(2)).Count();
-                                        var s2 = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && v.Station.Contains("31"))
-                                                    .SplitTable(v => v.Take(2)).Count();
-                                        sta = n2 > s2 ? "3101" : "2901";
-                                    }
-                                    else if (task.WarehouseCode.Contains("3"))
-                                    {
-                                        var n3 = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && v.Station.Contains("33"))
-                                                    .SplitTable(v => v.Take(2)).Count();
-                                        var s3 = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && v.Station.Contains("35"))
-                                                        .SplitTable(v => v.Take(2)).Count();
-                                        sta = n3 > s3 ? "3501" : "3301";
-                                    }
-                                    else
-                                    {
-                                        return;
-                                    }
+                                    var sta = GetAgvStation(task, db);
                                     var agv = new WCS_AgvTaskInfo()
                                     {
                                         ID = db.GetAgvTaskId(),
@@ -241,49 +213,7 @@ namespace WCS.WorkEngineering.Systems
                                         var devs = Device.All.Where(x => x.HasFlag(DeviceFlags.AGV取货站台口)).Select(x => x.Code);
                                         if (devs.Contains(task.SrmStation) && task.LastInteractionPoint != "3") //车间叫料任务,此值为3时是单独取满任务
                                         {
-                                            string sta = "";
-                                            var n = 0;
-                                            var s = 0;
-                                            //同侧之间均分
-                                            if (task.WarehouseCode.Contains("1"))
-                                            {
-                                                n = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station.Contains("25"))
-                                                           .SplitTable(v => v.Take(2)).Count();
-                                                s = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station.Contains("27"))
-                                                           .SplitTable(v => v.Take(2)).Count();
-                                                sta = n > s ? "2701" : "2501";
-                                            }
-                                            else if (task.WarehouseCode.Contains("2"))
-                                            {
-                                                n = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station.Contains("29"))
-                                                           .SplitTable(v => v.Take(2)).Count();
-                                                s = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station.Contains("31"))
-                                                           .SplitTable(v => v.Take(2)).Count();
-                                                sta = n > s ? "3101" : "2901";
-                                            }
-                                            else if (task.WarehouseCode.Contains("3"))
-                                            {
-                                                n = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station.Contains("33"))
-                                                           .SplitTable(v => v.Take(2)).Count();
-                                                s = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station.Contains("35"))
-                                                               .SplitTable(v => v.Take(2)).Count();
-                                                sta = n > s ? "3501" : "3301";
-                                            }
-                                            else
-                                            {
-                                                return;
-                                            }
-
-                                            n = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v =>
-                                                    v.Status >= AGVTaskStatus.Confirm &&
-                                                    v.Status < AGVTaskStatus.Complete1 &&
-                                                    v.TaskType == AGVTaskType.EnterDepot && v.Station == sta)
-                                                .SplitTable(v => v.Take(2)).Count();
-                                            if (n > 5)
-                                            {
-                                                sta = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot)
-                                                    .SplitTable(v => v.Take(2)).ToList().GroupBy(x => x.Station).Select(x => new { x.Key, Count = x.Count() }).MinBy(x => x.Count).Key;
-                                            }
+                                            var sta = GetAgvStation(task, db);
 
                                             var agv = new WCS_AgvTaskInfo()
                                             {
@@ -326,5 +256,60 @@ namespace WCS.WorkEngineering.Systems
         {
             return dev.Code == nameof(NoInteractionSystems);
         }
+
+        /// <summary>
+        ///  获取AGV的目标站台
+        /// </summary>
+        /// <param name="task"></param>
+        /// <param name="db"></param>
+        /// <returns></returns>
+        public string GetAgvStation(WCS_TaskInfo task, SqlSugarHelper db)
+        {
+            string sta = "";
+            var n = 0;
+            var s = 0;
+            //同侧之间均分
+            if (task.WarehouseCode.Contains("1"))
+            {
+                n = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station.Contains("25"))
+                           .SplitTable(v => v.Take(2)).Count();
+                s = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station.Contains("27"))
+                           .SplitTable(v => v.Take(2)).Count();
+                sta = n > s ? "2701" : "2501";
+            }
+            else if (task.WarehouseCode.Contains("2"))
+            {
+                n = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station.Contains("29"))
+                           .SplitTable(v => v.Take(2)).Count();
+                s = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station.Contains("31"))
+                           .SplitTable(v => v.Take(2)).Count();
+                sta = n > s ? "3101" : "2901";
+            }
+            else if (task.WarehouseCode.Contains("3"))
+            {
+                n = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station.Contains("33"))
+                           .SplitTable(v => v.Take(2)).Count();
+                s = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station.Contains("35"))
+                               .SplitTable(v => v.Take(2)).Count();
+                sta = n > s ? "3501" : "3301";
+            }
+            else
+            {
+                return default;
+            }
+
+            n = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v =>
+                    v.Status >= AGVTaskStatus.Confirm &&
+                    v.Status < AGVTaskStatus.Complete1 &&
+                    v.TaskType == AGVTaskType.EnterDepot && v.Station == sta)
+                .SplitTable(v => v.Take(2)).Count();
+            if (n > 5)
+            {
+                sta = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot)
+                    .SplitTable(v => v.Take(2)).ToList().GroupBy(x => x.Station).Select(x => new { x.Key, Count = x.Count() }).MinBy(x => x.Count).Key;
+            }
+
+            return sta;
+        }
     }
 }