فهرست منبع

任务优先级仅在同巷道内生效,不再涉及所有堆垛机

林豪 左 3 سال پیش
والد
کامیت
b37dc90ae2
2فایلهای تغییر یافته به همراه75 افزوده شده و 86 حذف شده
  1. 25 33
      Projects/永冠OPP/WCS.Service/Works/SRM/SRMWork.cs
  2. 50 53
      Projects/永冠OPP/WCS.Service/Works/Station/一楼出库.cs

+ 25 - 33
Projects/永冠OPP/WCS.Service/Works/SRM/SRMWork.cs

@@ -16,7 +16,7 @@ using WCS.Service.Log;
 namespace WCS.Service.Works.SRM
 {
     [WorkTitle(typeof(SRMHandler), "堆垛机")]
-    internal class SRMWork : DeviceWork<SRMDevice>
+    internal class SrmWork : DeviceWork<SRMDevice>
     {
         protected override void Do(SRMDevice obj)
         {
@@ -84,8 +84,8 @@ namespace WCS.Service.Works.SRM
                 });
 
                 //最后一个是否是出库任务
-                var LastIsOut = srmDevice.Entity.Get<bool>("LastIsOut");
-                srmDevice.Entity.Set("LastIsOut", !LastIsOut);
+                var lastIsOut = srmDevice.Entity.Get<bool>("LastIsOut");
+                srmDevice.Entity.Set("LastIsOut", !lastIsOut);
                 if (isTransfer.Count > 0) //防止因为无当前堆垛机移库任务导致无法执行其他类型任务
                 {
                     #region 移库
@@ -105,24 +105,24 @@ namespace WCS.Service.Works.SRM
                         //双工位  货架列单数为一工位取放点  货架列双数为二工位取放点
                         foreach (var task in tasks)
                         {
-                            var addrFrom = task.ADDRFROM.Split("-");
+                            var addFrom = task.ADDRFROM.Split("-");
                             var addrTo = task.ADDRTO.Split("-");
 
-                            var oldTaskSTATUS = task.STATUS;
+                            var oldTaskStatus = task.STATUS;
                             task.STARTTIME = DateTime.Now;
                             task.UPDATETIME = DateTime.Now;
                             task.STATUS = WCS.Entity.TaskStatus.堆垛机执行;
                             task.DEVICE = srmDevice.Entity.CODE;
                             db.Default.SaveChanges();
                             Uploader.Upload(db);
-                            task.CreateStatusLog(db, $"状态由[{oldTaskSTATUS}]变更为[{task.STATUS}]", this.GetType());
+                            task.CreateStatusLog(db, $"状态由[{oldTaskStatus}]变更为[{task.STATUS}]", this.GetType());
 
-                            if (addrFrom[2].ToShort().OddNumberOrEven())
+                            if (addFrom[2].ToShort().OddNumberOrEven())
                             {
                                 srmDevice.Data.TaskID_1 = task.ID;
-                                srmDevice.Data.SLine_1 = addrFrom[0].ToShort();
-                                srmDevice.Data.SCol_1 = addrFrom[1].ToShort();
-                                srmDevice.Data.SLayer_1 = addrFrom[2].ToShort();
+                                srmDevice.Data.SLine_1 = addFrom[0].ToShort();
+                                srmDevice.Data.SCol_1 = addFrom[1].ToShort();
+                                srmDevice.Data.SLayer_1 = addFrom[2].ToShort();
                                 srmDevice.Data.ELine_1 = addrTo[0].ToShort();
                                 srmDevice.Data.ECol_1 = addrTo[1].ToShort();
                                 srmDevice.Data.ELayer_1 = addrTo[2].ToShort();
@@ -131,9 +131,9 @@ namespace WCS.Service.Works.SRM
                             else
                             {
                                 srmDevice.Data.TaskID_2 = task.ID;
-                                srmDevice.Data.SLine_2 = addrFrom[0].ToShort();
-                                srmDevice.Data.SCol_2 = addrFrom[1].ToShort();
-                                srmDevice.Data.SLayer_2 = addrFrom[2].ToShort();
+                                srmDevice.Data.SLine_2 = addFrom[0].ToShort();
+                                srmDevice.Data.SCol_2 = addFrom[1].ToShort();
+                                srmDevice.Data.SLayer_2 = addFrom[2].ToShort();
                                 srmDevice.Data.ELine_2 = addrTo[0].ToShort();
                                 srmDevice.Data.ECol_2 = addrTo[1].ToShort();
                                 srmDevice.Data.ELayer_2 = addrTo[2].ToShort();
@@ -144,7 +144,7 @@ namespace WCS.Service.Works.SRM
 
                     #endregion 移库
                 }
-                else if (LastIsOut)
+                else if (lastIsOut)
                 {
                     #region 入库
 
@@ -178,12 +178,13 @@ namespace WCS.Service.Works.SRM
                     {
                         //检测有效任务数与实际任务是是否相等
                         var validDev = devise.Where(v => v.Data2.Tasknum > 10000 && v.Data2.Status.HasFlag(IstationStatus.光电状态) && !v.Data3.Status.HasFlag(StationStatus.运行状态位));
-                        if (!validDev.Any()) throw new DoException("无有效入库任务");
-                        var tasknum = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == validDev.First().Data2.Tasknum);
-                        var taskList = db.Default.Set<WCS_TASK>().Count(v => v.TaskGroupKey == tasknum.TaskGroupKey && v.TYPE == TaskType.入库);
-                        if (validDev.Count() != taskList) throw new WarnException($"任务数量不匹配,设备-{validDev.Count()},WCS-{taskList}");
+                        var stationDevices = validDev as StationDevice[] ?? validDev.ToArray();
+                        if (!stationDevices.Any()) throw new DoException("无有效入库任务");
+                        var tasking = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == stationDevices.First().Data2.Tasknum);
+                        var taskList = db.Default.Set<WCS_TASK>().Count(v => v.TaskGroupKey == tasking.TaskGroupKey && v.TYPE == TaskType.入库);
+                        if (stationDevices.Count() != taskList) throw new WarnException($"任务数量不匹配,设备-{stationDevices.Count()},WCS-{taskList}");
 
-                        foreach (var dev in validDev)
+                        foreach (var dev in stationDevices)
                         {
                             var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.STATUS < TaskStatus.堆垛机执行 && v.ID == dev.Data2.Tasknum) ?? throw new WarnException($"设备有光电有任务且不在运行状态,但WCS找不到任务{dev.Data2.Tasknum}");
                             var oldTask = task.STATUS;
@@ -209,7 +210,7 @@ namespace WCS.Service.Works.SRM
                         foreach (var finish in finishTaskList)
                         {
                             var task = db.Default.Set<WCS_TASK>().Find(finish.FinishCode);
-                            var addTo = task.ADDRTO.Split("-");
+                            var addTo = task!.ADDRTO.Split("-");
                             if (finish.Station.Entity.CODE == devise[0].Entity.CODE)  //一工位
                             {
                                 InfoLog.INFO_SRMINFO($"入库--写入堆垛机[{srmDevice.Entity.CODE}]1工位-开始:[{srmDevice.Data.TaskID_1}][{srmDevice.Data.SLine_1}][{srmDevice.Data.ELine_1}][{srmDevice.Data.ECol_1}][{srmDevice.Data.ELayer_1}][{srmDevice.Data.VoucherNo_1}]--[{finishTaskList.Count.ToShort()}]");
@@ -320,16 +321,7 @@ namespace WCS.Service.Works.SRM
 
                         //同时对结果进行排序,分组
                         var maximum = ProtocolProxy.YGWMS150Redis.Get("SaleTaskGroupCount").ToInt();
-                        //所有 有优先级任务的出货口
-                        var priorityADDRTO = db.Default.Set<WCS_TASK>().Where(v => v.Priority > 0 && v.STATUS == TaskStatus.新建 && v.DEVICE != srmDevice.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.新建)
@@ -341,7 +333,7 @@ namespace WCS.Service.Works.SRM
                                                    .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)
-                                                   .FirstOrDefault(v => !priorityADDRTO.Contains(v.Key));
+                                                   .FirstOrDefault();
                         if (outDepotGrouping == null) return; //用于解决Linq  Value cannot be null. (Parameter 'source')
 
                         var outDepotList = outDepotGrouping.Select(v => v).ToList();
@@ -367,7 +359,7 @@ namespace WCS.Service.Works.SRM
                         {
                             var item = tasks[i];
                             var task = db.Default.Set<WCS_TASK>().Find(item.ID);
-                            var oldTaskSTATUS = task.STATUS;
+                            var oldTaskStatus = task!.STATUS;
                             task.STARTTIME = DateTime.Now;
                             task.UPDATETIME = DateTime.Now;
                             task.STATUS = WCS.Entity.TaskStatus.堆垛机执行;
@@ -382,7 +374,7 @@ namespace WCS.Service.Works.SRM
                             //获取站台及下一个地址
                             task.GetSrmStationAndaddNext(fork);
                             var msg = "";
-                            msg = fork == SrmFork.货叉1 ? $"状态由[{oldTaskSTATUS}]变更为[{task.STATUS}][{srmDevice.Data.SLine_1}-{srmDevice.Data.SCol_1}-{srmDevice.Data.SLayer_1}][{srmDevice.Data.ELine_1}][{srmDevice.Data.VoucherNo_1}]" : $"状态由[{oldTaskSTATUS}]变更为[{task.STATUS}][{srmDevice.Data.SLine_2}-{srmDevice.Data.SCol_2}-{srmDevice.Data.SLayer_2}][{srmDevice.Data.ELine_2}][{srmDevice.Data.VoucherNo_2}]";
+                            msg = fork == SrmFork.货叉1 ? $"状态由[{oldTaskStatus}]变更为[{task.STATUS}][{srmDevice.Data.SLine_1}-{srmDevice.Data.SCol_1}-{srmDevice.Data.SLayer_1}][{srmDevice.Data.ELine_1}][{srmDevice.Data.VoucherNo_1}]" : $"状态由[{oldTaskStatus}]变更为[{task.STATUS}][{srmDevice.Data.SLine_2}-{srmDevice.Data.SCol_2}-{srmDevice.Data.SLayer_2}][{srmDevice.Data.ELine_2}][{srmDevice.Data.VoucherNo_2}]";
                             task.CreateStatusLog(db, msg, this.GetType());
                             item.SRMSTATION = task.SRMSTATION;
                             finishTaskList.Add(new FinishTaskList<SrmFork, Task>(fork, item));

+ 50 - 53
Projects/永冠OPP/WCS.Service/Works/Station/一楼出库.cs

@@ -18,43 +18,43 @@ namespace WCS.Service.Works.Station
         {
             var timer = new Stopwatch();
             timer.Start();
-            obj.EX(obj =>
+            obj.EX(stationDeviceGroup =>
             {
-                if (obj.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("运行中");
-                if (obj.Items.Any(v => v.Data.VoucherNo != v.Data2.VoucherNo)) throw new WarnException($"等待任务执行--凭证号不一致");
+                if (stationDeviceGroup.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("运行中");
+                if (stationDeviceGroup.Items.Any(v => v.Data.VoucherNo != v.Data2.VoucherNo)) throw new WarnException($"等待任务执行--凭证号不一致");
 
                 //成功处理的任务
                 var finishTaskList = new List<FinishTaskList<int>>();
 
                 DB.Do(db =>
                 {
-                    var devs = new List<FinishTaskList<string>>();
-                    foreach (var dev in obj.Items)
+                    var devise = new List<FinishTaskList<string>>();
+                    foreach (var dev in stationDeviceGroup.Items)
                     {
                         //没有请求
                         if (dev.Data2.Request != IstationRequest.堆垛机放货完成请求目标地址)
                         {
-                            InfoLog.INFO_INFO($"{obj.Entity.CODE}无请求-堆垛机放货完成请求--4");
+                            InfoLog.INFO_INFO($"{stationDeviceGroup.Entity.CODE}无请求-堆垛机放货完成请求--4");
                             continue;
                         }
                         //没有光电
                         if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态))
                         {
-                            InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无光电", obj.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
+                            InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无光电", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
                             continue;
                         }
-                        devs.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
+                        devise.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
                     }
-                    if (!devs.Any()) return;
-                    foreach (var dev in devs)
+                    if (!devise.Any()) return;
+                    foreach (var dev in devise)
                     {
                         var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.TYPE == TaskType.出库 && v.SRMSTATION == dev.FinishCode && v.STATUS == TaskStatus.堆垛机完成) ?? throw new WarnException("无任务");
                         var tasks = db.Default.Set<WCS_TASK>().Where(v => v.TaskGroupKey == task.TaskGroupKey);
-                        if (tasks.Count() != devs.Count) throw new WarnException($"可执行任务数{devs.Count},实际任务数{tasks.Count()}");
+                        if (tasks.Count() != devise.Count) throw new WarnException($"可执行任务数{devise.Count},实际任务数{tasks.Count()}");
                         if (tasks.Any(v => v.STATUS != TaskStatus.堆垛机完成 && v.STATUS != TaskStatus.执行中)) throw new WarnException("任务异常,同组任务状态不为堆垛机完成或执行中");
 
                         task.STATUS = TaskStatus.执行中;
-                        task.CreateStatusLog(db, $"状态由[{TaskStatus.堆垛机完成}]变更为[{task.STATUS}]-{obj.Entity.Code}", this.GetType());
+                        task.CreateStatusLog(db, $"状态由[{TaskStatus.堆垛机完成}]变更为[{task.STATUS}]-{stationDeviceGroup.Entity.CODE}", GetType());
                         finishTaskList.Add(new FinishTaskList<int>(task.ID, dev.Station));
                     }
                     db.Default.SaveChanges();
@@ -73,22 +73,21 @@ namespace WCS.Service.Works.Station
                         finish.Station.Data.CmdType = IstationCmdType.堆垛机放货完成请求目标地址;
                         finish.Station.Data.VoucherNo++;
                     }
-                    if (finishTaskList.Any())
-                    {
-                        timer.Stop();
-                        InfoLog.INFO_TIMING($"{obj.Entity.CODE}--分配目标地址,耗时{timer.ElapsedMilliseconds}");
-                    }
+
+                    if (!finishTaskList.Any()) return;
+                    timer.Stop();
+                    InfoLog.INFO_TIMING($"{stationDeviceGroup.Entity.CODE}--分配目标地址,耗时{timer.ElapsedMilliseconds}");
                 });
             });
         }
 
         protected override bool SelectDevice(WCS_DEVICE dev)
         {
-            return devCodes.Contains(dev.CODE);
+            return _devCodes.Contains(dev.CODE);
         }
 
         //月台堆垛机放货设备组
-        private List<string> devCodes = new List<string>() { "G1473", "G1474", "G1493", "G1491", "G1520", "G1522", "G1545", "G1451" };
+        private readonly List<string> _devCodes = new() { "G1473", "G1474", "G1493", "G1491", "G1520", "G1522", "G1545", "G1451" };
     }
 
     [WorkTitle(typeof(ProductHandler), "月台出货口完成任务")]
@@ -99,39 +98,39 @@ namespace WCS.Service.Works.Station
             var timer = new Stopwatch();
             timer.Start();
 
-            obj.EX(obj =>
+            obj.EX(stationDeviceGroup =>
             {
                 //当前组有一个运行的设备就停止执行
-                if (obj.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("设备运行中");
-                if (obj.Items.Any(v => v.Data2.Status.HasFlag(IstationStatus.光电状态))) throw new DoException("设备停止运行,但有光电");
+                if (stationDeviceGroup.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("设备运行中");
+                if (stationDeviceGroup.Items.Any(v => v.Data2.Status.HasFlag(IstationStatus.光电状态))) throw new DoException("设备停止运行,但有光电");
                 //此处逻辑为货物离开后报完成
 
                 //成功处理的任务
                 var finishTaskList = new List<FinishTaskList<int>>();
                 DB.Do(db =>
                 {
-                    var devs = new List<FinishTaskList<string>>();
-                    foreach (var dev in obj.Items)
+                    var devise = new List<FinishTaskList<string>>();
+                    foreach (var dev in stationDeviceGroup.Items)
                     {
                         if (dev.Data2.Request != IstationRequest.月台出库口任务完成)
                         {
-                            InfoLog.INFO_INFO($"{obj.Entity.CODE}无请求-月台出库口任务完成--3");
+                            InfoLog.INFO_INFO($"{stationDeviceGroup.Entity.CODE}无请求-月台出库口任务完成--3");
                             continue;
                         }
                         if (dev.Data2.Tasknum < 10000)
                         {
-                            InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无任务号", obj.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
+                            InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无任务号", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
                             continue;
                         };
-                        devs.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
+                        devise.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
                     }
 
-                    foreach (var dev in devs)
+                    foreach (var dev in devise)
                     {
-                        var task = db.Default.Set<WCS_TASK>().Where(v => v.ID == dev.Station.Data2.Tasknum).FirstOrDefault();
-                        if (task.STATUS == TaskStatus.新建) throw new WarnException($"{task.ID}任务状态错误");
+                        var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == dev.Station.Data2.Tasknum);
+                        if (task?.STATUS == TaskStatus.新建) throw new WarnException($"{task.ID}任务状态错误");
 
-                        task.STATUS = TaskStatus.已完成;
+                        task!.STATUS = TaskStatus.已完成;
                         task.ENDTIME = System.DateTime.Now;
                         task.UPDATEUSER = "WCS";
                         task.CreateStatusLog(db, $"状态由[{TaskStatus.执行中}]变更为[{task.STATUS}]-{dev.FinishCode}", this.GetType());
@@ -141,27 +140,25 @@ namespace WCS.Service.Works.Station
                 });
                 DB.Do(db =>
                 {
-                    foreach (var finish in finishTaskList)
+                    foreach (var finish in from finish in finishTaskList let task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == finish.FinishCode) select finish)
                     {
-                        var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == finish.FinishCode);
                         finish.Station.Data.CmdType = IstationCmdType.月台出库口任务完成;
                         finish.Station.Data.VoucherNo++;
                     }
-                    if (finishTaskList.Any())
-                    {
-                        timer.Stop();
-                        InfoLog.INFO_TIMING($"{obj.Entity.CODE}--处理请求到反馈完成信号耗时{timer.ElapsedMilliseconds}");
-                    }
+
+                    if (!finishTaskList.Any()) return;
+                    timer.Stop();
+                    InfoLog.INFO_TIMING($"{stationDeviceGroup.Entity.CODE}--处理请求到反馈完成信号耗时{timer.ElapsedMilliseconds}");
                 });
             });
         }
 
         protected override bool SelectDevice(WCS_DEVICE dev)
         {
-            return devCodes.Contains(dev.CODE);
+            return _devCodes.Contains(dev.CODE);
         }
 
-        private List<string> devCodes = new List<string>() { "G1469", "G1561", "G1538", "G1574", "G1509" };
+        private readonly List<string> _devCodes = new() { "G1469", "G1561", "G1538", "G1574", "G1509" };
     }
 
     [WorkTitle(typeof(ProductHandler), "转圈交互点分配目标地址")]
@@ -169,45 +166,45 @@ namespace WCS.Service.Works.Station
     {
         protected override void Do(StationDeviceGroup obj)
         {
-            obj.EX(obj =>
+            obj.EX(stationDeviceGroup =>
             {
-                if (obj.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("运行中");
-                if (obj.Items.Any(v => v.Data.VoucherNo != v.Data2.VoucherNo)) throw new WarnException($"等待任务执行--凭证号不一致");
+                if (stationDeviceGroup.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("运行中");
+                if (stationDeviceGroup.Items.Any(v => v.Data.VoucherNo != v.Data2.VoucherNo)) throw new WarnException($"等待任务执行--凭证号不一致");
 
                 DB.Do(db =>
                 {
-                    var devs = new List<FinishTaskList<string>>();
-                    foreach (var dev in obj.Items)
+                    var devise = new List<FinishTaskList<string>>();
+                    foreach (var dev in stationDeviceGroup.Items)
                     {
                         //没有请求
                         if (dev.Data2.Request != IstationRequest.请求分配目标地址)
                         {
-                            InfoLog.INFO_INFO($"{obj.Entity.CODE}无请求-分配目标地址--2");
+                            InfoLog.INFO_INFO($"{stationDeviceGroup.Entity.CODE}无请求-分配目标地址--2");
                             continue;
                         }
                         //没有光电
                         if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态))
                         {
-                            InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无光电", obj.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
+                            InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无光电", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
                             continue;
                         };
                         if (dev.Data2.Tasknum < 10000)
                         {
-                            InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求有光电无任务", obj.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
+                            InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求有光电无任务", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
                             continue;
                         }
-                        devs.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
+                        devise.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
                     }
 
-                    foreach (var dev in devs)
+                    foreach (var dev in devise)
                     {
                         var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == dev.Station.Data2.Tasknum) ?? throw new WarnException("无任务");
                         var tasks = db.Default.Set<WCS_TASK>().Where(v => v.TaskGroupKey == task.TaskGroupKey);
-                        if (devs.Count != tasks.Count()) throw new WarnException($"可执行任务数{devs.Count},实际任务数{tasks.Count()}");
+                        if (devise.Count != tasks.Count()) throw new WarnException($"可执行任务数{devise.Count},实际任务数{tasks.Count()}");
                         dev.Station.Data.Tasknum = task.ID;
                         dev.Station.Data.Goodsstart = dev.Station.Entity.CODE.ToShort();
                         dev.Station.Data.Goodsend = task.ADDRNEXT.ToShort();
-                        dev.Station.Data.Goodsnum = devs.Count.ToShort();
+                        dev.Station.Data.Goodsnum = devise.Count.ToShort();
                         dev.Station.Data.CmdType = IstationCmdType.分配目标地址;
                         dev.Station.Data.VoucherNo++;
                     }
@@ -220,4 +217,4 @@ namespace WCS.Service.Works.Station
             return dev.CODE == "G1589";
         }
     }
-}
+}