林豪 左 11 miesięcy temu
rodzic
commit
a4bbe110a9

+ 1 - 1
ServiceCenter/SqlSugars/SqlSugarHelper.cs

@@ -156,7 +156,7 @@ namespace ServiceCenter.SqlSugars
                 db.Connect.BeginTran();//开始事务
                 if (_Default != "")
                 {
-                    db.Default.Ado.CommandTimeOut = 10;
+                    //db.Default.Ado.CommandTimeOut = 60;
                 }
                 act(db);//执行委托
                 db.Connect.CommitTran();//提交事务

+ 117 - 113
业务工程/分拣库/WCS.WorkEngineering/Systems/AgvSystems.cs

@@ -160,15 +160,15 @@ namespace WCS.WorkEngineering.Systems
                                                     positionList.AddRange(new List<string>() { "2501", "2505", "2509", "2513" });
                                                     nearPositionList.AddRange(new List<string>() {
                                                         "2701", "2705", "2709", "2713" });
-                                                    allPositionList.AddRange(new List<string>() {                                                        
+                                                    allPositionList.AddRange(new List<string>() {
                                                         "2901", "2905", "2909", "2913","3101", "3105", "3109", "3113", "3301", "3305", "3309", "3313","3501", "3505", "3509", "3513"});
                                                     break;
 
                                                 case "1S":
-                                                    positionList.AddRange(new List<string>() { "2701", "2705", "2709", "2713"/*"2501", "2505", "2509", "2513"*/ });
+                                                    positionList.AddRange(new List<string>() { "2701", "2705", "2709", "2713" });
                                                     nearPositionList.AddRange(new List<string>() {
                                                         "2501", "2505", "2509", "2513" });
-                                                    allPositionList.AddRange(new List<string>() {                                                       
+                                                    allPositionList.AddRange(new List<string>() {
                                                         "3101", "3105", "3109", "3113", "2901", "2905", "2909", "2913", "3501", "3505", "3509", "3513", "3301", "3305", "3309", "3313"});
                                                     break;
 
@@ -176,15 +176,15 @@ namespace WCS.WorkEngineering.Systems
                                                     positionList.AddRange(new List<string>() { "2901", "2905", "2909", "2913" });
                                                     nearPositionList.AddRange(new List<string>() {
                                                         "3101", "3105", "3109", "3113" });
-                                                    allPositionList.AddRange(new List<string>() { 
+                                                    allPositionList.AddRange(new List<string>() {
                                                         "2501" , "2505" , "2509" , "2513" , "2701", "2705", "2709", "2713","3301", "3305", "3309", "3313", "3501", "3505", "3509", "3513"});
                                                     break;
 
                                                 case "2S":
-                                                    positionList.AddRange(new List<string>() { "3101", "3105", "3109", "3113"/*"2501", "2505", "2509", "2513"*/ });
+                                                    positionList.AddRange(new List<string>() { "3101", "3105", "3109", "3113" });
                                                     nearPositionList.AddRange(new List<string>() {
                                                         "2901", "2905", "2909", "2913" });
-                                                    allPositionList.AddRange(new List<string>() { 
+                                                    allPositionList.AddRange(new List<string>() {
                                                         "2701" , "2705" , "2709" , "2713" ,"2501" , "2505" , "2509" , "2513" ,  "3501" , "3505" , "3509" , "3513","3301", "3305", "3309", "3313"});
                                                     break;
 
@@ -192,7 +192,7 @@ namespace WCS.WorkEngineering.Systems
                                                     positionList.AddRange(new List<string>() { "3301", "3305", "3309", "3313" });
                                                     nearPositionList.AddRange(new List<string>() {
                                                         "3501", "3505", "3509", "3513" });
-                                                    allPositionList.AddRange(new List<string>() { 
+                                                    allPositionList.AddRange(new List<string>() {
                                                         "2901", "2905", "2909", "2913", "3101", "3105", "3109", "3113","2501" , "2505" , "2509" , "2513" , "2701", "2705", "2709", "2713" });
                                                     break;
 
@@ -209,127 +209,129 @@ namespace WCS.WorkEngineering.Systems
                                             List<WCS_AgvTaskInfo> agvsAll = new List<WCS_AgvTaskInfo>();
                                             List<WCS_AgvTaskInfo> agvsNear = new List<WCS_AgvTaskInfo>();
                                             //if (task.LastInteractionPoint == "2")
-                                            {
-                                                //当前可用地址正在执行的任务
-                                                agvs = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && positionList.Contains(v.Station))
-                                                    .SplitTable(v => v.Take(2)).ToList();
-                                                agvsAll = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && allPositionList.Contains(v.Station))
-                                                    .SplitTable(v => v.Take(2)).ToList();
-                                                agvsNear = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && nearPositionList.Contains(v.Station))
-                                                    .SplitTable(v => v.Take(2)).ToList();
-                                                var agvPositionLists = agvs.Select(x => x.Station).Distinct();
-                                                var agvPositionListsAll = agvsAll.Select(x => x.Station).Distinct();
-                                                var agvPositionListsNear = agvsNear.Select(x => x.Station).Distinct();
-                                                //World.Log($"执行中的AGV任务目标地址:{JsonConvert.SerializeObject(agvPositionList)}");
-                                                var endDev = positionList.Where(x => !agvPositionLists.Contains(x)).ToList();
-                                                var endAllDev = allPositionList.Where(x => !agvPositionListsAll.Contains(x)).ToList();
-                                                var endNearDev = nearPositionList.Where(x => !agvPositionListsNear.Contains(x)).ToList();
-                                                World.Log($"agv可用巷道信息:{JsonConvert.SerializeObject(endDev)}");
-                                                World.Log($"agv可用巷道信息(所有):{JsonConvert.SerializeObject(endAllDev)}");
+                                            //{
+                                            //当前可用地址正在执行的任务
+                                            agvs = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && positionList.Contains(v.Station))
+                                                .SplitTable(v => v.Take(2)).ToList();
+                                            agvsAll = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && allPositionList.Contains(v.Station))
+                                                .SplitTable(v => v.Take(2)).ToList();
+                                            agvsNear = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && nearPositionList.Contains(v.Station))
+                                                .SplitTable(v => v.Take(2)).ToList();
+                                            var agvPositionLists = agvs.Select(x => x.Station).Distinct();
+                                            var agvPositionListsAll = agvsAll.Select(x => x.Station).Distinct();
+                                            var agvPositionListsNear = agvsNear.Select(x => x.Station).Distinct();
+                                            //World.Log($"执行中的AGV任务目标地址:{JsonConvert.SerializeObject(agvPositionList)}");
+                                            var endDev = positionList.Where(x => !agvPositionLists.Contains(x)).ToList();
+                                            var endAllDev = allPositionList.Where(x => !agvPositionListsAll.Contains(x)).ToList();
+                                            var endNearDev = nearPositionList.Where(x => !agvPositionListsNear.Contains(x)).ToList();
+                                            World.Log($"agv可用巷道信息:{JsonConvert.SerializeObject(endDev)}");
+                                            World.Log($"agv可用巷道信息(所有):{JsonConvert.SerializeObject(endAllDev)}");
 
-                                                if (!endDev.Any() && !endAllDev.Any() && !endNearDev.Any())//没有可用放货站台
+                                            if (!endDev.Any() && !endAllDev.Any() && !endNearDev.Any())//没有可用放货站台
+                                            {
+                                                var msg = "已无可用放货站台,任务正在执行中:";
+                                                foreach (var ag in agvs)
                                                 {
-                                                    var msg = "已无可用放货站台,任务正在执行中:";
-                                                    foreach (var ag in agvs)
-                                                    {
-                                                        msg += $"[任务号:{ag.ID},目标地址:{ag.Station}]";
-                                                    }
-                                                    throw new Exception(msg);
+                                                    msg += $"[任务号:{ag.ID},目标地址:{ag.Station}]";
                                                 }
+                                                throw new Exception(msg);
+                                            }
 
-                                                //获取没有光电信息的设备集合
-                                                try
-                                                {
-                                                    var devs = Device.All.Where(x => endDev.Contains(x.Code)).Select(x =>
-                                                        new Device<IStation520, IStation521, IStation523>(x, World));
-                                                    devs = devs.Where(x =>
-                                                        !x.Data3.Status.HasFlag(StationStatus.Run) &&
-                                                        !x.Data3.Status.HasFlag(StationStatus.PH_Status) &&
-                                                        x.Data3.Status.HasFlag(StationStatus.Auto)).ToList();
+                                            //获取没有光电信息的设备集合
+                                            try
+                                            {
+                                                var devs = Device.All.Where(x => endDev.Contains(x.Code)).Select(x =>
+                                                    new Device<IStation520, IStation521, IStation523>(x, World));
+                                                devs = devs.Where(x =>
+                                                    !x.Data3.Status.HasFlag(StationStatus.Run) &&
+                                                    !x.Data3.Status.HasFlag(StationStatus.PH_Status) &&
+                                                    x.Data3.Status.HasFlag(StationStatus.Auto)).ToList();
 
-                                                    var devsNear = Device.All.Where(x => endNearDev.Contains(x.Code)).Select(x =>
-                                                        new Device<IStation520, IStation521, IStation523>(x, World));
-                                                    devsNear = devsNear.Where(x =>
-                                                        !x.Data3.Status.HasFlag(StationStatus.Run) &&
-                                                        !x.Data3.Status.HasFlag(StationStatus.PH_Status) &&
-                                                        x.Data3.Status.HasFlag(StationStatus.Auto)).ToList();
+                                                var devsNear = Device.All.Where(x => endNearDev.Contains(x.Code)).Select(x =>
+                                                    new Device<IStation520, IStation521, IStation523>(x, World));
+                                                devsNear = devsNear.Where(x =>
+                                                    !x.Data3.Status.HasFlag(StationStatus.Run) &&
+                                                    !x.Data3.Status.HasFlag(StationStatus.PH_Status) &&
+                                                    x.Data3.Status.HasFlag(StationStatus.Auto)).ToList();
 
-                                                    var devsAll = Device.All.Where(x => endAllDev.Contains(x.Code)).Select(x =>
-                                                        new Device<IStation520, IStation521, IStation523>(x, World));
-                                                    devsAll = devsAll.Where(x =>
-                                                        !x.Data3.Status.HasFlag(StationStatus.Run) &&
-                                                        !x.Data3.Status.HasFlag(StationStatus.PH_Status) &&
-                                                        x.Data3.Status.HasFlag(StationStatus.Auto)).OrderBy(v=> allPositionList.Contains(v.Entity.Code)).ToList();
-                                                    if (!devs.Any())
+                                                var devsAll = Device.All.Where(x => endAllDev.Contains(x.Code)).Select(x =>
+                                                    new Device<IStation520, IStation521, IStation523>(x, World));
+                                                devsAll = devsAll.Where(x =>
+                                                    !x.Data3.Status.HasFlag(StationStatus.Run) &&
+                                                    !x.Data3.Status.HasFlag(StationStatus.PH_Status) &&
+                                                    x.Data3.Status.HasFlag(StationStatus.Auto)).OrderBy(v => allPositionList.Contains(v.Entity.Code)).ToList();
+                                                if (!devs.Any())
+                                                {
+                                                    if (devsNear.Any())//先判断同库一侧
                                                     {
-                                                        if (devsNear.Any())//先判断同库一侧
+                                                        foreach (var dev in devsNear)
                                                         {
-                                                            foreach (var dev in devsNear)
+                                                            if (!dev.Data3.Status.HasFlag(StationStatus.Run) && !dev.Data3.Status.HasFlag(StationStatus.PH_Status) &&
+                                                                                                              dev.Data3.Status.HasFlag(StationStatus.Auto))
+                                                            {
+                                                                //World.Log($"任务执行过程:开始{agv.ID}-{JsonConvert.SerializeObject(devsAll.Select(x => x.Entity.Code).ToList())}");
+                                                                agv.Status = AGVTaskStatus.Complete1;
+                                                                agv.Station = dev.Entity.Code;
+                                                                db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
+                                                                World.Log($"任务执行过程:完成agv任务更新{agv.ID}--{agv.Station}");
+                                                                task.AddWCS_TASK_DTL(db.Default, "皮盘返库任务分配巷道", agv.Station, $"任务分配至:{agv.Station}");
+                                                                World.Log($"任务执行过程:完成任务明细添加{agv.Station}");
+                                                                AgvApi.ContinueTask(agv.AgvID, agv.Station);
+                                                                World.Log($"任务执行过程:任务成功下发AGV{agv.AgvID}--{agv.Station}");
+                                                                return;
+                                                            }
+                                                            else
                                                             {
-                                                                if (!dev.Data3.Status.HasFlag(StationStatus.Run) && !dev.Data3.Status.HasFlag(StationStatus.PH_Status) &&
-                                                                                                                  dev.Data3.Status.HasFlag(StationStatus.Auto))
-                                                                {
-                                                                    //World.Log($"任务执行过程:开始{agv.ID}-{JsonConvert.SerializeObject(devsAll.Select(x => x.Entity.Code).ToList())}");
-                                                                    agv.Status = AGVTaskStatus.Complete1;
-                                                                    agv.Station = dev.Entity.Code;
-                                                                    db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
-                                                                    World.Log($"任务执行过程:完成agv任务更新{agv.ID}--{agv.Station}");
-                                                                    task.AddWCS_TASK_DTL(db.Default, "皮盘返库任务分配巷道", agv.Station, $"任务分配至:{agv.Station}");
-                                                                    World.Log($"任务执行过程:完成任务明细添加{agv.Station}");
-                                                                    AgvApi.ContinueTask(agv.AgvID, agv.Station);
-                                                                    World.Log($"任务执行过程:任务成功下发AGV{agv.AgvID}--{agv.Station}");
-                                                                    return;
-                                                                }
-                                                                else
-                                                                {
-                                                                    continue;
-                                                                }
+                                                                continue;
                                                             }
                                                         }
-                                                        else if (devsAll.Any())
+                                                    }
+                                                    else if (devsAll.Any())
+                                                    {
+                                                        foreach (var dev in devsAll)
                                                         {
-                                                            foreach (var dev in devsAll)
+                                                            if (!dev.Data3.Status.HasFlag(StationStatus.Run) && !dev.Data3.Status.HasFlag(StationStatus.PH_Status) &&
+                                                                                                              dev.Data3.Status.HasFlag(StationStatus.Auto))
+                                                            {
+                                                                World.Log($"任务执行过程:开始{agv.ID}-{JsonConvert.SerializeObject(devsAll.Select(x => x.Entity.Code).ToList())}");
+                                                                agv.Status = AGVTaskStatus.Complete1;
+                                                                agv.Station = dev.Entity.Code;
+                                                                db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
+                                                                World.Log($"任务执行过程:完成agv任务更新{agv.ID}--{agv.Station}");
+                                                                task.AddWCS_TASK_DTL(db.Default, "皮盘返库任务分配巷道", agv.Station, $"任务分配至:{agv.Station}");
+                                                                World.Log($"任务执行过程:完成任务明细添加{agv.Station}");
+                                                                AgvApi.ContinueTask(agv.AgvID, agv.Station);
+                                                                World.Log($"任务执行过程:任务成功下发AGV{agv.AgvID}--{agv.Station}");
+                                                                return;
+                                                            }
+                                                            else
                                                             {
-                                                                if (!dev.Data3.Status.HasFlag(StationStatus.Run) && !dev.Data3.Status.HasFlag(StationStatus.PH_Status) &&
-                                                                                                                  dev.Data3.Status.HasFlag(StationStatus.Auto))
-                                                                {
-                                                                    World.Log($"任务执行过程:开始{agv.ID}-{JsonConvert.SerializeObject(devsAll.Select(x => x.Entity.Code).ToList())}");
-                                                                    agv.Status = AGVTaskStatus.Complete1;
-                                                                    agv.Station = dev.Entity.Code;
-                                                                    db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
-                                                                    World.Log($"任务执行过程:完成agv任务更新{agv.ID}--{agv.Station}");
-                                                                    task.AddWCS_TASK_DTL(db.Default, "皮盘返库任务分配巷道", agv.Station, $"任务分配至:{agv.Station}");
-                                                                    World.Log($"任务执行过程:完成任务明细添加{agv.Station}");
-                                                                    AgvApi.ContinueTask(agv.AgvID, agv.Station);
-                                                                    World.Log($"任务执行过程:任务成功下发AGV{agv.AgvID}--{agv.Station}");
-                                                                    return;
-                                                                }
-                                                                else
-                                                                {
-                                                                    continue;
-                                                                }
+                                                                continue;
                                                             }
                                                         }
-                                                        World.Log("可用站台均有货或有执行中任务");
-                                                        return;
                                                     }
-
-                                                    World.Log($"任务执行过程:开始{agv.ID}-{JsonConvert.SerializeObject(devs.Select(x => x.Entity.Code).ToList())}");
-                                                    agv.Status = AGVTaskStatus.Complete1;
-                                                    agv.Station = devs.MinBy(x => x.Entity.Code).Entity.Code;
-                                                    db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
-                                                    World.Log($"任务执行过程:完成agv任务更新{agv.ID}--{agv.Station}");
-                                                    task.AddWCS_TASK_DTL(db.Default, "皮盘返库任务分配巷道", agv.Station, $"任务分配至:{agv.Station}");
-                                                    World.Log($"任务执行过程:完成任务明细添加{agv.Station}");
-                                                    AgvApi.ContinueTask(agv.AgvID, agv.Station);
-                                                    World.Log($"任务执行过程:任务成功下发AGV{agv.AgvID}--{agv.Station}");
-                                                }
-                                                catch (Exception e)
-                                                {
-                                                    throw new Exception($"执行错误:{e.Message + e.StackTrace}");
+                                                    World.Log("可用站台均有货或有执行中任务");
+                                                    return;
                                                 }
+
+                                                World.Log($"任务执行过程:开始{agv.ID}-{JsonConvert.SerializeObject(devs.Select(x => x.Entity.Code).ToList())}");
+                                                agv.Status = AGVTaskStatus.Complete1;
+                                                agv.Station = devs.MinBy(x => x.Entity.Code).Entity.Code;
+                                                db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
+                                                World.Log($"任务执行过程:完成agv任务更新{agv.ID}--{agv.Station}");
+                                                task.AddWCS_TASK_DTL(db.Default, "皮盘返库任务分配巷道", agv.Station, $"任务分配至:{agv.Station}");
+                                                World.Log($"任务执行过程:完成任务明细添加{agv.Station}");
+                                                AgvApi.ContinueTask(agv.AgvID, agv.Station);
+                                                World.Log($"任务执行过程:任务成功下发AGV{agv.AgvID}--{agv.Station}");
                                             }
+                                            catch (Exception e)
+                                            {
+                                                throw new Exception($"执行错误:{e.Message + e.StackTrace}");
+                                            }
+                                            //}
+
                                             #region ELSE
+
                                             //else
                                             //{
                                             //    //当前可用地址正在执行的任务
@@ -380,7 +382,9 @@ namespace WCS.WorkEngineering.Systems
                                             //        throw new Exception($"执行错误:{e.Message + e.StackTrace}");
                                             //    }
                                             //}
-                                            #endregion
+
+                                            #endregion ELSE
+
                                             break;
                                         }
                                     //取货站点安全交互
@@ -440,8 +444,8 @@ namespace WCS.WorkEngineering.Systems
                         }
                         catch (Exception ex)
                         {
-                            World.Log(ex.Message, LogLevelEnum.Mid);
-                            //this.ExRecord(obj.Entity.Code, ex.Message);
+                            if (ex.Message.Contains("SqlTransaction")) World.Log($"{ex.Message}:{ex.StackTrace}");
+                            else World.Log(ex.Message, LogLevelEnum.Mid);
                         }
                     }
                 }
@@ -453,4 +457,4 @@ namespace WCS.WorkEngineering.Systems
             return dev.Code is "AGVIn" or "AGVOut";
         }
     }
-}
+}

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

@@ -45,7 +45,6 @@ namespace WCS.WorkEngineering.Systems
 
                 var timeOut3 = db.Default.Queryable<WCS_TaskInfo>().NoLock().Count(x => x.BusType == "皮盘入库" && x.Status < TaskStatus.StackerExecution && x.AddTime < time1);
                 if (timeOut3 > 0) World.Log($"共有{timeOut3}个皮盘入库任务超过四十分钟未执行,请检查相关相关任务及对应agv设备", LogLevelEnum.High);
-
             });
             if (!taskInfos.Any())
             {
@@ -78,7 +77,7 @@ namespace WCS.WorkEngineering.Systems
                             case TaskType.EnterDepot:
                                 if (task.LastInteractionPoint == "2")
                                 {
-                                    string sta = "";                                                                        
+                                    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"))
@@ -113,7 +112,7 @@ namespace WCS.WorkEngineering.Systems
                                         TaskType = AGVTaskType.EnterDepot,
                                         Status = AGVTaskStatus.NewBuild,
                                         TaskId = task.ID,
-                                        Position = task.WorkBench,                                       
+                                        Position = task.WorkBench,
                                         Station = sta,
                                         AddWho = "WCS",
                                         AddTime = DateTime.Now
@@ -243,34 +242,49 @@ namespace WCS.WorkEngineering.Systems
                                         if (devs.Contains(task.SrmStation) && task.LastInteractionPoint != "3") //车间叫料任务,此值为3时是单独取满任务
                                         {
                                             string sta = "";
+                                            var n = 0;
+                                            var s = 0;
+                                            //同侧之间均分
                                             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();
+                                                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"))
                                             {
-                                                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";
+                                                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"))
                                             {
-                                                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";
+                                                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 agv = new WCS_AgvTaskInfo()
                                             {
                                                 ID = db.GetAgvTaskId(),
@@ -302,6 +316,7 @@ namespace WCS.WorkEngineering.Systems
                 }
                 catch (Exception ex)
                 {
+                    if (ex.Message.Contains("SqlTransaction")) World.Log($"{ex.Message}:{ex.StackTrace}");
                     World.Log(ex.Message, LogLevelEnum.Mid);
                 }
             }
@@ -312,4 +327,4 @@ namespace WCS.WorkEngineering.Systems
             return dev.Code == nameof(NoInteractionSystems);
         }
     }
-}
+}