Prechádzať zdrojové kódy

堆垛机相关优化

林豪 左 3 rokov pred
rodič
commit
fc2b5085a3

+ 5 - 0
Projects/永冠OPP/WCS.Entity.Protocol/WCS_TASK.cs

@@ -139,6 +139,11 @@ namespace WCS.Entity
         /// 产品长度
         /// </summary>
         public decimal Length { get; set; }
+
+        /// <summary>
+        /// 产品编码
+        /// </summary>
+        public string MaterialCode { get; set; }
     }
 
     public enum TaskType

+ 5 - 0
Projects/永冠OPP/WCS.Entity.Protocol/WCS_TASK_OLD.cs

@@ -139,5 +139,10 @@ namespace WCS.Entity.Protocol
         /// 产品长度
         /// </summary>
         public decimal Length { get; set; }
+
+        /// <summary>
+        /// 产品编码
+        /// </summary>
+        public string MaterialCode { get; set; }
     }
 }

+ 23 - 10
Projects/永冠OPP/WCS.Service/Extensions/TaskExtension.cs

@@ -38,15 +38,16 @@ namespace WCS.Service.Extensions
                 //无论这个AGV任务绑定的货物相隔多远都必须要一起出出去
                 return tasklist.OrderBy(v => v.Col).ToArray();
             }
-            return tasks.Select(v => v.Create<Task>())
-                        .OrderByDescending(v => v.Priority)
-                        .ThenBy(v => v.Line)
-                        .ThenBy(v => v.Layer)
-                        .ThenBy(v => v.Col)
-                        .Take(2)
-                        .DistinctBy(v => v.Col)
-                        .OrderBy(v => v.Col)
-                        .ToArray();
+            return tasklist.OrderByDescending(v => v.Priority)
+                           .GroupBy(v => v.MaterialCode).FirstOrDefault()
+                           .OrderByDescending(v => v.Priority)
+                           .ThenBy(v => v.Line)
+                           .ThenBy(v => v.Layer)
+                           .ThenBy(v => v.Col)
+                           .Take(2)
+                           .DistinctBy(v => v.Col)
+                           .OrderBy(v => v.Col)
+                           .ToArray();
         }
 
         /// <summary>
@@ -107,6 +108,17 @@ namespace WCS.Service.Extensions
             if (devs.Count != taskCount) throw new WarnException($"可执行数{devs.Count},任务组任务数{taskCount},数量不匹配,{task.ID}-{task.TaskGroupKey}");
             return taskList;
         }
+
+        public static List<WCS_TASK> GetSrmValidTaskList(this IGrouping<string, WCS_TASK>[] taksList, DB db, SRMDevice srm, int index = 0)
+        {
+            if (!taksList.Any() || index > (taksList.Length - 1)) throw new DoException("无可执行出库任务");
+            var outDepot = taksList[index];
+            if (db.Default.Set<WCS_TASK>().Any(v => v.TYPE == TaskType.出库 && v.STATUS == TaskStatus.新建 && v.ADDRTO == outDepot.Key && v.Priority > 0 && v.DEVICE != srm.Entity.CODE))
+            {
+                taksList.GetSrmValidTaskList(db, srm, index++);
+            }
+            return outDepot.ToList();
+        }
     }
 
     public enum SrmIndex
@@ -140,7 +152,8 @@ namespace WCS.Service.Extensions
             DEVICE = task.DEVICE;
             Priority = task.Priority;
             AgvTask = task.AgvTask;
-            CREATETIME = task.CREATETIME; ;
+            CREATETIME = task.CREATETIME;
+            MaterialCode = task.MaterialCode;
 
             ID = task.ID;
             Line = addrFrom[0].ToShort();

+ 7 - 1
Projects/永冠OPP/WCS.Service/Handlers/DataClearHandler.cs

@@ -38,7 +38,13 @@ namespace WCS.Service
                     DBHelper.DbLog.DB_CLEAN(sSql);
                 }
 
-                var copySql = "INSERT INTO WCS_TASK_OLD (ID,BARCODE,TYPE,STATUS,ADDRFROM,ADDRTO,ADDRNEXT,TUNNEL,FLOOR,DEVICE,SRMSTATION,CREATETIME,STARTTIME,ENDTIME,DOCID,PALLETTYPE,PRODLINE,FULLQTY,HEIGHT,WMSTASK,TaskGroupKey,UPLOADED,AgvTask,Priority,ManualRemarks,ENABLED,UPDATEUSER,UPDATETIME,Length) SELECT ID,BARCODE,TYPE,STATUS,ADDRFROM,ADDRTO,ADDRNEXT,TUNNEL,FLOOR,DEVICE,SRMSTATION,CREATETIME,STARTTIME,ENDTIME,DOCID,PALLETTYPE,PRODLINE,FULLQTY,HEIGHT,WMSTASK,TaskGroupKey,UPLOADED,AgvTask,Priority,ManualRemarks,ENABLED,UPDATEUSER,UPDATETIME,Length FROM WCS_TASK WHERE STATUS >=99 AND UPDATETIME < DATEADD(DAY, -3, GETDATE())";
+                var copySql = @"INSERT INTO WCS_TASK_OLD (ID,BARCODE,TYPE,STATUS,ADDRFROM,ADDRTO,ADDRNEXT,TUNNEL,FLOOR,
+                                DEVICE,SRMSTATION,CREATETIME,STARTTIME,ENDTIME,DOCID,PALLETTYPE,PRODLINE,FULLQTY,HEIGHT,
+                                WMSTASK,TaskGroupKey,UPLOADED,AgvTask,Priority,ManualRemarks,ENABLED,UPDATEUSER,UPDATETIME,
+                                Length,MaterialCode) SELECT
+                                ID,BARCODE,TYPE,STATUS,ADDRFROM,ADDRTO,ADDRNEXT,TUNNEL,FLOOR,DEVICE,SRMSTATION,CREATETIME,
+                                STARTTIME,ENDTIME,DOCID,PALLETTYPE,PRODLINE,FULLQTY,HEIGHT,WMSTASK,TaskGroupKey,UPLOADED,AgvTask,
+                                Priority,ManualRemarks,ENABLED,UPDATEUSER,UPDATETIME,Length,MaterialCode FROM WCS_TASK WHERE STATUS >=99 AND UPDATETIME < DATEADD(DAY, -3, GETDATE())";
                 db.Default.Database.ExecuteSqlRaw(copySql);
                 var clearSql = "DELETE FROM WCS_TASK WHERE STATUS >=99 AND UPDATETIME < DATEADD(DAY, -3, GETDATE())";
                 db.Default.Database.ExecuteSqlRaw(clearSql);

+ 2095 - 0
Projects/永冠OPP/WCS.Service/Migrations/20220522064753_新增货物类型.Designer.cs

@@ -0,0 +1,2095 @@
+// <auto-generated />
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using WCS.Service;
+
+#nullable disable
+
+namespace WCS.Service.Migrations
+{
+    [DbContext(typeof(WCSDB))]
+    [Migration("20220522064753_新增货物类型")]
+    partial class 新增货物类型
+    {
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder
+                .HasAnnotation("ProductVersion", "6.0.4")
+                .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1);
+
+            modelBuilder.Entity("WCS.Entity.Protocol.BCR.WCS_BCR80", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<string>("Content")
+                        .HasMaxLength(130)
+                        .HasColumnType("nvarchar(130)");
+
+                    b.Property<string>("DEVICECODE")
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime>("FRAME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<bool>("ISLAST")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.Property<int>("WCSVERSION")
+                        .HasColumnType("int");
+
+                    b.HasKey("ID");
+
+                    b.HasIndex("DEVICECODE");
+
+                    b.ToTable("WCS_BCR80");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.Station.WCS_Station520", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<short>("CmdType")
+                        .HasColumnType("smallint");
+
+                    b.Property<string>("DEVICECODE")
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime>("FRAME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<short>("GoodsSize")
+                        .HasColumnType("smallint");
+
+                    b.Property<int>("Goodscode")
+                        .HasColumnType("int");
+
+                    b.Property<short>("Goodsend")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("Goodsnum")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("Goodsstart")
+                        .HasColumnType("smallint");
+
+                    b.Property<bool>("ISLAST")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Istation521Status")
+                        .HasColumnType("int");
+
+                    b.Property<short>("Request")
+                        .HasColumnType("smallint");
+
+                    b.Property<int>("Tasknum")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.Property<short>("VoucherNo")
+                        .HasColumnType("smallint");
+
+                    b.Property<int>("WCSVERSION")
+                        .HasColumnType("int");
+
+                    b.HasKey("ID");
+
+                    b.HasIndex("DEVICECODE");
+
+                    b.ToTable("WCS_STATION520");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.Station.WCS_Station521", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<short>("CmdType")
+                        .HasColumnType("smallint");
+
+                    b.Property<string>("DEVICECODE")
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime>("FRAME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<short>("GoodsSize")
+                        .HasColumnType("smallint");
+
+                    b.Property<int>("Goodscode")
+                        .HasColumnType("int");
+
+                    b.Property<short>("Goodsend")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("Goodsnum")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("Goodsstart")
+                        .HasColumnType("smallint");
+
+                    b.Property<bool>("ISLAST")
+                        .HasColumnType("bit");
+
+                    b.Property<short>("Request")
+                        .HasColumnType("smallint");
+
+                    b.Property<int>("Status")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Tasknum")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.Property<short>("VoucherNo")
+                        .HasColumnType("smallint");
+
+                    b.Property<int>("WCSVERSION")
+                        .HasColumnType("int");
+
+                    b.HasKey("ID");
+
+                    b.HasIndex("DEVICECODE");
+
+                    b.ToTable("WCS_STATION521");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.Station.WCS_Station523", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<int>("Alarm")
+                        .HasColumnType("int");
+
+                    b.Property<string>("DEVICECODE")
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime>("FRAME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<bool>("ISLAST")
+                        .HasColumnType("bit");
+
+                    b.Property<short>("RES")
+                        .HasColumnType("smallint");
+
+                    b.Property<float>("RunTime")
+                        .HasColumnType("real");
+
+                    b.Property<int>("Status")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.Property<int>("WCSVERSION")
+                        .HasColumnType("int");
+
+                    b.HasKey("ID");
+
+                    b.HasIndex("DEVICECODE");
+
+                    b.ToTable("WCS_STATION523");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.WCS_AGVTask", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<string>("AGVID")
+                        .HasMaxLength(20)
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<int>("AGVStatus")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("AGVUpdateTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<DateTime>("CreateTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<int>("Goodsnum")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Position")
+                        .IsRequired()
+                        .HasMaxLength(20)
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<string>("Station")
+                        .HasMaxLength(20)
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<int>("Status")
+                        .HasColumnType("int");
+
+                    b.Property<int>("TaskType")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("UpdateTime")
+                        .HasColumnType("datetime2");
+
+                    b.Property<int>("Workshop")
+                        .HasColumnType("int");
+
+                    b.HasKey("ID");
+
+                    b.ToTable("WCS_AGVTask");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.WCS_MAPPINGENTRY", b =>
+                {
+                    b.Property<int>("MEP_ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("MEP_ID"), 1L, 1);
+
+                    b.Property<bool>("MEP_ISSTOP")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("MEP_MAPPINGCHNAME")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<int>("MEP_MAPPINGNO")
+                        .HasColumnType("int");
+
+                    b.Property<string>("MEP_MAPPINGTYPE")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.HasKey("MEP_ID");
+
+                    b.ToTable("WCS_MAPPINGENTRY");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.WCS_RGV520", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<string>("DEVICECODE")
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<short>("DestPosition_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("DestPosition_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime>("FRAME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<bool>("ISLAST")
+                        .HasColumnType("bit");
+
+                    b.Property<short>("Priority_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("Priority_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("RES1_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("RES1_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("RES2_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("RES2_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("StartPosition_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("StartPosition_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<int>("TaskID_1")
+                        .HasColumnType("int");
+
+                    b.Property<int>("TaskID_2")
+                        .HasColumnType("int");
+
+                    b.Property<short>("TaskType_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("TaskType_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<int>("Trigger_1")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Trigger_2")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.Property<int>("WCSVERSION")
+                        .HasColumnType("int");
+
+                    b.HasKey("ID");
+
+                    b.HasIndex("DEVICECODE");
+
+                    b.ToTable("WCS_RGV520");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.WCS_RGV521", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<string>("DEVICECODE")
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<short>("DestPosition_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("DestPosition_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime>("FRAME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<bool>("ISLAST")
+                        .HasColumnType("bit");
+
+                    b.Property<float>("Mileage")
+                        .HasColumnType("real");
+
+                    b.Property<short>("PRIORITY_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("PRIORITY_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<float>("Position")
+                        .HasColumnType("real");
+
+                    b.Property<short>("RES1_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("RES1_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("RES2_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("RES2_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("RES6")
+                        .HasColumnType("smallint");
+
+                    b.Property<float>("Runtime")
+                        .HasColumnType("real");
+
+                    b.Property<short>("StartPosition_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("StartPosition_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<int>("Status_1")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Status_2")
+                        .HasColumnType("int");
+
+                    b.Property<short>("SystemStatus")
+                        .HasColumnType("smallint");
+
+                    b.Property<int>("TaskID_1")
+                        .HasColumnType("int");
+
+                    b.Property<int>("TaskID_2")
+                        .HasColumnType("int");
+
+                    b.Property<short>("TaskType_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("TaskType_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<int>("Trigger_1")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Trigger_2")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.Property<int>("WCSVERSION")
+                        .HasColumnType("int");
+
+                    b.Property<short>("WorkMode")
+                        .HasColumnType("smallint");
+
+                    b.HasKey("ID");
+
+                    b.HasIndex("DEVICECODE");
+
+                    b.ToTable("WCS_RGV521");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.WCS_RGV523", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<string>("DEVICECODE")
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime>("FRAME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<int>("Fault")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Fault1")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Fault2")
+                        .HasColumnType("int");
+
+                    b.Property<bool>("ISLAST")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("Status")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Status1")
+                        .HasColumnType("int");
+
+                    b.Property<int>("Status2")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.Property<int>("WCSVERSION")
+                        .HasColumnType("int");
+
+                    b.HasKey("ID");
+
+                    b.HasIndex("DEVICECODE");
+
+                    b.ToTable("WCS_RGV523");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.WCS_SRM520", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<string>("DEVICECODE")
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<short>("ECol_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("ECol_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("EDepth_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("EDepth_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("ELayer_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("ELayer_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("ELine_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("ELine_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime>("FRAME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<short>("FinishedACK_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("FinishedACK_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("GoodsType_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("GoodsType_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("Handshake_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("Handshake_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<bool>("ISLAST")
+                        .HasColumnType("bit");
+
+                    b.Property<short>("RES1_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("RES1_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("RES2_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("RES2_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("RES3_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("RES3_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("RES4_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("RES4_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("SCSpeedMode_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("SCol_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("SCol_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("SDepth_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("SDepth_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("SLayer_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("SLayer_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("SLine_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("SLine_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("SpeedMode_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<int>("TaskID_1")
+                        .HasColumnType("int");
+
+                    b.Property<int>("TaskID_2")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.Property<short>("VoucherNo_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("VoucherNo_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<int>("WCSVERSION")
+                        .HasColumnType("int");
+
+                    b.HasKey("ID");
+
+                    b.HasIndex("DEVICECODE");
+
+                    b.ToTable("WCS_SRM520");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.WCS_SRM521", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<short>("Alarm")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("Col_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("Col_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<string>("DEVICECODE")
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<short>("ECol_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("ECol_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("EDepth_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("EDepth_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("ELayer_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("ELayer_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("ELine_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("ELine_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime>("FRAME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<int>("FinishedTask_1")
+                        .HasColumnType("int");
+
+                    b.Property<int>("FinishedTask_2")
+                        .HasColumnType("int");
+
+                    b.Property<int>("ForkPos_1")
+                        .HasColumnType("int");
+
+                    b.Property<int>("ForkPos_2")
+                        .HasColumnType("int");
+
+                    b.Property<int>("ForkStatus_1")
+                        .HasColumnType("int");
+
+                    b.Property<int>("ForkStatus_2")
+                        .HasColumnType("int");
+
+                    b.Property<short>("GoodsType_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("GoodsType_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<bool>("ISLAST")
+                        .HasColumnType("bit");
+
+                    b.Property<short>("Layer_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("Layer_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<int>("LiftPos_1")
+                        .HasColumnType("int");
+
+                    b.Property<int>("LiftPos_2")
+                        .HasColumnType("int");
+
+                    b.Property<short>("Line_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("Line_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("Mode_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("Mode_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("RES10_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("RES10_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<int>("RES11_1")
+                        .HasColumnType("int");
+
+                    b.Property<int>("RES11_2")
+                        .HasColumnType("int");
+
+                    b.Property<int>("RES12_1")
+                        .HasColumnType("int");
+
+                    b.Property<int>("RES12_2")
+                        .HasColumnType("int");
+
+                    b.Property<int>("RES13_1")
+                        .HasColumnType("int");
+
+                    b.Property<int>("RES13_2")
+                        .HasColumnType("int");
+
+                    b.Property<int>("RES14_1")
+                        .HasColumnType("int");
+
+                    b.Property<int>("RES14_2")
+                        .HasColumnType("int");
+
+                    b.Property<short>("RES9_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("RES9_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<float>("Runtime")
+                        .HasColumnType("real");
+
+                    b.Property<float>("Runtime_1")
+                        .HasColumnType("real");
+
+                    b.Property<float>("Runtime_2")
+                        .HasColumnType("real");
+
+                    b.Property<short>("SCol_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("SCol_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("SDepth_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("SDepth_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("SLayer_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("SLayer_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("SLine_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("SLine_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("SRMMode")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("SRMStatus")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("Status_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("Status_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<int>("TaskID_1")
+                        .HasColumnType("int");
+
+                    b.Property<int>("TaskID_2")
+                        .HasColumnType("int");
+
+                    b.Property<float>("TotalKM")
+                        .HasColumnType("real");
+
+                    b.Property<float>("TotalKM_1")
+                        .HasColumnType("real");
+
+                    b.Property<float>("TotalKM_2")
+                        .HasColumnType("real");
+
+                    b.Property<int>("TravelPos_1")
+                        .HasColumnType("int");
+
+                    b.Property<int>("TravelPos_2")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.Property<short>("VoucherNo_1")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("VoucherNo_2")
+                        .HasColumnType("smallint");
+
+                    b.Property<int>("WCSVERSION")
+                        .HasColumnType("int");
+
+                    b.HasKey("ID");
+
+                    b.HasIndex("DEVICECODE");
+
+                    b.ToTable("WCS_SRM521");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.WCS_SRM537", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<string>("DEVICECODE")
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime>("FRAME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<bool>("ISLAST")
+                        .HasColumnType("bit");
+
+                    b.Property<decimal>("SCAlarm")
+                        .HasColumnType("decimal(20,0)");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.Property<int>("WCSVERSION")
+                        .HasColumnType("int");
+
+                    b.HasKey("ID");
+
+                    b.HasIndex("DEVICECODE");
+
+                    b.ToTable("WCS_SRM537");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.WCS_StatusLog", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("NewStatus")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Node")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("OldStatus")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.Property<int>("WCS_TASKID")
+                        .HasColumnType("int");
+
+                    b.Property<string>("msg")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<int>("upStatus")
+                        .HasColumnType("int");
+
+                    b.HasKey("ID");
+
+                    b.ToTable("WCS_StatusLog");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.WCS_SystemConfig", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<string>("Code")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("DEVICECODE")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Describe")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("Direction")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("TUNNEL")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.HasKey("ID");
+
+                    b.ToTable("WCS_SystemConfig");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.WCS_TASK_OLD", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<string>("ADDRFROM")
+                        .HasMaxLength(20)
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<string>("ADDRNEXT")
+                        .HasMaxLength(20)
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<string>("ADDRTO")
+                        .HasMaxLength(20)
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<int>("AgvTask")
+                        .HasColumnType("int");
+
+                    b.Property<string>("BARCODE")
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<DateTime>("CREATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("DEVICE")
+                        .HasMaxLength(20)
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<int>("DOCID")
+                        .HasColumnType("int");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime?>("ENDTIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<int>("FLOOR")
+                        .HasColumnType("int");
+
+                    b.Property<short>("FULLQTY")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("HEIGHT")
+                        .HasColumnType("smallint");
+
+                    b.Property<decimal>("Length")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<string>("ManualRemarks")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("MaterialCode")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<short>("PALLETTYPE")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("PRODLINE")
+                        .HasColumnType("smallint");
+
+                    b.Property<int>("Priority")
+                        .HasColumnType("int");
+
+                    b.Property<string>("SRMSTATION")
+                        .HasMaxLength(20)
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<DateTime?>("STARTTIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<int>("STATUS")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TUNNEL")
+                        .HasMaxLength(10)
+                        .HasColumnType("nvarchar(10)");
+
+                    b.Property<int>("TYPE")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TaskGroupKey")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<int>("UPLOADED")
+                        .HasColumnType("int");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.Property<int>("WMSTASK")
+                        .HasColumnType("int");
+
+                    b.HasKey("ID");
+
+                    b.ToTable("WCS_TASK_OLD");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.WCS_Users", b =>
+                {
+                    b.Property<string>("USER_NO")
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<string>("USER_PWD")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("nvarchar(128)");
+
+                    b.Property<byte[]>("USER_TEXT")
+                        .HasColumnType("varbinary(max)");
+
+                    b.HasKey("USER_NO");
+
+                    b.ToTable("WCS_Users");
+                });
+
+            modelBuilder.Entity("WCS.Entity.WCS_CMD", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<string>("DEVICE_CODE")
+                        .HasMaxLength(20)
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("PROPERTY")
+                        .HasMaxLength(32)
+                        .HasColumnType("nvarchar(32)");
+
+                    b.Property<string>("PROTOCOL")
+                        .HasMaxLength(256)
+                        .HasColumnType("nvarchar(256)");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<string>("VALUE")
+                        .HasMaxLength(512)
+                        .HasColumnType("nvarchar(512)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.Property<int>("WCSVERSION")
+                        .HasColumnType("int");
+
+                    b.HasKey("ID");
+
+                    b.ToTable("WCS_CMD");
+                });
+
+            modelBuilder.Entity("WCS.Entity.WCS_DATABLOCK", b =>
+                {
+                    b.Property<string>("CODE")
+                        .HasMaxLength(20)
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<int>("DATALENGTH")
+                        .HasColumnType("int");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<int>("LENGTH")
+                        .HasColumnType("int");
+
+                    b.Property<string>("NAME")
+                        .HasMaxLength(20)
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<int>("NO")
+                        .HasColumnType("int");
+
+                    b.Property<bool>("NOUPDATE")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("PLCCODE")
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<string>("PROTOCOL")
+                        .IsRequired()
+                        .HasMaxLength(200)
+                        .HasColumnType("nvarchar(200)");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.HasKey("CODE");
+
+                    b.HasIndex("PLCCODE");
+
+                    b.ToTable("WCS_DATABLOCK");
+                });
+
+            modelBuilder.Entity("WCS.Entity.WCS_DEVICE", b =>
+                {
+                    b.Property<string>("CODE")
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("NAME")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.HasKey("CODE");
+
+                    b.ToTable("WCS_DEVICE");
+                });
+
+            modelBuilder.Entity("WCS.Entity.WCS_DEVICEPROTOCOL", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<string>("DBCODE")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<string>("DEVICECODE")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<short>("POSITION")
+                        .HasColumnType("smallint");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.HasKey("ID");
+
+                    b.HasIndex("DBCODE");
+
+                    b.HasIndex("DEVICECODE");
+
+                    b.ToTable("WCS_DEVICEPROTOCOL");
+                });
+
+            modelBuilder.Entity("WCS.Entity.WCS_EXCEPTION", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<string>("DEVICE")
+                        .HasMaxLength(1000)
+                        .HasColumnType("nvarchar(1000)");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("EXCEPTIONTYPE")
+                        .HasMaxLength(1000)
+                        .HasColumnType("nvarchar(1000)");
+
+                    b.Property<string>("MSG")
+                        .HasMaxLength(1000)
+                        .HasColumnType("nvarchar(1000)");
+
+                    b.Property<DateTime>("STARTTIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<int>("TIMES")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.HasKey("ID");
+
+                    b.ToTable("WCS_EXCEPTION");
+                });
+
+            modelBuilder.Entity("WCS.Entity.WCS_GROUPMEMBER", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("GROUPCODE")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<string>("MEMBERCODE")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.HasKey("ID");
+
+                    b.HasIndex("GROUPCODE");
+
+                    b.HasIndex("MEMBERCODE");
+
+                    b.ToTable("WCS_GROUPMEMBER");
+                });
+
+            modelBuilder.Entity("WCS.Entity.WCS_PATH", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("ENDCODE")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<string>("PATH")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("STARTCODE")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.HasKey("ID");
+
+                    b.HasIndex("ENDCODE");
+
+                    b.HasIndex("STARTCODE");
+
+                    b.ToTable("WCS_PATH");
+                });
+
+            modelBuilder.Entity("WCS.Entity.WCS_PATHPOINT", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<string>("DEVICECODE")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("ENDCODE")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<string>("NEXTCODE")
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<string>("PREVCODE")
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<string>("STARTCODE")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.HasKey("ID");
+
+                    b.HasIndex("DEVICECODE");
+
+                    b.HasIndex("ENDCODE");
+
+                    b.HasIndex("NEXTCODE");
+
+                    b.HasIndex("PREVCODE");
+
+                    b.HasIndex("STARTCODE");
+
+                    b.ToTable("WCS_PATHPOINT");
+                });
+
+            modelBuilder.Entity("WCS.Entity.WCS_PLC", b =>
+                {
+                    b.Property<string>("CODE")
+                        .HasMaxLength(20)
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("IP")
+                        .HasMaxLength(20)
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<string>("MODEL")
+                        .HasMaxLength(10)
+                        .HasColumnType("nvarchar(10)");
+
+                    b.Property<string>("NAME")
+                        .HasMaxLength(20)
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<int>("PORT")
+                        .HasColumnType("int");
+
+                    b.Property<int>("RACK")
+                        .HasColumnType("int");
+
+                    b.Property<int>("SLOT")
+                        .HasColumnType("int");
+
+                    b.Property<int>("TYPE")
+                        .HasColumnType("int");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.HasKey("CODE");
+
+                    b.ToTable("WCS_PLC");
+                });
+
+            modelBuilder.Entity("WCS.Entity.WCS_ROUTE", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<string>("DEVICECODE")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<string>("NEXTCODE")
+                        .IsRequired()
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.HasKey("ID");
+
+                    b.HasIndex("DEVICECODE");
+
+                    b.HasIndex("NEXTCODE");
+
+                    b.ToTable("WCS_ROUTE");
+                });
+
+            modelBuilder.Entity("WCS.Entity.WCS_TASK", b =>
+                {
+                    b.Property<int>("ID")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasColumnOrder(0);
+
+                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"), 1L, 1);
+
+                    b.Property<string>("ADDRFROM")
+                        .HasMaxLength(20)
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<string>("ADDRNEXT")
+                        .HasMaxLength(20)
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<string>("ADDRTO")
+                        .HasMaxLength(20)
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<int>("AgvTask")
+                        .HasColumnType("int");
+
+                    b.Property<string>("BARCODE")
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<DateTime>("CREATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("DEVICE")
+                        .HasMaxLength(20)
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<int>("DOCID")
+                        .HasColumnType("int");
+
+                    b.Property<bool>("ENABLED")
+                        .HasColumnType("bit");
+
+                    b.Property<DateTime?>("ENDTIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<int>("FLOOR")
+                        .HasColumnType("int");
+
+                    b.Property<short>("FULLQTY")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("HEIGHT")
+                        .HasColumnType("smallint");
+
+                    b.Property<decimal>("Length")
+                        .HasColumnType("decimal(18,2)");
+
+                    b.Property<string>("ManualRemarks")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<string>("MaterialCode")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<short>("PALLETTYPE")
+                        .HasColumnType("smallint");
+
+                    b.Property<short>("PRODLINE")
+                        .HasColumnType("smallint");
+
+                    b.Property<int>("Priority")
+                        .HasColumnType("int");
+
+                    b.Property<string>("SRMSTATION")
+                        .HasMaxLength(20)
+                        .HasColumnType("nvarchar(20)");
+
+                    b.Property<DateTime?>("STARTTIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<int>("STATUS")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TUNNEL")
+                        .HasMaxLength(10)
+                        .HasColumnType("nvarchar(10)");
+
+                    b.Property<int>("TYPE")
+                        .HasColumnType("int");
+
+                    b.Property<string>("TaskGroupKey")
+                        .HasColumnType("nvarchar(max)");
+
+                    b.Property<DateTime>("UPDATETIME")
+                        .HasColumnType("datetime2");
+
+                    b.Property<string>("UPDATEUSER")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("nvarchar(50)");
+
+                    b.Property<int>("UPLOADED")
+                        .HasColumnType("int");
+
+                    b.Property<byte[]>("VER")
+                        .IsConcurrencyToken()
+                        .ValueGeneratedOnAddOrUpdate()
+                        .HasColumnType("rowversion");
+
+                    b.Property<int>("WMSTASK")
+                        .HasColumnType("int");
+
+                    b.HasKey("ID");
+
+                    b.ToTable("WCS_TASK");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.BCR.WCS_BCR80", b =>
+                {
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "DEVICE")
+                        .WithMany()
+                        .HasForeignKey("DEVICECODE");
+
+                    b.Navigation("DEVICE");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.Station.WCS_Station520", b =>
+                {
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "DEVICE")
+                        .WithMany()
+                        .HasForeignKey("DEVICECODE");
+
+                    b.Navigation("DEVICE");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.Station.WCS_Station521", b =>
+                {
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "DEVICE")
+                        .WithMany()
+                        .HasForeignKey("DEVICECODE");
+
+                    b.Navigation("DEVICE");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.Station.WCS_Station523", b =>
+                {
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "DEVICE")
+                        .WithMany()
+                        .HasForeignKey("DEVICECODE");
+
+                    b.Navigation("DEVICE");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.WCS_RGV520", b =>
+                {
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "DEVICE")
+                        .WithMany()
+                        .HasForeignKey("DEVICECODE");
+
+                    b.Navigation("DEVICE");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.WCS_RGV521", b =>
+                {
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "DEVICE")
+                        .WithMany()
+                        .HasForeignKey("DEVICECODE");
+
+                    b.Navigation("DEVICE");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.WCS_RGV523", b =>
+                {
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "DEVICE")
+                        .WithMany()
+                        .HasForeignKey("DEVICECODE");
+
+                    b.Navigation("DEVICE");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.WCS_SRM520", b =>
+                {
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "DEVICE")
+                        .WithMany()
+                        .HasForeignKey("DEVICECODE");
+
+                    b.Navigation("DEVICE");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.WCS_SRM521", b =>
+                {
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "DEVICE")
+                        .WithMany()
+                        .HasForeignKey("DEVICECODE");
+
+                    b.Navigation("DEVICE");
+                });
+
+            modelBuilder.Entity("WCS.Entity.Protocol.WCS_SRM537", b =>
+                {
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "DEVICE")
+                        .WithMany()
+                        .HasForeignKey("DEVICECODE");
+
+                    b.Navigation("DEVICE");
+                });
+
+            modelBuilder.Entity("WCS.Entity.WCS_DATABLOCK", b =>
+                {
+                    b.HasOne("WCS.Entity.WCS_PLC", "PLC")
+                        .WithMany()
+                        .HasForeignKey("PLCCODE");
+
+                    b.Navigation("PLC");
+                });
+
+            modelBuilder.Entity("WCS.Entity.WCS_DEVICEPROTOCOL", b =>
+                {
+                    b.HasOne("WCS.Entity.WCS_DATABLOCK", "DB")
+                        .WithMany()
+                        .HasForeignKey("DBCODE")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "DEVICE")
+                        .WithMany("PROTOCOLS")
+                        .HasForeignKey("DEVICECODE")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.Navigation("DB");
+
+                    b.Navigation("DEVICE");
+                });
+
+            modelBuilder.Entity("WCS.Entity.WCS_GROUPMEMBER", b =>
+                {
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "GROUP")
+                        .WithMany("DEVICEGROUP")
+                        .HasForeignKey("GROUPCODE")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "MEMBER")
+                        .WithMany()
+                        .HasForeignKey("MEMBERCODE")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.Navigation("GROUP");
+
+                    b.Navigation("MEMBER");
+                });
+
+            modelBuilder.Entity("WCS.Entity.WCS_PATH", b =>
+                {
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "END")
+                        .WithMany()
+                        .HasForeignKey("ENDCODE")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "START")
+                        .WithMany("PATHS")
+                        .HasForeignKey("STARTCODE")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.Navigation("END");
+
+                    b.Navigation("START");
+                });
+
+            modelBuilder.Entity("WCS.Entity.WCS_PATHPOINT", b =>
+                {
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "DEVICE")
+                        .WithMany()
+                        .HasForeignKey("DEVICECODE")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "END")
+                        .WithMany()
+                        .HasForeignKey("ENDCODE")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "NEXT")
+                        .WithMany()
+                        .HasForeignKey("NEXTCODE");
+
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "PREV")
+                        .WithMany()
+                        .HasForeignKey("PREVCODE");
+
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "START")
+                        .WithMany()
+                        .HasForeignKey("STARTCODE")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.Navigation("DEVICE");
+
+                    b.Navigation("END");
+
+                    b.Navigation("NEXT");
+
+                    b.Navigation("PREV");
+
+                    b.Navigation("START");
+                });
+
+            modelBuilder.Entity("WCS.Entity.WCS_ROUTE", b =>
+                {
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "DEVICE")
+                        .WithMany("ROUTES")
+                        .HasForeignKey("DEVICECODE")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.HasOne("WCS.Entity.WCS_DEVICE", "NEXT")
+                        .WithMany()
+                        .HasForeignKey("NEXTCODE")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.Navigation("DEVICE");
+
+                    b.Navigation("NEXT");
+                });
+
+            modelBuilder.Entity("WCS.Entity.WCS_DEVICE", b =>
+                {
+                    b.Navigation("DEVICEGROUP");
+
+                    b.Navigation("PATHS");
+
+                    b.Navigation("PROTOCOLS");
+
+                    b.Navigation("ROUTES");
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}

+ 35 - 0
Projects/永冠OPP/WCS.Service/Migrations/20220522064753_新增货物类型.cs

@@ -0,0 +1,35 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace WCS.Service.Migrations
+{
+    public partial class 新增货物类型 : Migration
+    {
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.AddColumn<string>(
+                name: "MaterialCode",
+                table: "WCS_TASK_OLD",
+                type: "nvarchar(max)",
+                nullable: true);
+
+            migrationBuilder.AddColumn<string>(
+                name: "MaterialCode",
+                table: "WCS_TASK",
+                type: "nvarchar(max)",
+                nullable: true);
+        }
+
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropColumn(
+                name: "MaterialCode",
+                table: "WCS_TASK_OLD");
+
+            migrationBuilder.DropColumn(
+                name: "MaterialCode",
+                table: "WCS_TASK");
+        }
+    }
+}

+ 6 - 0
Projects/永冠OPP/WCS.Service/Migrations/WCSDBModelSnapshot.cs

@@ -1207,6 +1207,9 @@ namespace WCS.Service.Migrations
                     b.Property<string>("ManualRemarks")
                         .HasColumnType("nvarchar(max)");
 
+                    b.Property<string>("MaterialCode")
+                        .HasColumnType("nvarchar(max)");
+
                     b.Property<short>("PALLETTYPE")
                         .HasColumnType("smallint");
 
@@ -1804,6 +1807,9 @@ namespace WCS.Service.Migrations
                     b.Property<string>("ManualRemarks")
                         .HasColumnType("nvarchar(max)");
 
+                    b.Property<string>("MaterialCode")
+                        .HasColumnType("nvarchar(max)");
+
                     b.Property<short>("PALLETTYPE")
                         .HasColumnType("smallint");
 

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

@@ -46,8 +46,6 @@ namespace WCS.Service.WebApi
                                 TaskGroupKey = obj.TaskGroupKey
                             };
                             db.Default.Add(task);
-                            db.Default.SaveChanges();
-                            //task.CreateStatusLog(db);
                         }
                         else if (obj.TaskType == "2")
                         {  //出库任务
@@ -70,11 +68,11 @@ namespace WCS.Service.WebApi
                                 TUNNEL = tunnel,
                                 WMSTASK = int.Parse(obj.WMSTaskNo),
                                 ADDRNEXT = obj.EndLocation,
-                                Length = obj.Length
+                                Length = obj.Length,
+                                MaterialCode = obj.MaterialCode,
                             };
 
                             db.Default.Add(task);
-                            db.Default.SaveChanges();
                         }
                         else if (obj.TaskType == "1")
                         {//入库任务
@@ -126,11 +124,10 @@ namespace WCS.Service.WebApi
                                     WMSTASK = int.Parse(obj.WMSTaskNo)
                                 };
                                 db.Default.Add(task);
-                                db.Default.SaveChanges();
-                                //task.CreateStatusLog(db);
                             }
                         }
                     }
+                    db.Default.SaveChanges();
                 });
                 res.ResType = true;
             }
@@ -251,38 +248,6 @@ namespace WCS.Service.WebApi
             return res;
         }
 
-        ///// <summary>
-        ///// WMS 通过该接口获取码垛位当前各位置对应的托盘码
-        ///// </summary>
-        ///// <returns></returns>
-        //[HttpGet]
-        //public List<KeyValueViewModel<string, string>> I_WMS_GetPalletCode()
-        //{
-        //    //找出所有组盘站台信息
-        //    var station = Device.Where(v => v.Is(DF.组盘)).ToList();
-
-        //    //找出所有有光电信号站台中的任务号
-        //    var taskNumbers = station.Select(v => v.Device<IStation521>())
-        //                              .Where(p => p.Data.G_TaskId != 0 && p.Data.G_PhStatus)
-        //                              .Select(p => p.Data.G_TaskId);
-        //    var result = new List<KeyValueViewModel<string, string>>();
-        //    DB.Do(db =>
-        //    {
-        //        //找到有光电的位置对应的任务
-        //        var tasks = db.Default.Set<WCS_TASK>().AsNoTracking().Where(task => taskNumbers.Any(x => task.ID == x)).ToList();
-        //        station.ForEach(p =>
-        //        {
-        //            var value = tasks.FirstOrDefault(task => task.ADDRTO == p.CODE);
-        //            result.Add(new KeyValueViewModel<string, string>()
-        //            {
-        //                Key = p.CODE,
-        //                Value = value == null ? null : value.BARCODE,
-        //            });
-        //        });
-        //    });
-        //    return result;
-        //}
-
         ///// <summary>
         ///// 通过该接口获取指定条件设备信息
         ///// </summary>

+ 5 - 0
Projects/永冠OPP/WCS.Service/WebApi/WMS/PushCreateWcsTaskRequest.cs

@@ -62,6 +62,11 @@
         /// 卷长度
         /// </summary>
         public decimal Length { get; set; }
+
+        /// <summary>
+        /// 产品编码
+        /// </summary>
+        public string MaterialCode { get; set; }
     }
 
     public class PushCreateAGVTaskRequest

+ 27 - 13
Projects/永冠OPP/WCS.Service/Works/SRM/SRMWork.cs

@@ -42,7 +42,28 @@ namespace WCS.Service.Works.SRM
                     return;
                 }
                 if (obj.Data.FinishedACK_1 == 1 || obj.Data.FinishedACK_2 == 1) throw new WarnException($"堆垛机完成任务WCS反馈信号未清除");
-                if (obj.Data2.VoucherNo_1 != obj.Data.VoucherNo_1 || obj.Data2.VoucherNo_2 != obj.Data.VoucherNo_2) throw new WarnException($"等待执行{obj.Data.TaskID_1}-{obj.Data.TaskID_2}");
+                if (obj.Data2.VoucherNo_1 != obj.Data.VoucherNo_1 || obj.Data2.VoucherNo_2 != obj.Data.VoucherNo_2)
+                {
+                    DB.Do(db =>
+                    {
+                        if (obj.Data2.VoucherNo_1 != obj.Data.VoucherNo_1)
+                        {
+                            if (db.Default.Set<WCS_TASK>().Find(obj.Data.TaskID_1).STATUS == TaskStatus.新建)
+                            {
+                                obj.Data.VoucherNo_1 = obj.Data2.VoucherNo_1;
+                            }
+                        }
+                        if (obj.Data2.VoucherNo_2 != obj.Data.VoucherNo_2)
+                        {
+                            if (db.Default.Set<WCS_TASK>().Find(obj.Data.TaskID_2).STATUS == TaskStatus.新建)
+                            {
+                                obj.Data.VoucherNo_2 = obj.Data2.VoucherNo_2;
+                            }
+                        }
+                    });
+                    throw new WarnException($"等待执行{obj.Data.TaskID_1}-{obj.Data.TaskID_2}");
+                }
+
                 //处理堆垛机已完成的任务
                 if (obj.Data2.FinishedTask_1 != 0 || obj.Data2.FinishedTask_2 != 0)
                 {
@@ -239,12 +260,6 @@ namespace WCS.Service.Works.SRM
                     obj.Entity.Set("LastFloor", floor);
                     if (enterPriority != null && outPriority != null && enterPriority.Priority > outPriority.Priority) return;
 
-                    //全局优先.判断
-                    DB.Do(db =>
-                    {
-                        if (db.Default.Set<WCS_TASK>().Any(v => v.TYPE == TaskType.出库 && v.STATUS == TaskStatus.新建 && v.Priority > 0 && v.DEVICE != obj.Entity.CODE)) return;
-                    });
-
                     //获取当前堆垛机所有的放货点
                     var list = obj.GetDeliveryPoint();
 
@@ -279,10 +294,10 @@ namespace WCS.Service.Works.SRM
                                                       .Where(v => v.DEVICE == srm)
                                                       .Where(v => v.TYPE == TaskType.出库)
                                                       .Where(v => !db.Default.Set<WCS_TASK>().Any(d => d.DEVICE == srm && d.STATUS == TaskStatus.堆垛机执行)).ToList();
-                        //同一个目标地址同时只能有两组正在执行的任务
-                        //同时对结果进行排序,分组后取第一组任务
+
+                        //同时对结果进行排序,分组
                         var maxnum = ProtocolProxy.YGWMS150Redis.Get("SaleTaskGroupCount").ToInt();
-                        var outDepot = waitTask.Where(v =>
+                        var outDepotList = waitTask.Where(v =>
                                             {
                                                 var max = v.ADDRTO == "G1340" ? 4 : maxnum;
                                                 return db.Default.Set<WCS_TASK>()
@@ -306,11 +321,10 @@ namespace WCS.Service.Works.SRM
                                                      .GroupBy(d => d.TaskGroupKey).Count();
                                 })
                                 .ThenBy(v => v.CREATETIME)
-                                .GroupBy(v => v.ADDRTO)
-                                .FirstOrDefault() ?? throw new WarnException("无可执行出库任务");
+                                .GroupBy(v => v.ADDRTO).ToArray();
 
                         //获取两个个可执行任务,此时这两个任务的目标地址是一致的
-                        var tasks = outDepot.Select(v => v).ToList().GetOutTask();
+                        var tasks = outDepotList.GetSrmValidTaskList(db, obj).GetOutTask();
 
                         #region 校验两个产品是否为同规格