Procházet zdrojové kódy

fix:涂布出库分配AGV取货点--校验两个地址是否一致

林豪 左 před 3 roky
rodič
revize
76f7594b9a

+ 166 - 166
Projects/永冠OPP/WCS.Service/WebApi/WCSApi.cs

@@ -257,175 +257,175 @@ namespace WCS.Service.WebApi
         /// </summary>
         /// <param name="model">筛选条件</param>
         /// <returns></returns>
-        [HttpGet]
-        public List<DeviceStatusViewModel> GetDeviceStatus([FromQuery] DeviceStatusViewModel model)
-        {
-            var result = new List<DeviceStatusViewModel>();
-            //找到所有设备的读取协议
-            var rgv = Device.Where(v => v.IsRGV()).Select(v => v.Device<IRGV521>());
-            var sc = Device.Where(v => v.IsSC()).Select(v => v.Device<ISRM521>());
-            var conv = Device.Where(v => v.IsConv()).Select(v => v.Device<IStation521>());
-
-            #region 检索分两部分,设备、任务(数据库)
-
-            #region 设备信息
-
-            if (!string.IsNullOrEmpty(model.CODE))
-            {
-                result.AddRange(GetDeviceStatusWhere(rgv, v => v.Entity.CODE == model.CODE));
-                result.AddRange(GetDeviceStatusWhere(sc, v => v.Entity.CODE == model.CODE));
-                result.AddRange(GetDeviceStatusWhere(conv, v => v.Entity.CODE == model.CODE));
-            }
-
-            if (model.TASKNUM > 10000)
-            {
-                result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 == model.TASKNUM));
-                result.AddRange(GetDeviceStatusWhere(sc, v => v.Data.TaskID_1 == model.TASKNUM));
-                result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Tasknum == model.TASKNUM));
-            }
-
-
-            if (model.PH_STATUS != null)
-            {
-                result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 == model.TASKNUM));
-            }
-
-            if (!string.IsNullOrEmpty(model.ADDRFROM))
-            {
-                result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.StartPosition_1 == short.Parse(model.ADDRFROM)));
-                result.AddRange(GetDeviceStatusWhere(sc, v => model.ADDRFROM.Contains(v.Data.SLine_1.ToString())
-                                                           || model.ADDRFROM.Contains(v.Data.SCol_1.ToString())
-                                                           || model.ADDRFROM.Contains(v.Data.SLayer_1.ToString())));
-                result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Goodsstart ==short.Parse(model.ADDRFROM)));
-            }
-
-            if (!string.IsNullOrEmpty(model.ADDRTO))
-            {
-                result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.DestPosition_1 == short.Parse(model.ADDRTO)));
-                result.AddRange(GetDeviceStatusWhere(sc, v => model.ADDRTO.Contains(v.Data.ELine_1.ToString())
-                                                           || model.ADDRTO.Contains(v.Data.ECol_1.ToString())
-                                                           || model.ADDRTO.Contains(v.Data.ELayer_1.ToString())));
-                result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Goodsend == short.Parse(model.ADDRTO)));
-            }
-
-            #endregion 设备信息
-
-            #region 任务信息
-
-            //获取所有设备上的任务信息
-            if (model.TYPE != null || !string.IsNullOrEmpty(model.BARCODE))
-            {
-                var info = new List<DeviceStatusViewModel>();
-                var ids = result.Select(v => v.TASKNUM);
-                info.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 > 10000));
-                info.AddRange(GetDeviceStatusWhere(sc, v => v.Data.TaskID_1 > 10000));
-                info.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Tasknum > 10000));
-                result.AddRange(info.Where(v => !ids.Any(b => b == v.TASKNUM)));
-            }
-
-            DB.Do(db =>
-            {
-                var ids = result.Select(v => v.TASKNUM);
-                var tasks = db.Default.Set<WCS_TASK>().AsNoTracking().Where(v => ids.Any(b => b == v.ID)).ToList();
-                tasks.ForEach(task =>
-                {
-                    var info = result.Find(v => v.TASKNUM == task.ID);
-                    info.TYPE = task.TYPE;
-                    info.BARCODE = task.BARCODE;
-                });
-            });
-
-            if (model.TYPE != null)
-            {
-                result = result.Where(v => v.TYPE == model.TYPE).ToList();
-            }
-            if (!string.IsNullOrEmpty(model.BARCODE))
-            {
-                result = result.Where(v => v.BARCODE != null && v.BARCODE.Contains(model.BARCODE)).ToList();
-            }
-
-            #endregion 任务信息
-
-            #endregion 检索分两部分,设备、任务(数据库)
-
-            return result;
-        }
+        //[HttpGet]
+        //public List<DeviceStatusViewModel> GetDeviceStatus([FromQuery] DeviceStatusViewModel model)
+        //{
+        //    var result = new List<DeviceStatusViewModel>();
+        //    //找到所有设备的读取协议
+        //    var rgv = Device.Where(v => v.IsRGV()).Select(v => v.Device<IRGV521>());
+        //    var sc = Device.Where(v => v.IsSC()).Select(v => v.Device<ISRM521>());
+        //    var conv = Device.Where(v => v.IsConv()).Select(v => v.Device<IStation521>());
+
+        //    #region 检索分两部分,设备、任务(数据库)
+
+        //    #region 设备信息
+
+        //    if (!string.IsNullOrEmpty(model.CODE))
+        //    {
+        //        result.AddRange(GetDeviceStatusWhere(rgv, v => v.Entity.CODE == model.CODE));
+        //        result.AddRange(GetDeviceStatusWhere(sc, v => v.Entity.CODE == model.CODE));
+        //        result.AddRange(GetDeviceStatusWhere(conv, v => v.Entity.CODE == model.CODE));
+        //    }
+
+        //    if (model.TASKNUM > 10000)
+        //    {
+        //        result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 == model.TASKNUM));
+        //        result.AddRange(GetDeviceStatusWhere(sc, v => v.Data.TaskID_1 == model.TASKNUM));
+        //        result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Tasknum == model.TASKNUM));
+        //    }
+
+
+        //    if (model.PH_STATUS != null)
+        //    {
+        //        result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 == model.TASKNUM));
+        //    }
+
+        //    if (!string.IsNullOrEmpty(model.ADDRFROM))
+        //    {
+        //        result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.StartPosition_1 == short.Parse(model.ADDRFROM)));
+        //        result.AddRange(GetDeviceStatusWhere(sc, v => model.ADDRFROM.Contains(v.Data.SLine_1.ToString())
+        //                                                   || model.ADDRFROM.Contains(v.Data.SCol_1.ToString())
+        //                                                   || model.ADDRFROM.Contains(v.Data.SLayer_1.ToString())));
+        //        result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Goodsstart ==short.Parse(model.ADDRFROM)));
+        //    }
+
+        //    if (!string.IsNullOrEmpty(model.ADDRTO))
+        //    {
+        //        result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.DestPosition_1 == short.Parse(model.ADDRTO)));
+        //        result.AddRange(GetDeviceStatusWhere(sc, v => model.ADDRTO.Contains(v.Data.ELine_1.ToString())
+        //                                                   || model.ADDRTO.Contains(v.Data.ECol_1.ToString())
+        //                                                   || model.ADDRTO.Contains(v.Data.ELayer_1.ToString())));
+        //        result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Goodsend == short.Parse(model.ADDRTO)));
+        //    }
+
+        //    #endregion 设备信息
+
+        //    #region 任务信息
+
+        //    //获取所有设备上的任务信息
+        //    if (model.TYPE != null || !string.IsNullOrEmpty(model.BARCODE))
+        //    {
+        //        var info = new List<DeviceStatusViewModel>();
+        //        var ids = result.Select(v => v.TASKNUM);
+        //        info.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 > 10000));
+        //        info.AddRange(GetDeviceStatusWhere(sc, v => v.Data.TaskID_1 > 10000));
+        //        info.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Tasknum > 10000));
+        //        result.AddRange(info.Where(v => !ids.Any(b => b == v.TASKNUM)));
+        //    }
+
+        //    DB.Do(db =>
+        //    {
+        //        var ids = result.Select(v => v.TASKNUM);
+        //        var tasks = db.Default.Set<WCS_TASK>().AsNoTracking().Where(v => ids.Any(b => b == v.ID)).ToList();
+        //        tasks.ForEach(task =>
+        //        {
+        //            var info = result.Find(v => v.TASKNUM == task.ID);
+        //            info.TYPE = task.TYPE;
+        //            info.BARCODE = task.BARCODE;
+        //        });
+        //    });
+
+        //    if (model.TYPE != null)
+        //    {
+        //        result = result.Where(v => v.TYPE == model.TYPE).ToList();
+        //    }
+        //    if (!string.IsNullOrEmpty(model.BARCODE))
+        //    {
+        //        result = result.Where(v => v.BARCODE != null && v.BARCODE.Contains(model.BARCODE)).ToList();
+        //    }
+
+        //    #endregion 任务信息
+
+        //    #endregion 检索分两部分,设备、任务(数据库)
+
+        //    return result;
+        //}
 
         #region 静态方法
 
-        /// <summary>
-        /// 获取RGV设备信息
-        /// </summary>
-        /// <param name="soue"></param>
-        /// <param name="func"></param>
-        /// <returns></returns>
-        public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IRGV521>> soue, Func<Device<IRGV521>, bool> func)
-        {
-            var result = new List<DeviceStatusViewModel>();
-            result.AddRange(soue.Where(func).Select(device =>
-            {
-                return new DeviceStatusViewModel
-                {
-                    CODE = device.Entity.CODE,
-                    TASKNUM = device.Data.TaskID_1 ,
-                    PH_STATUS = device.Data.SystemStatus.HasFlag(RGVStatus.光电),
-                    ADDRFROM = device.Data.StartPosition_1.ToString(),
-                    ADDRTO = device.Data.DestPosition_1.ToString(),
-                };
-            }));
-            return result;
-        }
-
-        /// <summary>
-        /// 获取堆垛机设备信息
-        /// </summary>
-        /// <param name="soue"></param>
-        /// <param name="func"></param>
-        /// <returns></returns>
-        public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<ISRM521>> soue, Func<Device<ISRM521>, bool> func)
-        {
-            var result = new List<DeviceStatusViewModel>();
-
-            result.AddRange(soue.Where(func).Select(device =>
-            {
-                var info = new DeviceStatusViewModel
-                {
-                    CODE = device.Entity.CODE,
-                    TASKNUM = device.Data.TaskID_1,
-                    ADDRFROM = $"{device.Data.SLine_1}-{device.Data.SCol_1}-{device.Data.SLayer_1}",
-                    ADDRTO = device.Data.ELine_1.ToString(),
-                };
-                if (device.Data.ECol_1 != 0 && device.Data.ELayer_1 != 0)
-                    info.ADDRTO = $"{device.Data.ELine_1}-{device.Data.ECol_1}-{device.Data.ELayer_1}";
-                return info;
-            }));
-
-            return result;
-        }
-
-        /// <summary>
-        /// 获取输送机设备信息
-        /// </summary>
-        /// <param name="soue"></param>
-        /// <param name="func"></param>
-        /// <returns></returns>
-        public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IStation521>> soue, Func<Device<IStation521>, bool> func)
-        {
-            var result = new List<DeviceStatusViewModel>();
-
-            result.AddRange(soue.Where(func).Select(device =>
-            {
-                return new DeviceStatusViewModel
-                {
-                    CODE = device.Entity.CODE,
-                    TASKNUM = device.Data.Tasknum,
-                    ADDRFROM =device.Data.Goodsstart.ToString(),
-                    ADDRTO = device.Data.Goodsend.ToString(),
-                };
-            }));
-
-            return result;
-        }
+        ///// <summary>
+        ///// 获取RGV设备信息
+        ///// </summary>
+        ///// <param name="soue"></param>
+        ///// <param name="func"></param>
+        ///// <returns></returns>
+        //public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IRGV521>> soue, Func<Device<IRGV521>, bool> func)
+        //{
+        //    var result = new List<DeviceStatusViewModel>();
+        //    result.AddRange(soue.Where(func).Select(device =>
+        //    {
+        //        return new DeviceStatusViewModel
+        //        {
+        //            CODE = device.Entity.CODE,
+        //            TASKNUM = device.Data.TaskID_1 ,
+        //            PH_STATUS = device.Data.SystemStatus.HasFlag(RGVStatus.光电),
+        //            ADDRFROM = device.Data.StartPosition_1.ToString(),
+        //            ADDRTO = device.Data.DestPosition_1.ToString(),
+        //        };
+        //    }));
+        //    return result;
+        //}
+
+        ///// <summary>
+        ///// 获取堆垛机设备信息
+        ///// </summary>
+        ///// <param name="soue"></param>
+        ///// <param name="func"></param>
+        ///// <returns></returns>
+        //public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<ISRM521>> soue, Func<Device<ISRM521>, bool> func)
+        //{
+        //    var result = new List<DeviceStatusViewModel>();
+
+        //    result.AddRange(soue.Where(func).Select(device =>
+        //    {
+        //        var info = new DeviceStatusViewModel
+        //        {
+        //            CODE = device.Entity.CODE,
+        //            TASKNUM = device.Data.TaskID_1,
+        //            ADDRFROM = $"{device.Data.SLine_1}-{device.Data.SCol_1}-{device.Data.SLayer_1}",
+        //            ADDRTO = device.Data.ELine_1.ToString(),
+        //        };
+        //        if (device.Data.ECol_1 != 0 && device.Data.ELayer_1 != 0)
+        //            info.ADDRTO = $"{device.Data.ELine_1}-{device.Data.ECol_1}-{device.Data.ELayer_1}";
+        //        return info;
+        //    }));
+
+        //    return result;
+        //}
+
+        ///// <summary>
+        ///// 获取输送机设备信息
+        ///// </summary>
+        ///// <param name="soue"></param>
+        ///// <param name="func"></param>
+        ///// <returns></returns>
+        //public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IStation521>> soue, Func<Device<IStation521>, bool> func)
+        //{
+        //    var result = new List<DeviceStatusViewModel>();
+
+        //    result.AddRange(soue.Where(func).Select(device =>
+        //    {
+        //        return new DeviceStatusViewModel
+        //        {
+        //            CODE = device.Entity.CODE,
+        //            TASKNUM = device.Data.Tasknum,
+        //            ADDRFROM =device.Data.Goodsstart.ToString(),
+        //            ADDRTO = device.Data.Goodsend.ToString(),
+        //        };
+        //    }));
+
+        //    return result;
+        //}
 
        
 

+ 69 - 70
Projects/永冠OPP/WCS.Service/Works/Station/一楼入库.cs

@@ -1,6 +1,5 @@
 using DBHelper;
 using Microsoft.EntityFrameworkCore;
-using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
@@ -48,7 +47,7 @@ namespace WCS.Service.Works.Station
                         {
                             var dev = item.Station;
                             var next = dev.Entity.GetPath("SRM").CODE;
-                            var info = infos.FirstOrDefault(v => item.FinishCode.Contains(v.ContainerCode+"}"));
+                            var info = infos.FirstOrDefault(v => item.FinishCode.Contains(v.ContainerCode + "}"));
                             if (db.Default.Set<WCS_TASK>().AsNoTracking().Any(v => v.BARCODE == info.ContainerCode && v.STATUS < TaskStatus.已完成 && v.TYPE == TaskType.入库))
                                 throw new WarnException($"生产条码{info.ContainerCode}存在未完成任务,请检查是否为标签卡重复使用");
 
@@ -212,7 +211,7 @@ namespace WCS.Service.Works.Station
         }
     }
 
-    [WorkTitle(typeof(ProductHandler), "一楼入库旋转台二次分配巷道")]
+    //[WorkTitle(typeof(ProductHandler), "一楼入库旋转台二次分配巷道")]
     internal class 一楼入库旋转台二次分配巷道 : Work<StationDeviceGroup>
     {
         protected override void Do(StationDeviceGroup obj)
@@ -309,79 +308,79 @@ namespace WCS.Service.Works.Station
                     }
                 });
             });
-        }                                  
+        }
 
         protected override bool SelectDevice(WCS_DEVICE dev)
         {
             return devCodes.Contains(dev.CODE);
         }
 
-        private List<string> devCodes = new List<string>() { "G1038", "G1047","1056","1065" };
+        private List<string> devCodes = new List<string>() { "G1038", "G1047", "1056", "1065" };
     }
 
-    //[WorkTitle(typeof(ProductHandler), "一楼RGV放货结束分配目标地址")]
-    //internal class 一楼RGV放货结束分配目标地址 : Work<StationDeviceGroup>
-    //{
-    //    protected override void Do(StationDeviceGroup obj)
-    //    {
-    //        obj.EX(obj =>
-    //        {
-    //            if (obj.Items.Any(v => v.Data.VoucherNo != v.Data2.VoucherNo)) throw new WarnException($"等待执行任务,凭证号不一致");
-    //            if (obj.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("运行中");
-    //            var finishTaskList = new List<FinishTaskList<int>>();
-    //            var devs = new List<FinishTaskList<string>>();
-    //            foreach (var dev in obj.Items)
-    //            {
-    //                if (dev.Data2.Request != IstationRequest.请求分配目标地址)
-    //                {
-    //                    InfoLog.INFO_INFO($"{obj.Entity.CODE}无请求-分配目标地址--2");
-    //                    continue;
-    //                }
-    //                if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态))
-    //                {
-    //                    InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无光电", obj.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
-    //                    continue;
-    //                }
-    //                devs.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
-    //            }
-
-    //            DB.Do(db =>
-    //            {
-    //                foreach (var dev in devs)
-    //                {
-    //                    var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == dev.Station.Data2.Tasknum);
-    //                    var next = dev.Station.Entity.GetPath(task.ADDRTO);
-    //                    task.ADDRNEXT = next.CODE;
-
-    //                    var msg = $"下达从{dev.Station.Data.Goodsstart}移动至{dev.Station.Data.Goodsend}的PLC指令";
-    //                    msg += $"[{dev.Station.Data.Tasknum}][{dev.Station.Data.Goodsstart}][{dev.Station.Data.Goodsend}][{dev.Station.Data.VoucherNo}[{dev.Station.Data2.VoucherNo}]";
-    //                    task.CreateStatusLog(db, msg, this.GetType());
-    //                    finishTaskList.Add(new FinishTaskList<int>(task.ID, dev.Station));
-    //                }
-    //                db.Default.SaveChanges();
-    //            });
-
-    //            DB.Do(db =>
-    //            {
-    //                foreach (var finish in finishTaskList)
-    //                {
-    //                    var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == finish.FinishCode);
-    //                    if (task == null) continue;
-    //                    finish.Station.Data.Tasknum = task.ID;
-    //                    finish.Station.Data.Goodsstart = finish.Station.Entity.CODE.ToShort();
-    //                    finish.Station.Data.Goodsend = task.ADDRNEXT.ToShort();
-    //                    finish.Station.Data.CmdType = IstationCmdType.分配目标地址;
-    //                    finish.Station.Data.VoucherNo++;
-    //                }
-    //            });
-    //        });
-    //    }
-
-    //    protected override bool SelectDevice(WCS_DEVICE dev)
-    //    {
-    //        return devCodes.Contains(dev.CODE);
-    //    }
-
-    //    private List<string> devCodes = new List<string>() { "G1035", "G1044", "G1053", "G1062" };
-    //}
+    [WorkTitle(typeof(ProductHandler), "一楼RGV放货结束分配目标地址")]
+    internal class 一楼RGV放货结束分配目标地址 : Work<StationDeviceGroup>
+    {
+        protected override void Do(StationDeviceGroup obj)
+        {
+            obj.EX(obj =>
+            {
+                if (obj.Items.Any(v => v.Data.VoucherNo != v.Data2.VoucherNo)) throw new WarnException($"等待执行任务,凭证号不一致");
+                if (obj.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("运行中");
+                var finishTaskList = new List<FinishTaskList<int>>();
+                var devs = new List<FinishTaskList<string>>();
+                foreach (var dev in obj.Items)
+                {
+                    if (dev.Data2.Request != IstationRequest.请求分配目标地址)
+                    {
+                        InfoLog.INFO_INFO($"{obj.Entity.CODE}无请求-分配目标地址--2");
+                        continue;
+                    }
+                    if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态))
+                    {
+                        InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无光电", obj.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
+                        continue;
+                    }
+                    devs.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
+                }
+
+                DB.Do(db =>
+                {
+                    foreach (var dev in devs)
+                    {
+                        var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == dev.Station.Data2.Tasknum);
+                        var next = dev.Station.Entity.GetPath(task.ADDRTO);
+                        task.ADDRNEXT = next.CODE;
+
+                        var msg = $"下达从{dev.Station.Data.Goodsstart}移动至{dev.Station.Data.Goodsend}的PLC指令";
+                        msg += $"[{dev.Station.Data.Tasknum}][{dev.Station.Data.Goodsstart}][{dev.Station.Data.Goodsend}][{dev.Station.Data.VoucherNo}[{dev.Station.Data2.VoucherNo}]";
+                        task.CreateStatusLog(db, msg, this.GetType());
+                        finishTaskList.Add(new FinishTaskList<int>(task.ID, dev.Station));
+                    }
+                    db.Default.SaveChanges();
+                });
+
+                DB.Do(db =>
+                {
+                    foreach (var finish in finishTaskList)
+                    {
+                        var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == finish.FinishCode);
+                        if (task == null) continue;
+                        finish.Station.Data.Tasknum = task.ID;
+                        finish.Station.Data.Goodsstart = finish.Station.Entity.CODE.ToShort();
+                        finish.Station.Data.Goodsend = task.ADDRNEXT.ToShort();
+                        finish.Station.Data.CmdType = IstationCmdType.分配目标地址;
+                        finish.Station.Data.VoucherNo++;
+                    }
+                });
+            });
+        }
+
+        protected override bool SelectDevice(WCS_DEVICE dev)
+        {
+            return devCodes.Contains(dev.CODE);
+        }
+
+        private List<string> devCodes = new List<string>() { "G1035", "G1044", "G1053", "G1062" };
+    }
 }

+ 3 - 2
Projects/永冠OPP/WCS.Service/Works/Station/涂布出库.cs

@@ -254,12 +254,13 @@ namespace WCS.Service.Works.Station
 
                     if (stationList.Count == 2)
                     {
+                        stationList = stationList.OrderBy(v => v.FinishCode.ADDRNEXT.ToShort()).ToList();
                         var task3 = stationList[0];
                         var task4 = stationList[1];
-                        if (task3.FinishCode.ADDRNEXT == "1343" && task3.FinishCode.ADDRNEXT == "1344")
+                        if (task3.FinishCode.ADDRNEXT == "1343" && task4.FinishCode.ADDRNEXT == "1344")
                         {
                         }
-                        else if (task3.FinishCode.ADDRNEXT == "1340" && task3.FinishCode.ADDRNEXT == "1341")
+                        else if (task3.FinishCode.ADDRNEXT == "1340" && task4.FinishCode.ADDRNEXT == "1341")
                         {
                         }
                         else