Browse Source

优化查询性能并增加任务过滤条件

简化了 `fjSysConfig` 中 `con` 变量的使用,改为单行表达式。
在查询 `WCS_AgvTaskInfo` 时,增加了 `NoLock` 和 `SplitTable` 方法,以提高查询性能和避免锁定。
在 `isUse` 为 `true` 的情况下,请求 WMS 分配可用放货点时,对 `WCS_AgvTaskInfo` 的查询增加了 `NoLock` 和 `SplitTable` 方法。
在检查站台状态时,对 `WCS_AgvTaskInfo` 的查询增加了 `NoLock` 和 `SplitTable` 方法。
在 `NoInteractionSystems.cs` 中,过滤新建任务时,增加了对 `BusType` 为 "芯股用空托盘入库" 的任务的排除条件。
林豪 左 10 months ago
parent
commit
8f7c6207b6

+ 6 - 10
YWGC/FJK/WCS.WorkEngineering/Systems/AgvSystems.cs

@@ -378,17 +378,13 @@ namespace WCS.WorkEngineering.Systems
                                             else if (task.BusType == TaskBusType.帘线退料重绕.GetDescription())
                                             {
                                                 var con = db.Default.Queryable<fjSysConfig>().NoLock().First(x => x.Code == "CRTLZone").SContent;
-                                                var isUse = false;
-                                                if (con != null && con == "1")
-                                                {
-                                                    isUse = true;
-                                                }
+                                                var isUse = false || con != null && con == "1";
                                                 //首先判断退料输送线是否可放货                                               
                                                 var ph_9001 = new Device<IStation523>(Device.All.First(x => x.Code == "9001"), World);
                                                 var ph_9101 = new Device<IStation523>(Device.All.First(x => x.Code == "9101"), World);
-                                                var flag1 = !db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && v.Station == "9001")
+                                                var flag1 = !db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && v.Station == "9001")
                                                     .SplitTable(v => v.Take(2)).Any() && !ph_9001.Data.Status.HasFlag(StationStatus.PH_Status);
-                                                var flag2 = !db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && v.Station == "9101")
+                                                var flag2 = !db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && v.Station == "9101")
                                                     .SplitTable(v => v.Take(2)).Any() && !ph_9101.Data.Status.HasFlag(StationStatus.PH_Status);
                                                 var taskApply = db.Default.Queryable<WCS_TaskInfo>().NoLock().Where(x => x.ID == agv.TaskId).First();
                                                 if (flag2)
@@ -433,7 +429,7 @@ namespace WCS.WorkEngineering.Systems
                                                 {
                                                     List<string> allDevs = new List<string> { "9210", "9211", "9212", "9213", "9214",/* "9215", "9216", "9217", "9218" */};
 
-                                                    var agvStas = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && (allDevs.Contains(v.Station)|| allDevs.Contains(v.Position)))
+                                                    var agvStas = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && (allDevs.Contains(v.Station)|| allDevs.Contains(v.Position)))
                                                     .SplitTable(v => v.Take(2)).ToList();
                                                     var agvStaLists = agvStas.Select(x => x.Station).Distinct();
                                                     var devs = allDevs.Where(x => !agvStaLists.Contains(x)).ToList();
@@ -453,7 +449,7 @@ namespace WCS.WorkEngineering.Systems
                                                         foreach (var dev in devsPut)
                                                         {
                                                             if (!dev.Data3.Status.HasFlag(StationStatus.PH_Status) &&
-                                                                !db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && (v.Station == dev.Entity.Code || v.Position == dev.Entity.Code))
+                                                                !db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && (v.Station == dev.Entity.Code || v.Position == dev.Entity.Code))
                                                                 .SplitTable(v => v.Take(2)).Any())
                                                             {
                                                                 var sta = dev.Entity.Code; 
@@ -522,7 +518,7 @@ namespace WCS.WorkEngineering.Systems
                                                 {
                                                     throw new Exception($"{agv.Station}站台不在低位小车无法放货,请检查并处理");
                                                 }
-                                                var tasking = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot
+                                                var tasking = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot
                                                         && v.Station == agv.Station && v.GoodsSum == 1).SplitTable(tabs => tabs.Take(2)).First();
                                                 if (tasking != null)
                                                 {

+ 1 - 1
YWGC/FJK/WCS.WorkEngineering/Systems/NoInteractionSystems.cs

@@ -35,7 +35,7 @@ namespace WCS.WorkEngineering.Systems
             {
                 //获取所有的新建任务,组盘任务不需要
                 taskInfos = db.Default.Queryable<WCS_TaskInfo>().ReadPastUpdLock().Where(x => x.Status == 0).ToList()
-                    .Where(x => x.Type != TaskType.SetPlate || (x.Type == TaskType.SetPlate && x.AddrFrom != "Robot")).Select(x => x.ID).ToList();
+                    .Where(x => x.Type != TaskType.SetPlate || (x.Type == TaskType.SetPlate && x.AddrFrom != "Robot") && x.BusType!="芯股用空托盘入库").Select(x => x.ID).ToList();
                 var time = DateTime.Now.AddMinutes(-20);
                 var time1 = DateTime.Now.AddMinutes(-40);
                 var timeOut = db.Default.Queryable<WCS_TaskInfo>().NoLock().Count(x => x.BusType == "车间叫料" && x.Status < TaskStatus.StackerExecution && x.AddTime < time);