林豪 左 1 år sedan
förälder
incheckning
c97dc113b8

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

@@ -46,6 +46,10 @@ 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);
+
+                var time3 = DateTime.Now.AddHours(-24);
+                var timeOut4 = db.Default.Queryable<BillInvnow>().NoLock().Count(x => x.AddTime < time3);
+                if (timeOut3 > 0) World.Log($"共有{timeOut4}个库存信息超过24小时未执行,请检查相关库存信息并处理", LogLevelEnum.High);
             });
             if (!taskInfos.Any())
             {

+ 477 - 39
业务工程/分拣库/WCS.WorkEngineering/Systems/RGVSystems.cs

@@ -86,7 +86,36 @@ namespace WCS.WorkEngineering.Systems
                                 //检查库存表是否有残留库存信息
                                 if (db.Queryable<BillInvnow>().Any(x => x.ContGrpBarCode == bcrCode))
                                 {
-                                    World.Log($"【{obj.Entity.Code}】上的托盘 【{bcrCode}】存在历史库存信息,请检查对应托盘条码是否存在未完成的出库任务!!!!!", LogLevelEnum.High);
+                                    try
+                                    {
+                                        //检查条码对应的任务是否是一楼人工组盘入库
+                                        var task = db.Queryable<WCS_TaskInfo>().Where(x => x.BarCode == bcrCode).OrderByDescending(x => x.AddTime).First();
+
+                                        if (task.Status == TaskStatus.NewBuild && task.BusType == "人工满托入库") //人工满托入库新建任务
+                                        {
+                                            //删除条码
+                                            var invInit = db.Queryable<BillInvinit>()
+                                                .Where(x => x.ContGrpBarCode == bcrCode)
+                                                .OrderByDescending(x => x.AddTime).First();
+                                            db.DeleteableRowLock(invInit).ExecuteCommand();
+                                            //删除库存
+                                            var invNow = db.Queryable<BillInvnow>()
+                                                .Where(x => x.ContGrpBarCode == bcrCode)
+                                                .OrderByDescending(x => x.AddTime).First();
+                                            db.DeleteableRowLock(invNow).ExecuteCommand();
+                                            //取消任务
+                                            task.Status = TaskStatus.Cancel;
+                                            task.ManualRemarks = "托盘已使用,需在二楼组盘";
+                                            db.Updateable(task).ExecuteCommand();
+                                            task.AddWCS_TASK_DTL(db, obj.Entity.Code, "", "取消任务");
+                                        }
+
+                                        World.Log($"【{obj.Entity.Code}】上的托盘 【{bcrCode}】存在历史库存信息,请检查对应托盘条码是否存在未完成的出库任务!!!!!", LogLevelEnum.High);
+                                    }
+                                    catch (Exception e)
+                                    {
+                                        World.Log($"{e.Message}:{e.StackTrace}", LogLevelEnum.High);
+                                    }
                                     return;
                                 }
 
@@ -187,9 +216,6 @@ namespace WCS.WorkEngineering.Systems
                                     startPosition.Data.GoodsEnd = 0;
                                     World.Log($"任务处理:初始化取货点{startPosition.Entity.Code}任务及目标地址信息");
                                 }
-                                //else {
-                                //    return;
-                                //}
 
                                 //目标地址是码垛工位
                                 if (isPalletizing)
@@ -238,40 +264,6 @@ namespace WCS.WorkEngineering.Systems
                             World.Log($"任务处理:开始-取放货完成-任务号[{obj.Data2.TaskNumber}]起始地址[{obj.Data2.StartPosition}]目标地址[{obj.Data2.DestPosition}]");
                             var statDev = Device.All.FirstOrDefault(x => x.Code == obj.Data.StartPosition.ToString());
 
-                            //if (statDev.HasFlag(DeviceFlags.二次码垛RGV取货口))
-                            //{
-                            //    //var dev = new Device<IStation520, IStation521, ITruss530>(Device.All.FirstOrDefault(x => x.Code == obj.Data.DestPosition.ToString())!, World);
-                            //    //WCS_Palletizing pall = new WCS_Palletizing();
-                            //    ////获取码垛信息
-                            //    //SqlSugarHelper.Do(_db =>
-                            //    //{
-                            //    //    var db = _db.Default;
-                            //    //    pall = db.Queryable<WCS_Palletizing>().Includes(x => x.Layers, x => x.Rows, x => x.Locs).First(x => x.Id == obj.Data2.TaskNumber);
-                            //    //});
-                            //    //if (pall == null)
-                            //    //{
-                            //    //    World.Log($"未找到对应任务{obj.Data2.TaskNumber}");
-                            //    //}
-                            //    //var pallLoc = pall.Layers.SelectMany(x => x.Rows).SelectMany(x => x.Locs).Select(x => new { XYNo = x.XYNo.ToShort(), x.Finish }).ToList();
-
-                            //    //dev.Data3.MaxQuantity = pall.CountQty.ToShort();
-                            //    //dev.Data3.Quantity = pallLoc.Count(x => x.Finish).ToShort();
-                            //    //dev.Data3.Type = pall.ShortCode;
-                            //    //dev.Data3.VoucherNo++;
-                            //    //World.Log($"任务处理:二次码垛目标地址写入码垛信息-目标货位[{dev.Entity.Code}]最大码垛数量[{dev.Data3.MaxQuantity}]已码数量[{dev.Data3.Quantity}]垛形[{dev.Data3.Type}]凭证号[{dev.Data3.VoucherNo}]");
-
-                            //    //var destDev = new Device<IStation520, IStation521>(statDev, World);
-                            //    //destDev.Data.TaskNumber = 0;
-                            //    //destDev.Data.GoodsStart = 0;
-                            //    //destDev.Data.GoodsEnd = 0;
-                            //    //World.Log($"任务处理:清除起始地址信息-目标货位{destDev.Entity.Code}");
-                            //}
-                            //else
-                            //{
-                            //    //var destDev = new Device<IStation520, IStation521>(Device.All.FirstOrDefault(x => x.Code == obj.Data.DestPosition.ToString())!, World);
-
-                            //}
-
                             var stDev = new Device<IStation520, IStation521>(Device.All.FirstOrDefault(x => x.Code == obj.Data.StartPosition.ToString())!, World);
                             stDev.Data.TaskNumber = 0;
                             stDev.Data.GoodsStart = 0;
@@ -889,6 +881,452 @@ namespace WCS.WorkEngineering.Systems
         public bool Secondary { get; set; }
     }
 
+    /// <summary>
+    ///  条码表
+    /// </summary>
+    [SugarTable("Bill_InvInit")]
+    public partial class BillInvinit : BaseModel
+    {
+        /// <summary>
+        ///  仓库ID 关联仓库表 ID
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
+        public long WarehouseId { get; set; }
+
+        /// <summary>
+        ///  组盘ID
+        ///  创建条码表时生成 同库存表组盘ID ContGrpId
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
+        public long ContGrpId { get; set; }
+
+        /// <summary>
+        ///  容器条码 同联容器表容器条码 ContBarCode
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string ContGrpBarCode { get; set; }
+
+        /// <summary>
+        ///  箱条码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string BoxBarCode { get; set; }
+
+        /// <summary>
+        ///  Bom单号 关联投料单 帘线工序工单号 BillCode
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string BomDocsNo { get; set; }
+
+        /// <summary>
+        ///  Bom物料ID
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
+        public long BomMatId { get; set; }
+
+        /// <summary>
+        ///  Bom物料编号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string BomMatCode { get; set; }
+
+        /// <summary>
+        ///  Bom物料
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string BomMatName { get; set; }
+
+        /// <summary>
+        ///  垛形主表 ID
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
+        public long BomSetId { get; set; }
+
+        /// <summary>
+        ///  垛型编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string SetGrpCode { get; set; }
+
+        /// <summary>
+        ///  库存状态码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string ExecStateCode { get; set; }
+
+        /// <summary>
+        ///  单据编号 关联单据表单据编号 DocsNo
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string ExecDocsNo { get; set; }
+
+        /// <summary>
+        ///  单据行号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string ExecDocsRowNo { get; set; }
+
+        /// <summary>
+        ///  单据类型编号 同单据表TypeNum
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string ExecDocsTypeCode { get; set; }
+
+        /// <summary>
+        ///  出入库标识
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false)]
+        public FJInvInOutType InvInOut { get; set; }
+
+        /// <summary>
+        ///  执行人
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string ExecWho { get; set; }
+
+        /// <summary>
+        ///  执行时间
+        /// </summary>
+        [SugarColumn(ColumnDataType = "datetime", IsNullable = false)]
+        public DateTime ExecTime { get; set; }
+
+        /// <summary>
+        ///  行
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false)]
+        public int PutRow { get; set; }
+
+        /// <summary>
+        ///  列
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false)]
+        public int PutCol { get; set; }
+
+        /// <summary>
+        ///  层
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false)]
+        public int PutLayer { get; set; }
+
+        /// <summary>
+        ///  入库条码号 FJ材料号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string InvBarCode { get; set; }
+
+        /// <summary>
+        ///  库存状态
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string InvStateCode { get; set; }
+
+        /// <summary>
+        ///  入库单号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string InDocsNo { get; set; }
+
+        /// <summary>
+        ///  入库单行号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string InDocsRowNo { get; set; }
+
+        /// <summary>
+        ///  供应编号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string SuppCode { get; set; }
+
+        /// <summary>
+        ///  供应商名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string SuppName { get; set; }
+
+        /// <summary>
+        ///  海关编号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string CustCode { get; set; }
+
+        /// <summary>
+        ///  海关名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string CustName { get; set; }
+
+        /// <summary>
+        ///  物料ID
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
+        public long MatId { get; set; }
+
+        /// <summary>
+        ///  物料编号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string MatCode { get; set; }
+
+        /// <summary>
+        ///  物料名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string MatName { get; set; }
+
+        /// <summary>
+        ///  总重量
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
+        public decimal TolWQty { get; set; }
+
+        /// <summary>
+        ///  净重
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
+        public decimal NetWQty { get; set; }
+
+        /// <summary>
+        ///  皮重
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
+        public decimal TareWQty { get; set; }
+
+        /// <summary>
+        ///  总长
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
+        public decimal LengthQty { get; set; }
+
+        /// <summary>
+        ///  碳当量
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
+        public decimal CaQty { get; set; }
+
+        /// <summary>
+        ///  销售总量
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
+        public decimal SolderQty { get; set; }
+
+        /// <summary>
+        ///  暂定
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false)]
+        public int ContUsageQty { get; set; }
+
+        /// <summary>
+        ///  批次号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string BatchNo { get; set; }
+
+        /// <summary>
+        ///  生产时间
+        /// </summary>
+        [SugarColumn(ColumnDataType = "datetime", IsNullable = false)]
+        public DateTime ProductTime { get; set; }
+
+        /// <summary>
+        ///  第一次入库时间
+        /// </summary>
+        [SugarColumn(ColumnDataType = "datetime", IsNullable = false)]
+        public DateTime OneInTime { get; set; }
+
+        /// <summary>
+        ///  盘条条码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string RodBarCode { get; set; }
+
+        /// <summary>
+        ///  工字轮条码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string HWBarCode { get; set; }
+
+        /// <summary>
+        ///  RFID条码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string RFIDBarCode { get; set; }
+
+        /// <summary>
+        /// 材料号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string CLBarCode { get; set; }
+
+        /// <summary>
+        ///  工字轮条码类型
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string HWTypeCode { get; set; }
+
+        /// <summary>
+        ///  炉号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string BoilerNo { get; set; }
+
+        /// <summary>
+        ///  包号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string PackNo { get; set; }
+
+        /// <summary>
+        ///  牌号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string BrandNo { get; set; }
+
+        /// <summary>
+        ///  执行标准
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string ExecStd { get; set; }
+
+        /// <summary>
+        ///  许可证号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string LicenceCode { get; set; }
+
+        /// <summary>
+        ///  改手盘标记
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
+        public bool IsSurplus { get; set; }
+
+        /// <summary>
+        ///  返工标记
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
+        public bool IsRework { get; set; }
+
+        /// <summary>
+        ///  是否黑盘
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
+        public bool IsBlack { get; set; }
+
+        /// <summary>
+        ///  是否芯股
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
+        public bool IsCore { get; set; }
+
+        /// <summary>
+        ///  快投标记
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
+        public bool IsFast { get; set; }
+
+        /// <summary>
+        ///  是否异常
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
+        public bool IsFail { get; set; }
+
+        /// <summary>
+        ///  异常原因
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)]
+        public string FailReason { get; set; }
+
+        /// <summary>
+        /// 单/双丝
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string SilkTypeCode { get; set; }
+
+        /// <summary>
+        ///  等级
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string Grade { get; set; }
+
+        /// <summary>
+        ///  是否退料
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
+        public bool IsBack { get; set; }
+
+        /// <summary>
+        ///  退料原因
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)]
+        public string BackReason { get; set; }
+
+        /// <summary>
+        ///  是否扭转检测
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
+        public bool IsTorsChk { get; set; }
+
+        /// <summary>
+        ///  扭转次数
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false)]
+        public int TorsChkQty { get; set; }
+
+        /// <summary>
+        ///  扭转检测时间
+        /// </summary>
+        [SugarColumn(ColumnDataType = "datetime", IsNullable = false)]
+        public DateTime TorsChkTime { get; set; }
+
+        /// <summary>
+        ///  扭转检测结果值
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? TorsChkValue { get; set; }
+
+        /// <summary>
+        ///  扭转检测设备号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string TorsChkMachCode { get; set; }
+
+        /// <summary>
+        ///  工序订单号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string ProcessDocsCode { get; set; }
+
+        /// <summary>
+        ///  生产机台号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string ProductMachCode { get; set; }
+
+        /// <summary>
+        ///  生成产线号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string ProductLineNo { get; set; }
+
+        /// <summary>
+        /// 货物大小
+        /// </summary>
+        [SugarColumn(IsNullable = false)]
+        public int Size { get; set; }
+
+        /// <summary>
+        ///  托盘类型
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "托盘类型")]
+        public FJPalletType PalletType { get; set; }
+
+        /// <summary>
+        /// 组盘类型
+        /// </summary>
+        [SugarColumn(IsNullable = true)]
+        public FJContGrpType ContGrpType { get; set; }
+    }
+
     /// <summary>
     ///  基础表实体
     /// </summary>
@@ -993,4 +1431,4 @@ namespace WCS.WorkEngineering.Systems
         [Description("出库")]
         Out = 2,
     }
-}
+}

+ 2 - 0
业务工程/分拣库/WCS.WorkEngineering/Systems/SrmSystems.cs

@@ -49,6 +49,8 @@ namespace WCS.WorkEngineering.Systems
                 srm = item.Sources.FirstOrDefault(v => v.HasFlag(DeviceFlags.堆垛机));
                 PutDevices.Add(srm.Code, item.Targets.Where(v => v.HasFlag(DeviceFlags.输送机)).Select(v => new Station(v, this.World)).ToList());
             }
+
+            var a = 0;
         }
 
         protected override bool ParallelDo => true;

+ 2 - 2
业务工程/分拣库/WCS.WorkEngineering/Systems/一楼扫码入库.cs

@@ -85,7 +85,7 @@ namespace WCS.WorkEngineering.Systems
                     World.Log("扫码失败,内容为空", LogLevelEnum.Mid);
                     return;
                 }
-                else if(! barcode.Contains("TPB"))
+                else if (!barcode.Contains("TPB"))
                 {
                     World.Log($"扫码异常{barcode},请检查扫码器", LogLevelEnum.Mid);
                     return;
@@ -145,7 +145,7 @@ namespace WCS.WorkEngineering.Systems
                         var taskInfo = db.Queryable<WCS_TaskInfo>().Where(v => v.BarCode == barcode && v.Type == TaskType.EnterDepot).OrderByDescending(x => x.AddTime).First();
                         if (taskInfo == null)
                         {
-                            World.Log($"条码{barcode}未组盘,请联系生产创建入库任务!!!!");
+                            World.Log($"条码{barcode}未组盘,请联系生产创建入库任务!!!!", LogLevelEnum.High);
                             return;
                         }
                         if (taskInfo is not { Status: Entity.TaskStatus.NewBuild, BusType: "人工满托入库" }) return;

+ 6 - 3
业务工程/分拣库/WCS.WorkEngineering/Systems/分拣主线/满轮主线预写入目标地址.cs

@@ -108,9 +108,12 @@ namespace WCS.WorkEngineering.Systems
 
         public override bool Select(Device dev)
         {
-            if (WorkStart.WareHouses.Contains("FJ1")) return dev.Code is "18" or "118";
-            else if (WorkStart.WareHouses.Contains("FJ2")) return dev.Code is "38" or "58";
-            else if (WorkStart.WareHouses.Contains("FJ3")) return dev.Code is "138" or "158";
+            var codes = new List<string>();
+            if (WorkStart.WareHouses.Contains("FJ1")) codes.AddRange(new List<string>(){ "18" , "118" });
+            if (WorkStart.WareHouses.Contains("FJ2")) codes.AddRange(new List<string>() { "38", "58" });
+            if (WorkStart.WareHouses.Contains("FJ3")) codes.AddRange(new List<string>() { "138", "158" });
+
+            return codes.Contains(dev.Code);
             return false;
         }
     }

+ 269 - 558
业务工程/分拣库/WCS.WorkEngineering/WorkStart.cs

@@ -58,6 +58,203 @@ namespace WCS.WorkEngineering
 
             #endregion 设置设备IP集合
 
+            #region 满轮输送线
+
+            #region DB523,所有线体都会有DB523
+
+            var mLtuples523 = new List<Tuple<string, List<Tuple<int, int>>>>()
+                {
+                    new("10.30.37.166",new List<Tuple<int, int>>() //北侧满轮主线
+                    {
+                        new(1, 100),
+                        new(9001, 9010),//暂用,无意义
+                        new(401, 599),
+                        new(801,999),
+                        new(1201,1399),
+                    }),
+                    new("10.30.37.198",new List<Tuple<int, int>>() //南侧满轮主线
+                    {
+                        new(101, 210),
+                        new(601, 799),
+                        new(1001, 1199),
+                        new(1401,1599),
+                        new(341,379),
+                    })
+                };
+
+            foreach (var item in mLtuples523)
+            {
+                var db523 = 0;
+                var db524 = 0;
+                foreach (var item1 in item.Item2)
+                {
+                    for (var i = item1.Item1; i <= item1.Item2; i++)
+                    {
+                        var conv = new Device(i.ToString());
+                        conv.AddFlag(DeviceFlags.输送机);
+                        conv.AddProtocol<IStation523>(db523, 523, item.Item1);
+                        conv.AddProtocol<IStation524>(db524, 524, item.Item1);
+
+                        db523 += 12;
+                        db524 += 16;
+                    }
+                }
+            }
+
+            #endregion DB523,所有线体都会有DB523
+
+            #region 520、521 交互线体会有520、521
+
+            //Item2表示线体号集合,Item1表示IP
+            var mLTuples520 = new List<Tuple<string, List<int>>>()
+                {
+                    //北侧
+                    new("10.30.37.166",new List<int>() {1,22,41,61,418,426,435,444,455,466,480,494,508,522,536,550,564,578,591,818,826,835,844,855,866,880,894,908,922,936,950,964,978,991,1218,1226,1235,1244,1255,1266,1280,1294,1308,1322,1336,1350,1364,1378,1391}),
+                    //南侧
+                    new("10.30.37.198",new List<int>(){101,122,141,161,618,626,635,644,655,666,680,694,708,722,736,750,764,778,791,1018,1026,1035,1044,1055,1066,1080,1094,1108,1122,1136,1150,1164,1178,1191,1418,1426,1435,1444,1455,1466,1480,1494,1508,1522,1536,1550,1564,1578,1591})
+                };
+
+            foreach (var item in mLTuples520)
+            {
+                var db520 = 0;
+                var db521 = 0;
+
+                foreach (var device in item.Item2.Select(item1 => Device.All.FirstOrDefault(v => v.Code == item1.ToString())))
+                {
+                    if (device != null)
+                    {
+                        device.AddProtocol<IStation520>(db520, 520, item.Item1);
+                        device.AddProtocol<IStation521>(db521, 521, item.Item1);
+                    }
+
+                    db520 += 14;
+                    db521 += 16;
+                }
+            }
+
+            #endregion 520、521 交互线体会有520、521
+
+            #region 满轮扫码器
+
+            //Item2表示线体号集合,Item1表示IP
+            var mLTuples83 = new List<Tuple<string, List<int>>>()
+                {
+                    new("10.30.37.166",new List<int>(){3,14,18,22,38,323,41,58,61}) ,
+                    new("10.30.37.198",new List<int>(){101,114,118,122,138,363,141,158,161})
+                };
+
+            foreach (var item in mLTuples83)
+            {
+                var db83 = 0;
+
+                foreach (var device in item.Item2.Select(item1 => Device.All.FirstOrDefault(v => v.Code == item1.ToString())))
+                {
+                    device?.AddProtocol<IBCR83>(db83, 83, item.Item1);
+
+                    db83 += 604;
+                }
+            }
+
+            #endregion 满轮扫码器
+
+            #region 满轮线告诉分拣预分配
+
+            //Item2表示线体号集合,Item1表示IP
+            var mLTuples525 = new List<Tuple<string, List<int>>>()
+                {
+                    new("10.30.37.166",new List<int>(){18,38,58}),
+                    new("10.30.37.198",new List<int>(){118,138,158}),
+                };
+
+            foreach (var item in mLTuples525)
+            {
+                var db525 = 0;
+
+                foreach (var device in item.Item2.Select(item1 => Device.All.FirstOrDefault(v => v.Code == item1.ToString())))
+                {
+                    device?.AddProtocol<IStation525>(db525, 525, item.Item1);
+                    db525 += 3266;
+                }
+            }
+
+            #endregion 满轮线告诉分拣预分配
+
+            #region 外检信息
+
+            //Item2表示线体号集合,Item1表示IP
+            var mLTuples91 = new List<Tuple<string, List<int>>>()
+                {
+                    new("10.30.37.166",new List<int>(){418,818,1218}),
+                    new("10.30.37.198",new List<int>(){618,1018,1418})
+                };
+
+            foreach (var item in mLTuples91)
+            {
+                var db91 = 0;
+
+                foreach (var device in item.Item2.Select(item2 => Device.All.FirstOrDefault(v => v.Code == item2.ToString())))
+                {
+                    device?.AddProtocol<IStation91>(db91, 91, item.Item1);
+                    db91 += 14;
+                }
+            }
+
+            #endregion 外检信息
+
+            #endregion 满轮输送线
+
+            List<RouteInfo> routeInfos1 = new List<RouteInfo>();
+
+            routeInfos1.AddRange(new List<RouteInfo>()
+            {
+                #region 主线
+
+                //北侧
+                new RouteInfo("3", new string[] { "14" }),
+                new RouteInfo("14", new string[] { "18" }),
+                new RouteInfo("18", new string[] { "22" }),
+                new RouteInfo("22", new string[] { "38" }),
+                new RouteInfo("38", new string[] { "41" }),
+                new RouteInfo("41", new string[] { "58" }),
+                new RouteInfo("58", new string[] { "61" }),
+                //南侧
+                new RouteInfo("101", new string[] { "114" }),
+                new RouteInfo("114", new string[] { "118" }),
+                new RouteInfo("118", new string[] { "122" }),
+                new RouteInfo("122", new string[] { "138" }),
+                new RouteInfo("138", new string[] { "141" }),
+                new RouteInfo("141", new string[] { "158" }),
+                new RouteInfo("158", new string[] { "161" }),
+
+                #endregion 主线
+
+                #region 主线分流点--环形库分流点
+
+                new RouteInfo("22", new string[] { "418" }), //分拣库一北
+                new RouteInfo("122", new string[] { "618" }), //分拣库一南
+                new RouteInfo("41", new string[] { "818" }), //分拣库二北
+                new RouteInfo("141", new string[] { "1018" }), //分拣库二南
+                new RouteInfo("61", new string[] { "1218" }), //分拣库三北
+                new RouteInfo("161", new string[] { "1418" }), //分拣库三南
+
+                #endregion 主线分流点--环形库分流点
+            });
+
+            foreach (var routeInfo in routeInfos1)
+            {
+                if (routeInfo != null)
+                {
+                    var device = Device.All.FirstOrDefault(x => x.Code == routeInfo.DeviceCode);
+                    device.AddTarget(routeInfo.NextList);
+
+                    Parallel.ForEach(routeInfo.NextList, next =>
+                    {
+                        var dev = Device.All.FirstOrDefault(x => x.Code == next);
+                        dev.Parent = device;
+                    });
+                }
+            }
+
             if (WareHouses.Contains("FJ1"))
             {
                 #region 初始化RGV相关信息
@@ -122,151 +319,6 @@ namespace WCS.WorkEngineering
 
                 #endregion 托盘线输送线
 
-                #region 满轮输送线
-
-                #region DB523,所有线体都会有DB523
-
-                var mLtuples523 = new List<Tuple<string, List<Tuple<int, int>>>>()
-            {
-                new("10.30.37.166",new List<Tuple<int, int>>() //北侧满轮主线
-                {
-                    new(1, 100),
-                    new(9001, 9010),//暂用,无意义
-                    new(401, 599),
-                    new(801,999),
-                    new(1201,1399),
-                }),
-                new("10.30.37.198",new List<Tuple<int, int>>() //南侧满轮主线
-                {
-                    new(101, 210),
-                    new(601, 799),
-                    new(1001, 1199),
-                    new(1401,1599),
-                    new(341,379),
-                })
-            };
-
-                foreach (var item in mLtuples523)
-                {
-                    var db523 = 0;
-                    var db524 = 0;
-                    foreach (var item1 in item.Item2)
-                    {
-                        for (var i = item1.Item1; i <= item1.Item2; i++)
-                        {
-                            var conv = new Device(i.ToString());
-                            conv.AddFlag(DeviceFlags.输送机);
-                            conv.AddProtocol<IStation523>(db523, 523, item.Item1);
-                            conv.AddProtocol<IStation524>(db524, 524, item.Item1);
-
-                            db523 += 12;
-                            db524 += 16;
-                        }
-                    }
-                }
-
-                #endregion DB523,所有线体都会有DB523
-
-                #region 520、521 交互线体会有520、521
-
-                //Item2表示线体号集合,Item1表示IP
-                var mLTuples520 = new List<Tuple<string, List<int>>>()
-            {
-                //北侧
-                new("10.30.37.166",new List<int>() {1,22,41,61,418,426,435,444,455,466,480,494,508,522,536,550,564,578,591,818,826,835,844,855,866,880,894,908,922,936,950,964,978,991,1218,1226,1235,1244,1255,1266,1280,1294,1308,1322,1336,1350,1364,1378,1391}),
-                //南侧
-                new("10.30.37.198",new List<int>(){101,122,141,161,618,626,635,644,655,666,680,694,708,722,736,750,764,778,791,1018,1026,1035,1044,1055,1066,1080,1094,1108,1122,1136,1150,1164,1178,1191,1418,1426,1435,1444,1455,1466,1480,1494,1508,1522,1536,1550,1564,1578,1591})
-            };
-
-                foreach (var item in mLTuples520)
-                {
-                    var db520 = 0;
-                    var db521 = 0;
-
-                    foreach (var device in item.Item2.Select(item1 => Device.All.FirstOrDefault(v => v.Code == item1.ToString())))
-                    {
-                        if (device != null)
-                        {
-                            device.AddProtocol<IStation520>(db520, 520, item.Item1);
-                            device.AddProtocol<IStation521>(db521, 521, item.Item1);
-                        }
-
-                        db520 += 14;
-                        db521 += 16;
-                    }
-                }
-
-                #endregion 520、521 交互线体会有520、521
-
-                #region 满轮扫码器
-
-                //Item2表示线体号集合,Item1表示IP
-                var mLTuples83 = new List<Tuple<string, List<int>>>()
-            {
-                new("10.30.37.166",new List<int>(){3,14,18,22,38,323,41,58,61}) ,
-                new("10.30.37.198",new List<int>(){101,114,118,122,138,363,141,158,161})
-            };
-
-                foreach (var item in mLTuples83)
-                {
-                    var db83 = 0;
-
-                    foreach (var device in item.Item2.Select(item1 => Device.All.FirstOrDefault(v => v.Code == item1.ToString())))
-                    {
-                        device?.AddProtocol<IBCR83>(db83, 83, item.Item1);
-
-                        db83 += 604;
-                    }
-                }
-
-                #endregion 满轮扫码器
-
-                #region 满轮线告诉分拣预分配
-
-                //Item2表示线体号集合,Item1表示IP
-                var mLTuples525 = new List<Tuple<string, List<int>>>()
-            {
-                new("10.30.37.166",new List<int>(){18,38,58}),
-                new("10.30.37.198",new List<int>(){118,138,158}),
-            };
-
-                foreach (var item in mLTuples525)
-                {
-                    var db525 = 0;
-
-                    foreach (var device in item.Item2.Select(item1 => Device.All.FirstOrDefault(v => v.Code == item1.ToString())))
-                    {
-                        device?.AddProtocol<IStation525>(db525, 525, item.Item1);
-                        db525 += 3266;
-                    }
-                }
-
-                #endregion 满轮线告诉分拣预分配
-
-                #region 外检信息
-
-                //Item2表示线体号集合,Item1表示IP
-                var mLTuples91 = new List<Tuple<string, List<int>>>()
-            {
-                new("10.30.37.166",new List<int>(){418,818,1218}),
-                new("10.30.37.198",new List<int>(){618,1018,1418})
-            };
-
-                foreach (var item in mLTuples91)
-                {
-                    var db91 = 0;
-
-                    foreach (var device in item.Item2.Select(item2 => Device.All.FirstOrDefault(v => v.Code == item2.ToString())))
-                    {
-                        device?.AddProtocol<IStation91>(db91, 91, item.Item1);
-                        db91 += 14;
-                    }
-                }
-
-                #endregion 外检信息
-
-                #endregion 满轮输送线
-
                 #endregion 基本信息
 
                 #region 托盘线扫码器
@@ -500,38 +552,6 @@ namespace WCS.WorkEngineering
 
                 #endregion 一楼叠盘机(堆垛机入口)--巷道
 
-                #region 主线
-
-                //北侧
-                new RouteInfo("3", new string[] { "14" }),
-                new RouteInfo("14", new string[] { "18" }),
-                new RouteInfo("18", new string[] { "22" }),
-                new RouteInfo("22", new string[] { "38" }),
-                new RouteInfo("38", new string[] { "41" }),
-                new RouteInfo("41", new string[] { "58" }),
-                new RouteInfo("58", new string[] { "61" }),
-                //南侧
-                new RouteInfo("101", new string[] { "114" }),
-                new RouteInfo("114", new string[] { "118" }),
-                new RouteInfo("118", new string[] { "122" }),
-                new RouteInfo("122", new string[] { "138" }),
-                new RouteInfo("138", new string[] { "141" }),
-                new RouteInfo("141", new string[] { "158" }),
-                new RouteInfo("158", new string[] { "161" }),
-
-                #endregion 主线
-
-                #region 主线分流点--环形库分流点
-
-                new RouteInfo("22", new string[] { "418" }), //分拣库一北
-                new RouteInfo("122", new string[] { "618" }), //分拣库一南
-                new RouteInfo("41", new string[] { "818" }), //分拣库二北
-                new RouteInfo("141", new string[] { "1018" }), //分拣库二南
-                new RouteInfo("61", new string[] { "1218" }), //分拣库三北
-                new RouteInfo("161", new string[] { "1418" }), //分拣库三南
-
-                #endregion 主线分流点--环形库分流点
-
                 #region 环形库分流点--环形库取货点
 
                 new RouteInfo("418", new string[] { "424","433","442" }),
@@ -777,16 +797,16 @@ namespace WCS.WorkEngineering
                 #region 托盘线输送线
 
                 var tuples = new List<Tuple<string, List<Tuple<int, int>>>>
-            {
-                //分拣库二
-                new("10.30.37.97",new List<Tuple<int, int>>()
-                {
-                    new(1621, 1640),
-                    new(2901, 2940),
-                    new(3101, 3140),
-                    new(1691, 1720),
-                }),
-            };
+                {
+                    //分拣库二
+                    new("10.30.37.97",new List<Tuple<int, int>>()
+                    {
+                        new(1621, 1640),
+                        new(2901, 2940),
+                        new(3101, 3140),
+                        new(1691, 1720),
+                    }),
+                };
 
                 foreach (var item in tuples)
                 {
@@ -813,161 +833,16 @@ namespace WCS.WorkEngineering
 
                 #endregion 托盘线输送线
 
-                #region 满轮输送线
-
-                #region DB523,所有线体都会有DB523
-
-                var mLtuples523 = new List<Tuple<string, List<Tuple<int, int>>>>()
-            {
-                new("10.30.37.166",new List<Tuple<int, int>>() //北侧满轮主线
-                {
-                    new(1, 100),
-                    new(9001, 9010),//暂用,无意义
-                    new(401, 599),
-                    new(801,999),
-                    new(1201,1399),
-                }),
-                new("10.30.37.198",new List<Tuple<int, int>>() //南侧满轮主线
-                {
-                    new(101, 210),
-                    new(601, 799),
-                    new(1001, 1199),
-                    new(1401,1599),
-                    new(341,379),
-                })
-            };
-
-                foreach (var item in mLtuples523)
-                {
-                    var db523 = 0;
-                    var db524 = 0;
-                    foreach (var item1 in item.Item2)
-                    {
-                        for (var i = item1.Item1; i <= item1.Item2; i++)
-                        {
-                            var conv = new Device(i.ToString());
-                            conv.AddFlag(DeviceFlags.输送机);
-                            conv.AddProtocol<IStation523>(db523, 523, item.Item1);
-                            conv.AddProtocol<IStation524>(db524, 524, item.Item1);
-
-                            db523 += 12;
-                            db524 += 16;
-                        }
-                    }
-                }
-
-                #endregion DB523,所有线体都会有DB523
-
-                #region 520、521 交互线体会有520、521
-
-                //Item2表示线体号集合,Item1表示IP
-                var mLTuples520 = new List<Tuple<string, List<int>>>()
-            {
-                //北侧
-                new("10.30.37.166",new List<int>() {1,22,41,61,418,426,435,444,455,466,480,494,508,522,536,550,564,578,591,818,826,835,844,855,866,880,894,908,922,936,950,964,978,991,1218,1226,1235,1244,1255,1266,1280,1294,1308,1322,1336,1350,1364,1378,1391}),
-                //南侧
-                new("10.30.37.198",new List<int>(){101,122,141,161,618,626,635,644,655,666,680,694,708,722,736,750,764,778,791,1018,1026,1035,1044,1055,1066,1080,1094,1108,1122,1136,1150,1164,1178,1191,1418,1426,1435,1444,1455,1466,1480,1494,1508,1522,1536,1550,1564,1578,1591})
-            };
-
-                foreach (var item in mLTuples520)
-                {
-                    var db520 = 0;
-                    var db521 = 0;
-
-                    foreach (var device in item.Item2.Select(item1 => Device.All.FirstOrDefault(v => v.Code == item1.ToString())))
-                    {
-                        if (device != null)
-                        {
-                            device.AddProtocol<IStation520>(db520, 520, item.Item1);
-                            device.AddProtocol<IStation521>(db521, 521, item.Item1);
-                        }
-
-                        db520 += 14;
-                        db521 += 16;
-                    }
-                }
-
-                #endregion 520、521 交互线体会有520、521
-
-                #region 满轮扫码器
-
-                //Item2表示线体号集合,Item1表示IP
-                var mLTuples83 = new List<Tuple<string, List<int>>>()
-            {
-                new("10.30.37.166",new List<int>(){3,14,18,22,38,323,41,58,61}) ,
-                new("10.30.37.198",new List<int>(){101,114,118,122,138,363,141,158,161})
-            };
-
-                foreach (var item in mLTuples83)
-                {
-                    var db83 = 0;
-
-                    foreach (var device in item.Item2.Select(item1 => Device.All.FirstOrDefault(v => v.Code == item1.ToString())))
-                    {
-                        device?.AddProtocol<IBCR83>(db83, 83, item.Item1);
-
-                        db83 += 604;
-                    }
-                }
-
-                #endregion 满轮扫码器
-
-                #region 满轮线告诉分拣预分配
-
-                //Item2表示线体号集合,Item1表示IP
-                var mLTuples525 = new List<Tuple<string, List<int>>>()
-            {
-                new("10.30.37.166",new List<int>(){18,38,58}),
-                new("10.30.37.198",new List<int>(){118,138,158}),
-            };
-
-                foreach (var item in mLTuples525)
-                {
-                    var db525 = 0;
-
-                    foreach (var device in item.Item2.Select(item1 => Device.All.FirstOrDefault(v => v.Code == item1.ToString())))
-                    {
-                        device?.AddProtocol<IStation525>(db525, 525, item.Item1);
-                        db525 += 3266;
-                    }
-                }
-
-                #endregion 满轮线告诉分拣预分配
-
-                #region 外检信息
-
-                //Item2表示线体号集合,Item1表示IP
-                var mLTuples91 = new List<Tuple<string, List<int>>>()
-            {
-                new("10.30.37.166",new List<int>(){418,818,1218}),
-                new("10.30.37.198",new List<int>(){618,1018,1418})
-            };
-
-                foreach (var item in mLTuples91)
-                {
-                    var db91 = 0;
-
-                    foreach (var device in item.Item2.Select(item2 => Device.All.FirstOrDefault(v => v.Code == item2.ToString())))
-                    {
-                        device?.AddProtocol<IStation91>(db91, 91, item.Item1);
-                        db91 += 14;
-                    }
-                }
-
-                #endregion 外检信息
-
-                #endregion 满轮输送线
-
                 #endregion 基本信息
 
                 #region 托盘线扫码器
 
                 var bcrInfo = new List<BcrInfo>
-            {
-                new(new [] { "2932", "3132" }, "10.30.37.97"),
-                new(new [] {"RGV3"},"10.30.37.123"),
-                new(new [] {"RGV4"},"10.30.37.128"),
-            };
+                {
+                    new(new [] { "2932", "3132" }, "10.30.37.97"),
+                    new(new [] {"RGV3"},"10.30.37.123"),
+                    new(new [] {"RGV4"},"10.30.37.128"),
+                };
 
                 foreach (var item in bcrInfo)
                 {
@@ -985,9 +860,9 @@ namespace WCS.WorkEngineering
                 #region 外检信息
 
                 List<ShapeInfo> shapeInfo = new List<ShapeInfo>
-            {
-                new ShapeInfo(new int[] { 2932,3132 }, "10.30.37.97"),
-            };
+                {
+                    new ShapeInfo(new int[] { 2932,3132 }, "10.30.37.97"),
+                };
 
                 foreach (var item in shapeInfo)
                 {
@@ -1007,9 +882,9 @@ namespace WCS.WorkEngineering
                 #region 初始化桁架相关信息
 
                 List<TrussSegmentInfo> TrussInfo = new List<TrussSegmentInfo>
-            {
-                new TrussSegmentInfo( 2, "10.30.37.217"),
-            };
+                {
+                    new TrussSegmentInfo( 2, "10.30.37.217"),
+                };
 
                 foreach (var item in TrussInfo)
                 {
@@ -1021,10 +896,10 @@ namespace WCS.WorkEngineering
                 }
 
                 var tuples1 = new List<Tuple<string, List<int>>>
-            {
-                //桁架
-                new("10.30.37.217",new  List<int>(){1715,1716,1717,1718,1719,1720,1705,1704,1703,1702,1701,1700,1707,1708,1709,1710,1695,1694,1693,1692,1636,1626}), //分拣库二
-            };
+                {
+                    //桁架
+                    new("10.30.37.217",new  List<int>(){1715,1716,1717,1718,1719,1720,1705,1704,1703,1702,1701,1700,1707,1708,1709,1710,1695,1694,1693,1692,1636,1626}), //分拣库二
+                };
 
                 foreach (var item in tuples1)
                 {
@@ -1045,12 +920,12 @@ namespace WCS.WorkEngineering
                 }
 
                 var tuples21 = new List<Tuple<string, List<int>>>
-            {
-                //机械臂
+                {
+                    //机械臂
 
-                new("10.30.37.234",new  List<int>(){ 1696, 1691}), //库二北
-                new("10.30.37.236",new  List<int>(){ 1711, 1706}), //库二南
-            };
+                    new("10.30.37.234",new  List<int>(){ 1696, 1691}), //库二北
+                    new("10.30.37.236",new  List<int>(){ 1711, 1706}), //库二南
+                };
 
                 foreach (var item in tuples21)
                 {
@@ -1070,10 +945,10 @@ namespace WCS.WorkEngineering
                 #region 初始化机械臂相关信息
 
                 List<TrussSegmentInfo> TrussInfo1 = new List<TrussSegmentInfo>
-            {
-                new( 3, "10.30.37.234"),
-                new( 4, "10.30.37.236"),
-            };
+                {
+                    new( 3, "10.30.37.234"),
+                    new( 4, "10.30.37.236"),
+                };
 
                 foreach (var item in TrussInfo1)
                 {
@@ -1090,11 +965,11 @@ namespace WCS.WorkEngineering
 
                 int ip = 57;
 
-                for (int i = 0; i <= 1; i++)
+                for (int i = 2; i <= 3; i++)
                 {
                     var srm = new Device($"SRM{i + 1}");
                     srm.AddFlag(DeviceFlags.堆垛机);
-                    ip = i == 0 ? ip : ip + 8;
+                    ip = i == 2 ? ip : ip + 8;
                     //三台堆垛机IP主机位分别是 41、49、57、65、73、81
                     srm.AddProtocol<ISRM520>(0, 520, $"10.30.37.{ip}");
                     srm.AddProtocol<ISRM521>(0, 521, $"10.30.37.{ip}");
@@ -1196,28 +1071,6 @@ namespace WCS.WorkEngineering
 
                 #endregion 一楼叠盘机(堆垛机入口)--巷道
 
-                #region 主线
-
-                //北侧
-                new RouteInfo("38", new string[] { "41" }),
-                new RouteInfo("41", new string[] { "58" }),
-                new RouteInfo("58", new string[] { "61" }),
-                //南侧
-                new RouteInfo("138", new string[] { "141" }),
-                new RouteInfo("141", new string[] { "158" }),
-                new RouteInfo("158", new string[] { "161" }),
-
-                #endregion 主线
-
-                #region 主线分流点--环形库分流点
-
-                new RouteInfo("41", new string[] { "818" }), //分拣库二北
-                new RouteInfo("141", new string[] { "1018" }), //分拣库二南
-                new RouteInfo("61", new string[] { "1218" }), //分拣库三北
-                new RouteInfo("161", new string[] { "1418" }), //分拣库三南
-
-                #endregion 主线分流点--环形库分流点
-
                 #region 环形库分流点--环形库取货点
 
                 new RouteInfo("818", new string[] { "824","833","842" }),
@@ -1496,151 +1349,6 @@ namespace WCS.WorkEngineering
 
                 #endregion 托盘线输送线
 
-                #region 满轮输送线
-
-                #region DB523,所有线体都会有DB523
-
-                var mLtuples523 = new List<Tuple<string, List<Tuple<int, int>>>>()
-            {
-                new("10.30.37.166",new List<Tuple<int, int>>() //北侧满轮主线
-                {
-                    new(1, 100),
-                    new(9001, 9010),//暂用,无意义
-                    new(401, 599),
-                    new(801,999),
-                    new(1201,1399),
-                }),
-                new("10.30.37.198",new List<Tuple<int, int>>() //南侧满轮主线
-                {
-                    new(101, 210),
-                    new(601, 799),
-                    new(1001, 1199),
-                    new(1401,1599),
-                    new(341,379),
-                })
-            };
-
-                foreach (var item in mLtuples523)
-                {
-                    var db523 = 0;
-                    var db524 = 0;
-                    foreach (var item1 in item.Item2)
-                    {
-                        for (var i = item1.Item1; i <= item1.Item2; i++)
-                        {
-                            var conv = new Device(i.ToString());
-                            conv.AddFlag(DeviceFlags.输送机);
-                            conv.AddProtocol<IStation523>(db523, 523, item.Item1);
-                            conv.AddProtocol<IStation524>(db524, 524, item.Item1);
-
-                            db523 += 12;
-                            db524 += 16;
-                        }
-                    }
-                }
-
-                #endregion DB523,所有线体都会有DB523
-
-                #region 520、521 交互线体会有520、521
-
-                //Item2表示线体号集合,Item1表示IP
-                var mLTuples520 = new List<Tuple<string, List<int>>>()
-            {
-                //北侧
-                new("10.30.37.166",new List<int>() {1,22,41,61,418,426,435,444,455,466,480,494,508,522,536,550,564,578,591,818,826,835,844,855,866,880,894,908,922,936,950,964,978,991,1218,1226,1235,1244,1255,1266,1280,1294,1308,1322,1336,1350,1364,1378,1391}),
-                //南侧
-                new("10.30.37.198",new List<int>(){101,122,141,161,618,626,635,644,655,666,680,694,708,722,736,750,764,778,791,1018,1026,1035,1044,1055,1066,1080,1094,1108,1122,1136,1150,1164,1178,1191,1418,1426,1435,1444,1455,1466,1480,1494,1508,1522,1536,1550,1564,1578,1591})
-            };
-
-                foreach (var item in mLTuples520)
-                {
-                    var db520 = 0;
-                    var db521 = 0;
-
-                    foreach (var device in item.Item2.Select(item1 => Device.All.FirstOrDefault(v => v.Code == item1.ToString())))
-                    {
-                        if (device != null)
-                        {
-                            device.AddProtocol<IStation520>(db520, 520, item.Item1);
-                            device.AddProtocol<IStation521>(db521, 521, item.Item1);
-                        }
-
-                        db520 += 14;
-                        db521 += 16;
-                    }
-                }
-
-                #endregion 520、521 交互线体会有520、521
-
-                #region 满轮扫码器
-
-                //Item2表示线体号集合,Item1表示IP
-                var mLTuples83 = new List<Tuple<string, List<int>>>()
-            {
-                new("10.30.37.166",new List<int>(){3,14,18,22,38,323,41,58,61}) ,
-                new("10.30.37.198",new List<int>(){101,114,118,122,138,363,141,158,161})
-            };
-
-                foreach (var item in mLTuples83)
-                {
-                    var db83 = 0;
-
-                    foreach (var device in item.Item2.Select(item1 => Device.All.FirstOrDefault(v => v.Code == item1.ToString())))
-                    {
-                        device?.AddProtocol<IBCR83>(db83, 83, item.Item1);
-
-                        db83 += 604;
-                    }
-                }
-
-                #endregion 满轮扫码器
-
-                #region 满轮线告诉分拣预分配
-
-                //Item2表示线体号集合,Item1表示IP
-                var mLTuples525 = new List<Tuple<string, List<int>>>()
-            {
-                new("10.30.37.166",new List<int>(){18,38,58}),
-                new("10.30.37.198",new List<int>(){118,138,158}),
-            };
-
-                foreach (var item in mLTuples525)
-                {
-                    var db525 = 0;
-
-                    foreach (var device in item.Item2.Select(item1 => Device.All.FirstOrDefault(v => v.Code == item1.ToString())))
-                    {
-                        device?.AddProtocol<IStation525>(db525, 525, item.Item1);
-                        db525 += 3266;
-                    }
-                }
-
-                #endregion 满轮线告诉分拣预分配
-
-                #region 外检信息
-
-                //Item2表示线体号集合,Item1表示IP
-                var mLTuples91 = new List<Tuple<string, List<int>>>()
-            {
-                new("10.30.37.166",new List<int>(){418,818,1218}),
-                new("10.30.37.198",new List<int>(){618,1018,1418})
-            };
-
-                foreach (var item in mLTuples91)
-                {
-                    var db91 = 0;
-
-                    foreach (var device in item.Item2.Select(item2 => Device.All.FirstOrDefault(v => v.Code == item2.ToString())))
-                    {
-                        device?.AddProtocol<IStation91>(db91, 91, item.Item1);
-                        db91 += 14;
-                    }
-                }
-
-                #endregion 外检信息
-
-                #endregion 满轮输送线
-
                 #endregion 基本信息
 
                 #region 托盘线扫码器
@@ -1770,14 +1478,14 @@ namespace WCS.WorkEngineering
 
                 #region 初始化堆垛机相关信息
 
-                int ip = 7;
+                int ip = 73;
 
-                for (int i = 73; i <= 1; i++)
+                for (int i = 4; i <= 5; i++)
                 {
                     var srm = new Device($"SRM{i + 1}");
                     srm.AddFlag(DeviceFlags.堆垛机);
-                    ip = i == 0 ? ip : ip + 8;
-                    //三台堆垛机IP主机位分别是 41、49、57、65、73、8
+                    ip = i == 4 ? ip : ip + 8;
+                    //三台堆垛机IP主机位分别是 41、49、57、65、73、81
                     srm.AddProtocol<ISRM520>(0, 520, $"10.30.37.{ip}");
                     srm.AddProtocol<ISRM521>(0, 521, $"10.30.37.{ip}");
                     srm.AddProtocol<ISRM523>(0, 537, $"10.30.37.{ip}");
@@ -1885,24 +1593,6 @@ namespace WCS.WorkEngineering
 
                 #endregion 环形库分流点--环形库取货点
 
-                #region 主线
-
-                //北侧
-
-                new RouteInfo("58", new string[] { "61" }),
-                //南侧
-
-                new RouteInfo("158", new string[] { "161" }),
-
-                #endregion 主线
-
-                #region 主线分流点--环形库分流点
-
-                new RouteInfo("61", new string[] { "1218" }), //分拣库三北
-                new RouteInfo("161", new string[] { "1418" }), //分拣库三南
-
-                #endregion 主线分流点--环形库分流点
-
                 #region 环形库分流点--桁架分流点
 
                 new RouteInfo("1218", new string[] { "1255" }), //分拣库三北
@@ -2135,6 +1825,17 @@ namespace WCS.WorkEngineering
                      { DeviceFlags.Robot, new List<string>(){ "Robot1", "Robot2" } },
                      {DeviceFlags.二次码垛RGV取货口, new List<string>(){ "1606", "1616"}}
                  };
+                Parallel.ForEach(devices, device =>
+                {
+                    Parallel.ForEach(device.Value, value =>
+                    {
+                        var dev = Device.All.FirstOrDefault(v => v.Code == value);
+                        if (dev != null)
+                        {
+                            dev.AddFlag(device.Key);
+                        }
+                    });
+                });
             }
             if (WareHouses.Contains("FJ2"))
             {
@@ -2153,8 +1854,19 @@ namespace WCS.WorkEngineering
                      { DeviceFlags.环形库码垛工位, new List<string>(){"1691", "1696", "1706", "1711" } },
                      { DeviceFlags.AGV取货站台口, new List<string>(){"2934","2933","3133", "3134"} },
                      { DeviceFlags.Robot, new List<string>(){  "Robot3", "Robot4"  } },
-                     {DeviceFlags.二次码垛RGV取货口, new List<string>(){  "1626","1636"}}
+                     { DeviceFlags.二次码垛RGV取货口, new List<string>(){  "1626","1636"}}
                  };
+                Parallel.ForEach(devices, device =>
+                {
+                    Parallel.ForEach(device.Value, value =>
+                    {
+                        var dev = Device.All.FirstOrDefault(v => v.Code == value);
+                        if (dev != null)
+                        {
+                            dev.AddFlag(device.Key);
+                        }
+                    });
+                });
             }
             if (WareHouses.Contains("FJ3"))
             {
@@ -2175,19 +1887,18 @@ namespace WCS.WorkEngineering
                      { DeviceFlags.Robot, new List<string>(){  "Robot5", "Robot6" } },
                      {DeviceFlags.二次码垛RGV取货口, new List<string>(){ "1646","1656"}}
                  };
-            }
-
-            Parallel.ForEach(devices, device =>
-            {
-                Parallel.ForEach(device.Value, value =>
+                Parallel.ForEach(devices, device =>
                 {
-                    var dev = Device.All.FirstOrDefault(v => v.Code == value);
-                    if (dev != null)
+                    Parallel.ForEach(device.Value, value =>
                     {
-                        dev.AddFlag(device.Key);
-                    }
+                        var dev = Device.All.FirstOrDefault(v => v.Code == value);
+                        if (dev != null)
+                        {
+                            dev.AddFlag(device.Key);
+                        }
+                    });
                 });
-            });
+            }
 
             #endregion 标签配置
         }