Browse Source

更新依赖和优化代码结构

- 在 `WCS.Service.csproj` 和 `WCS.WorkEngineering.csproj` 中更新 `MessagePack` 包版本至 `2.5.187`,并移除对 `wms.dto`、`wms.service` 和 `wms.sqlsugar` 的引用。
- 在 `DeviceExtension.cs` 中新增 `GetIsDirectPalletizing` 方法,并引入 `SqlSugar` 命名空间。
- 修改 `TaskExtension.cs` 中的 `AddBaseErrorInfo` 方法,优化参数格式和查询条件。
- 在 `AgvSystems.cs` 中优化 `agv` 状态处理逻辑。
- 在多个模型文件中添加 `SqlSugar` 引用,定义数据库表模型及字段描述。
林豪 左 6 months ago
parent
commit
a56b3465aa
33 changed files with 2849 additions and 2331 deletions
  1. 1 1
      WCS.Service/WCS.Service.csproj
  2. 26 1
      YWGC/FJK/WCS.WorkEngineering/Extensions/DeviceExtension.cs
  3. 9 311
      YWGC/FJK/WCS.WorkEngineering/Extensions/TaskExtension.cs
  4. 54 0
      YWGC/FJK/WCS.WorkEngineering/Model/WMS/BaseErrorInfo.cs
  5. 390 0
      YWGC/FJK/WCS.WorkEngineering/Model/WMS/BaseMatinfo.cs
  6. 49 0
      YWGC/FJK/WCS.WorkEngineering/Model/WMS/BaseModel.cs
  7. 42 0
      YWGC/FJK/WCS.WorkEngineering/Model/WMS/BaseWarehouse.cs
  8. 114 0
      YWGC/FJK/WCS.WorkEngineering/Model/WMS/BillBomsetgrp.cs
  9. 149 0
      YWGC/FJK/WCS.WorkEngineering/Model/WMS/BillBomsetinfo.cs
  10. 451 0
      YWGC/FJK/WCS.WorkEngineering/Model/WMS/BillInvinit.cs
  11. 463 0
      YWGC/FJK/WCS.WorkEngineering/Model/WMS/BillInvnow.cs
  12. 72 0
      YWGC/FJK/WCS.WorkEngineering/Model/WMS/BillRingPalletizingInfo.cs
  13. 35 0
      YWGC/FJK/WCS.WorkEngineering/Model/WMS/IdFactory.cs
  14. 196 0
      YWGC/FJK/WCS.WorkEngineering/Model/WMS/WmsEnum.cs
  15. 51 0
      YWGC/FJK/WCS.WorkEngineering/Model/WMS/fjSysConfig.cs
  16. 30 27
      YWGC/FJK/WCS.WorkEngineering/Systems/AgvSystems.cs
  17. 1 0
      YWGC/FJK/WCS.WorkEngineering/Systems/NoInteractionSystems.cs
  18. 3 1013
      YWGC/FJK/WCS.WorkEngineering/Systems/RGVSystems.cs
  19. 1 427
      YWGC/FJK/WCS.WorkEngineering/Systems/分拣主线/满轮主线预写入目标地址.cs
  20. 131 20
      YWGC/FJK/WCS.WorkEngineering/Systems/分拣支线/环形库分流点.cs
  21. 1 0
      YWGC/FJK/WCS.WorkEngineering/Systems/桁架码垛/桁架.cs
  22. 372 350
      YWGC/FJK/WCS.WorkEngineering/Systems/环形库/机械臂cs.cs
  23. 2 1
      YWGC/FJK/WCS.WorkEngineering/Systems/环形库/环形库分配货位.cs
  24. 55 117
      YWGC/FJK/WCS.WorkEngineering/Systems/码垛区域生成空托盘任务.cs
  25. 1 17
      YWGC/FJK/WCS.WorkEngineering/WCS.WorkEngineering.csproj
  26. 2 40
      YWGC/FJK/WCS.WorkEngineering/WebApi/Controllers/WmsApi.cs
  27. 6 0
      YWGC/FJK/WCS.WorkEngineering/WebApi/Models/WMS/Request/BaseRequest.cs
  28. 37 0
      YWGC/FJK/WCS.WorkEngineering/WebApi/Models/WMS/Request/FJApplyStockInLocRequest.cs
  29. 2 2
      YWGC/FJK/WCS.WorkEngineering/WebApi/Models/WMS/Request/FJBingPalletRequest.cs
  30. 4 4
      YWGC/FJK/WCS.WorkEngineering/WebApi/Models/WMS/Request/FJBuildEmptyPalletsStockRequest.cs
  31. 21 0
      YWGC/FJK/WCS.WorkEngineering/WebApi/Models/WMS/Request/FJGetTwoPalletDto.cs
  32. 29 0
      YWGC/FJK/WCS.WorkEngineering/WebApi/Models/WMS/Request/FjEditorialFlowRequest.cs
  33. 49 0
      YWGC/FJK/WCS.WorkEngineering/WebApi/Models/WMS/Response/FJApplyStockInLocResponse.cs

+ 1 - 1
WCS.Service/WCS.Service.csproj

@@ -23,7 +23,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="MessagePack" Version="2.5.140" />
+    <PackageReference Include="MessagePack" Version="2.5.187" />
     <PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.1.1" />
     <PackageReference Include="Microsoft.Extensions.Hosting.Systemd" Version="7.0.0" />
     <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="7.0.1" />

+ 26 - 1
YWGC/FJK/WCS.WorkEngineering/Extensions/DeviceExtension.cs

@@ -2,11 +2,14 @@
 using ServiceCenter.Extensions;
 using ServiceCenter.Logs;
 using ServiceCenter.Redis;
+using SqlSugar;
 using WCS.Core;
 using WCS.Entity.Protocol.BCR;
 using WCS.Entity.Protocol.Robot;
 using WCS.Entity.Protocol.Station;
 using WCS.Entity.Protocol.Truss;
+using WCS.WorkEngineering.Model.WMS;
+using WCS.WorkEngineering.Systems;
 
 namespace WCS.WorkEngineering.Extensions
 {
@@ -283,6 +286,28 @@ namespace WCS.WorkEngineering.Extensions
             };
         }
 
+        /// <summary>
+        ///  获取当前设备是否直接码垛
+        /// </summary>
+        /// <param name="device">传入当前查询点对应的机械臂设备号</param>
+        /// <param name="db">数据库连接信息</param>
+        /// <returns></returns>
+        public static bool GetIsDirectPalletizing(this Device device, SqlSugarScopeProvider db)
+        {
+            var code = $"{device.Code}DirectPalletizing";
+            var isDP = db.Queryable<fjSysConfig>().NoLock().Single(x => x.Code == code);
+            if (isDP == null)
+            {
+                return false;
+            }
+            var isDirectPalletizing = isDP.SContent.ToInt();
+            if (isDirectPalletizing == 0 || isDirectPalletizing != 1)
+            {
+                return false;
+            }
+            return true;
+        }
+
         #endregion 设备扩展方法
 
         /// <summary>
@@ -612,4 +637,4 @@ public class CacheBcr
     ///  下一个地址
     /// </summary>
     public short NextAdd { get; set; }
-}
+}

+ 9 - 311
YWGC/FJK/WCS.WorkEngineering/Extensions/TaskExtension.cs

@@ -5,6 +5,7 @@ using ServiceCenter.SqlSugars;
 using SqlSugar;
 using WCS.Core;
 using WCS.Entity;
+using WCS.WorkEngineering.Model.WMS;
 using WCS.WorkEngineering.Systems;
 using TaskStatus = WCS.Entity.TaskStatus;
 
@@ -139,17 +140,18 @@ namespace WCS.WorkEngineering.Extensions
         public static void Updateable(this WCS_TaskInfo taskInfo, SqlSugarScopeProvider db)
         {
         }
+
         /// <summary>
         /// 添加异常信息
         /// </summary>
         /// <param name="db">db</param>
         /// <param name="error"></param>
         /// <returns></returns>
-        public static void AddBaseErrorInfo(this BaseErrorInfo error,SqlSugarScopeProvider db)
+        public static void AddBaseErrorInfo(this BaseErrorInfo error, SqlSugarScopeProvider db)
         {
             var errorinfoWcs = db.Queryable<BaseErrorInfo>().With(SqlWith.NoLock)
-                .Where(v => v.BusName == error.BusName && v.Message == error.Message&& v.BarCode == error.BarCode).First();
-            if (errorinfoWcs != null && (error.AddTime-errorinfoWcs.AddTime).TotalMinutes<60)
+                .Where(v => v.BusName == error.BusName && v.Message == error.Message && v.BarCode == error.BarCode).First();
+            if (errorinfoWcs != null && (error.AddTime - errorinfoWcs.AddTime).TotalMinutes < 60)
             {
                 errorinfoWcs.Count += 1;
                 db.Updateable(errorinfoWcs).ExecuteCommand();
@@ -172,8 +174,8 @@ namespace WCS.WorkEngineering.Extensions
             {
                 var db = _db.Default;
                 var errorinfoWcs = db.Queryable<BaseErrorInfo>().With(SqlWith.NoLock)
-                    .Where(v => v.BusName == error.BusName && v.Message == error.Message&& v.BarCode == error.BarCode).First();
-                if (errorinfoWcs != null && (error.AddTime-errorinfoWcs.AddTime).TotalMinutes<1)
+                    .Where(v => v.BusName == error.BusName && v.Message == error.Message && v.BarCode == error.BarCode).First();
+                if (errorinfoWcs != null && (error.AddTime - errorinfoWcs.AddTime).TotalMinutes < 1)
                 {
                     errorinfoWcs.Count += 1;
                     db.Updateable(errorinfoWcs).ExecuteCommand();
@@ -254,7 +256,8 @@ namespace WCS.WorkEngineering.Extensions
             {
                 world.Log($"物料规格[{task.MatCode}]无可用码垛垛形");
                 return;
-            };
+            }
+            ;
             var billBomsetinfos = db.Queryable<BillBomsetinfo>().Where(x => x.BomSetHdrId == billBomsetgrp.Id).ToList();
 
             var addTime = DateTime.Now;
@@ -430,309 +433,4 @@ namespace WCS.WorkEngineering.Extensions
         /// </summary>
         public bool Finish { get; set; }
     }
-
-    /// <summary>
-    /// 垛型明细表
-    /// </summary>
-    [SugarTable("Bill_BomSetInfo", tableDescription: "垛型明细表")]
-    public partial class BillBomsetinfo
-    {
-        /// <summary>
-        ///  ID
-        /// </summary>
-        [SugarColumn(ColumnName = "Id", IsPrimaryKey = true, ColumnDescription = "ID")]
-        public virtual long Id { get; set; }
-
-        /// <summary>
-        ///  备注
-        /// </summary>
-        [SugarColumn(ColumnName = "Memo", Length = 500, IsNullable = true, ColumnDataType = "nvarchar", DefaultValue = "", ColumnDescription = "备注")]
-        public virtual string Memo { get; set; }
-
-        /// <summary>
-        ///  创建用户
-        /// </summary>
-        [SugarColumn(ColumnName = "AddWho", Length = 50, ColumnDataType = "nvarchar", DefaultValue = "", IsNullable = false, ColumnDescription = "创建用户")]
-        public virtual string AddWho { get; set; } = "";
-
-        /// <summary>
-        ///  更新用户
-        /// </summary>
-        [SugarColumn(ColumnName = "EditWho", Length = 50, ColumnDataType = "nvarchar", DefaultValue = "", IsNullable = false, ColumnDescription = "更新用户")]
-        public virtual string EditWho { get; set; } = "";
-
-        /// <summary>
-        ///  创建时间
-        /// </summary>
-        [SugarColumn(ColumnName = "AddTime", DefaultValue = "1900-1-1", IsNullable = false, ColumnDescription = "创建时间")]
-        public virtual DateTime AddTime { get; set; } = DateTime.Now;
-
-        /// <summary>
-        /// 更新时间
-        /// </summary>
-        [SugarColumn(ColumnName = "EditTime", DefaultValue = "1900-1-1", IsNullable = false, ColumnDescription = "更新时间")]
-        public virtual DateTime EditTime { get; set; } = DateTime.Now;
-
-        /// <summary>
-        /// 垛型id
-        /// </summary>
-        [SugarColumn(ColumnDataType = "bigint", IsNullable = false, ColumnDescription = "垛型id")]
-        public long BomSetHdrId { get; set; }
-
-        /// <summary>
-        /// 是否停用
-        /// </summary>
-        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "是否停用")]
-        public int IsStop { get; set; }
-
-        /// <summary>
-        /// 是否空置
-        /// </summary>
-        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "是否空置")]
-        public int IsEmpty { get; set; }
-
-        /// <summary>
-        /// 坐标号
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false, ColumnDescription = "坐标号")]
-        public string XYNo { get; set; }
-
-        /// <summary>
-        /// 物料id
-        /// </summary>
-        [SugarColumn(ColumnDataType = "bigint", ColumnDescription = "物料id")]
-        public long MatId { get; set; }
-
-        /// <summary>
-        /// 物料编码
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", IsNullable = true, Length = 50, ColumnDescription = "物料编码")]
-        public string MatCode { get; set; }
-
-        /// <summary>
-        /// 正反面
-        /// </summary>
-        [SugarColumn(ColumnDataType = "int", IsNullable = true, ColumnDescription = "正反面")]
-        public int SideNum { get; set; }
-
-        /// <summary>
-        /// 工字轮类型
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true, ColumnDescription = "工字轮类型")]
-        public string SpoolType { get; set; }
-
-        /// <summary>
-        /// 钢丝类型
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true, ColumnDescription = "钢丝类型")]
-        public string SilkType { get; set; }
-
-        /// <summary>
-        /// 钢丝直径
-        /// </summary>
-        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true, ColumnDescription = "钢丝直径")]
-        public decimal SilkDiam { get; set; }
-
-        /// <summary>
-        /// 钢丝直径上限
-        /// </summary>
-        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true, ColumnDescription = "钢丝直径上限")]
-        public decimal SilkDiamMaxCount { get; set; }
-
-        /// <summary>
-        /// 数量上限
-        /// </summary>
-        [SugarColumn(ColumnDataType = "int", IsNullable = true, ColumnDescription = "数量上限")]
-        public int QtyMaxCount { get; set; }
-
-        /// <summary>
-        /// 是否芯股
-        /// </summary>
-        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "是否芯股")]
-        public int IsCore { get; set; }
-
-        /// <summary>
-        /// 09垛型里面的行(1-12)
-        /// </summary>
-        [SugarColumn(ColumnDataType = "int", IsNullable = true, ColumnDescription = "09垛型里面的行(1-12)")]
-        public int Row { get; set; }
-
-        /// <summary>
-        /// 是否混合料行(09垛型使用,1是0否)
-        /// </summary>
-        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "是否混合料行(09垛型使用,1是0否)")]
-        public int IsMixRow { get; set; }
-
-        /// <summary>
-        /// 混合料行编码
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", IsNullable = true, Length = 50, ColumnDescription = "混合料行编码")]
-        public string MixRowCode { get; set; }
-
-        /// <summary>
-        ///  第一种第二种第三种
-        /// </summary>
-        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "第一种第二种第三种")]
-        public int CategoryId { get; set; }
-    }
-
-    /// <summary>
-    ///  垛形主表
-    /// </summary>
-    [Tenant("fj")]
-    [SugarTable("Bill_BomSetGrp", tableDescription: "垛形主表")]
-    public partial class BillBomsetgrp
-    {
-        /// <summary>
-        ///  ID
-        /// </summary>
-        [SugarColumn(ColumnName = "Id", IsPrimaryKey = true, ColumnDescription = "ID")]
-        public virtual long Id { get; set; }
-
-        /// <summary>
-        ///  备注
-        /// </summary>
-        [SugarColumn(ColumnName = "Memo", Length = 500, IsNullable = true, ColumnDataType = "nvarchar", DefaultValue = "", ColumnDescription = "备注")]
-        public virtual string Memo { get; set; }
-
-        /// <summary>
-        ///  创建用户
-        /// </summary>
-        [SugarColumn(ColumnName = "AddWho", Length = 50, ColumnDataType = "nvarchar", DefaultValue = "", IsNullable = false, ColumnDescription = "创建用户")]
-        public virtual string AddWho { get; set; } = "";
-
-        /// <summary>
-        ///  更新用户
-        /// </summary>
-        [SugarColumn(ColumnName = "EditWho", Length = 50, ColumnDataType = "nvarchar", DefaultValue = "", IsNullable = false, ColumnDescription = "更新用户")]
-        public virtual string EditWho { get; set; } = "";
-
-        /// <summary>
-        ///  创建时间
-        /// </summary>
-        [SugarColumn(ColumnName = "AddTime", DefaultValue = "1900-1-1", IsNullable = false, ColumnDescription = "创建时间")]
-        public virtual DateTime AddTime { get; set; } = DateTime.Now;
-
-        /// <summary>
-        /// 更新时间
-        /// </summary>
-        [SugarColumn(ColumnName = "EditTime", DefaultValue = "1900-1-1", IsNullable = false, ColumnDescription = "更新时间")]
-        public virtual DateTime EditTime { get; set; } = DateTime.Now;
-
-        /// <summary>
-        /// 是否停用
-        /// </summary>
-        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "是否停用")]
-        public int IsStop { get; set; }
-
-        /// <summary>
-        /// 垛型编码
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false, ColumnDescription = "垛型编码")]
-        public string Code { get; set; }
-
-        /// <summary>
-        ///  短垛型编码
-        /// </summary>
-        [SugarColumn(ColumnDataType = "smallint", IsNullable = false, ColumnDescription = "短垛型编码")]
-        public short ShortCode { get; set; }
-
-        /// <summary>
-        /// 垛型名称
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = false, ColumnDescription = "垛型名称")]
-        public string Name { get; set; }
-
-        /// <summary>
-        /// BomCode(投料信息)
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = false, ColumnDescription = "BomCode(投料信息)")]
-        public string BomCode { get; set; }
-
-        /// <summary>
-        /// 帘线物料编码
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false, ColumnDescription = "帘线物料编码")]
-        public string ProMaterCode { get; set; }
-
-        /// <summary>
-        /// 工字轮个数
-        /// </summary>
-        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "工字轮个数")]
-        public int HWCountQty { get; set; }
-
-        /// <summary>
-        /// 托盘类型
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false, ColumnDescription = "托盘类型")]
-        public string TpTypeCode { get; set; }
-
-        /// <summary>
-        /// 层数
-        /// </summary>
-        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "层数")]
-        public int LayerCountQty { get; set; }
-
-        /// <summary>
-        /// 垛型大类
-        /// </summary>
-        [SugarColumn(ColumnDataType = "int", IsNullable = true, ColumnDescription = "垛型大类")]
-        public int StampType { get; set; }
-
-        /// <summary>
-        /// 是否在桁架进行码垛
-        /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDescription = "是否在桁架进行码垛")]
-        public bool IsTruss { get; set; }
-    }
-
-    /// <summary>
-    ///  异常信息
-    /// </summary>
-    [Tenant("fj")]
-    [SugarTable("Base_ErrorInfo")]
-    public class BaseErrorInfo
-    {
-        /// <summary>
-        /// ID
-        /// </summary>
-        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "ID")]
-        public int ID { get; set; }
-
-        /// <summary>
-        /// 业务名称
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false)]
-        public string BusName { get; set; }
-
-        /// <summary>
-        /// 业务名称
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
-        public string BarCode { get; set; }
-
-        /// <summary>
-        ///  异常描述信息
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 250, IsNullable = true)]
-        public string Message { get; set; }
-
-        /// <summary>
-        /// 次数
-        /// </summary>
-        [SugarColumn(ColumnDataType = "int", IsNullable = true)]
-        public int Count { get; set; }
-
-        /// <summary>
-        ///  memo
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 250, IsNullable = true)]
-        public string Memo { get; set; }
-
-        /// <summary>
-        /// AddTime
-        /// </summary>
-        [SugarColumn(ColumnDataType = "datetime", IsNullable = false)]
-        public DateTime AddTime { get; set; } = DateTime.Now;
-    }
 }

+ 54 - 0
YWGC/FJK/WCS.WorkEngineering/Model/WMS/BaseErrorInfo.cs

@@ -0,0 +1,54 @@
+using SqlSugar;
+
+namespace WCS.WorkEngineering.Model.WMS
+{
+    /// <summary>
+    ///  异常信息
+    /// </summary>
+    [Tenant("fj")]
+    [SugarTable("Base_ErrorInfo")]
+    public class BaseErrorInfo
+    {
+        /// <summary>
+        /// ID
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "ID")]
+        public int ID { get; set; }
+
+        /// <summary>
+        /// 业务名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false)]
+        public string BusName { get; set; }
+
+        /// <summary>
+        /// 业务名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string BarCode { get; set; }
+
+        /// <summary>
+        ///  异常描述信息
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 250, IsNullable = true)]
+        public string Message { get; set; }
+
+        /// <summary>
+        /// 次数
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = true)]
+        public int Count { get; set; }
+
+        /// <summary>
+        ///  memo
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 250, IsNullable = true)]
+        public string Memo { get; set; }
+
+        /// <summary>
+        /// AddTime
+        /// </summary>
+        [SugarColumn(ColumnDataType = "datetime", IsNullable = false)]
+        public DateTime AddTime { get; set; } = DateTime.Now;
+    }
+}

+ 390 - 0
YWGC/FJK/WCS.WorkEngineering/Model/WMS/BaseMatinfo.cs

@@ -0,0 +1,390 @@
+using SqlSugar;
+
+namespace WCS.WorkEngineering.Model.WMS
+{
+    /// <summary>
+    ///  物料表
+    /// </summary>
+    [Tenant("fj")]
+    [SugarTable("Base_MatInfo")]
+    public partial class BaseMatinfo : BaseModel
+    {
+        /// <summary>
+        ///  仓库ID
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
+        public long WarehouseId { get; set; }
+
+        /// <summary>
+        ///  编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false)]
+        public string Code { get; set; }
+
+        /// <summary>
+        ///  名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = false)]
+        public string Name { get; set; }
+
+        /// <summary>
+        ///  短描述
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string ShortDesc { get; set; }
+
+        /// <summary>
+        ///  长描述
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 500, IsNullable = true)]
+        public string FullDesc { get; set; }
+
+        /// <summary>
+        /// 补充描述
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 500, IsNullable = true)]
+        public string ExtDesc { get; set; }
+
+        /// <summary>
+        ///  英文名
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string Enname { get; set; }
+
+        /// <summary>
+        ///  组ID
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
+        public long MatGrpId { get; set; }
+
+        /// <summary>
+        ///  叶类编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string Leafcode { get; set; }
+
+        /// <summary>
+        ///  叶类名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string LeafName { get; set; }
+
+        /// <summary>
+        ///  中类编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string MidCode { get; set; }
+
+        /// <summary>
+        ///  中类名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string MidName { get; set; }
+
+        /// <summary>
+        ///  大类编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string HeadCode { get; set; }
+
+        /// <summary>
+        ///  大类名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string HeadName { get; set; }
+
+        /// <summary>
+        ///  规格型号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string Description { get; set; }
+
+        /// <summary>
+        ///  材质
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string Texture { get; set; }
+
+        /// <summary>
+        ///  图号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string FigureNo { get; set; }
+
+        /// <summary>
+        ///  强度
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string Strength { get; set; }
+
+        /// <summary>
+        ///  镀层
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string Plating { get; set; }
+
+        /// <summary>
+        ///  镀层克重
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? PlatingWeight { get; set; }
+
+        /// <summary>
+        ///  镀层主元素含量
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? PlatingContQty { get; set; }
+
+        /// <summary>
+        ///  线密度
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? Linear { get; set; }
+
+        /// <summary>
+        ///  产品号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string ProCode { get; set; }
+
+        /// <summary>
+        ///  产品描述
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string ProName { get; set; }
+
+        /// <summary>
+        ///  产品强度
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string ProStre { get; set; }
+
+        /// <summary>
+        ///  线密度上限
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? LinearMax { get; set; }
+
+        /// <summary>
+        ///  线密度下限
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? LinearMin { get; set; }
+
+        /// <summary>
+        ///  线密度目标值
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? LinearTar { get; set; }
+
+        /// <summary>
+        ///  单丝倍数
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? Mono { get; set; }
+
+        /// <summary>
+        ///  工字轮型号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string SpoolType { get; set; }
+
+        /// <summary>
+        ///  工字轮料号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string SpoolCode { get; set; }
+
+        /// <summary>
+        ///  单卷长度
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? Length { get; set; }
+
+        /// <summary>
+        ///  涂油量
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? OilQty { get; set; }
+
+        /// <summary>
+        ///  润滑液种类
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string LubType { get; set; }
+
+        /// <summary>
+        ///  排线间距
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? LineSpace { get; set; }
+
+        /// <summary>
+        ///  线长度
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? LineLength { get; set; }
+
+        /// <summary>
+        ///  捻向
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string LayDirect { get; set; }
+
+        /// <summary>
+        ///  客户标准索引号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string CumIndex { get; set; }
+
+        /// <summary>
+        ///  有无焊点
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string IsSolder { get; set; }
+
+        /// <summary>
+        ///  SKU号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string SkuCode { get; set; }
+
+        /// <summary>
+        ///  SKU描述
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)]
+        public string SkuDesc { get; set; }
+
+        /// <summary>
+        ///  控制扭转
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string Tors { get; set; }
+
+        /// <summary>
+        ///  包装组ID
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string PackGrpId { get; set; }
+
+        /// <summary>
+        ///  黑盘取样
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string BlackSamp { get; set; }
+
+        /// <summary>
+        ///  黑盘检验
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string BlackChk { get; set; }
+
+        /// <summary>
+        ///  客户编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string CustCode { get; set; }
+
+        /// <summary>
+        ///  客户描述
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string CustName { get; set; }
+
+        /// <summary>
+        ///  收货地址编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string AddressCode { get; set; }
+
+        /// <summary>
+        ///  收货地址名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string AddressName { get; set; }
+
+        /// <summary>
+        ///  生产批次数量(箱/批)
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? Qty { get; set; }
+
+        /// <summary>
+        ///  每箱最大焊点盘数(个)
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? BoxMaxSolder { get; set; }
+
+        /// <summary>
+        ///  工字轮最大焊点数(个)
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? SpoolMaxSolder { get; set; }
+
+        /// <summary>
+        ///  OVC比例
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? Ovc { get; set; }
+
+        /// <summary>
+        ///  起鼓等级
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string DrummLevel { get; set; }
+
+        /// <summary>
+        ///  公司代码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
+        public string ComCode { get; set; }
+
+        /// <summary>
+        ///  公司名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
+        public string ComName { get; set; }
+
+        /// <summary>
+        ///  计量单位
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 10, IsNullable = true)]
+        public string CalcUnit { get; set; }
+
+        /// <summary>
+        ///  库存单位
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 10, IsNullable = true)]
+        public string StockUnit { get; set; }
+
+        /// <summary>
+        ///  单重
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
+        public decimal? Weight { get; set; }
+
+        /// <summary>
+        ///  单重单位
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 10, IsNullable = true)]
+        public string WeightUnit { get; set; }
+
+        /// <summary>
+        ///  是否启用时效
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
+        public bool IsHold { get; set; }
+
+        /// <summary>
+        ///  时效时长(小时)
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
+        public decimal HoldDuration { get; set; }
+
+        /// <summary>
+        ///  超时时间-小时
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = true)]
+        public int TimeOut { get; set; }
+    }
+}

+ 49 - 0
YWGC/FJK/WCS.WorkEngineering/Model/WMS/BaseModel.cs

@@ -0,0 +1,49 @@
+using SqlSugar;
+
+namespace WCS.WorkEngineering.Model.WMS
+{
+    /// <summary>
+    ///  基础表实体
+    /// </summary>
+    public class BaseModel
+    {
+        public BaseModel()
+        { }
+
+        /// <summary>
+        ///  ID
+        /// </summary>
+        [SugarColumn(ColumnName = "Id", IsPrimaryKey = true, ColumnDescription = "ID")]
+        public virtual long Id { get; set; } = IdFactory.NewId();
+
+        /// <summary>
+        ///  备注
+        /// </summary>
+        [SugarColumn(ColumnName = "Memo", Length = 500, IsNullable = true, ColumnDataType = "nvarchar", DefaultValue = "", ColumnDescription = "备注")]
+        public virtual string Memo { get; set; }
+
+        /// <summary>
+        ///  创建用户
+        /// </summary>
+        [SugarColumn(ColumnName = "AddWho", Length = 50, ColumnDataType = "nvarchar", DefaultValue = "", IsNullable = false, ColumnDescription = "创建用户")]
+        public virtual string AddWho { get; set; } = "";
+
+        /// <summary>
+        ///  更新用户
+        /// </summary>
+        [SugarColumn(ColumnName = "EditWho", Length = 50, ColumnDataType = "nvarchar", DefaultValue = "", IsNullable = false, ColumnDescription = "更新用户")]
+        public virtual string EditWho { get; set; } = "";
+
+        /// <summary>
+        ///  创建时间
+        /// </summary>
+        [SugarColumn(ColumnName = "AddTime", DefaultValue = "1900-1-1", IsNullable = false, ColumnDescription = "创建时间")]
+        public virtual DateTime AddTime { get; set; } = DateTime.Now;
+
+        /// <summary>
+        /// 更新时间
+        /// </summary>
+        [SugarColumn(ColumnName = "EditTime", DefaultValue = "1900-1-1", IsNullable = false, ColumnDescription = "更新时间")]
+        public virtual DateTime EditTime { get; set; } = DateTime.Now;
+    }
+}

+ 42 - 0
YWGC/FJK/WCS.WorkEngineering/Model/WMS/BaseWarehouse.cs

@@ -0,0 +1,42 @@
+using SqlSugar;
+
+namespace WCS.WorkEngineering.Model.WMS
+{
+    /// <summary>
+    /// 仓库表
+    /// </summary>
+    [Tenant("fj")]
+    [SugarTable("Base_Warehouse")]
+    public class BaseWarehouse : BaseModel
+    {
+        //
+        // 摘要:
+        //     是否停用
+        [SugarColumn(ColumnDataType = "int", IsNullable = false)]
+        public int IsStop { get; set; }
+
+        //
+        // 摘要:
+        //     编号
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false)]
+        public string Code { get; set; }
+
+        //
+        // 摘要:
+        //     名称
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = false)]
+        public string Name { get; set; }
+
+        ////
+        //// 摘要:
+        ////     类型
+        //[SugarColumn(IsNullable = false)]
+        //public FjLocationType TypeNum { get; set; }
+
+        //
+        // 摘要:
+        //     ConfigId
+        [SugarColumn(ColumnName = "ConfigId", ColumnDescription = "ConfigId")]
+        public long ConfigId { get; set; }
+    }
+}

+ 114 - 0
YWGC/FJK/WCS.WorkEngineering/Model/WMS/BillBomsetgrp.cs

@@ -0,0 +1,114 @@
+using SqlSugar;
+
+namespace WCS.WorkEngineering.Model.WMS
+{
+    /// <summary>
+    ///  垛形主表
+    /// </summary>
+    [Tenant("fj")]
+    [SugarTable("Bill_BomSetGrp", tableDescription: "垛形主表")]
+    public partial class BillBomsetgrp
+    {
+        /// <summary>
+        ///  ID
+        /// </summary>
+        [SugarColumn(ColumnName = "Id", IsPrimaryKey = true, ColumnDescription = "ID")]
+        public virtual long Id { get; set; }
+
+        /// <summary>
+        ///  备注
+        /// </summary>
+        [SugarColumn(ColumnName = "Memo", Length = 500, IsNullable = true, ColumnDataType = "nvarchar", DefaultValue = "", ColumnDescription = "备注")]
+        public virtual string Memo { get; set; }
+
+        /// <summary>
+        ///  创建用户
+        /// </summary>
+        [SugarColumn(ColumnName = "AddWho", Length = 50, ColumnDataType = "nvarchar", DefaultValue = "", IsNullable = false, ColumnDescription = "创建用户")]
+        public virtual string AddWho { get; set; } = "";
+
+        /// <summary>
+        ///  更新用户
+        /// </summary>
+        [SugarColumn(ColumnName = "EditWho", Length = 50, ColumnDataType = "nvarchar", DefaultValue = "", IsNullable = false, ColumnDescription = "更新用户")]
+        public virtual string EditWho { get; set; } = "";
+
+        /// <summary>
+        ///  创建时间
+        /// </summary>
+        [SugarColumn(ColumnName = "AddTime", DefaultValue = "1900-1-1", IsNullable = false, ColumnDescription = "创建时间")]
+        public virtual DateTime AddTime { get; set; } = DateTime.Now;
+
+        /// <summary>
+        /// 更新时间
+        /// </summary>
+        [SugarColumn(ColumnName = "EditTime", DefaultValue = "1900-1-1", IsNullable = false, ColumnDescription = "更新时间")]
+        public virtual DateTime EditTime { get; set; } = DateTime.Now;
+
+        /// <summary>
+        /// 是否停用
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "是否停用")]
+        public int IsStop { get; set; }
+
+        /// <summary>
+        /// 垛型编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false, ColumnDescription = "垛型编码")]
+        public string Code { get; set; }
+
+        /// <summary>
+        ///  短垛型编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "smallint", IsNullable = false, ColumnDescription = "短垛型编码")]
+        public short ShortCode { get; set; }
+
+        /// <summary>
+        /// 垛型名称
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = false, ColumnDescription = "垛型名称")]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// BomCode(投料信息)
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = false, ColumnDescription = "BomCode(投料信息)")]
+        public string BomCode { get; set; }
+
+        /// <summary>
+        /// 帘线物料编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false, ColumnDescription = "帘线物料编码")]
+        public string ProMaterCode { get; set; }
+
+        /// <summary>
+        /// 工字轮个数
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "工字轮个数")]
+        public int HWCountQty { get; set; }
+
+        /// <summary>
+        /// 托盘类型
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false, ColumnDescription = "托盘类型")]
+        public string TpTypeCode { get; set; }
+
+        /// <summary>
+        /// 层数
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "层数")]
+        public int LayerCountQty { get; set; }
+
+        /// <summary>
+        /// 垛型大类
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = true, ColumnDescription = "垛型大类")]
+        public int StampType { get; set; }
+
+        /// <summary>
+        /// 是否在桁架进行码垛
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "是否在桁架进行码垛")]
+        public bool IsTruss { get; set; }
+    }
+}

+ 149 - 0
YWGC/FJK/WCS.WorkEngineering/Model/WMS/BillBomsetinfo.cs

@@ -0,0 +1,149 @@
+using SqlSugar;
+
+namespace WCS.WorkEngineering.Model.WMS
+{
+    /// <summary>
+    /// 垛型明细表
+    /// </summary>
+    [SugarTable("Bill_BomSetInfo", tableDescription: "垛型明细表")]
+    public partial class BillBomsetinfo
+    {
+        /// <summary>
+        ///  ID
+        /// </summary>
+        [SugarColumn(ColumnName = "Id", IsPrimaryKey = true, ColumnDescription = "ID")]
+        public virtual long Id { get; set; }
+
+        /// <summary>
+        ///  备注
+        /// </summary>
+        [SugarColumn(ColumnName = "Memo", Length = 500, IsNullable = true, ColumnDataType = "nvarchar", DefaultValue = "", ColumnDescription = "备注")]
+        public virtual string Memo { get; set; }
+
+        /// <summary>
+        ///  创建用户
+        /// </summary>
+        [SugarColumn(ColumnName = "AddWho", Length = 50, ColumnDataType = "nvarchar", DefaultValue = "", IsNullable = false, ColumnDescription = "创建用户")]
+        public virtual string AddWho { get; set; } = "";
+
+        /// <summary>
+        ///  更新用户
+        /// </summary>
+        [SugarColumn(ColumnName = "EditWho", Length = 50, ColumnDataType = "nvarchar", DefaultValue = "", IsNullable = false, ColumnDescription = "更新用户")]
+        public virtual string EditWho { get; set; } = "";
+
+        /// <summary>
+        ///  创建时间
+        /// </summary>
+        [SugarColumn(ColumnName = "AddTime", DefaultValue = "1900-1-1", IsNullable = false, ColumnDescription = "创建时间")]
+        public virtual DateTime AddTime { get; set; } = DateTime.Now;
+
+        /// <summary>
+        /// 更新时间
+        /// </summary>
+        [SugarColumn(ColumnName = "EditTime", DefaultValue = "1900-1-1", IsNullable = false, ColumnDescription = "更新时间")]
+        public virtual DateTime EditTime { get; set; } = DateTime.Now;
+
+        /// <summary>
+        /// 垛型id
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bigint", IsNullable = false, ColumnDescription = "垛型id")]
+        public long BomSetHdrId { get; set; }
+
+        /// <summary>
+        /// 是否停用
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "是否停用")]
+        public int IsStop { get; set; }
+
+        /// <summary>
+        /// 是否空置
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "是否空置")]
+        public int IsEmpty { get; set; }
+
+        /// <summary>
+        /// 坐标号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false, ColumnDescription = "坐标号")]
+        public string XYNo { get; set; }
+
+        /// <summary>
+        /// 物料id
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bigint", ColumnDescription = "物料id")]
+        public long MatId { get; set; }
+
+        /// <summary>
+        /// 物料编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", IsNullable = true, Length = 50, ColumnDescription = "物料编码")]
+        public string MatCode { get; set; }
+
+        /// <summary>
+        /// 正反面
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = true, ColumnDescription = "正反面")]
+        public int SideNum { get; set; }
+
+        /// <summary>
+        /// 工字轮类型
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true, ColumnDescription = "工字轮类型")]
+        public string SpoolType { get; set; }
+
+        /// <summary>
+        /// 钢丝类型
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true, ColumnDescription = "钢丝类型")]
+        public string SilkType { get; set; }
+
+        /// <summary>
+        /// 钢丝直径
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true, ColumnDescription = "钢丝直径")]
+        public decimal SilkDiam { get; set; }
+
+        /// <summary>
+        /// 钢丝直径上限
+        /// </summary>
+        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true, ColumnDescription = "钢丝直径上限")]
+        public decimal SilkDiamMaxCount { get; set; }
+
+        /// <summary>
+        /// 数量上限
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = true, ColumnDescription = "数量上限")]
+        public int QtyMaxCount { get; set; }
+
+        /// <summary>
+        /// 是否芯股
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "是否芯股")]
+        public int IsCore { get; set; }
+
+        /// <summary>
+        /// 09垛型里面的行(1-12)
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = true, ColumnDescription = "09垛型里面的行(1-12)")]
+        public int Row { get; set; }
+
+        /// <summary>
+        /// 是否混合料行(09垛型使用,1是0否)
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "是否混合料行(09垛型使用,1是0否)")]
+        public int IsMixRow { get; set; }
+
+        /// <summary>
+        /// 混合料行编码
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", IsNullable = true, Length = 50, ColumnDescription = "混合料行编码")]
+        public string MixRowCode { get; set; }
+
+        /// <summary>
+        ///  第一种第二种第三种
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "第一种第二种第三种")]
+        public int CategoryId { get; set; }
+    }
+}

+ 451 - 0
YWGC/FJK/WCS.WorkEngineering/Model/WMS/BillInvinit.cs

@@ -0,0 +1,451 @@
+using SqlSugar;
+
+namespace WCS.WorkEngineering.Model.WMS
+{
+    /// <summary>
+    ///  条码表
+    /// </summary>
+    [Tenant("fj")]
+    [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; }
+    }
+}

+ 463 - 0
YWGC/FJK/WCS.WorkEngineering/Model/WMS/BillInvnow.cs

@@ -0,0 +1,463 @@
+using SqlSugar;
+
+namespace WCS.WorkEngineering.Model.WMS
+{
+    /// <summary>
+    ///  库存表
+    /// </summary>
+    [Tenant("fj")]
+    [SugarTable("Bill_InvNow")]
+    public partial class BillInvnow : BaseModel
+    {
+        /// <summary>
+        ///  仓库ID 关联仓库表 ID
+        /// </summary>
+        [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
+        public long WarehouseId { get; set; }
+
+        /// <summary>
+        ///  组盘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>
+        /// 组盘类型(1物料盘 2空盘组 3空盘)
+        /// </summary>
+        [SugarColumn(IsNullable = true)]
+        public FJContGrpType ContGrpType { 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>
+        ///  是否扭转检测 / 在分拣中心表示人工组盘还是自动组盘  1表示人工组盘  0表示自动组盘
+        /// </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>
+        /// 正反面,1正面,2反面
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = true, ColumnDescription = "正反面")]
+        public int SideNum { 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 = true)]
+        public int Size { get; set; }
+
+        /// <summary>
+        ///  托盘类型
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "托盘类型")]
+        public FJPalletType PalletType { get; set; }
+
+        /// <summary>
+        ///  需要二次码垛的物料
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "循环码垛物料")]
+        public bool Secondary { get; set; }
+    }
+}

+ 72 - 0
YWGC/FJK/WCS.WorkEngineering/Model/WMS/BillRingPalletizingInfo.cs

@@ -0,0 +1,72 @@
+using SqlSugar;
+
+namespace WCS.WorkEngineering.Model.WMS
+{
+    /// <summary>
+    ///  环形库码垛缓存信息
+    /// </summary>
+    [Tenant("fj")]
+    [SugarTable("Bill_RingPalletizingInfo")]
+    public class BillRingPalletizingInfo : BaseModel
+    {
+        /// <summary>
+        ///  仓库ID
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "仓库ID")]
+        public long WareHouseId { get; set; }
+
+        /// <summary>
+        ///  任务
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(WareHouseId))]
+        public BaseWarehouse WareHouse { get; set; }
+
+        /// <summary>
+        ///  垛形主表ID
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "垛形主表ID")]
+        public long BomSetGrpId { get; set; }
+
+        /// <summary>
+        ///  垛形主表
+        /// </summary>
+        [Navigate(NavigateType.OneToOne, nameof(BomSetGrpId))]
+        public BillBomsetgrp BomsetGrp { get; set; }
+
+        /// <summary>
+        /// 工字轮个数
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "工字轮个数")]
+        public int HWCountQty { get; set; }
+
+        /// <summary>
+        /// BomCode(投料信息)/物料号
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = false, ColumnDescription = "BomCode(投料信息)")]
+        public string BomCode { get; set; }
+
+        /// <summary>
+        /// 已有工字轮个数
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "已有工字轮个数")]
+        public int HaveQty { get; set; }
+
+        /// <summary>
+        /// 是否出库
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "是否出库")]
+        public bool Out { get; set; }
+
+        /// <summary>
+        ///  上一次分配时的放置位信息
+        /// </summary>
+        [SugarColumn(ColumnDataType = "int", IsNullable = true)]
+        public int LastXYNO { get; set; }
+
+        /// <summary>
+        /// 码垛工位
+        /// </summary>
+        [SugarColumn(ColumnDataType = "nvarchar", Length = 20, IsNullable = true, ColumnDescription = "码垛工位(在直接码垛的环形库拥有此功能)")]
+        public string? MaDuoGongWei { get; set; }
+    }
+}

+ 35 - 0
YWGC/FJK/WCS.WorkEngineering/Model/WMS/IdFactory.cs

@@ -0,0 +1,35 @@
+using SqlSugar.DistributedSystem.Snowflake;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WCS.WorkEngineering.Model.WMS
+{
+    public static class IdFactory
+    {
+        private static readonly object locker = new object();
+        private static IdWorker _idworker;
+
+        public static IdWorker GetInstance()
+        {
+            if (_idworker == null)
+            {
+                lock (locker)
+                {
+                    if (_idworker == null)
+                    {
+                        _idworker = new IdWorker(1, 1);
+                    }
+                }
+            }
+            return _idworker;
+        }
+
+        public static long NewId()
+        {
+            return GetInstance().NextId();
+        }
+    }
+}

+ 196 - 0
YWGC/FJK/WCS.WorkEngineering/Model/WMS/WmsEnum.cs

@@ -0,0 +1,196 @@
+using System.ComponentModel;
+
+namespace WCS.WorkEngineering.Model.WMS
+{
+    /// <summary>
+    ///  组盘类型
+    /// </summary>
+    public enum FJContGrpType
+    {
+        /// <summary>
+        ///  物料盘
+        /// </summary>
+        [Description("物料盘")]
+        Material = 1,
+
+        /// <summary>
+        ///  空盘组
+        /// </summary>
+        [Description("空盘组")]
+        EmptyCon = 2,
+
+        /// <summary>
+        ///  空盘
+        /// </summary>
+        [Description("空盘")]
+        EmptyPal = 3,
+    }
+
+    /// <summary>
+    ///  出入库类型
+    /// </summary>
+    public enum FJInvInOutType
+    {
+        /// <summary>
+        ///  默认
+        /// </summary>
+        [Description("默认")]
+        Default = 0,
+
+        /// <summary>
+        /// 入库
+        /// </summary>
+        [Description("入库")]
+        In = 1,
+
+        /// <summary>
+        /// 出库
+        /// </summary>
+        [Description("出库")]
+        Out = 2,
+    }
+
+    /// <summary>
+    ///  托盘类型
+    /// </summary>
+    public enum FJPalletType
+    {
+        /// <summary>
+        ///  09使用的托盘
+        /// </summary>
+        [Description("09使用的托盘")]
+        Pallet09 = 1,
+
+        /// <summary>
+        ///  非09使用的托盘
+        /// </summary>
+        [Description("非09使用的托盘")]
+        PalletNo09 = 2,
+    }
+
+    /// <summary>
+    ///  分拣业务类型
+    /// </summary>
+    public enum FJTaskBusType
+    {
+        /// <summary>
+        ///  默认
+        /// </summary>
+        [Description("默认")]
+        def = 0,
+
+        /// <summary>
+        ///  一楼空托入库
+        /// </summary>
+        [Description("一楼空托入库")]
+        OneLayerManualPallets = 1,
+
+        /// <summary>
+        ///  一楼自动入空托盘
+        /// </summary>
+        [Description("一楼自动入空托盘")]
+        OneLayerAutoPallets = 2,
+
+        /// <summary>
+        ///  手动出库
+        /// </summary>
+        [Description("手动出库")]
+        TaskBusType_FJ_ManualOut = 3,
+
+        /// <summary>
+        ///  二楼组盘
+        /// </summary>
+        [Description("二楼组盘")]
+        二楼组盘 = 4,
+
+        /// <summary>
+        ///  二楼空托盘组出库
+        /// </summary>
+        [Description("二楼空托盘组出库")]
+        二楼空托盘组出库 = 5,
+
+        /// <summary>
+        ///  组盘_托盘
+        /// </summary>
+        [Description("组盘_托盘")]
+        组盘_托盘 = 6,
+
+        /// <summary>
+        ///  码垛入库
+        /// </summary>
+        [Description("码垛入库")]
+        码垛入库 = 7,
+
+        /// <summary>
+        ///  环形库出库码垛任务
+        /// </summary>
+        [Description("环形库出库码垛任务")]
+        环形库出库码垛任务 = 8,
+
+        /// <summary>
+        ///  车间叫料
+        /// </summary>
+        [Description("车间叫料")]
+        车间叫料 = 9,
+
+        /// <summary>
+        ///  二楼异常组盘
+        /// </summary>
+        [Description("二楼异常组盘")]
+        二楼异常组盘 = 10,
+
+        /// <summary>
+        ///  车间手动叫料
+        /// </summary>
+        [Description("车间手动叫料")]
+        车间手动叫料 = 11,
+
+        /// <summary>
+        ///  二楼二次码垛出库
+        /// </summary>
+        [Description("二楼二次码垛出库")]
+        二楼二次码垛出库 = 12,
+
+        /// <summary>
+        ///  人工满托入库
+        /// </summary>
+        [Description("人工满托入库")]
+        人工满托入库 = 13,
+
+        /// <summary>
+        ///  芯股用空托盘入库
+        /// </summary>
+        [Description("芯股用空托盘入库")]
+        芯股用空托盘入库 = 14,
+
+        /// <summary>
+        ///  芯股站台送空托
+        /// </summary>
+        [Description("芯股站台送空托")]
+        芯股站台送空托 = 15,
+
+        /// <summary>
+        ///  皮盘入库
+        /// </summary>
+        [Description("皮盘入库")]
+        皮盘入库 = 16,
+
+        /// <summary>
+        ///  重绕满托入库
+        /// </summary>
+        [Description("重绕满托入库")]
+        重绕满托入库 = 17,
+
+        /// <summary>
+        ///  帘线退料重绕
+        /// </summary>
+        [Description("帘线退料重绕")]
+        帘线退料重绕 = 18,
+
+        /// <summary>
+        ///  UT人工满托入库
+        /// </summary>
+        [Description("UT人工满托入库")]
+        UT人工满托入库 = 19,
+    }
+}

+ 51 - 0
YWGC/FJK/WCS.WorkEngineering/Model/WMS/fjSysConfig.cs

@@ -0,0 +1,51 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WCS.WorkEngineering.Systems;
+
+namespace WCS.WorkEngineering.Model.WMS
+{
+    /// <summary>
+    ///  配置信息表
+    /// </summary>
+    [Tenant("fj")]
+    [SugarTable("sys_config", "配置信息表")]
+    public class fjSysConfig : BaseModel
+    {
+        /// <summary>
+        ///  编号
+        /// </summary>
+        [SugarColumn(ColumnName = "code", Length = 100)]
+        public string Code { get; set; }
+
+        /// <summary>
+        ///  名称
+        /// </summary>
+        [SugarColumn(ColumnName = "name", Length = 100)]
+        public string Name { get; set; }
+
+        /// <summary>
+        ///  内容
+        /// </summary>
+        [SugarColumn(ColumnName = "scontent", Length = 100)]
+        public string SContent { get; set; }
+
+        /// <summary>
+        ///  类型
+        /// </summary>
+        [SugarColumn(ColumnName = "stype", Length = 50)]
+        public string SType { get; set; }
+
+        [SugarColumn(ColumnName = "default1", Length = 100, IsNullable = true)]
+        public string Default1 { get; set; }
+
+        [SugarColumn(ColumnName = "default2", Length = 100, IsNullable = true)]
+        public string Default2 { get; set; }
+
+        [SugarColumn(ColumnName = "default3", Length = 100, IsNullable = true)]
+        public string Default3 { get; set; }
+    }
+}

+ 30 - 27
YWGC/FJK/WCS.WorkEngineering/Systems/AgvSystems.cs

@@ -11,6 +11,7 @@ using WCS.Core;
 using WCS.Entity;
 using WCS.Entity.Protocol.Station;
 using WCS.WorkEngineering.Extensions;
+using WCS.WorkEngineering.Model.WMS;
 using WCS.WorkEngineering.WebApi.Controllers;
 using WCS.WorkEngineering.WebApi.Models.WMS.Request;
 using WCS.WorkEngineering.WebApi.Models.WMS.Response;
@@ -62,7 +63,7 @@ namespace WCS.WorkEngineering.Systems
                                     case AGVTaskStatus.RequestOrPermission2 when agv.Status != AGVTaskStatus.RequestOrPermission2:
                                         {
                                             var taskInfoPick = db.Default.Queryable<WCS_TaskInfo>().NoLock().First(v => v.ID == agv.TaskId);
-                                            if(taskInfoPick == null) throw new Exception($"未找到对应的WCS任务{agv.TaskId}");
+                                            if (taskInfoPick == null) throw new Exception($"未找到对应的WCS任务{agv.TaskId}");
                                             agv.Status = AGVTaskStatus.RequestOrPermission2;
                                             db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
                                             taskInfoPick.AddWCS_TASK_DTL(db.Default, "agv", $"允许AGV任务{agv.ID}在站台{agv.Station}取货");
@@ -115,7 +116,7 @@ namespace WCS.WorkEngineering.Systems
                                                     db.Default.UpdateableRowLock(taskInfoFinish).UpdateColumns(x => new { x.Status, x.EndTime }).ExecuteCommand();
                                                     taskInfoFinish.AddWCS_TASK_DTL(db.Default, "agv", "任务完成");
                                                     taskInfos.Add(taskInfoFinish);
-                                                }  
+                                                }
                                             }
                                             else
                                             {
@@ -166,9 +167,9 @@ namespace WCS.WorkEngineering.Systems
                                             agv.Status = AGVTaskStatus.Confirm;
                                             agv.AgvStatus = AGVTaskStatus.Confirm;
                                             db.Default.UpdateableRowLock(agv).SplitTable(x => x.Take(2)).ExecuteCommand();
-                                        }                                                                             
+                                        }
                                         //人工满托入库
-                                        if (agv.TaskType == AGVTaskType.EnterDepot &&(agv.Station == "2535" || agv.Station == "2935" || agv.Station == "2735" || agv.Station == "3135"))
+                                        if (agv.TaskType == AGVTaskType.EnterDepot && (agv.Station == "2535" || agv.Station == "2935" || agv.Station == "2735" || agv.Station == "3135"))
                                         {
                                             //fjSysConfig config1 = new fjSysConfig();
                                             var config1 = db.Default.Queryable<fjSysConfig>().NoLock().First(x => x.Code == "FullPalletInMax");
@@ -213,9 +214,9 @@ namespace WCS.WorkEngineering.Systems
                                         //重绕退料区搬运
                                         else if (agv.WorkShop == 333)
                                         {
-                                            AgvApi.退料搬运(agv.Position, agv.ID.ToString(), agv.Station);                                        
+                                            AgvApi.退料搬运(agv.Position, agv.ID.ToString(), agv.Station);
                                         }
-                                        else if(agv.WorkShop != 111)
+                                        else if (agv.WorkShop != 111)
                                         {
                                             AgvApi.托盘回库(agv.Position, agv.ID.ToString(), agv.Station);
                                         }
@@ -238,32 +239,32 @@ namespace WCS.WorkEngineering.Systems
                                                 {
                                                     case "2501":
                                                         positionList.AddRange(new List<string>() { "2501", "2505", "2509", "2513" });
-                                                        
+
                                                         break;
 
                                                     case "2701":
                                                         positionList.AddRange(new List<string>() { "2701", "2705", "2709", "2713" });
-                                                        
+
                                                         break;
 
                                                     case "2901":
                                                         positionList.AddRange(new List<string>() { "2901", "2905", "2909", "2913" });
-                                                       
+
                                                         break;
 
                                                     case "3101":
                                                         positionList.AddRange(new List<string>() { "3101", "3105", "3109", "3113" });
-                                                        
+
                                                         break;
 
                                                     case "3301":
                                                         positionList.AddRange(new List<string>() { "3301", "3305", "3309", "3313" });
-                                                        
+
                                                         break;
 
                                                     case "3501":
                                                         positionList.AddRange(new List<string>() { "3501", "3505", "3509", "3513" });
-                                                        
+
                                                         break;
                                                 }
 
@@ -326,7 +327,9 @@ namespace WCS.WorkEngineering.Systems
                                                     if (!devs.Any()) //自身所属位置无可用放货点
                                                     {
                                                         throw new Exception($"当前任务{agv.ID}无可用站台");
-                                                        #region  弃用
+
+                                                        #region 弃用
+
                                                         //if (devsNear.Any())//先判断同库一侧
                                                         //{
                                                         //    foreach (var dev in devsNear)
@@ -367,7 +370,8 @@ namespace WCS.WorkEngineering.Systems
                                                         //}
                                                         World.Log("可用站台均有货或有执行中任务");
                                                         return;
-                                                        #endregion
+
+                                                        #endregion 弃用
                                                     }
                                                     World.Log($"任务执行过程:开始{agv.ID}-{JsonConvert.SerializeObject(devs.Select(x => x.Entity.Code).ToList())}");
                                                     agv.Status = AGVTaskStatus.Complete1;
@@ -388,7 +392,7 @@ namespace WCS.WorkEngineering.Systems
                                             {
                                                 var con = db.Default.Queryable<fjSysConfig>().NoLock().First(x => x.Code == "CRTLZone").SContent;
                                                 var isUse = false || con != null && con == "1";
-                                                //首先判断退料输送线是否可放货                                               
+                                                //首先判断退料输送线是否可放货
                                                 var ph_9001 = new Device<IStation523>(Device.All.First(x => x.Code == "9001"), World);
                                                 var ph_9101 = new Device<IStation523>(Device.All.First(x => x.Code == "9101"), World);
                                                 var flag1 = !db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && v.Station == "9001")
@@ -438,7 +442,7 @@ namespace WCS.WorkEngineering.Systems
                                                 {
                                                     List<string> allDevs = new List<string> { "9210", "9211", "9212", "9213", "9214",/* "9215", "9216", "9217", "9218" */};
 
-                                                    var agvStas = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && (allDevs.Contains(v.Station)|| allDevs.Contains(v.Position)))
+                                                    var agvStas = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && (allDevs.Contains(v.Station) || allDevs.Contains(v.Position)))
                                                     .SplitTable(v => v.Take(2)).ToList();
                                                     var agvStaLists = agvStas.Select(x => x.Station).Distinct();
                                                     var devs = allDevs.Where(x => !agvStaLists.Contains(x)).ToList();
@@ -461,8 +465,8 @@ namespace WCS.WorkEngineering.Systems
                                                                 !db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && (v.Station == dev.Entity.Code || v.Position == dev.Entity.Code))
                                                                 .SplitTable(v => v.Take(2)).Any())
                                                             {
-                                                                var sta = dev.Entity.Code; 
-                                                                var res = WmsApi.GetFlatLocalIn(agv.TaskId,"T2",dev.Entity.Code,1);
+                                                                var sta = dev.Entity.Code;
+                                                                var res = WmsApi.GetFlatLocalIn(agv.TaskId, "T2", dev.Entity.Code, 1);
                                                                 if (res.ResCode == ResponseStatusCodeEnum.Sucess && res.ResData.CellNo == dev.Entity.Code)
                                                                 {
                                                                     sta = dev.Entity.Code;
@@ -497,7 +501,7 @@ namespace WCS.WorkEngineering.Systems
                                                 {
                                                     throw new Exception("已无可用放货站台,请等待");
                                                 }
-                                            }                                            
+                                            }
                                             break;
                                         }
                                     //放货站点安全交互
@@ -505,18 +509,18 @@ namespace WCS.WorkEngineering.Systems
                                         {
                                             if (agv.Station.IsNullOrEmpty()) throw new Exception($"无有效放货地址");
                                             //var dev = Device.All.First(x => x.Code == agv.Station);
-                                            var devPut = new Device<IStation520, IStation521,IStation523>(Device.All.First(x => x.Code == agv.Station), World);
+                                            var devPut = new Device<IStation520, IStation521, IStation523>(Device.All.First(x => x.Code == agv.Station), World);
                                             var taskPut = db.Default.Queryable<WCS_TaskOld>().NoLock().Where(x => x.Id == agv.TaskId).SplitTable(x => x.Take(2)).First();
                                             var flag = false;
                                             if (taskPut == null)
                                             {
                                                 throw new Exception($"未找到WCS任务{agv.TaskId},请确认任务状态");
                                             }
-                                            else if(taskPut.BusType == "人工满托入库")                                           
+                                            else if (taskPut.BusType == "人工满托入库")
                                             {
                                                 flag = true;
                                             }
-                                            
+
                                             if (devPut.Data3.Status.HasFlag(StationStatus.PH_Status))
                                             {
                                                 throw new Exception($"{agv.Station}站台有光电小车无法放货,请检查实际情况并处理");
@@ -542,16 +546,15 @@ namespace WCS.WorkEngineering.Systems
                                             {
                                                 devPut.Data.CmdType = StationCmd.Res1;
                                             }
-                                            
+
                                             //调继续执行任务接口
                                             AgvApi.ContinueTask(agv.AgvID, agv.Station);
                                             break;
                                         }
                                     case AGVTaskStatus.LeavePut when agv.Status != AGVTaskStatus.LeavePut:
 
-
                                         break;
-                                   
+
                                     //完成任务
                                     case AGVTaskStatus.MissionCompleted when agv.Status != AGVTaskStatus.MissionCompleted:
                                         var taskold = db.Default.Queryable<WCS_TaskOld>().NoLock().Where(x => x.Id == agv.TaskId).SplitTable(x => x.Take(2)).First();
@@ -564,7 +567,7 @@ namespace WCS.WorkEngineering.Systems
                                             {
                                                 devinfo.Data.CmdType = StationCmd.Res2;
                                             }
-                                            
+
                                             if (taskold.LastInteractionPoint == "2" || taskold.BusType == TaskBusType.重绕满托入库.GetDescription() || taskold.BusType == TaskBusType.帘线退料重绕.GetDescription()) //如果是单独取空任务直接完成
                                             {
                                                 var task = db.Default.Queryable<WCS_TaskInfo>().NoLock().Where(x => x.ID == agv.TaskId).First();
@@ -604,7 +607,7 @@ namespace WCS.WorkEngineering.Systems
                                                 task.EndTime = DateTime.Now;
                                                 db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.EndTime }).ExecuteCommand();
                                                 task.AddWCS_TASK_DTL(db.Default, "agv", "任务取消");
-                                            }   
+                                            }
                                         }
                                         break;
                                 }

+ 1 - 0
YWGC/FJK/WCS.WorkEngineering/Systems/NoInteractionSystems.cs

@@ -9,6 +9,7 @@ using WCS.Core;
 using WCS.Entity;
 using WCS.Entity.Protocol.Station;
 using WCS.WorkEngineering.Extensions;
+using WCS.WorkEngineering.Model.WMS;
 using WCS.WorkEngineering.WebApi.Controllers;
 using WCS.WorkEngineering.WebApi.Models.WMS.Request;
 using WCS.WorkEngineering.Worlds;

+ 3 - 1013
YWGC/FJK/WCS.WorkEngineering/Systems/RGVSystems.cs

@@ -12,6 +12,7 @@ using WCS.Entity.Protocol.Robot;
 using WCS.Entity.Protocol.Station;
 using WCS.Entity.Protocol.Truss;
 using WCS.WorkEngineering.Extensions;
+using WCS.WorkEngineering.Model.WMS;
 using WCS.WorkEngineering.Worlds;
 using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
 using TaskStatus = WCS.Entity.TaskStatus;
@@ -97,7 +98,8 @@ namespace WCS.WorkEngineering.Systems
 
                                         var taskInfos = db.Queryable<WCS_TaskInfo>().Where(x => x.BarCode == bcrCode && x.Status == TaskStatus.NewBuild && x.BusType == "人工满托入库"
                                         || (x.BusType == "重绕满托入库" && x.Status == TaskStatus.WaitingToExecute)).ToList();
-                                        if (!taskInfos.Any()) {
+                                        if (!taskInfos.Any())
+                                        {
                                             World.Log($"未找到托盘条码{bcrCode}对应任务,请联系智能制造组人员确认", LogLevelEnum.Mid);
                                             return;
                                         }
@@ -328,8 +330,6 @@ namespace WCS.WorkEngineering.Systems
                     return;
                 }
 
-              
-
                 if (obj.Data2.CmdType == RGVCmdType.PickGoods && !obj.Data2.Status.HasFlag(RGVStatus.Taskfinishi))
                 {
                     if (obj.Data2.Status.HasFlag(RGVStatus.PH_Status))
@@ -463,1016 +463,6 @@ namespace WCS.WorkEngineering.Systems
         public override bool Select(Device dev)
         {
             return dev.Code is "RGV1" or "RGV2" or "RGV3" or "RGV4" or "RGV5" or "RGV6";
-            //return dev.HasFlag(Extensions.DeviceFlags.RGV);
         }
     }
-
-    /// <summary>
-    ///  库存表
-    /// </summary>
-    [SugarTable("Bill_InvNow")]
-    public partial class BillInvnow : BaseModel
-    {
-        /// <summary>
-        ///  仓库ID 关联仓库表 ID
-        /// </summary>
-        [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
-        public long WarehouseId { get; set; }
-
-        /// <summary>
-        ///  组盘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>
-        /// 组盘类型(1物料盘 2空盘)
-        /// </summary>
-        [SugarColumn(IsNullable = true)]
-        public FJContGrpType ContGrpType { 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 = "int", IsNullable = true, ColumnDescription = "正反面")]
-        public int SideNum { 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 = true)]
-        public int Size { get; set; }
-
-        /// <summary>
-        ///  托盘类型
-        /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDescription = "托盘类型")]
-        public FJPalletType PalletType { get; set; }
-
-        /// <summary>
-        ///  需要二次码垛的物料
-        /// </summary>
-        [SugarColumn(IsNullable = true, ColumnDescription = "循环码垛物料")]
-        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>
-    public class BaseModel
-    {
-        public BaseModel()
-        { }
-
-        /// <summary>
-        ///  ID
-        /// </summary>
-        [SugarColumn(ColumnName = "Id", IsPrimaryKey = true, ColumnDescription = "ID")]
-        public virtual long Id { get; set; }
-
-        /// <summary>
-        ///  备注
-        /// </summary>
-        [SugarColumn(ColumnName = "Memo", Length = 500, IsNullable = true, ColumnDataType = "nvarchar", DefaultValue = "", ColumnDescription = "备注")]
-        public virtual string Memo { get; set; }
-
-        /// <summary>
-        ///  创建用户
-        /// </summary>
-        [SugarColumn(ColumnName = "AddWho", Length = 50, ColumnDataType = "nvarchar", DefaultValue = "", IsNullable = false, ColumnDescription = "创建用户")]
-        public virtual string AddWho { get; set; } = "";
-
-        /// <summary>
-        ///  更新用户
-        /// </summary>
-        [SugarColumn(ColumnName = "EditWho", Length = 50, ColumnDataType = "nvarchar", DefaultValue = "", IsNullable = false, ColumnDescription = "更新用户")]
-        public virtual string EditWho { get; set; } = "";
-
-        /// <summary>
-        ///  创建时间
-        /// </summary>
-        [SugarColumn(ColumnName = "AddTime", DefaultValue = "1900-1-1", IsNullable = false, ColumnDescription = "创建时间")]
-        public virtual DateTime AddTime { get; set; } = DateTime.Now;
-
-        /// <summary>
-        /// 更新时间
-        /// </summary>
-        [SugarColumn(ColumnName = "EditTime", DefaultValue = "1900-1-1", IsNullable = false, ColumnDescription = "更新时间")]
-        public virtual DateTime EditTime { get; set; } = DateTime.Now;
-    }
-
-    /// <summary>
-    ///  组盘类型
-    /// </summary>
-    public enum FJContGrpType
-    {
-        /// <summary>
-        ///  物料盘
-        /// </summary>
-        [Description("物料盘")]
-        Material = 1,
-
-        /// <summary>
-        ///  空盘
-        /// </summary>
-        [Description("空盘")]
-        EmptyCon = 2,
-    }
-
-    /// <summary>
-    ///  托盘类型
-    /// </summary>
-    public enum FJPalletType
-    {
-        /// <summary>
-        ///  09使用的托盘
-        /// </summary>
-        [Description("09使用的托盘")]
-        Pallet09 = 1,
-
-        /// <summary>
-        ///  非09使用的托盘
-        /// </summary>
-        [Description("非09使用的托盘")]
-        PalletNo09 = 2,
-    }
-
-    /// <summary>
-    ///  出入库类型
-    /// </summary>
-    public enum FJInvInOutType
-    {
-        /// <summary>
-        ///  默认
-        /// </summary>
-        [Description("默认")]
-        Default = 0,
-
-        /// <summary>
-        /// 入库
-        /// </summary>
-        [Description("入库")]
-        In = 1,
-
-        /// <summary>
-        /// 出库
-        /// </summary>
-        [Description("出库")]
-        Out = 2,
-    }
 }

+ 1 - 427
YWGC/FJK/WCS.WorkEngineering/Systems/分拣主线/满轮主线预写入目标地址.cs

@@ -10,6 +10,7 @@ using WCS.Entity;
 using WCS.Entity.Protocol.BCR;
 using WCS.Entity.Protocol.Station;
 using WCS.WorkEngineering.Extensions;
+using WCS.WorkEngineering.Model.WMS;
 using WCS.WorkEngineering.Worlds;
 using TaskStatus = WCS.Entity.TaskStatus;
 
@@ -189,431 +190,4 @@ namespace WCS.WorkEngineering.Systems
         /// </summary>
         public string WarehouseCode { get; set; }
     }
-
-    /// <summary>
-    ///  配置信息表
-    /// </summary>
-    [Tenant("fj")]
-    [SugarTable("sys_config", "配置信息表")]
-    public class fjSysConfig : BaseModel
-    {
-        /// <summary>
-        ///  编号
-        /// </summary>
-        [SugarColumn(ColumnName = "code", Length = 100)]
-        public string Code { get; set; }
-
-        /// <summary>
-        ///  名称
-        /// </summary>
-        [SugarColumn(ColumnName = "name", Length = 100)]
-        public string Name { get; set; }
-
-        /// <summary>
-        ///  内容
-        /// </summary>
-        [SugarColumn(ColumnName = "scontent", Length = 100)]
-        public string SContent { get; set; }
-
-        /// <summary>
-        ///  类型
-        /// </summary>
-        [SugarColumn(ColumnName = "stype", Length = 50)]
-        public string SType { get; set; }
-
-        [SugarColumn(ColumnName = "default1", Length = 100, IsNullable = true)]
-        public string Default1 { get; set; }
-
-        [SugarColumn(ColumnName = "default2", Length = 100, IsNullable = true)]
-        public string Default2 { get; set; }
-
-        [SugarColumn(ColumnName = "default3", Length = 100, IsNullable = true)]
-        public string Default3 { get; set; }
-    }
-
-    /// <summary>
-    ///  物料表
-    /// </summary>
-    [Tenant("fj")]
-    [SugarTable("Base_MatInfo")]
-    public partial class BaseMatinfo : BaseModel
-    {
-        /// <summary>
-        ///  仓库ID
-        /// </summary>
-        [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
-        public long WarehouseId { get; set; }
-
-        /// <summary>
-        ///  编码
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false)]
-        public string Code { get; set; }
-
-        /// <summary>
-        ///  名称
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = false)]
-        public string Name { get; set; }
-
-        /// <summary>
-        ///  短描述
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
-        public string ShortDesc { get; set; }
-
-        /// <summary>
-        ///  长描述
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 500, IsNullable = true)]
-        public string FullDesc { get; set; }
-
-        /// <summary>
-        /// 补充描述
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 500, IsNullable = true)]
-        public string ExtDesc { get; set; }
-
-        /// <summary>
-        ///  英文名
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
-        public string Enname { get; set; }
-
-        /// <summary>
-        ///  组ID
-        /// </summary>
-        [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
-        public long MatGrpId { get; set; }
-
-        /// <summary>
-        ///  叶类编码
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
-        public string Leafcode { get; set; }
-
-        /// <summary>
-        ///  叶类名称
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
-        public string LeafName { get; set; }
-
-        /// <summary>
-        ///  中类编码
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
-        public string MidCode { get; set; }
-
-        /// <summary>
-        ///  中类名称
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
-        public string MidName { get; set; }
-
-        /// <summary>
-        ///  大类编码
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
-        public string HeadCode { get; set; }
-
-        /// <summary>
-        ///  大类名称
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
-        public string HeadName { get; set; }
-
-        /// <summary>
-        ///  规格型号
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
-        public string Description { get; set; }
-
-        /// <summary>
-        ///  材质
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
-        public string Texture { get; set; }
-
-        /// <summary>
-        ///  图号
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
-        public string FigureNo { get; set; }
-
-        /// <summary>
-        ///  强度
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
-        public string Strength { get; set; }
-
-        /// <summary>
-        ///  镀层
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
-        public string Plating { get; set; }
-
-        /// <summary>
-        ///  镀层克重
-        /// </summary>
-        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
-        public decimal? PlatingWeight { get; set; }
-
-        /// <summary>
-        ///  镀层主元素含量
-        /// </summary>
-        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
-        public decimal? PlatingContQty { get; set; }
-
-        /// <summary>
-        ///  线密度
-        /// </summary>
-        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
-        public decimal? Linear { get; set; }
-
-        /// <summary>
-        ///  产品号
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
-        public string ProCode { get; set; }
-
-        /// <summary>
-        ///  产品描述
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
-        public string ProName { get; set; }
-
-        /// <summary>
-        ///  产品强度
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
-        public string ProStre { get; set; }
-
-        /// <summary>
-        ///  线密度上限
-        /// </summary>
-        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
-        public decimal? LinearMax { get; set; }
-
-        /// <summary>
-        ///  线密度下限
-        /// </summary>
-        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
-        public decimal? LinearMin { get; set; }
-
-        /// <summary>
-        ///  线密度目标值
-        /// </summary>
-        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
-        public decimal? LinearTar { get; set; }
-
-        /// <summary>
-        ///  单丝倍数
-        /// </summary>
-        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
-        public decimal? Mono { get; set; }
-
-        /// <summary>
-        ///  工字轮型号
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
-        public string SpoolType { get; set; }
-
-        /// <summary>
-        ///  工字轮料号
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
-        public string SpoolCode { get; set; }
-
-        /// <summary>
-        ///  单卷长度
-        /// </summary>
-        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
-        public decimal? Length { get; set; }
-
-        /// <summary>
-        ///  涂油量
-        /// </summary>
-        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
-        public decimal? OilQty { get; set; }
-
-        /// <summary>
-        ///  润滑液种类
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
-        public string LubType { get; set; }
-
-        /// <summary>
-        ///  排线间距
-        /// </summary>
-        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
-        public decimal? LineSpace { get; set; }
-
-        /// <summary>
-        ///  线长度
-        /// </summary>
-        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
-        public decimal? LineLength { get; set; }
-
-        /// <summary>
-        ///  捻向
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
-        public string LayDirect { get; set; }
-
-        /// <summary>
-        ///  客户标准索引号
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
-        public string CumIndex { get; set; }
-
-        /// <summary>
-        ///  有无焊点
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
-        public string IsSolder { get; set; }
-
-        /// <summary>
-        ///  SKU号
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
-        public string SkuCode { get; set; }
-
-        /// <summary>
-        ///  SKU描述
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)]
-        public string SkuDesc { get; set; }
-
-        /// <summary>
-        ///  控制扭转
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
-        public string Tors { get; set; }
-
-        /// <summary>
-        ///  包装组ID
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
-        public string PackGrpId { get; set; }
-
-        /// <summary>
-        ///  黑盘取样
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
-        public string BlackSamp { get; set; }
-
-        /// <summary>
-        ///  黑盘检验
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
-        public string BlackChk { get; set; }
-
-        /// <summary>
-        ///  客户编码
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
-        public string CustCode { get; set; }
-
-        /// <summary>
-        ///  客户描述
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
-        public string CustName { get; set; }
-
-        /// <summary>
-        ///  收货地址编码
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
-        public string AddressCode { get; set; }
-
-        /// <summary>
-        ///  收货地址名称
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
-        public string AddressName { get; set; }
-
-        /// <summary>
-        ///  生产批次数量(箱/批)
-        /// </summary>
-        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
-        public decimal? Qty { get; set; }
-
-        /// <summary>
-        ///  每箱最大焊点盘数(个)
-        /// </summary>
-        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
-        public decimal? BoxMaxSolder { get; set; }
-
-        /// <summary>
-        ///  工字轮最大焊点数(个)
-        /// </summary>
-        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
-        public decimal? SpoolMaxSolder { get; set; }
-
-        /// <summary>
-        ///  OVC比例
-        /// </summary>
-        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
-        public decimal? Ovc { get; set; }
-
-        /// <summary>
-        ///  起鼓等级
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
-        public string DrummLevel { get; set; }
-
-        /// <summary>
-        ///  公司代码
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
-        public string ComCode { get; set; }
-
-        /// <summary>
-        ///  公司名称
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
-        public string ComName { get; set; }
-
-        /// <summary>
-        ///  计量单位
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 10, IsNullable = true)]
-        public string CalcUnit { get; set; }
-
-        /// <summary>
-        ///  库存单位
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 10, IsNullable = true)]
-        public string StockUnit { get; set; }
-
-        /// <summary>
-        ///  单重
-        /// </summary>
-        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
-        public decimal? Weight { get; set; }
-
-        /// <summary>
-        ///  单重单位
-        /// </summary>
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 10, IsNullable = true)]
-        public string WeightUnit { get; set; }
-
-        /// <summary>
-        ///  是否启用时效
-        /// </summary>
-        [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
-        public bool IsHold { get; set; }
-
-        /// <summary>
-        ///  时效时长(小时)
-        /// </summary>
-        [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
-        public decimal HoldDuration { get; set; }
-
-        /// <summary>
-        ///  超时时间-小时
-        /// </summary>
-        [SugarColumn(ColumnDataType = "int", IsNullable = true)]
-        public int TimeOut { get; set; }
-    }
 }

+ 131 - 20
YWGC/FJK/WCS.WorkEngineering/Systems/分拣支线/环形库分流点.cs

@@ -8,7 +8,9 @@ using WCS.Core;
 using WCS.Entity;
 using WCS.Entity.Protocol.Station;
 using WCS.WorkEngineering.Extensions;
+using WCS.WorkEngineering.Model.WMS;
 using WCS.WorkEngineering.WebApi.Controllers;
+using WCS.WorkEngineering.WebApi.Models.WMS.Request;
 using WCS.WorkEngineering.Worlds;
 using TaskStatus = WCS.Entity.TaskStatus;
 
@@ -83,9 +85,11 @@ namespace WCS.WorkEngineering.Systems
                             case 1:
                                 WmsApi.PalletizingCreateseErrorTasks(obj.Entity.Code, type);
                                 break;
+
                             case 3: //bc质量
                                 WmsApi.PalletizingCreateseErrorTasks(obj.Entity.Code, type, 3);
                                 break;
+
                             case 2: //南北流错
                                 WmsApi.PalletizingCreateseErrorTasks(obj.Entity.Code, type, 2);
                                 break;
@@ -97,7 +101,7 @@ namespace WCS.WorkEngineering.Systems
                     {
                         //更新任务状态
                         taskInfo.Status = TaskStatus.WaitingToExecute;
-                        taskInfo.EditTime =DateTime.Now;
+                        taskInfo.EditTime = DateTime.Now;
                         taskInfo.EditWho = "WCS";
                         db.UpdateableRowLock(taskInfo).ExecuteCommand();
                         taskInfo.AddWCS_TASK_DTL(db, obj.Entity.Code, $"初始化异常轮入库任务信息");
@@ -105,11 +109,11 @@ namespace WCS.WorkEngineering.Systems
                     }
                 }
 
-                taskInfo = db.Queryable<WCS_TaskInfo>().NoLock().First(v => v.ID == obj.Data2.TaskNumber && v.Status < TaskStatus.FinishOfShunt );
+                taskInfo = db.Queryable<WCS_TaskInfo>().NoLock().First(v => v.ID == obj.Data2.TaskNumber && v.Status < TaskStatus.FinishOfShunt);
                 if (taskInfo == null)
                 {
-                    taskInfo = db.Queryable<WCS_TaskInfo>().NoLock().First(x => x.AddrFrom == obj.Entity.Code && x.BarCode.Contains("Error") && x.Status== TaskStatus.WaitingToExecute && x.AddrNext == null && x.GoodsType == goodsType);
-                    if (taskInfo==null)
+                    taskInfo = db.Queryable<WCS_TaskInfo>().NoLock().First(x => x.AddrFrom == obj.Entity.Code && x.BarCode.Contains("Error") && x.Status == TaskStatus.WaitingToExecute && x.AddrNext == null && x.GoodsType == goodsType);
+                    if (taskInfo == null)
                     {
                         World.Log($"未找到对应的WCS任务{obj.Data2.TaskNumber},1", LogLevelEnum.High);
                         return;
@@ -123,7 +127,7 @@ namespace WCS.WorkEngineering.Systems
                     obj.Data.VoucherNo++;
                     World.Log($"超时执行记录:任务号[{taskInfo.ID}]-[{obj.Data.TaskNumber}]-[{obj.Data.VoucherNo}]");
                     return;
-                } 
+                }
                 if (taskInfo.Grade != null && (taskInfo.Grade.ToUpper() != "A") && obj.Data2.TaskNumber == taskInfo.ID)
                 {
                     obj.Data.TaskNumber = 3;
@@ -140,12 +144,15 @@ namespace WCS.WorkEngineering.Systems
                         case 9 when !taskInfo.BarCode.Contains("HAWS09"):
                             World.Log($"外检结果与任务条码不匹配--外检结果:[{goodsType}]-条码[{taskInfo.BarCode}]", LogLevelEnum.High);
                             return;
+
                         case 18 when !taskInfo.BarCode.Contains("HAWS18"):
                             World.Log($"外检结果与任务条码不匹配--外检结果:[{goodsType}]-条码[{taskInfo.BarCode}]", LogLevelEnum.High);
                             return;
+
                         case 34 when !taskInfo.BarCode.Contains("HAWS34"):
                             World.Log($"外检结果与任务条码不匹配--外检结果:[{goodsType}]-条码[{taskInfo.BarCode}]", LogLevelEnum.High);
                             return;
+
                         case 50 when !taskInfo.BarCode.Contains("HAWS50"):
                             World.Log($"外检结果与任务条码不匹配--外检结果:[{goodsType}]-条码[{taskInfo.BarCode}]", LogLevelEnum.High);
                             return;
@@ -179,7 +186,7 @@ namespace WCS.WorkEngineering.Systems
                                 EditFlow(taskInfo, "1S", db, obj.Entity.Code);
                                 return;
                             }
-                           
+
                             WriteInfo(obj, taskInfo);
                             return;
                         }
@@ -226,7 +233,7 @@ namespace WCS.WorkEngineering.Systems
                                 EditFlow(taskInfo, "3N", db, obj.Entity.Code);
                                 return;
                             }
-                            
+
                             WriteInfo(obj, taskInfo);
                             return;
                         }
@@ -260,7 +267,7 @@ namespace WCS.WorkEngineering.Systems
                         World.Log($"未找到任务{taskInfo.ID}对应垛型信息,请确认垛型是否停用", LogLevelEnum.Mid);
                         return;
                     }
-                    
+
                     if (toTruss.IsTruss)
                     {
                         nextAdd = obj.Entity.Code switch
@@ -279,24 +286,112 @@ namespace WCS.WorkEngineering.Systems
                 taskInfo = db.Queryable<WCS_TaskInfo>().ReadPastUpdLock().First(v => v.ID == obj.Data2.TaskNumber && v.Status < TaskStatus.FinishOfShunt && !v.BarCode.Contains("Error"));
                 if (taskInfo == null)
                 {
-                    taskInfo = db.Queryable<WCS_TaskInfo>().ReadPastUpdLock().First(x => x.AddrFrom == obj.Entity.Code && x.BarCode.Contains("Error") && x.Status== TaskStatus.WaitingToExecute && x.AddrNext == null && x.GoodsType == goodsType);
-                    if (taskInfo==null)
+                    taskInfo = db.Queryable<WCS_TaskInfo>().ReadPastUpdLock().First(x => x.AddrFrom == obj.Entity.Code && x.BarCode.Contains("Error") && x.Status == TaskStatus.WaitingToExecute && x.AddrNext == null && x.GoodsType == goodsType);
+                    if (taskInfo == null)
                     {
                         World.Log($"未找到对应的WCS任务{obj.Data2.TaskNumber},2", LogLevelEnum.Mid);
                         return;
-                    };
+                    }
+                    ;
                 }
                 taskId = taskInfo.ID;
                 if (goodsType != 9 && !isTruss) //09工字轮在环形库分流点只分配下一个地址,不作任何变更
                 {
-                    taskInfo.AddrNext = nextAdd.ToString();
-                    taskInfo.Status = TaskStatus.FinishOfShunt;
-                    taskInfo.EditTime = DateTime.Now;
-                    taskInfo.WarehouseCode = taskInfo.WarehouseCode.Contains("R") ? taskInfo.WarehouseCode : taskInfo.WarehouseCode + "R";
-                    taskInfo.AddrTo = "Robot";
-                    taskInfo.GoodsType = goodsType;
-                    db.UpdateableRowLock(taskInfo).UpdateColumns(x => new { x.AddrNext, x.Status, x.EditTime, x.WarehouseCode, x.AddrTo, x.GoodsType }).ExecuteCommand();
-                    taskInfo.AddWCS_TASK_DTL(db, obj.Entity.Code, nextAdd.ToString(), "工字轮完成环形库分流");
+                    //判断是否为直接码垛
+                    var robot = GetRobotDevice(obj.Entity);
+                    if (robot == null)
+                    {
+                        World.Log($"未检索到对应的机械臂设备号", LogLevelEnum.High);
+                        return;
+                    }
+                    if (robot.GetIsDirectPalletizing(db)) //是直接码垛
+                    {
+                        //获取两个对应的环形库码垛工位
+                        List<string> maDuoZhanTaiList = new List<string>();
+                        switch (robot.Code)
+                        {
+                            case "Robot1":
+                                maDuoZhanTaiList.Add("1661");
+                                maDuoZhanTaiList.Add("1666");
+                                break;
+
+                            case "Robot2":
+                                maDuoZhanTaiList.Add("1676");
+                                maDuoZhanTaiList.Add("1681");
+                                break;
+
+                            case "Robot3":
+                                maDuoZhanTaiList.Add("1691");
+                                maDuoZhanTaiList.Add("1696");
+                                break;
+
+                            case "Robot4":
+                                maDuoZhanTaiList.Add("1706");
+                                maDuoZhanTaiList.Add("1711");
+                                break;
+
+                            case "Robot5":
+                                maDuoZhanTaiList.Add("1721");
+                                maDuoZhanTaiList.Add("1726");
+                                break;
+
+                            case "Robot6":
+                                maDuoZhanTaiList.Add("1736");
+                                maDuoZhanTaiList.Add("1741");
+                                break;
+                        }
+
+                        //判断两个位置是否都有码垛信息,为没有的创建码垛信息
+                        var maDuoXinXiList = db.Queryable<BillRingPalletizingInfo>().NoLock().Where(x => maDuoZhanTaiList.Contains(x.MaDuoGongWei) && x.Out == false).ToList();
+
+                        foreach (var maDuoZhanTai in maDuoZhanTaiList)
+                        {
+                            if (!maDuoXinXiList.Any(x => x.MaDuoGongWei == maDuoZhanTai))
+                            {
+                                ////如果没有码垛信息
+                                //var bomsetGrp =
+                                //    _billBomsetgrpRepository.GetFirst(x => x.IsStop == 0 && x.BomCode.Contains(wcsTask.MatCode));
+                                //if (bomsetGrp == null)
+                                //{
+                                //    res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
+                                //    res.ResMsg = "未找到对应垛型信息,请确认是否被禁用";
+                                //    return res;
+                                //}
+                                //var xyNo = _billBomsetinfoRepository.GetList(x => x.BomSetHdrId == bomsetGrp.Id && x.IsEmpty == 0)
+                                //    .ToList().Select(x => Convert.ToInt32(x.XYNo)).OrderByDescending(x => x).First();
+                                ////跟据垛形信息生成
+                                //ringPalletizingInfo = new BillRingPalletizingInfo
+                                //{
+                                //    Id = IdFactory.NewId(),
+                                //    WareHouseId = wareHouse.Id,
+                                //    BomSetGrpId = bomsetGrp.Id,
+                                //    HWCountQty = bomsetGrp.HWCountQty,
+                                //    BomCode = bomsetGrp.BomCode,
+                                //    HaveQty = 0,
+                                //    Out = false,
+                                //    LastXYNO = wareHouse.Code.Contains("N") ? xyNo + 1 : 0
+                                //};
+
+                                //if (!_billRingPalletizingInfo.Insert(ringPalletizingInfo))
+                                //{
+                                //    res.ResCode = ResponseStatusCodeEnum.DataSaveErr.GetHashCode();
+                                //    res.ResMsg = "环形库满轮码垛信息存储失败";
+                                //    return res;
+                                //}
+                            }
+                        }
+                    }
+                    else
+                    {
+                        taskInfo.AddrNext = nextAdd.ToString();
+                        taskInfo.Status = TaskStatus.FinishOfShunt;
+                        taskInfo.EditTime = DateTime.Now;
+                        taskInfo.WarehouseCode = taskInfo.WarehouseCode.Contains("R") ? taskInfo.WarehouseCode : taskInfo.WarehouseCode + "R";
+                        taskInfo.AddrTo = "Robot";
+                        taskInfo.GoodsType = goodsType;
+                        db.UpdateableRowLock(taskInfo).UpdateColumns(x => new { x.AddrNext, x.Status, x.EditTime, x.WarehouseCode, x.AddrTo, x.GoodsType }).ExecuteCommand();
+                        taskInfo.AddWCS_TASK_DTL(db, obj.Entity.Code, nextAdd.ToString(), "工字轮完成环形库分流");
+                    }
                 }
                 else
                 {
@@ -334,7 +429,7 @@ namespace WCS.WorkEngineering.Systems
         {
             WmsApi.EditorialFlow(new FjEditorialFlowRequest() { TaskId = task.ID, LocCode = locCode, WareCode = warehouseCode });
             task.WarehouseCode = warehouseCode;
-            db.UpdateableRowLock(task).UpdateColumns(x=> new {x.WarehouseCode}).ExecuteCommand();
+            db.UpdateableRowLock(task).UpdateColumns(x => new { x.WarehouseCode }).ExecuteCommand();
             task.AddWCS_TASK_DTL(db, locCode, $"变更流向至{warehouseCode}");
         }
 
@@ -395,5 +490,21 @@ namespace WCS.WorkEngineering.Systems
                 _ => 9999
             };
         }
+
+        public Device? GetRobotDevice(Device dev)
+        {
+            var robotCode = dev.Code switch
+            {
+                "418" => "Robot1",
+                "618" => "Robot2",
+                "818" => "Robot3",
+                "1018" => "Robot4",
+                "1218" => "Robot5",
+                "1418" => "Robot6",
+                _ => "99999"
+            };
+
+            return Device.All.FirstOrDefault(v => v.Code == robotCode);
+        }
     }
 }

+ 1 - 0
YWGC/FJK/WCS.WorkEngineering/Systems/桁架码垛/桁架.cs

@@ -8,6 +8,7 @@ using WCS.Entity;
 using WCS.Entity.Protocol.Station;
 using WCS.Entity.Protocol.Truss;
 using WCS.WorkEngineering.Extensions;
+using WCS.WorkEngineering.Model.WMS;
 using WCS.WorkEngineering.WebApi.Controllers;
 using WCS.WorkEngineering.Worlds;
 using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;

+ 372 - 350
YWGC/FJK/WCS.WorkEngineering/Systems/环形库/机械臂cs.cs

@@ -3,6 +3,7 @@ using PlcSiemens.Core.Extension;
 using ServiceCenter.Extensions;
 using ServiceCenter.Logs;
 using ServiceCenter.SqlSugars;
+using SqlSugar;
 using System.ComponentModel;
 using WCS.Core;
 using WCS.Entity;
@@ -10,6 +11,7 @@ using WCS.Entity.Protocol.Protocol.Robot;
 using WCS.Entity.Protocol.Robot;
 using WCS.Entity.Protocol.Station;
 using WCS.WorkEngineering.Extensions;
+using WCS.WorkEngineering.Model.WMS;
 using WCS.WorkEngineering.Worlds.环形库.环形库;
 using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
 using TaskStatus = WCS.Entity.TaskStatus;
@@ -64,6 +66,7 @@ namespace WCS.WorkEngineering.Systems
                 SqlSugarHelper.Do(db =>
                 {
                     World.Log($"机械臂任务处理:开始--完成任务{obj.Data2.TaskFinishId1}--{obj.Data2.TaskFinishId2}", LogLevelEnum.Low);
+                    var isDP = obj.Entity.GetIsDirectPalletizing(db.Default);
 
                     //根据DB521任务号获取对应任务
                     var taskInfoList = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.ID == obj.Data2.TaskFinishId1 || v.ID == obj.Data2.TaskFinishId2).ToList();
@@ -73,11 +76,22 @@ namespace WCS.WorkEngineering.Systems
                         switch (task.Type)
                         {
                             case TaskType.SetPlate: //工字轮入库
-                                //完成任务
-                                task.Status = Entity.TaskStatus.Finish;
-                                task.EndTime = DateTime.Now;
-                                db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.EndTime }).ExecuteCommand();
-                                task.AddWCS_TASK_DTL(db.Default, task.AddrTo, "入库任务结束");
+                                if (isDP)
+                                {
+                                    //完成任务
+                                    task.Status = Entity.TaskStatus.ConveyorExecution;
+                                    task.EndTime = DateTime.Now;
+                                    db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.EndTime }).ExecuteCommand();
+                                    task.AddWCS_TASK_DTL(db.Default, task.AddrTo, "直接码垛任务完成码垛");
+                                }
+                                else
+                                {
+                                    //完成任务
+                                    task.Status = Entity.TaskStatus.Finish;
+                                    task.EndTime = DateTime.Now;
+                                    db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.EndTime }).ExecuteCommand();
+                                    task.AddWCS_TASK_DTL(db.Default, task.AddrTo, "入库任务结束");
+                                }
                                 break;
 
                             case TaskType.OutDepot:
@@ -133,8 +147,10 @@ namespace WCS.WorkEngineering.Systems
             //再检查是否有等待执行的货物
             var inMaxQuantity = 0; //出入库的周期检查比为1:3
             var taskss = new List<WCS_TaskInfo>();
+            var isDP = false; //当前机械臂是否直接码垛
             SqlSugarHelper.Do(db =>
             {
+                isDP = obj.Entity.GetIsDirectPalletizing(db.Default);
                 var code = $"RobotMaxConsecutiveStorageCount{obj.Entity.Code.Last()}";
                 inMaxQuantity = db.Default.Queryable<fjSysConfig>().First(x => x.Code == code).SContent.ToInt();
                 //获取当前堆垛机的所有未完成任务 ,就算查到了未提交的事务也无所谓,无非下一个周期再执行一次
@@ -142,389 +158,395 @@ namespace WCS.WorkEngineering.Systems
                 //任务集合是否有处于堆垛机执行状态的任务
                 if (taskss.Any(v => v.Status == Entity.TaskStatus.StackerExecution)) throw new KnownException($"有任务处于堆垛机执行状态", LogLevelEnum.High);
             });
-            //获取入库次数
-            var inQuantity = obj.Entity.GetFlag<int>("InQuantity");
-            
-            //入库任务优先 或 上一个周期是出库任务并且出库任务无优先
-            if (inQuantity < inMaxQuantity) //入库任务
+            if (isDP) //直接码垛
             {
-                //判断本次优先执行楼层,并设置下次执行时优先楼层
-                var floor = obj.Entity.GetFlag<int>("FloorIn");
-                floor = floor % 2 + 1;
-                obj.Entity.SetFlag("FloorIn", floor);
-                obj.Entity.SetFlag("InQuantity", inQuantity + 1);
-
-                //获取当前机械臂所有的取货站台
-                var pickUpDevices = obj.Entity.Sources.Where(x => x.HasFlag(DeviceFlags.输送机)).Where(x => x.DeviceGroup.Any()).Select(
-                    x =>
-                    {
-                        var group = x.DeviceGroup.Select(s => new Device<IStation523, IStation524>(s, World)).ToList();
-                        return new Tuple<Device<IStation523, IStation524>, List<Device<IStation523, IStation524>>>(new Device<IStation523, IStation524>(x, World), group);
-                    }).ToList();
-
-                if (!pickUpDevices.Any()) throw new KnownException($"机械臂{obj.Entity.Code}无取货路径点", LogLevelEnum.High);
-
-                //获取取货设备的设备组中都是停止运行的
-                var arrIn = pickUpDevices.Where(x => x.Item2.All(a => !a.Data.Status.HasFlag(StationStatus.Run)))
-                                                      .Where(x =>
-                                                      {
-                                                          var inStock = x.Item2.Any(a => a.Data2.TaskNumber > 0 && a.Data.Status.HasFlag(StationStatus.PH_Status));
-                                                          var minDevice = x.Item2.OrderBy(o => o.Entity.Code.ToShort()).First();
-                                                          return minDevice.Data2.TaskNumber > 0 && minDevice.Data.Status.HasFlag(StationStatus.PH_Status) && minDevice.Data2.CmdType.HasFlag(StationCmd.Res7) && inStock;
-                                                      }).ToList();
-                //.OrderBy(x => x.Item1.Data2.TaskNumber)
-
-                if (!arrIn.Any())
-                {
-                    World.Log($"[{obj.Entity.Code}]等待入库任务输送到位");
-                    obj.Entity.SetFlag("InQuantity", inMaxQuantity+100); //在无货物的情况下,只检查一次,下次直接查询是否有出库任务,避免无效检查周期的产生
-                    return;
-                }
-
-                //先按可取货位数量排序,再按任务号排序
-                var devGroup = arrIn.OrderByDescending(x => x.Item2.Count(i => i.Data2.TaskNumber > 0 && i.Data.Status.HasFlag(StationStatus.PH_Status)))
-                    .ThenByDescending(x =>
-                    {
-                        int number;
-                        List<Device<IStation523, IStation524>> devices = new List<Device<IStation523, IStation524>>();
-                        var deviceCodes = GetDeviceCodeList(x.Item1.Entity.Code);
-                        devices = Device.All.Where(x => deviceCodes.Contains(x.Code) ).Select(x => new Device<IStation523, IStation524>(x, World)).ToList();
-                        number = devices.Count(x => x.Data2.TaskNumber > 0 && x.Data.Status.HasFlag(StationStatus.PH_Status) && !x.Data.Status.HasFlag(StationStatus.Run));
-                        return number;
-                    }).First().Item2
-                    .Where(x => x.Data2.TaskNumber > 0 && x.Data.Status.HasFlag(StationStatus.PH_Status));
-                //可用取货位数量为1,且出库任务有优先
-                if (devGroup.Count() == 1 && (obj.Entity.GetFlag<bool>($"isOut-{obj.Entity.Code}")|| taskss.Any(v => v.Device == obj.Entity.Code && v.Status == TaskStatus.WaitingToExecute && v.Type == TaskType.OutDepot)))
-                {
-                    obj.Entity.SetFlag("InQuantity", inMaxQuantity + 100); //跳过入库任务执行出库任务,下次直接查询是否有出库任务,避免无效检查周期的产生
-                    return;
-                }
-
-                if (!devGroup.Any())
-                {
-                    obj.Entity.SetFlag("InQuantity", inMaxQuantity + 100); //在无有效取货位的情况下,只检查一次,下次直接查询是否有出库任务,避免无效检查周期的产生
-                    throw new KnownException($"无有效入库取货位", LogLevelEnum.High);
-                }
-
-                //如果入库任务只有一个
+            }
+            else
+            {
+                //获取入库次数
+                var inQuantity = obj.Entity.GetFlag<int>("InQuantity");
 
-                //等待下发的任务信息
-                var taskList = new List<Tuple<WCS_TaskInfo, Device<IStation523, IStation524>>>();
-                SqlSugarHelper.Do(db =>
+                //入库任务优先 或 上一个周期是出库任务并且出库任务无优先
+                if (inQuantity < inMaxQuantity) //入库任务
                 {
-                    foreach (var dev in devGroup)
+                    //判断本次优先执行楼层,并设置下次执行时优先楼层
+                    var floor = obj.Entity.GetFlag<int>("FloorIn");
+                    floor = floor % 2 + 1;
+                    obj.Entity.SetFlag("FloorIn", floor);
+                    obj.Entity.SetFlag("InQuantity", inQuantity + 1);
+
+                    //获取当前机械臂所有的取货站台
+                    var pickUpDevices = obj.Entity.Sources.Where(x => x.HasFlag(DeviceFlags.输送机)).Where(x => x.DeviceGroup.Any()).Select(
+                        x =>
+                        {
+                            var group = x.DeviceGroup.Select(s => new Device<IStation523, IStation524>(s, World)).ToList();
+                            return new Tuple<Device<IStation523, IStation524>, List<Device<IStation523, IStation524>>>(new Device<IStation523, IStation524>(x, World), group);
+                        }).ToList();
+
+                    if (!pickUpDevices.Any()) throw new KnownException($"机械臂{obj.Entity.Code}无取货路径点", LogLevelEnum.High);
+
+                    //获取取货设备的设备组中都是停止运行的
+                    var arrIn = pickUpDevices.Where(x => x.Item2.All(a => !a.Data.Status.HasFlag(StationStatus.Run)))
+                                                          .Where(x =>
+                                                          {
+                                                              var inStock = x.Item2.Any(a => a.Data2.TaskNumber > 0 && a.Data.Status.HasFlag(StationStatus.PH_Status));
+                                                              var minDevice = x.Item2.OrderBy(o => o.Entity.Code.ToShort()).First();
+                                                              return minDevice.Data2.TaskNumber > 0 && minDevice.Data.Status.HasFlag(StationStatus.PH_Status) && minDevice.Data2.CmdType.HasFlag(StationCmd.Res7) && inStock;
+                                                          }).ToList();
+                    //.OrderBy(x => x.Item1.Data2.TaskNumber)
+
+                    if (!arrIn.Any())
                     {
-                        var task = db.Default.Queryable<WCS_TaskInfo>().First(v => v.Type == TaskType.SetPlate && v.Status == Entity.TaskStatus.FinishOfShunt && dev.Data2.TaskNumber == v.ID);
-                        if (task == null) continue;
-
-                        task.Status = Entity.TaskStatus.StackerExecution;
-                        task.LastInteractionPoint = dev.Entity.Code;
-                        task.SrmStation = dev.Entity.Code;
-                        task.Device = obj.Entity.Code;
-                        task.EditWho = "WCS";
-                        db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.AddrTo, x.Line, x.Col, x.Layer, x.Depth, x.LastInteractionPoint, x.SrmStation, x.Device, x.EditWho }).ExecuteCommand();
-                        task.AddWCS_TASK_DTL(db.Default, dev.Entity.Code, task.AddrTo, "任务下发机械臂执行");
-                        taskList.Add(new(task, dev));
+                        World.Log($"[{obj.Entity.Code}]等待入库任务输送到位");
+                        obj.Entity.SetFlag("InQuantity", inMaxQuantity + 100); //在无货物的情况下,只检查一次,下次直接查询是否有出库任务,避免无效检查周期的产生
+                        return;
                     }
-                });
-
-                if (!taskList.Any()) return;
 
-                switch (taskList.Count)
-                {
-                    case 1:
-                        var task = taskList.FirstOrDefault().Item1;
-                        var dev = taskList.FirstOrDefault().Item2;
-                        //下发任务
-                        obj.Data.TaskNumber1 = task.ID;
-                        obj.Data.SLine1 = dev.Entity.Code.ToShort();
-                        obj.Data.SCol1 = 0;
-                        obj.Data.SLayer1 = 0;
-                        obj.Data.SDepth1 = 0;
-                        obj.Data.ELine1 = task.Line.ToShort();
-                        obj.Data.ECol1 = task.Col.ToShort();
-                        obj.Data.ELayer1 = task.Layer.ToShort();
-                        obj.Data.EDepth1 = task.Depth.ToShort();
-                        obj.Data.TaskNumber2 = 0;
-                        obj.Data.SLine2 = 0;
-                        obj.Data.SCol2 = 0;
-                        obj.Data.SLayer2 = 0;
-                        obj.Data.SDepth2 = 0;
-                        obj.Data.ELine2 = 0;
-                        obj.Data.ECol2 = 0;
-                        obj.Data.ELayer2 = 0;
-                        obj.Data.EDepth2 = 0;
-                        obj.Data.TaskSum = taskList.Count.ToShort();
-                        obj.Data.GoodsType = task.GoodsType switch
+                    //先按可取货位数量排序,再按任务号排序
+                    var devGroup = arrIn.OrderByDescending(x => x.Item2.Count(i => i.Data2.TaskNumber > 0 && i.Data.Status.HasFlag(StationStatus.PH_Status)))
+                        .ThenByDescending(x =>
                         {
-                            18 => 1,
-                            34 => 2,
-                            50 => 3,
-                            _ => 0
-                        };
-                        obj.Data.TaskType = 3;
-                        obj.Data.VoucherNo++;
-                        break;
-
-                    case 2:
-                        taskList = taskList.OrderBy(x => x.Item1.Depth).ToList();
-                        //一工位取深度较大的任务
-                        var taskInfo = taskList[1];
-                        task = taskInfo.Item1;
-                        dev = taskInfo.Item2;
-                        obj.Data.TaskNumber1 = task.ID;
-                        obj.Data.SLine1 = dev.Entity.Code.ToShort();
-                        obj.Data.SCol1 = 0;
-                        obj.Data.SLayer1 = 0;
-                        obj.Data.SDepth1 = 0;
-                        obj.Data.ELine1 = task.Line.ToShort();
-                        obj.Data.ECol1 = task.Col.ToShort();
-                        obj.Data.ELayer1 = task.Layer.ToShort();
-                        obj.Data.EDepth1 = task.Depth.ToShort();
-                        //二工位取深度较少的值
-                        taskInfo = taskList[0];
-                        task = taskInfo.Item1;
-                        dev = taskInfo.Item2;
-                        obj.Data.TaskNumber2 = task.ID;
-                        obj.Data.SLine2 = dev.Entity.Code.ToShort();
-                        obj.Data.SCol2 = 0;
-                        obj.Data.SLayer2 = 0;
-                        obj.Data.SDepth2 = 0;
-                        obj.Data.ELine2 = task.Line.ToShort();
-                        obj.Data.ECol2 = task.Col.ToShort();
-                        obj.Data.ELayer2 = task.Layer.ToShort();
-                        obj.Data.EDepth2 = task.Depth.ToShort();
-                        obj.Data.TaskSum = taskList.Count.ToShort();
-                        obj.Data.GoodsType = task.GoodsType switch
-                        {
-                            18 => 1,
-                            34 => 2,
-                            50 => 3,
-                            _ => 0
-                        };
-                        obj.Data.TaskType = 3;
-                        obj.Data.VoucherNo++;
-                        break;
-
-                    default:
-                        throw new KnownException($"无法执行多个任务", LogLevelEnum.Mid);
-                }
-                World.Log($"机械臂任务处理:下发入库任务{obj.Data.TaskNumber1}--{obj.Data.TaskNumber2}--{obj.Data.VoucherNo}", LogLevelEnum.Mid);
-            }
-            else //出库任务
-            {
-                //判断本次优先执行楼层,并设置下次执行时优先楼层
-                var floor = obj.Entity.GetFlag<int>("FloorOut");
-                floor = floor % 2 + 1;
-                obj.Entity.SetFlag("FloorOut", floor);
-                obj.Entity.SetFlag("InQuantity", 0);
-
-                //获取当前堆垛机所有的取货站台
-                var arrOut = PutDevices.First(v => v.Key == obj.Entity.Code).Value;
-                if (!arrOut.Any()) throw new KnownException($"机械臂{obj.Entity.Code}无放货路径点", LogLevelEnum.High);
-
-                //获取可以放货的设备集合
-                arrOut = arrOut.Where(v => v.Data3.Status.HasFlag(StationStatus.PH_Status) && v.Data.TaskNumber == 0 && v.Data.GoodsEnd == 0).ToList();//有光电
-                if (!arrOut.Any())
-                {
-                    World.Log($"[{obj.Entity.Code}]等待出库任务输送到位");
-                    return;
-                }
-
-                var taskInfoList = new List<WCS_TaskInfo>();
-                var nextAdd = "";
-
-                SqlSugarHelper.Do(db =>
-                {
-                    //所有出库点设备号,即
-                    var allOutCode = arrOut.Select(v => new
-                    {
-                        v.Entity.Code,
-                        v.Data4.Type
-                    }).ToList();
-                    //两个工位同时码垛,并不会一个执行一次,只有一个托盘任务全部执行完毕,才会继续执行下一个,先生成任务的码垛工位会优先执行
-                    var taskInfos = db.Default.Queryable<WCS_TaskInfo>().NoLock().Where(v =>
-                            (v.Status == TaskStatus.WaitingToExecute || v.Status == TaskStatus.ConveyorExecution) &&
-                            v.Type == TaskType.OutDepot && v.Device == obj.Entity.Code)
-                        .ToList().Where(v => allOutCode.Any(x => v.SrmStation == x.Code && v.PalletType == x.Type))
-                        .ToList();
-
-                    var deliveryTask = db.Default.Queryable<WCS_TaskInfo>().Where(x => x.Status > 0 && x.Type == TaskType.Delivery).ToList().Select(x => x.AddrTo);
-                    taskInfos = taskInfos.Where(x => deliveryTask.Contains(x.SrmStation)).ToList();
-                    if (!taskInfos.Any())
+                            int number;
+                            List<Device<IStation523, IStation524>> devices = new List<Device<IStation523, IStation524>>();
+                            var deviceCodes = GetDeviceCodeList(x.Item1.Entity.Code);
+                            devices = Device.All.Where(x => deviceCodes.Contains(x.Code)).Select(x => new Device<IStation523, IStation524>(x, World)).ToList();
+                            number = devices.Count(x => x.Data2.TaskNumber > 0 && x.Data.Status.HasFlag(StationStatus.PH_Status) && !x.Data.Status.HasFlag(StationStatus.Run));
+                            return number;
+                        }).First().Item2
+                        .Where(x => x.Data2.TaskNumber > 0 && x.Data.Status.HasFlag(StationStatus.PH_Status));
+                    //可用取货位数量为1,且出库任务有优先
+                    if (devGroup.Count() == 1 && (obj.Entity.GetFlag<bool>($"isOut-{obj.Entity.Code}") || taskss.Any(v => v.Device == obj.Entity.Code && v.Status == TaskStatus.WaitingToExecute && v.Type == TaskType.OutDepot)))
                     {
-                        World.Log("等待空托盘到位");
+                        obj.Entity.SetFlag("InQuantity", inMaxQuantity + 100); //跳过入库任务执行出库任务,下次直接查询是否有出库任务,避免无效检查周期的产生
                         return;
                     }
 
-                    if (!taskInfos.Any()) throw new KnownException($"未找到站台{JsonConvert.SerializeObject(allOutCode)}可用的出库任务", LogLevelEnum.Mid);
-                    var srmStation = taskInfos.GroupBy(x => x.SrmStation).Where(x => x.Any(s => s.Status == TaskStatus.WaitingToExecute)).Select(x => new
+                    if (!devGroup.Any())
                     {
-                        x.Key,
-                        x.OrderByDescending(t => t.AddTime).First().AddTime
-                    }).OrderBy(x => x.AddTime).First().Key;
-                    taskInfos = taskInfos.Where(x => x.SrmStation == srmStation).ToList(); //找到一个可以放货的待执行站台
+                        obj.Entity.SetFlag("InQuantity", inMaxQuantity + 100); //在无有效取货位的情况下,只检查一次,下次直接查询是否有出库任务,避免无效检查周期的产生
+                        throw new KnownException($"无有效入库取货位", LogLevelEnum.High);
+                    }
+
+                    //如果入库任务只有一个
 
-                    //如果全部是待执行状态,需要验证待执行的任务的数量是否与任务总数相等
-                    if (taskInfos.All(x => x.Status == TaskStatus.WaitingToExecute))
+                    //等待下发的任务信息
+                    var taskList = new List<Tuple<WCS_TaskInfo, Device<IStation523, IStation524>>>();
+                    SqlSugarHelper.Do(db =>
                     {
-                        var task = taskInfos.First();
-                        if (task.FullQty != taskInfos.Count) throw new KnownException($"等待站台{srmStation}所有码垛出库任务完成初始化", LogLevelEnum.Mid);
-                    }
-                    taskInfos = taskInfos.Where(x => x.Status == TaskStatus.WaitingToExecute).OrderBy(x => x.ProdLine).ToList();
+                        foreach (var dev in devGroup)
+                        {
+                            var task = db.Default.Queryable<WCS_TaskInfo>().First(v => v.Type == TaskType.SetPlate && v.Status == Entity.TaskStatus.FinishOfShunt && dev.Data2.TaskNumber == v.ID);
+                            if (task == null) continue;
+
+                            task.Status = Entity.TaskStatus.StackerExecution;
+                            task.LastInteractionPoint = dev.Entity.Code;
+                            task.SrmStation = dev.Entity.Code;
+                            task.Device = obj.Entity.Code;
+                            task.EditWho = "WCS";
+                            db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.AddrTo, x.Line, x.Col, x.Layer, x.Depth, x.LastInteractionPoint, x.SrmStation, x.Device, x.EditWho }).ExecuteCommand();
+                            task.AddWCS_TASK_DTL(db.Default, dev.Entity.Code, task.AddrTo, "任务下发机械臂执行");
+                            taskList.Add(new(task, dev));
+                        }
+                    });
+
+                    if (!taskList.Any()) return;
 
-                    if (taskInfos.FirstOrDefault().WarehouseCode.Contains("S")) //如果是南侧,翻转排序
+                    switch (taskList.Count)
+                    {
+                        case 1:
+                            var task = taskList.FirstOrDefault().Item1;
+                            var dev = taskList.FirstOrDefault().Item2;
+                            //下发任务
+                            obj.Data.TaskNumber1 = task.ID;
+                            obj.Data.SLine1 = dev.Entity.Code.ToShort();
+                            obj.Data.SCol1 = 0;
+                            obj.Data.SLayer1 = 0;
+                            obj.Data.SDepth1 = 0;
+                            obj.Data.ELine1 = task.Line.ToShort();
+                            obj.Data.ECol1 = task.Col.ToShort();
+                            obj.Data.ELayer1 = task.Layer.ToShort();
+                            obj.Data.EDepth1 = task.Depth.ToShort();
+                            obj.Data.TaskNumber2 = 0;
+                            obj.Data.SLine2 = 0;
+                            obj.Data.SCol2 = 0;
+                            obj.Data.SLayer2 = 0;
+                            obj.Data.SDepth2 = 0;
+                            obj.Data.ELine2 = 0;
+                            obj.Data.ECol2 = 0;
+                            obj.Data.ELayer2 = 0;
+                            obj.Data.EDepth2 = 0;
+                            obj.Data.TaskSum = taskList.Count.ToShort();
+                            obj.Data.GoodsType = task.GoodsType switch
+                            {
+                                18 => 1,
+                                34 => 2,
+                                50 => 3,
+                                _ => 0
+                            };
+                            obj.Data.TaskType = 3;
+                            obj.Data.VoucherNo++;
+                            break;
+
+                        case 2:
+                            taskList = taskList.OrderBy(x => x.Item1.Depth).ToList();
+                            //一工位取深度较大的任务
+                            var taskInfo = taskList[1];
+                            task = taskInfo.Item1;
+                            dev = taskInfo.Item2;
+                            obj.Data.TaskNumber1 = task.ID;
+                            obj.Data.SLine1 = dev.Entity.Code.ToShort();
+                            obj.Data.SCol1 = 0;
+                            obj.Data.SLayer1 = 0;
+                            obj.Data.SDepth1 = 0;
+                            obj.Data.ELine1 = task.Line.ToShort();
+                            obj.Data.ECol1 = task.Col.ToShort();
+                            obj.Data.ELayer1 = task.Layer.ToShort();
+                            obj.Data.EDepth1 = task.Depth.ToShort();
+                            //二工位取深度较少的值
+                            taskInfo = taskList[0];
+                            task = taskInfo.Item1;
+                            dev = taskInfo.Item2;
+                            obj.Data.TaskNumber2 = task.ID;
+                            obj.Data.SLine2 = dev.Entity.Code.ToShort();
+                            obj.Data.SCol2 = 0;
+                            obj.Data.SLayer2 = 0;
+                            obj.Data.SDepth2 = 0;
+                            obj.Data.ELine2 = task.Line.ToShort();
+                            obj.Data.ECol2 = task.Col.ToShort();
+                            obj.Data.ELayer2 = task.Layer.ToShort();
+                            obj.Data.EDepth2 = task.Depth.ToShort();
+                            obj.Data.TaskSum = taskList.Count.ToShort();
+                            obj.Data.GoodsType = task.GoodsType switch
+                            {
+                                18 => 1,
+                                34 => 2,
+                                50 => 3,
+                                _ => 0
+                            };
+                            obj.Data.TaskType = 3;
+                            obj.Data.VoucherNo++;
+                            break;
+
+                        default:
+                            throw new KnownException($"无法执行多个任务", LogLevelEnum.Mid);
+                    }
+                    World.Log($"机械臂任务处理:下发入库任务{obj.Data.TaskNumber1}--{obj.Data.TaskNumber2}--{obj.Data.VoucherNo}", LogLevelEnum.Mid);
+                }
+                else //出库任务
+                {
+                    //判断本次优先执行楼层,并设置下次执行时优先楼层
+                    var floor = obj.Entity.GetFlag<int>("FloorOut");
+                    floor = floor % 2 + 1;
+                    obj.Entity.SetFlag("FloorOut", floor);
+                    obj.Entity.SetFlag("InQuantity", 0);
+
+                    //获取当前堆垛机所有的取货站台
+                    var arrOut = PutDevices.First(v => v.Key == obj.Entity.Code).Value;
+                    if (!arrOut.Any()) throw new KnownException($"机械臂{obj.Entity.Code}无放货路径点", LogLevelEnum.High);
+
+                    //获取可以放货的设备集合
+                    arrOut = arrOut.Where(v => v.Data3.Status.HasFlag(StationStatus.PH_Status) && v.Data.TaskNumber == 0 && v.Data.GoodsEnd == 0).ToList();//有光电
+                    if (!arrOut.Any())
                     {
-                        taskInfos = taskInfos.OrderByDescending(x => x.ProdLine).ToList();
+                        World.Log($"[{obj.Entity.Code}]等待出库任务输送到位");
+                        return;
                     }
 
-                    var surplusTaskNumber = taskInfos.Count; //剩余任务数量
-                    taskInfos = taskInfos.Take(2).ToList();
-                    var warehouseCode = taskInfos.FirstOrDefault().WarehouseCode;
-                    var exTaskNumber = taskInfos.Count;//执行任务数量
-                    surplusTaskNumber -= exTaskNumber;
-                    if (exTaskNumber == 2) //有两个任务
+                    var taskInfoList = new List<WCS_TaskInfo>();
+                    var nextAdd = "";
+
+                    SqlSugarHelper.Do(db =>
                     {
-                        var minDepth = taskInfos!.MinBy(x => x.Depth);
-                        var maxDepth = taskInfos.MaxBy(x => x.Depth);
-                        //产品类型不同时,只能取一个
-                        if (minDepth.GoodsType != maxDepth.GoodsType)
+                        //所有出库点设备号,即
+                        var allOutCode = arrOut.Select(v => new
                         {
-                            //南边取位号较大的,北边取位号较小的
-                            taskInfos = warehouseCode.Contains("S") ? taskInfos.OrderByDescending(x => x.ProdLine).Take(1).ToList() : taskInfos.OrderBy(x => x.ProdLine).Take(1).ToList();
+                            v.Entity.Code,
+                            v.Data4.Type
+                        }).ToList();
+                        //两个工位同时码垛,并不会一个执行一次,只有一个托盘任务全部执行完毕,才会继续执行下一个,先生成任务的码垛工位会优先执行
+                        var taskInfos = db.Default.Queryable<WCS_TaskInfo>().NoLock().Where(v =>
+                                (v.Status == TaskStatus.WaitingToExecute || v.Status == TaskStatus.ConveyorExecution) &&
+                                v.Type == TaskType.OutDepot && v.Device == obj.Entity.Code)
+                            .ToList().Where(v => allOutCode.Any(x => v.SrmStation == x.Code && v.PalletType == x.Type))
+                            .ToList();
+
+                        var deliveryTask = db.Default.Queryable<WCS_TaskInfo>().Where(x => x.Status > 0 && x.Type == TaskType.Delivery).ToList().Select(x => x.AddrTo);
+                        taskInfos = taskInfos.Where(x => deliveryTask.Contains(x.SrmStation)).ToList();
+                        if (!taskInfos.Any())
+                        {
+                            World.Log("等待空托盘到位");
+                            return;
                         }
-                        //深度之和等于6(机械臂当前无法同时执行两个三深度的取货任务)
-                        else if (taskInfos.Sum(x => x.Depth) == 6)
+
+                        if (!taskInfos.Any()) throw new KnownException($"未找到站台{JsonConvert.SerializeObject(allOutCode)}可用的出库任务", LogLevelEnum.Mid);
+                        var srmStation = taskInfos.GroupBy(x => x.SrmStation).Where(x => x.Any(s => s.Status == TaskStatus.WaitingToExecute)).Select(x => new
                         {
-                            taskInfos = warehouseCode.Contains("S") ? taskInfos.OrderByDescending(x => x.ProdLine).Take(1).ToList() : taskInfos.OrderBy(x => x.ProdLine).Take(1).ToList();
+                            x.Key,
+                            x.OrderByDescending(t => t.AddTime).First().AddTime
+                        }).OrderBy(x => x.AddTime).First().Key;
+                        taskInfos = taskInfos.Where(x => x.SrmStation == srmStation).ToList(); //找到一个可以放货的待执行站台
+
+                        //如果全部是待执行状态,需要验证待执行的任务的数量是否与任务总数相等
+                        if (taskInfos.All(x => x.Status == TaskStatus.WaitingToExecute))
+                        {
+                            var task = taskInfos.First();
+                            if (task.FullQty != taskInfos.Count) throw new KnownException($"等待站台{srmStation}所有码垛出库任务完成初始化", LogLevelEnum.Mid);
                         }
-                        else if (taskInfos[0].SrmStation != taskInfos[1].SrmStation)
+                        taskInfos = taskInfos.Where(x => x.Status == TaskStatus.WaitingToExecute).OrderBy(x => x.ProdLine).ToList();
+
+                        if (taskInfos.FirstOrDefault().WarehouseCode.Contains("S")) //如果是南侧,翻转排序
                         {
-                            taskInfos = warehouseCode.Contains("S") ? taskInfos.OrderByDescending(x => x.ProdLine).Take(1).ToList() : taskInfos.OrderBy(x => x.ProdLine).Take(1).ToList();
+                            taskInfos = taskInfos.OrderByDescending(x => x.ProdLine).ToList();
                         }
-                        else if (warehouseCode.Contains("S"))
+
+                        var surplusTaskNumber = taskInfos.Count; //剩余任务数量
+                        taskInfos = taskInfos.Take(2).ToList();
+                        var warehouseCode = taskInfos.FirstOrDefault().WarehouseCode;
+                        var exTaskNumber = taskInfos.Count;//执行任务数量
+                        surplusTaskNumber -= exTaskNumber;
+                        if (exTaskNumber == 2) //有两个任务
                         {
-                            //从大到小 一抓偶数
-                            var max = taskInfos.MaxBy(x => x.ProdLine).ProdLine;
-                            if ((max & 1) == 1) //抓一不是偶数
+                            var minDepth = taskInfos!.MinBy(x => x.Depth);
+                            var maxDepth = taskInfos.MaxBy(x => x.Depth);
+                            //产品类型不同时,只能取一个
+                            if (minDepth.GoodsType != maxDepth.GoodsType)
                             {
-                                taskInfos = taskInfos.OrderByDescending(x => x.ProdLine).Take(1).ToList();
+                                //南边取位号较大的,北边取位号较小的
+                                taskInfos = warehouseCode.Contains("S") ? taskInfos.OrderByDescending(x => x.ProdLine).Take(1).ToList() : taskInfos.OrderBy(x => x.ProdLine).Take(1).ToList();
                             }
-                        }
-                        else if (warehouseCode.Contains("N"))
-                        {
-                            //从小到达 一抓奇数
-                            var mix = taskInfos.MinBy(x => x.ProdLine).ProdLine;
-                            if ((mix & 1) == 0) //抓一不是奇数
+                            //深度之和等于6(机械臂当前无法同时执行两个三深度的取货任务)
+                            else if (taskInfos.Sum(x => x.Depth) == 6)
                             {
-                                taskInfos = taskInfos.OrderBy(x => x.ProdLine).Take(1).ToList();
+                                taskInfos = warehouseCode.Contains("S") ? taskInfos.OrderByDescending(x => x.ProdLine).Take(1).ToList() : taskInfos.OrderBy(x => x.ProdLine).Take(1).ToList();
+                            }
+                            else if (taskInfos[0].SrmStation != taskInfos[1].SrmStation)
+                            {
+                                taskInfos = warehouseCode.Contains("S") ? taskInfos.OrderByDescending(x => x.ProdLine).Take(1).ToList() : taskInfos.OrderBy(x => x.ProdLine).Take(1).ToList();
+                            }
+                            else if (warehouseCode.Contains("S"))
+                            {
+                                //从大到小 一抓偶数
+                                var max = taskInfos.MaxBy(x => x.ProdLine).ProdLine;
+                                if ((max & 1) == 1) //抓一不是偶数
+                                {
+                                    taskInfos = taskInfos.OrderByDescending(x => x.ProdLine).Take(1).ToList();
+                                }
+                            }
+                            else if (warehouseCode.Contains("N"))
+                            {
+                                //从小到达 一抓奇数
+                                var mix = taskInfos.MinBy(x => x.ProdLine).ProdLine;
+                                if ((mix & 1) == 0) //抓一不是奇数
+                                {
+                                    taskInfos = taskInfos.OrderBy(x => x.ProdLine).Take(1).ToList();
+                                }
                             }
                         }
-                    }
 
-                    #region 计算剩余可执行任务数
+                        #region 计算剩余可执行任务数
 
-                    //如果有两个任务,且只有一个任务可以执行,剩余任务数+1
-                    if (exTaskNumber == 2 && taskInfoList.Count == 1) surplusTaskNumber += 1;
-                    if (surplusTaskNumber >= 1) obj.Entity.SetFlag($"isOut-{obj.Entity.Code}", true); //剩余任务数大于或等于1,下次满足条件时可以优先执行出库任务
-                    else obj.Entity.SetFlag($"isOut-{obj.Entity.Code}", false); //剩余任务数等于或小于0,下次满足条件时不可以优先执行出库任务
+                        //如果有两个任务,且只有一个任务可以执行,剩余任务数+1
+                        if (exTaskNumber == 2 && taskInfoList.Count == 1) surplusTaskNumber += 1;
+                        if (surplusTaskNumber >= 1) obj.Entity.SetFlag($"isOut-{obj.Entity.Code}", true); //剩余任务数大于或等于1,下次满足条件时可以优先执行出库任务
+                        else obj.Entity.SetFlag($"isOut-{obj.Entity.Code}", false); //剩余任务数等于或小于0,下次满足条件时不可以优先执行出库任务
 
-                    #endregion 计算剩余可执行任务数
+                        #endregion 计算剩余可执行任务数
 
-                    foreach (var task in taskInfos)
-                    {
-                        task.Status = Entity.TaskStatus.StackerExecution;
-                        task.LastInteractionPoint = task.Device;
-                        task.StartTime = DateTime.Now;
-                        task.EditWho = "WCS";
-                        nextAdd = task.SrmStation;
-                        db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.LastInteractionPoint, x.StartTime, x.EditWho }).ExecuteCommand();
-                        task.AddWCS_TASK_DTL(db.Default, task.Device, task.SrmStation, "任务下发机械臂执行");
-                        taskInfoList.Add(task);
-                    }
-                });
+                        foreach (var task in taskInfos)
+                        {
+                            task.Status = Entity.TaskStatus.StackerExecution;
+                            task.LastInteractionPoint = task.Device;
+                            task.StartTime = DateTime.Now;
+                            task.EditWho = "WCS";
+                            nextAdd = task.SrmStation;
+                            db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.LastInteractionPoint, x.StartTime, x.EditWho }).ExecuteCommand();
+                            task.AddWCS_TASK_DTL(db.Default, task.Device, task.SrmStation, "任务下发机械臂执行");
+                            taskInfoList.Add(task);
+                        }
+                    });
 
-                if (!taskInfoList.Any()) return;
+                    if (!taskInfoList.Any()) return;
 
-                switch (taskInfoList.Count)
-                {
-                    case 1:
-                        var task = taskInfoList.FirstOrDefault();
-
-                        //下发任务
-                        obj.Data.TaskNumber1 = task.ID;
-                        obj.Data.SLine1 = task.Line.ToShort();
-                        obj.Data.SCol1 = task.Col.ToShort();
-                        obj.Data.SLayer1 = task.Layer.ToShort();
-                        obj.Data.SDepth1 = task.Depth.ToShort();
-                        obj.Data.ELine1 = nextAdd.ToShort();
-                        obj.Data.ECol1 = task.ProdLine;
-                        obj.Data.ELayer1 = 0;
-                        obj.Data.EDepth1 = 0;
-                        obj.Data.TaskNumber2 = 0;
-                        obj.Data.SLine2 = 0;
-                        obj.Data.SCol2 = 0;
-                        obj.Data.SLayer2 = 0;
-                        obj.Data.SDepth2 = 0;
-                        obj.Data.ELine2 = 0;
-                        obj.Data.ECol2 = 0;
-                        obj.Data.ELayer2 = 0;
-                        obj.Data.EDepth2 = 0;
-                        obj.Data.TaskSum = taskInfoList.Count.ToShort();
-                        obj.Data.GoodsType = task.GoodsType switch
-                        {
-                            18 => 1,
-                            34 => 2,
-                            50 => 3,
-                            _ => 0
-                        };
-                        obj.Data.TaskType = 4;
-                        obj.Data.VoucherNo++;
-                        break;
-
-                    case 2:
-
-                        taskInfoList = taskInfoList.OrderBy(x => x.Depth).ToList();
-
-                        //一工位取深度较大的任务
-                        var taskInfo = taskInfoList[1];
-                        obj.Data.TaskNumber1 = taskInfo.ID;
-                        obj.Data.SLine1 = taskInfo.Line.ToShort();
-                        obj.Data.SCol1 = taskInfo.Col.ToShort();
-                        obj.Data.SLayer1 = taskInfo.Layer.ToShort();
-                        obj.Data.SDepth1 = taskInfo.Depth.ToShort();
-                        obj.Data.ELine1 = nextAdd.ToShort();
-                        obj.Data.ECol1 = taskInfo.WarehouseCode.Contains("S") ? taskInfoList.Max(x => x.ProdLine) : taskInfoList.Min(x => x.ProdLine);
-                        obj.Data.ELayer1 = 0;
-                        obj.Data.EDepth1 = 0;
-                        //二工位取深度较少的值
-                        taskInfo = taskInfoList[0];
-                        obj.Data.TaskNumber2 = taskInfo.ID;
-                        obj.Data.SLine2 = taskInfo.Line.ToShort();
-                        obj.Data.SCol2 = taskInfo.Col.ToShort();
-                        obj.Data.SLayer2 = taskInfo.Layer.ToShort();
-                        obj.Data.SDepth2 = taskInfo.Depth.ToShort();
-                        obj.Data.ELine2 = nextAdd.ToShort();
-                        obj.Data.ECol2 = taskInfo.WarehouseCode.Contains("S") ? taskInfoList.Min(x => x.ProdLine) : taskInfoList.Max(x => x.ProdLine);
-                        obj.Data.ELayer2 = 0;
-                        obj.Data.EDepth2 = 0;
-                        obj.Data.TaskSum = taskInfoList.Count.ToShort();
-                        obj.Data.GoodsType = taskInfo.GoodsType switch
-                        {
-                            18 => 1,
-                            34 => 2,
-                            50 => 3,
-                            _ => 0
-                        };
-                        obj.Data.TaskType = 4;
-                        obj.Data.VoucherNo++;
-                        break;
-
-                    default:
-
-                        throw new KnownException($"无法执行多个任务", LogLevelEnum.Mid);
+                    switch (taskInfoList.Count)
+                    {
+                        case 1:
+                            var task = taskInfoList.FirstOrDefault();
+
+                            //下发任务
+                            obj.Data.TaskNumber1 = task.ID;
+                            obj.Data.SLine1 = task.Line.ToShort();
+                            obj.Data.SCol1 = task.Col.ToShort();
+                            obj.Data.SLayer1 = task.Layer.ToShort();
+                            obj.Data.SDepth1 = task.Depth.ToShort();
+                            obj.Data.ELine1 = nextAdd.ToShort();
+                            obj.Data.ECol1 = task.ProdLine;
+                            obj.Data.ELayer1 = 0;
+                            obj.Data.EDepth1 = 0;
+                            obj.Data.TaskNumber2 = 0;
+                            obj.Data.SLine2 = 0;
+                            obj.Data.SCol2 = 0;
+                            obj.Data.SLayer2 = 0;
+                            obj.Data.SDepth2 = 0;
+                            obj.Data.ELine2 = 0;
+                            obj.Data.ECol2 = 0;
+                            obj.Data.ELayer2 = 0;
+                            obj.Data.EDepth2 = 0;
+                            obj.Data.TaskSum = taskInfoList.Count.ToShort();
+                            obj.Data.GoodsType = task.GoodsType switch
+                            {
+                                18 => 1,
+                                34 => 2,
+                                50 => 3,
+                                _ => 0
+                            };
+                            obj.Data.TaskType = 4;
+                            obj.Data.VoucherNo++;
+                            break;
+
+                        case 2:
+
+                            taskInfoList = taskInfoList.OrderBy(x => x.Depth).ToList();
+
+                            //一工位取深度较大的任务
+                            var taskInfo = taskInfoList[1];
+                            obj.Data.TaskNumber1 = taskInfo.ID;
+                            obj.Data.SLine1 = taskInfo.Line.ToShort();
+                            obj.Data.SCol1 = taskInfo.Col.ToShort();
+                            obj.Data.SLayer1 = taskInfo.Layer.ToShort();
+                            obj.Data.SDepth1 = taskInfo.Depth.ToShort();
+                            obj.Data.ELine1 = nextAdd.ToShort();
+                            obj.Data.ECol1 = taskInfo.WarehouseCode.Contains("S") ? taskInfoList.Max(x => x.ProdLine) : taskInfoList.Min(x => x.ProdLine);
+                            obj.Data.ELayer1 = 0;
+                            obj.Data.EDepth1 = 0;
+                            //二工位取深度较少的值
+                            taskInfo = taskInfoList[0];
+                            obj.Data.TaskNumber2 = taskInfo.ID;
+                            obj.Data.SLine2 = taskInfo.Line.ToShort();
+                            obj.Data.SCol2 = taskInfo.Col.ToShort();
+                            obj.Data.SLayer2 = taskInfo.Layer.ToShort();
+                            obj.Data.SDepth2 = taskInfo.Depth.ToShort();
+                            obj.Data.ELine2 = nextAdd.ToShort();
+                            obj.Data.ECol2 = taskInfo.WarehouseCode.Contains("S") ? taskInfoList.Min(x => x.ProdLine) : taskInfoList.Max(x => x.ProdLine);
+                            obj.Data.ELayer2 = 0;
+                            obj.Data.EDepth2 = 0;
+                            obj.Data.TaskSum = taskInfoList.Count.ToShort();
+                            obj.Data.GoodsType = taskInfo.GoodsType switch
+                            {
+                                18 => 1,
+                                34 => 2,
+                                50 => 3,
+                                _ => 0
+                            };
+                            obj.Data.TaskType = 4;
+                            obj.Data.VoucherNo++;
+                            break;
+
+                        default:
+
+                            throw new KnownException($"无法执行多个任务", LogLevelEnum.Mid);
+                    }
+                    World.Log($"机械臂任务处理:下发出库任务{obj.Data.TaskNumber1}--{obj.Data.TaskNumber2}--{obj.Data.VoucherNo}", LogLevelEnum.Mid);
                 }
-                World.Log($"机械臂任务处理:下发出库任务{obj.Data.TaskNumber1}--{obj.Data.TaskNumber2}--{obj.Data.VoucherNo}", LogLevelEnum.Mid);
             }
         }
 

+ 2 - 1
YWGC/FJK/WCS.WorkEngineering/Systems/环形库/环形库分配货位.cs

@@ -5,6 +5,7 @@ using WCS.Core;
 using WCS.Entity;
 using WCS.Entity.Protocol.Station;
 using WCS.WorkEngineering.Extensions;
+using WCS.WorkEngineering.Model.WMS;
 using WCS.WorkEngineering.WebApi.Controllers;
 using WCS.WorkEngineering.WebApi.Models.WMS.Response;
 using WCS.WorkEngineering.Worlds;
@@ -77,7 +78,7 @@ namespace WCS.WorkEngineering.Systems.环形库
                 var res = WmsApi.RingApplyStockInLoc(task.ID, task.Device, obj.Entity.Code, task.GoodsType);
                 if (res.ResCode != ResponseStatusCodeEnum.Sucess)
                 {
-                    World.Log(res.ResMsg,ServiceCenter.Logs.LogLevelEnum.Mid);
+                    World.Log(res.ResMsg, ServiceCenter.Logs.LogLevelEnum.Mid);
                     return;
                 }
                 task.AddrTo = res.ResData.CellNo;

+ 55 - 117
YWGC/FJK/WCS.WorkEngineering/Systems/码垛区域生成空托盘任务.cs

@@ -6,6 +6,7 @@ using WCS.Core;
 using WCS.Entity;
 using WCS.Entity.Protocol.Station;
 using WCS.WorkEngineering.Extensions;
+using WCS.WorkEngineering.Model.WMS;
 using WCS.WorkEngineering.WebApi.Controllers;
 using WCS.WorkEngineering.WebApi.Models.WMS.Response;
 using WCS.WorkEngineering.Worlds;
@@ -192,32 +193,41 @@ namespace WCS.WorkEngineering.Systems
                     SqlSugarHelper.Do(_db =>
                     {
                         var db = _db.Default;
-                        //检查是否有待执行状态放货点是自己的出库任务
-                        var ringTask = db.Queryable<WCS_TaskInfo>().NoLock().First(x => x.Type == TaskType.OutDepot && x.Status <= TaskStatus.WaitingToExecute && x.SrmStation == obj.Entity.Code);
-                        if (ringTask == null)
+                        var isDP = GetIsDirectPalletizing(obj.Entity.Parent.Code, db);
+                        KeyValuePair<short, short> ringPallet = new KeyValuePair<short, short>();
+                        if (isDP) //直接码垛
                         {
-                            var code = obj.Entity.Code.GetWareCode();
-                            var wareHouse = db.Queryable<BaseWarehouse>().First(x => x.Code == code);
-                            if (wareHouse == null)
-                            {
-                                World.Log($"无对应仓库--[{code}]");
-                                return;
-                            }
-                            //检查是否有满跺记录
-                            var ringPalletizingInfo = db.Queryable<BillRingPalletizingInfo>().Where(x => x.WareHouseId == wareHouse.Id && x.HaveQty > 0 && !x.Out).ToList()
-                                                                                             .OrderBy(x => x.AddTime).FirstOrDefault(x => x.HaveQty == x.HWCountQty || x.AddTime < DateTime.Now.AddHours(-6));
-                            if (ringPalletizingInfo == null)
+                        }
+                        else
+                        {
+                            //检查是否有待执行状态放货点是自己的出库任务
+                            var ringTask = db.Queryable<WCS_TaskInfo>().NoLock().First(x => x.Type == TaskType.OutDepot && x.Status <= TaskStatus.WaitingToExecute && x.SrmStation == obj.Entity.Code);
+                            if (ringTask == null)
                             {
-                                World.Log("无满跺码垛信息");
+                                var code = obj.Entity.Code.GetWareCode();
+                                var wareHouse = db.Queryable<BaseWarehouse>().First(x => x.Code == code);
+                                if (wareHouse == null)
+                                {
+                                    World.Log($"无对应仓库--[{code}]");
+                                    return;
+                                }
+                                //检查是否有满跺记录
+                                var ringPalletizingInfo = db.Queryable<BillRingPalletizingInfo>().Where(x => x.WareHouseId == wareHouse.Id && x.HaveQty > 0 && !x.Out).ToList()
+                                                                                                 .OrderBy(x => x.AddTime).FirstOrDefault(x => x.HaveQty == x.HWCountQty || x.AddTime < DateTime.Now.AddHours(-6));
+                                if (ringPalletizingInfo == null)
+                                {
+                                    World.Log("无满跺码垛信息");
+                                    return;
+                                }
+                                //开始申请码垛任务
+                                var resData = WmsApi.ApplyPalletizingStockOut(obj.Entity.Code, obj.Entity.Sources.Single(x => x.HasFlag(DeviceFlags.Robot)).Code);
+                                if (resData.ResCode != ResponseStatusCodeEnum.Sucess)
+                                {
+                                    World.Log(resData.ResMsg, ServiceCenter.Logs.LogLevelEnum.Mid);
+                                }
                                 return;
                             }
-                            //开始申请码垛任务
-                            var resData = WmsApi.ApplyPalletizingStockOut(obj.Entity.Code, obj.Entity.Sources.Single(x => x.HasFlag(DeviceFlags.Robot)).Code);
-                            if (resData.ResCode != ResponseStatusCodeEnum.Sucess)
-                            {
-                                World.Log(resData.ResMsg, ServiceCenter.Logs.LogLevelEnum.Mid);
-                            }
-                            return;
+                            ringPallet = new KeyValuePair<short, short>(ringTask.PalletType, ringTask.FullQty);
                         }
                         var task = db.Queryable<WCS_TaskInfo>().NoLock().First(x => x.Type == TaskType.Delivery && x.AddrTo == obj.Entity.Code && x.Status < TaskStatus.Finish);
                         if (task != null) return;
@@ -237,8 +247,8 @@ namespace WCS.WorkEngineering.Systems
                             AddrTo = obj.Entity.Code,
                             BarCode = "码垛托盘搬运-" + obj.Entity.Code,
                             Status = Entity.TaskStatus.NewBuild,
-                            PalletType = ringTask.PalletType,
-                            FullQty = ringTask.FullQty,
+                            PalletType = ringPallet.Key,
+                            FullQty = ringPallet.Value,
                             Type = TaskType.Delivery,
                             AddWho = "WCS",
                             AddTime = DateTime.Now
@@ -264,99 +274,27 @@ namespace WCS.WorkEngineering.Systems
         {
             return dev.Code == nameof(PalletizCreateEmptyTray);
         }
-    }
-
-    //
-    // 摘要:
-    //     环形库码垛缓存信息
-    [Tenant("fj")]
-    [SugarTable("Bill_RingPalletizingInfo")]
-    public class BillRingPalletizingInfo : BaseModel
-    {
-        //
-        // 摘要:
-        //     仓库ID
-        [SugarColumn(IsNullable = false, ColumnDescription = "仓库ID")]
-        public long WareHouseId { get; set; }
-
-        //
-        // 摘要:
-        //     任务
-        [Navigate(NavigateType.OneToOne, "WareHouseId")]
-        public BaseWarehouse WareHouse { get; set; }
-
-        //
-        // 摘要:
-        //     垛形主表ID
-        [SugarColumn(IsNullable = false, ColumnDescription = "垛形主表ID")]
-        public long BomSetGrpId { get; set; }
-
-        //
-        // 摘要:
-        //     工字轮个数
-        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "工字轮个数")]
-        public int HWCountQty { get; set; }
-
-        //
-        // 摘要:
-        //     BomCode(投料信息)/物料号
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = false, ColumnDescription = "BomCode(投料信息)")]
-        public string BomCode { get; set; }
 
-        //
-        // 摘要:
-        //     已有工字轮个数
-        [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "已有工字轮个数")]
-        public int HaveQty { get; set; }
-
-        //
-        // 摘要:
-        //     是否出库
-        [SugarColumn(IsNullable = false, ColumnDescription = "是否出库")]
-        public bool Out { get; set; }
-
-        //
-        // 摘要:
-        //     上一次分配时的放置位信息
-        [SugarColumn(ColumnDataType = "int", IsNullable = true)]
-        public int LastXYNO { get; set; }
-    }
-
-    //
-    // 摘要:
-    //     仓库表
-    [Tenant("fj")]
-    [SugarTable("Base_Warehouse")]
-    public class BaseWarehouse : BaseModel
-    {
-        //
-        // 摘要:
-        //     是否停用
-        [SugarColumn(ColumnDataType = "int", IsNullable = false)]
-        public int IsStop { get; set; }
-
-        //
-        // 摘要:
-        //     编号
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false)]
-        public string Code { get; set; }
-
-        //
-        // 摘要:
-        //     名称
-        [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = false)]
-        public string Name { get; set; }
-
-        ////
-        //// 摘要:
-        ////     类型
-        //[SugarColumn(IsNullable = false)]
-        //public FjLocationType TypeNum { get; set; }
-
-        //
-        // 摘要:
-        //     ConfigId
-        [SugarColumn(ColumnName = "ConfigId", ColumnDescription = "ConfigId")]
-        public long ConfigId { get; set; }
+        /// <summary>
+        ///  获取当前设备是否直接码垛
+        /// </summary>
+        /// <param name="devCode"></param>
+        /// <param name="db"></param>
+        /// <returns></returns>
+        public bool GetIsDirectPalletizing(string devCode, SqlSugarScopeProvider db)
+        {
+            var code = $"{devCode}DirectPalletizing";
+            var isDP = db.Queryable<fjSysConfig>().Single(x => x.Code == code);
+            if (isDP == null)
+            {
+                return false;
+            }
+            var isDirectPalletizing = isDP.SContent.ToInt();
+            if (isDirectPalletizing == 0 || isDirectPalletizing != 1)
+            {
+                return false;
+            }
+            return true;
+        }
     }
 }

+ 1 - 17
YWGC/FJK/WCS.WorkEngineering/WCS.WorkEngineering.csproj

@@ -20,7 +20,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="MessagePack" Version="2.5.140" />
+    <PackageReference Include="MessagePack" Version="2.5.187" />
   </ItemGroup>
 
   <ItemGroup>
@@ -28,20 +28,4 @@
     <ProjectReference Include="..\WCS.Entity.Protocol\WCS.Entity.Protocol.csproj" />
   </ItemGroup>
 
-  <ItemGroup>
-    <Reference Include="wms.dto">
-      <HintPath>..\DLC\wms.dto.dll</HintPath>
-    </Reference>
-    <Reference Include="wms.service">
-      <HintPath>..\DLC\wms.service.dll</HintPath>
-    </Reference>
-    <Reference Include="wms.sqlsugar">
-      <HintPath>..\DLC\wms.sqlsugar.dll</HintPath>
-    </Reference>
-  </ItemGroup>
-
-  <ItemGroup>
-    <Folder Include="Model\" />
-  </ItemGroup>
-
 </Project>

+ 2 - 40
YWGC/FJK/WCS.WorkEngineering/WebApi/Controllers/WmsApi.cs

@@ -4,16 +4,12 @@ using ServiceCenter.Logs;
 using ServiceCenter.Redis;
 using ServiceCenter.WebApi;
 using WCS.WorkEngineering.Extensions;
+using WCS.WorkEngineering.Model.WMS;
 using WCS.WorkEngineering.WebApi.Models.WCS.Response;
 using WCS.WorkEngineering.WebApi.Models.WMS.Request;
 using WCS.WorkEngineering.WebApi.Models.WMS.Response;
-using wms.dto;
-using wms.dto.request;
-using wms.dto.request.fj;
-using wms.dto.response.fj;
 using FJBuildEmptyPalletsStockRequest = WCS.WorkEngineering.WebApi.Models.WMS.Request.FJBuildEmptyPalletsStockRequest;
 using FJEnteMainLineRequest = WCS.WorkEngineering.WebApi.Models.WMS.Request.FJEnteMainLineRequest;
-using GetTunnelPriorityListRequest = WCS.WorkEngineering.WebApi.Models.WMS.Request.GetTunnelPriorityListRequest;
 using ResponseStatusCodeEnum = WCS.WorkEngineering.WebApi.Models.WMS.Response.ResponseStatusCodeEnum;
 using TaskBusType = WCS.WorkEngineering.WebApi.Models.WMS.Request.TaskBusType;
 
@@ -500,7 +496,7 @@ namespace WCS.WorkEngineering.WebApi.Controllers
         /// <exception cref="KnownException"></exception>
         public static SRes ApplyPalletizingStockOut(string loc, string robotCode)
         {
-            var res = APICaller.CallApi2<SRes>(WmsUrl + "/api/FJ/ApplyPalletizingStockOut", new wms.dto.request.fj.RingApplyPalletizingStockOutRequest(loc.GetWareCode(), loc, robotCode));
+            var res = APICaller.CallApi2<SRes>(WmsUrl + "/api/FJ/ApplyPalletizingStockOut", new RingApplyPalletizingStockOutRequest(loc.GetWareCode(), loc, robotCode));
             return res;
         }
 
@@ -523,38 +519,4 @@ namespace WCS.WorkEngineering.WebApi.Controllers
             return res;
         }
     }
-
-    public class FJGetTwoPalletDto : BaseRequest
-    {
-        /// <summary>
-        ///  仓库号
-        /// </summary>
-        public string WarehouseCode { get; set; }
-
-        /// <summary>
-        ///  仓库号
-        /// </summary>
-        public int TaskId { get; set; }
-    }
-
-    /// <summary>
-    ///  变更流向
-    /// </summary>
-    public class FjEditorialFlowRequest : BaseRequest
-    {
-        /// <summary>
-        /// 任务号
-        /// </summary>
-        public int TaskId { get; set; }
-
-        /// <summary>
-        /// 目标仓库
-        /// </summary>
-        public string WareCode { get; set; }
-
-        /// <summary>
-        /// 位置
-        /// </summary>
-        public string LocCode { get; set; }
-    }
 }

+ 6 - 0
YWGC/FJK/WCS.WorkEngineering/WebApi/Models/WMS/Request/BaseRequest.cs

@@ -0,0 +1,6 @@
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    public class BaseRequest
+    {
+    }
+}

+ 37 - 0
YWGC/FJK/WCS.WorkEngineering/WebApi/Models/WMS/Request/FJApplyStockInLocRequest.cs

@@ -0,0 +1,37 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    /// <summary>
+    ///  分拣申请货位
+    /// </summary>
+    public class FJApplyStockInLocRequest : BaseRequest
+    {
+        /// <summary>
+        /// WMS任务号
+        /// </summary>
+        [Required(ErrorMessage = "{0} 不可为空")]
+        public int TaskNum { get; set; }
+
+        /// <summary>
+        /// 巷道号
+        /// </summary>
+        public int TunnelNum { get; set; }
+
+        /// <summary>
+        /// 取货地点设备编号
+        /// </summary>
+        [Required(ErrorMessage = "{0} 不可为空")]
+        public string PickUpEquipmentNo { get; set; }
+
+        /// <summary>
+        ///  大小货 1表示小货 2表示大货
+        /// </summary>
+        public int Height { get; set; }
+    }
+}

+ 2 - 2
YWGC/FJK/WCS.WorkEngineering/WebApi/Models/WMS/Request/FJBingPalletRequest.cs

@@ -1,4 +1,4 @@
-using wms.dto;
+using WCS.WorkEngineering.Model.WMS;
 
 namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
 {
@@ -49,4 +49,4 @@ namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
         /// </summary>
         public bool IsItHalf { get; set; }
     }
-}
+}

+ 4 - 4
YWGC/FJK/WCS.WorkEngineering/WebApi/Models/WMS/Request/FJBuildEmptyPalletsStockRequest.cs

@@ -1,6 +1,6 @@
 using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
-using wms.dto;
+using WCS.WorkEngineering.Model.WMS;
 
 namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
 {
@@ -158,9 +158,9 @@ namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
         [Description("皮盘入库")]
         皮盘入库 = 16,
 
-            /// <summary>
-            ///  重绕满托入库
-            /// </summary>
+        /// <summary>
+        ///  重绕满托入库
+        /// </summary>
         [Description("重绕满托入库")]
         重绕满托入库 = 17,
 

+ 21 - 0
YWGC/FJK/WCS.WorkEngineering/WebApi/Models/WMS/Request/FJGetTwoPalletDto.cs

@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    public class FJGetTwoPalletDto : BaseRequest
+    {
+        /// <summary>
+        ///  仓库号
+        /// </summary>
+        public string WarehouseCode { get; set; }
+
+        /// <summary>
+        ///  仓库号
+        /// </summary>
+        public int TaskId { get; set; }
+    }
+}

+ 29 - 0
YWGC/FJK/WCS.WorkEngineering/WebApi/Models/WMS/Request/FjEditorialFlowRequest.cs

@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Request
+{
+    /// <summary>
+    ///  变更流向
+    /// </summary>
+    public class FjEditorialFlowRequest : BaseRequest
+    {
+        /// <summary>
+        /// 任务号
+        /// </summary>
+        public int TaskId { get; set; }
+
+        /// <summary>
+        /// 目标仓库
+        /// </summary>
+        public string WareCode { get; set; }
+
+        /// <summary>
+        /// 位置
+        /// </summary>
+        public string LocCode { get; set; }
+    }
+}

+ 49 - 0
YWGC/FJK/WCS.WorkEngineering/WebApi/Models/WMS/Response/FJApplyStockInLocResponse.cs

@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WCS.WorkEngineering.WebApi.Models.WMS.Response
+{
+    /// <summary>
+    ///  分拣申请货位返回接口
+    /// </summary>
+    public class FJApplyStockInLocResponse
+    {
+        /// <summary>
+        /// 货位号
+        /// </summary>
+        public string CellNo { get; set; }
+
+        /// <summary>
+        ///  仓库号
+        /// </summary>
+        public long WarehuoseId { get; set; }
+
+        /// <summary>
+        /// 巷道号
+        /// </summary>
+        public string TunnelNum { get; set; }
+
+        /// <summary>
+        /// 行
+        /// </summary>
+        public int Row { get; set; }
+
+        /// <summary>
+        /// 列
+        /// </summary>
+        public int Colomn { get; set; }
+
+        /// <summary>
+        /// 层
+        /// </summary>
+        public int Layer { get; set; }
+
+        /// <summary>
+        ///  深度
+        /// </summary>
+        public int Depth { get; set; }
+    }
+}