林豪 左 3 years ago
parent
commit
59ad8f3fc6
1 changed files with 15 additions and 35 deletions
  1. 15 35
      Projects/永冠OPP/WCS.Service/Works/SRM/SRMWork.cs

+ 15 - 35
Projects/永冠OPP/WCS.Service/Works/SRM/SRMWork.cs

@@ -304,44 +304,24 @@ namespace WCS.Service.Works.SRM
                         //同时对结果进行排序,分组
                         var maxnum = ProtocolProxy.YGWMS150Redis.Get("SaleTaskGroupCount").ToInt();
                         //所有 有优先级任务的出货口
-                        List<string> priorityADDRTO = new List<string>();
-
-                        var t = db.Default.Set<WCS_TASK>().Where(v => v.Priority > 0 && v.STATUS == TaskStatus.新建 && v.DEVICE != obj.Entity.CODE).ToList()
-                                                                       .GroupBy(v => v.ADDRTO);
-                        if (t.Any()) //用于避免t为空时报错
-                        {
-                            priorityADDRTO = t.Select(v => new { v.Key, List = v.Select(p => p.DEVICE).Distinct().ToList() })
-                                              .Where(v => v.List.Where(p =>
-                                              {
-                                                  var dev = Device.Find(p).Create<SRMDevice>();
-                                                  return dev.Data2.SRMMode == SCMode.远程 && dev.Data2.SRMStatus == SCRunStatus.空闲;
-                                              }).Any())
-                                              .Select(v => v.Key)
-                                              .ToList();
-                        }
-                        var outDepotList = waitTask.Where(v =>
-                                                    {
-                                                        return db.Default.Set<WCS_TASK>()
-                                                           .AsNoTracking()
-                                                           .Where(d => d.TYPE == TaskType.出库)
-                                                           .Where(d => d.STATUS > TaskStatus.新建)
-                                                           .Where(d => d.STATUS < TaskStatus.已完成 || taskidList.Contains(d.ID))
-                                                           .Where(d => d.ADDRTO == v.ADDRTO && d.FLOOR == v.FLOOR)
-                                                           .GroupBy(d => d.TaskGroupKey).Count() < maxnum;
-                                                    })
+                        var priorityADDRTO = db.Default.Set<WCS_TASK>().Where(v => v.Priority > 0 && v.STATUS == TaskStatus.新建 && v.DEVICE != obj.Entity.CODE).ToList()
+                                                                        .GroupBy(v => v.ADDRTO).Select(v => new { v.Key, List = v.Select(p => p.DEVICE).Distinct().ToList() })
+                                                                        .Where(v => v.List.Where(p =>
+                                                                        {
+                                                                            var dev = Device.Find(p).Create<SRMDevice>();
+                                                                            return dev.Data2.SRMMode == SCMode.远程 && dev.Data2.SRMStatus == SCRunStatus.空闲;
+                                                                        }).Any())
+                                                                        .Select(v => v.Key)
+                                                                        .ToList();
+                        var cTaskList = db.Default.Set<WCS_TASK>().AsNoTracking()
+                                                                  .Where(d => d.TYPE == TaskType.出库)
+                                                                  .Where(d => d.STATUS > TaskStatus.新建)
+                                                                  .Where(d => d.STATUS < TaskStatus.已完成 || taskidList.Contains(d.ID)).ToList();
+                        var outDepotList = waitTask.Where(v => cTaskList.Where(d => d.ADDRTO == v.ADDRTO && d.FLOOR == v.FLOOR).GroupBy(d => d.TaskGroupKey).Count() < maxnum)
                                                    .OrderByDescending(v => v.Priority)
                                                    .ThenBy(v => v.ADDRTO == "G1340" ? 0 : 1)
                                                    .ThenBy(v => v.FLOOR == floor ? 0 : 1)
-                                                   .ThenBy(v =>
-                                                   {
-                                                       return db.Default.Set<WCS_TASK>()
-                                                                        .AsNoTracking()
-                                                                        .Where(d => d.TYPE == TaskType.出库)
-                                                                        .Where(d => d.STATUS > TaskStatus.新建)
-                                                                        .Where(d => d.STATUS < TaskStatus.已完成 || taskidList.Contains(d.ID))
-                                                                        .Where(d => d.ADDRTO == v.ADDRTO && d.FLOOR == v.FLOOR)
-                                                                        .GroupBy(d => d.TaskGroupKey).Count();
-                                                   })
+                                                   .ThenBy(v => cTaskList.Where(d => d.ADDRTO == v.ADDRTO && d.FLOOR == v.FLOOR).GroupBy(d => d.TaskGroupKey).Count())
                                                    .ThenBy(v => v.CREATETIME)
                                                    .GroupBy(v => v.ADDRTO)
                                                    .Where(v => !priorityADDRTO.Contains(v.Key))