From 7f6c27ee8f386ec45a94277033b0b4b78f275705 Mon Sep 17 00:00:00 2001
From: 展杰 <1240968267@qq.com>
Date: 星期二, 13 八月 2024 10:02:55 +0800
Subject: [PATCH] 测试

---
 MESApplication/Controllers/Warehouse/PurdkbController.cs                |  162 +
 MES.Service/Dto/service/OutItemDto.cs                                   |   17 
 MES.Service/Dto/service/InventoryItemDetail.cs                          |   40 
 MES.Service/Dto/service/PurchaseInventory.cs                            |   15 
 MES.Service/service/GetErpParametersServer.cs                           |  179 +
 MES.Service/Modes/MesInvItemBarcodes.cs                                 |  460 +++
 MES.Service/service/Warehouse/MesInvItemOutsManager.cs                  |  706 +++++
 MES.Service/service/Warehouse/MesInvItemOutItemsManager.cs              |   78 
 MES.Service/service/Warehouse/MesInvItemOutCDetailsManager.cs           |   78 
 MES.Service/Modes/MesInvItemArn.cs                                      |  243 +
 MESApplication/Controllers/Warehouse/MesInvItemStocksController.cs      |  162 +
 MES.Service/DB/OracleSQLHelper.cs                                       |    4 
 MES.Service/Modes/MesInvItemOuts.cs                                     |  307 ++
 MES.Service/service/Warehouse/MesInvItemInCItemsManager.cs              |   82 
 MES.Service/Dto/service/MESInvItemOutItems.cs                           |   44 
 MES.Service/service/Warehouse/MesInvItemArnDetailManager.cs             |  206 +
 MES.Service/Modes/MesInvItemStocks.cs                                   |  201 +
 MES.Service/Dto/service/InventoryItem.cs                                |   19 
 MES.Service/Dto/service/Material.cs                                     |   19 
 MES.Service/Dto/service/WarehouseQuery.cs                               |   22 
 MESApplication/Controllers/Warehouse/MesInvItemArnController.cs         |  202 +
 MES.Service/service/Warehouse/PurdkbManager.cs                          |   11 
 MESApplication/Controllers/Warehouse/PurdkaController.cs                |  162 +
 MES.Service/service/Warehouse/PurdhbManager.cs                          |   11 
 MES.Service/Modes/MesInvItemInCItems.cs                                 |  148 +
 MES.Service/service/Warehouse/MesQaItemsDetect01Manager.cs              |   78 
 MESApplication/Controllers/Warehouse/MesInvItemOutItemsController.cs    |  163 +
 MESApplication/Controllers/Warehouse/MesQaItemsDetect01Controller.cs    |  163 +
 MES.Service/Modes/Purdhb.cs                                             |  274 ++
 MESApplication/Controllers/Warehouse/MesInvItemInCItemsController.cs    |  163 +
 MES.Service/service/Warehouse/MesInvItemStocksManager.cs                |   78 
 MESApplication/Controllers/Warehouse/MesInvItemBarcodesController.cs    |  163 +
 MESApplication/Controllers/Warehouse/MesInvItemOutCDetailsController.cs |  163 +
 MESApplication/Controllers/Warehouse/PurdhbController.cs                |  162 +
 MES.Service/Modes/MesInvItemOutItems.cs                                 |  210 +
 MESApplication/Controllers/Warehouse/MesInvItemInCDetailsController.cs  |  288 ++
 MES.Service/Dto/base/AppSettings.cs                                     |    8 
 MES.Service/DB/SqlSugarHelper.cs                                        |    2 
 MES.Service/service/Warehouse/MesInvItemBarcodesManager.cs              |   78 
 MES.Service/Modes/Purdka.cs                                             |  130 
 MESApplication/Controllers/Warehouse/MesInvItemArnDetailController.cs   |  223 +
 MES.Service/Modes/MesQaItemsDetect01.cs                                 |  331 ++
 MES.Service/Modes/MesInvItemArnDetail.cs                                |  225 +
 MES.Service/service/Warehouse/MesInvItemInCDetailsManager.cs            |  292 ++
 MES.Service/Modes/MesInvItemInCDetails.cs                               |  361 ++
 MES.Service/util/AppsettingsUtility.cs                                  |   19 
 MES.Service/service/Warehouse/MesInvItemArnManager.cs                   |   66 
 MESApplication/Controllers/Warehouse/MesInvItemOutsController.cs        |  453 +++
 MES.Service/Modes/MesInvItemOutCDetails.cs                              |  242 +
 MES.Service/DB/DbContext.cs                                             |    2 
 MES.Service/Modes/Purdkb.cs                                             |  142 +
 MES.Service/service/Warehouse/PurdkaManager.cs                          |   11 
 52 files changed, 8,064 insertions(+), 4 deletions(-)

diff --git a/MES.Service/DB/DbContext.cs b/MES.Service/DB/DbContext.cs
index cdaad87..cd0ad78 100644
--- a/MES.Service/DB/DbContext.cs
+++ b/MES.Service/DB/DbContext.cs
@@ -12,7 +12,7 @@
     //mesQaItemXj02Context.Db.Queryable<MesQaItemXj02>().ToList();
 
     private static readonly string connectionString =
-        "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.11.251)(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL))); Persist Security Info=True;User ID = sg_prd; Password=sgprd"; // 杩欓噷鏇挎崲鎴愪綘鐨勫疄闄呰繛鎺ュ瓧绗︿覆;
+        "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.107)(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL))); Persist Security Info=True;User ID = xm_dev; Password=xmdev"; // 杩欓噷鏇挎崲鎴愪綘鐨勫疄闄呰繛鎺ュ瓧绗︿覆;
 
     /// <summary>
     ///     娉ㄦ剰锛氫笉鑳藉啓鎴愰潤鎬佺殑 //鐢ㄦ潵澶勭悊浜嬪姟澶氳〃鏌ヨ鍜屽鏉傜殑鎿嶄綔
diff --git a/MES.Service/DB/OracleSQLHelper.cs b/MES.Service/DB/OracleSQLHelper.cs
index 65b0219..3efbc3f 100644
--- a/MES.Service/DB/OracleSQLHelper.cs
+++ b/MES.Service/DB/OracleSQLHelper.cs
@@ -9,13 +9,13 @@
 public class OracleSQLHelper
 {
     public const string ConnectionString =
-        "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.11.251)(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL))); Persist Security Info=True;User ID = sg_prd; Password=sgprd";
+        "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.107)(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL))); Persist Security Info=True;User ID = xm_dev; Password=xmdev";
 
     private readonly string _connectionString;
 
     //public static string connectionString = "Data Source = 192.168.1.19; Persist Security Info=True;User ID = abtdev; Password=abt_dev";
     public string connectionString =
-        "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.11.251)(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL))); Persist Security Info=True;User ID = sg_prd; Password=sgprd"; // 杩欓噷鏇挎崲鎴愪綘鐨勫疄闄呰繛鎺ュ瓧绗︿覆
+        "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.107)(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL))); Persist Security Info=True;User ID = xm_dev; Password=xmdev"; // 杩欓噷鏇挎崲鎴愪綘鐨勫疄闄呰繛鎺ュ瓧绗︿覆
 
     public OracleSQLHelper()
     {
diff --git a/MES.Service/DB/SqlSugarHelper.cs b/MES.Service/DB/SqlSugarHelper.cs
index baedcea..d2d8900 100644
--- a/MES.Service/DB/SqlSugarHelper.cs
+++ b/MES.Service/DB/SqlSugarHelper.cs
@@ -5,7 +5,7 @@
 public class SqlSugarHelper
 {
     private static readonly string _connectionString =
-        "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.11.251)(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL))); Persist Security Info=True;User ID = sg_prd; Password=sgprd"; // 杩欓噷鏇挎崲鎴愪綘鐨勫疄闄呰繛鎺ュ瓧绗︿覆
+        "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.107)(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL))); Persist Security Info=True;User ID = xm_dev; Password=xmdev"; // 杩欓噷鏇挎崲鎴愪綘鐨勫疄闄呰繛鎺ュ瓧绗︿覆
 
     public static SqlSugarClient GetInstance()
     {
diff --git a/MES.Service/Dto/base/AppSettings.cs b/MES.Service/Dto/base/AppSettings.cs
new file mode 100644
index 0000000..3989c37
--- /dev/null
+++ b/MES.Service/Dto/base/AppSettings.cs
@@ -0,0 +1,8 @@
+锘縩amespace MES.Service.Dto.@base;
+
+public class AppSettings
+{
+    public string TestErpUrl { get; set; }
+    public string ProductionErpUrl { get; set; }
+    public string DataBaseConn { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Dto/service/InventoryItem.cs b/MES.Service/Dto/service/InventoryItem.cs
new file mode 100644
index 0000000..ca5767f
--- /dev/null
+++ b/MES.Service/Dto/service/InventoryItem.cs
@@ -0,0 +1,19 @@
+锘縰sing SqlSugar;
+
+namespace MES.Service.Dto.service;
+
+public class InventoryItem
+{
+    [SugarColumn(ColumnName = "DEPOT")] public string Depot { get; set; }
+
+    [SugarColumn(ColumnName = "ITEM_NO")] public string ItemNo { get; set; }
+
+    [SugarColumn(ColumnName = "ITEM_MODEL")]
+    public string ItemModel { get; set; }
+
+    [SugarColumn(ColumnName = "ITEM_NAME")]
+    public string ItemName { get; set; }
+
+    [SugarColumn(ColumnName = "QTY")]
+    public decimal Qty { get; set; } // 浣跨敤 decimal 鏉ヨ〃绀烘暟閲�
+}
\ No newline at end of file
diff --git a/MES.Service/Dto/service/InventoryItemDetail.cs b/MES.Service/Dto/service/InventoryItemDetail.cs
new file mode 100644
index 0000000..360126b
--- /dev/null
+++ b/MES.Service/Dto/service/InventoryItemDetail.cs
@@ -0,0 +1,40 @@
+锘縰sing SqlSugar;
+
+namespace MES.Service.Dto.service;
+
+public class InventoryItemDetail
+{
+    [SugarColumn(ColumnName = "WORK_NO")] public string WorkNo { get; set; }
+
+    [SugarColumn(ColumnName = "WORK_LINE")]
+    public string WorkLine { get; set; }
+
+    [SugarColumn(ColumnName = "ITEM_NO")] public string ItemNo { get; set; }
+
+    [SugarColumn(ColumnName = "ITEM_NAME")]
+    public string ItemName { get; set; }
+
+    [SugarColumn(ColumnName = "ITEM_MODEL")]
+    public string ItemModel { get; set; }
+
+    [SugarColumn(ColumnName = "SUM_QUANTITY")]
+    public decimal SumQuantity { get; set; }
+
+    [SugarColumn(ColumnName = "UNIT")] public string Unit { get; set; }
+
+    [SugarColumn(ColumnName = "SUPP_NO")] public string SuppNo { get; set; }
+
+    [SugarColumn(ColumnName = "QUANTITY")] public decimal Quantity { get; set; }
+
+    [SugarColumn(ColumnName = "REFUNDABLE_QUANTITY")]
+    public decimal RefundableQuantity { get; set; }
+
+    [SugarColumn(ColumnName = "CBILL_NO")] public string CbillNo { get; set; }
+
+    [SugarColumn(ColumnName = "TASK_NO")] public string TaskNo { get; set; }
+
+    [SugarColumn(ColumnName = "BILL_NO")] public string BillNo { get; set; }
+
+    [SugarColumn(ColumnName = "CREATE_DATE")]
+    public string CreateDate { get; set; } // 濡傛灉闇�瑕佹棩鏈熷鐞嗭紝鍙互鑰冭檻浣跨敤 DateTime 绫诲瀷
+}
\ No newline at end of file
diff --git a/MES.Service/Dto/service/MESInvItemOutItems.cs b/MES.Service/Dto/service/MESInvItemOutItems.cs
new file mode 100644
index 0000000..e399091
--- /dev/null
+++ b/MES.Service/Dto/service/MESInvItemOutItems.cs
@@ -0,0 +1,44 @@
+锘縰sing SqlSugar;
+
+namespace MES.Service.Dto.service;
+
+public class MESInvItemOutItems
+{
+    [SugarColumn(ColumnName = "REMARK")] public string Remark { get; set; }
+
+    [SugarColumn(ColumnName = "PBILL_NO")] public string PbillNo { get; set; }
+
+    [SugarColumn(ColumnName = "ITEM_OUT_ID")]
+    public string ItemOutId { get; set; }
+
+    [SugarColumn(ColumnName = "RK_QTY")] public decimal RkQty { get; set; }
+
+    [SugarColumn(ColumnName = "TL_QTY")] public decimal TlQty { get; set; }
+
+    [SugarColumn(ColumnName = "WORK_LINE")]
+    public string WorkLine { get; set; }
+
+    [SugarColumn(ColumnName = "QUANTITY")] public decimal Quantity { get; set; }
+
+    [SugarColumn(ColumnName = "ITEM_NO")] public string ItemNo { get; set; }
+
+    [SugarColumn(ColumnName = "KT_QTY")]
+    public decimal KtQty { get; set; } // 鍓╀綑鍙��
+
+    [SugarColumn(ColumnName = "DEPOT_SECTION_CODE")]
+    public string DepotSectionCode { get; set; }
+
+    [SugarColumn(ColumnName = "ITEM_MODEL")]
+    public string ItemModel { get; set; }
+
+    [SugarColumn(ColumnName = "ITEM_NAME")]
+    public string ItemName { get; set; }
+
+    [SugarColumn(ColumnName = "CGB014")] public string Cgb014 { get; set; }
+
+    [SugarColumn(ColumnName = "STAFF_NAME")]
+    public string StaffName { get; set; }
+
+    [SugarColumn(ColumnName = "DEPOT_CODE")]
+    public string DepotCode { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Dto/service/Material.cs b/MES.Service/Dto/service/Material.cs
new file mode 100644
index 0000000..183cedf
--- /dev/null
+++ b/MES.Service/Dto/service/Material.cs
@@ -0,0 +1,19 @@
+锘縩amespace MES.Service.Dto.service;
+
+public class Material
+{
+    public string? FmrMode { get; set; }
+    public string? FngDesc { get; set; }
+    public decimal? FsrcEntryId { get; set; }
+    public decimal? FrmRealQty { get; set; }
+    public string? FmaterialId { get; set; }
+    public string? FstockId { get; set; }
+    public string? Funit { get; set; }
+    public decimal? FmesEntryId { get; set; }
+    public decimal? Mid { get; set; }
+    public string? UserName { get; set; }
+    public string? DepotSectionCode { get; set; }
+    public string? WorkNo { get; set; }
+    public decimal? Frealqty { get; set; }
+    public string? FuintId { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Dto/service/OutItemDto.cs b/MES.Service/Dto/service/OutItemDto.cs
new file mode 100644
index 0000000..804bb9c
--- /dev/null
+++ b/MES.Service/Dto/service/OutItemDto.cs
@@ -0,0 +1,17 @@
+锘縰sing MES.Service.Modes;
+
+namespace MES.Service.Dto.service;
+
+public class OutItemDto
+{
+    public MesInvItemOuts? Form { get; set; }
+    public List<MesInvItemOutItems>? SaveItems { get; set; }
+    public List<MESInvItemOutItems>? SelectItems { get; set; }
+
+
+    public string? ItemNo { get; set; }
+
+    public decimal? Quantity { get; set; }
+
+    public List<InventoryItem>? SumItem { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Dto/service/PurchaseInventory.cs b/MES.Service/Dto/service/PurchaseInventory.cs
new file mode 100644
index 0000000..bb590d6
--- /dev/null
+++ b/MES.Service/Dto/service/PurchaseInventory.cs
@@ -0,0 +1,15 @@
+锘縰sing MES.Service.Modes;
+
+namespace MES.Service.Dto.service;
+
+public class PurchaseInventory
+{
+    public string? ItemNo { get; set; }
+
+    public decimal? SumQuantity { get; set; }
+
+    public MesInvItemIns? ItemIns { get; set; }
+    public List<MesInvItemInCDetails>? InvItemInCDetails { get; set; }
+
+    public List<MesInvItemInCItems>? ItemInDetails { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Dto/service/WarehouseQuery.cs b/MES.Service/Dto/service/WarehouseQuery.cs
new file mode 100644
index 0000000..ea3e707
--- /dev/null
+++ b/MES.Service/Dto/service/WarehouseQuery.cs
@@ -0,0 +1,22 @@
+锘縰sing MES.Service.Dto.@base;
+
+namespace MES.Service.Dto.service;
+
+public class WarehouseQuery : Page
+{
+    public decimal? id { get; set; }
+
+    public decimal[]? ItemArnDetailIds { get; set; }
+
+    public string? itemInId { get; set; }
+
+    public string? sectionCode { get; set; }
+    public string? barcode { get; set; }
+    public string? userName { get; set; }
+    public string? billNo { get; set; }
+    public short? status { get; set; }
+    public DateTime? date { get; set; }
+    public string? Type { get; set; }
+    public string? DepotCode { get; set; }
+    public string? SuppNo { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Modes/MesInvItemArn.cs b/MES.Service/Modes/MesInvItemArn.cs
new file mode 100644
index 0000000..518f09f
--- /dev/null
+++ b/MES.Service/Modes/MesInvItemArn.cs
@@ -0,0 +1,243 @@
+锘縰sing SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+///     鐗╂枡鍏ュ簱涓昏〃
+/// </summary>
+[SugarTable("MES_INV_ITEM_ARN")]
+public class MesInvItemArn
+{
+ /// <summary>
+ ///     ID(SEQ_INV_ID)
+ /// </summary>
+ [SugarColumn(ColumnName = "ID", IsPrimaryKey = true)]
+    public decimal Id { get; set; }
+
+ /// <summary>
+ ///     鍒拌揣鍗曞彿
+ /// </summary>
+ [SugarColumn(ColumnName = "BILL_NO")]
+    public string BillNo { get; set; }
+
+ /// <summary>
+ ///     鐘舵�亅0-鏈鏍�1-瀹℃牳鍏ュ簱\缁撴
+ /// </summary>
+ [SugarColumn(ColumnName = "STATUS")]
+    public short? Status { get; set; }
+
+ /// <summary>
+ ///     鍘熷洜
+ /// </summary>
+ [SugarColumn(ColumnName = "REASON")]
+    public string Reason { get; set; }
+
+ /// <summary>
+ ///     鍒涘缓浜�
+ /// </summary>
+ [SugarColumn(ColumnName = "CREATE_BY")]
+    public string CreateBy { get; set; }
+
+ /// <summary>
+ ///     鍒涘缓鏃堕棿
+ /// </summary>
+ [SugarColumn(ColumnName = "CREATE_DATE")]
+    public DateTime? CreateDate { get; set; }
+
+ /// <summary>
+ ///     鏈�鍚庢洿鏂颁汉
+ /// </summary>
+ [SugarColumn(ColumnName = "LASTUPDATE_BY")]
+    public string LastupdateBy { get; set; }
+
+ /// <summary>
+ ///     鏈�鍚庢洿鏂版椂闂�
+ /// </summary>
+ [SugarColumn(ColumnName = "LASTUPDATE_DATE")]
+    public DateTime? LastupdateDate { get; set; }
+
+ /// <summary>
+ ///     鍗曟嵁绫诲瀷ID
+ /// </summary>
+ [SugarColumn(ColumnName = "BILL_TYPE_ID")]
+    public decimal? BillTypeId { get; set; }
+
+ /// <summary>
+ ///     浜嬪姟绫诲瀷ID
+ /// </summary>
+ [SugarColumn(ColumnName = "TRANSACTION_ID")]
+    public decimal? TransactionId { get; set; }
+
+ /// <summary>
+ ///     澶囨敞
+ /// </summary>
+ [SugarColumn(ColumnName = "REMARK")]
+    public string Remark { get; set; }
+
+ /// <summary>
+ ///     閫佽揣鍗曞彿
+ /// </summary>
+ [SugarColumn(ColumnName = "PAPER_BILL_NO")]
+    public string PaperBillNo { get; set; }
+
+ /// <summary>
+ ///     閫�鏂欎汉宸ュ彿
+ /// </summary>
+ [SugarColumn(ColumnName = "USER_NO_BACK")]
+    public string UserNoBack { get; set; }
+
+ /// <summary>
+ ///     鎻愪氦浜�
+ /// </summary>
+ [SugarColumn(ColumnName = "CHECK_USER")]
+    public string CheckUser { get; set; }
+
+ /// <summary>
+ ///     鎻愪氦鏃ユ湡
+ /// </summary>
+ [SugarColumn(ColumnName = "CHECK_DATE")]
+    public DateTime? CheckDate { get; set; }
+
+ /// <summary>
+ ///     鍏ュ簱鏃ユ湡
+ /// </summary>
+ [SugarColumn(ColumnName = "INS_DATE")]
+    public DateTime? InsDate { get; set; }
+
+ /// <summary>
+ ///     妫�楠岀粨鏋�
+ /// </summary>
+ [SugarColumn(ColumnName = "CHECK_RES")]
+    public string CheckRes { get; set; }
+
+ /// <summary>
+ ///     宸叉崱鏁伴噺
+ /// </summary>
+ [SugarColumn(ColumnName = "CHECK_QTY")]
+    public decimal? CheckQty { get; set; }
+
+ /// <summary>
+ ///     浠撳簱缂栫爜
+ /// </summary>
+ [SugarColumn(ColumnName = "DEPOTS_CODE")]
+    public string DepotsCode { get; set; }
+
+ /// <summary>
+ ///     浜嬪姟绫诲瀷缂栫爜
+ /// </summary>
+ [SugarColumn(ColumnName = "TRANSCTION_NO")]
+    public string TransctionNo { get; set; }
+
+ /// <summary>
+ ///     渚涘簲鍟嗙紪鐮�
+ /// </summary>
+ [SugarColumn(ColumnName = "SUPP_NO")]
+    public string SuppNo { get; set; }
+
+ /// <summary>
+ ///     鎻愪氦鐘舵��
+ /// </summary>
+ [SugarColumn(ColumnName = "FSTATUS")]
+    public short? Fstatus { get; set; }
+
+ /// <summary>
+ ///     宸ュ巶缂栫爜
+ /// </summary>
+ [SugarColumn(ColumnName = "FACTORY")]
+    public string Factory { get; set; }
+
+ /// <summary>
+ ///     鏄惁宸插洖鍐橲AP
+ /// </summary>
+ [SugarColumn(ColumnName = "SAPSTATUS")]
+    public short? Sapstatus { get; set; }
+
+ /// <summary>
+ ///     纭鍏ュ簱鏃ユ湡
+ /// </summary>
+ [SugarColumn(ColumnName = "INS_DATE")]
+    public DateTime? Insdate { get; set; }
+
+ /// <summary>
+ ///     鏄惁妫�楠�
+ /// </summary>
+ [SugarColumn(ColumnName = "ISCHECK")]
+    public decimal? Ischeck { get; set; }
+
+ /// <summary>
+ ///     瀹℃牳鍏ュ簱浜�
+ /// </summary>
+ [SugarColumn(ColumnName = "INSBY")]
+    public string Insby { get; set; }
+
+ /// <summary>
+ ///     鍏徃浠g爜
+ /// </summary>
+ [SugarColumn(ColumnName = "COMPANY")]
+    public string Company { get; set; }
+
+ /// <summary>
+ ///     鎬ユ枡鏍囪瘑
+ /// </summary>
+ [SugarColumn(ColumnName = "URGENT_FLAG")]
+    public short? UrgentFlag { get; set; }
+
+ /// <summary>
+ ///     鍐查攢浜嬪姟绫诲瀷缂栫爜
+ /// </summary>
+ [SugarColumn(ColumnName = "MTTRANSCTION_NO")]
+    public decimal? MttransctionNo { get; set; }
+
+ /// <summary>
+ ///     IQC妫�楠屽崟鍙�
+ /// </summary>
+ [SugarColumn(ColumnName = "IQC_RELEASE_NO")]
+    public string IqcReleaseNo { get; set; }
+
+ /// <summary>
+ ///     鏄惁鏄剧ず
+ /// </summary>
+ [SugarColumn(ColumnName = "IS_VISUAL")]
+    public decimal? IsVisual { get; set; }
+
+ /// <summary>
+ ///     0=閲囪喘锛�1=濮斿
+ /// </summary>
+ [SugarColumn(ColumnName = "F_TYPE")]
+    public decimal? FType { get; set; }
+
+ /// <summary>
+ ///     ERP鍒拌揣鍗旾D
+ /// </summary>
+ [SugarColumn(ColumnName = "EBELN_K3ID")]
+    public string EbelnK3id { get; set; }
+
+ /// <summary>
+ ///     鏉$爜鏉″嵃杩涘害
+ /// </summary>
+ [SugarColumn(ColumnName = "BARCODE_RATIO")]
+    public decimal? BarcodeRatio { get; set; }
+
+ /// <summary>
+ ///     ERP鍗曞彿
+ /// </summary>
+ [SugarColumn(ColumnName = "ERPNO")]
+    public string Erpno { get; set; }
+
+ /// <summary>
+ ///     鏄惁宸查��璐�0-鏈��璐э紝1-閫�璐�
+ /// </summary>
+ [SugarColumn(ColumnName = "THSTATUS")]
+    public short? Thstatus { get; set; }
+
+ /// <summary>
+ ///     ERP閫�璐у崟鍙�
+ /// </summary>
+ [SugarColumn(ColumnName = "ERPTHNO")]
+    public string Erpthno { get; set; }
+
+
+    [SugarColumn(IsIgnore = true)] public string? DepotName { get; set; }
+
+    [SugarColumn(IsIgnore = true)] public string? SuppName { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Modes/MesInvItemArnDetail.cs b/MES.Service/Modes/MesInvItemArnDetail.cs
new file mode 100644
index 0000000..7be265c
--- /dev/null
+++ b/MES.Service/Modes/MesInvItemArnDetail.cs
@@ -0,0 +1,225 @@
+锘縰sing SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+/// </summary>
+[SugarTable("MES_INV_ITEM_ARN_DETAIL")]
+public class MesInvItemArnDetail
+{
+    /// <summary>
+    ///     SEQ_INV_ID
+    /// </summary>
+    [SugarColumn(ColumnName = "ID", IsPrimaryKey = true)]
+    public decimal Id { get; set; }
+
+    /// <summary>
+    ///     涓昏〃ID
+    /// </summary>
+    [SugarColumn(ColumnName = "MID")]
+    public decimal? Mid { get; set; }
+
+    /// <summary>
+    ///     閲囪喘鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "EBELN")]
+    public string Ebeln { get; set; }
+
+    /// <summary>
+    ///     閲囪喘璁㈠崟琛屽彿
+    /// </summary>
+    [SugarColumn(ColumnName = "EBELN_LINE")]
+    public decimal? EbelnLine { get; set; }
+
+    /// <summary>
+    ///     閲囪喘璁㈠崟鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "EBELN_QTY")]
+    public decimal? EbelnQty { get; set; }
+
+    /// <summary>
+    ///     鐗╂枡缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "ITEM_NO")]
+    public string ItemNo { get; set; }
+
+    /// <summary>
+    ///     鏀惰揣鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "QUANTITY")]
+    public decimal? Quantity { get; set; }
+
+    /// <summary>
+    ///     鍒涘缓浜�
+    /// </summary>
+    [SugarColumn(ColumnName = "CREATE_BY")]
+    public string CreateBy { get; set; }
+
+    /// <summary>
+    ///     鍒涘缓鏃堕棿
+    /// </summary>
+    [SugarColumn(ColumnName = "CREATE_DATE")]
+    public DateTime? CreateDate { get; set; }
+
+    /// <summary>
+    ///     鏈�鍚庢洿鏂颁汉
+    /// </summary>
+    [SugarColumn(ColumnName = "LASTUPDATE_BY")]
+    public string LastupdateBy { get; set; }
+
+    /// <summary>
+    ///     鏈�鍚庢洿鏂版椂闂�
+    /// </summary>
+    [SugarColumn(ColumnName = "LASTUPDATE_DATE")]
+    public DateTime? LastupdateDate { get; set; }
+
+    /// <summary>
+    ///     鍒嗗巶缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "FACTORY")]
+    public string Factory { get; set; }
+
+    /// <summary>
+    ///     鍏徃浠g爜
+    /// </summary>
+    [SugarColumn(ColumnName = "COMPANY")]
+    public string Company { get; set; }
+
+    /// <summary>
+    ///     閲囪喘鍗旾D
+    /// </summary>
+    [SugarColumn(ColumnName = "EBELN_K3ID")]
+    public decimal? EbelnK3id { get; set; }
+
+    /// <summary>
+    ///     閲囪喘鍗曡ID
+    /// </summary>
+    [SugarColumn(ColumnName = "LINE_K3ID")]
+    public decimal? LineK3id { get; set; }
+
+    /// <summary>
+    ///     鏈搴旀敹鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "SUB_QTY")]
+    public decimal? SubQty { get; set; }
+
+    /// <summary>
+    ///     浣欓噺
+    /// </summary>
+    [SugarColumn(ColumnName = "MARGIN_QTY")]
+    public decimal? MarginQty { get; set; }
+
+    /// <summary>
+    ///     浠诲姟鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "WORK_NO")]
+    public string WorkNo { get; set; }
+
+    /// <summary>
+    ///     鎬ユ枡鏍囪瘑
+    /// </summary>
+    [SugarColumn(ColumnName = "URGENT_FLAG")]
+    public decimal? UrgentFlag { get; set; }
+
+    /// <summary>
+    ///     澶囨敞
+    /// </summary>
+    [SugarColumn(ColumnName = "MEMO")]
+    public string Memo { get; set; }
+
+    /// <summary>
+    ///     妫�楠岀粨鏋�
+    /// </summary>
+    [SugarColumn(ColumnName = "CHECK_RES")]
+    public string CheckRes { get; set; }
+
+    /// <summary>
+    ///     妫�楠岀姸鎬�  锛堝緟妫�銆佸垎閫夈�佺壒閲囥�佸凡妫�锛�
+    /// </summary>
+    [SugarColumn(ColumnName = "CHECK_STATES")]
+    public string CheckStates { get; set; }
+
+    /// <summary>
+    ///     鏀惰揣浣欓噺
+    /// </summary>
+    [SugarColumn(ColumnName = "QUANTITY_M")]
+    public decimal? QuantityM { get; set; }
+
+    /// <summary>
+    ///     鏈搴旀敹浣欓噺
+    /// </summary>
+    [SugarColumn(ColumnName = "SUB_MQTY")]
+    public decimal? SubMqty { get; set; }
+
+    /// <summary>
+    ///     妫�楠屾棩鏈�
+    /// </summary>
+    [SugarColumn(ColumnName = "CHECK_DATE")]
+    public DateTime? CheckDate { get; set; }
+
+    /// <summary>
+    ///     鏄惁妫�楠�
+    /// </summary>
+    [SugarColumn(ColumnName = "ISCHECK")]
+    public short? Ischeck { get; set; }
+
+    /// <summary>
+    ///     宸叉敹鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "OK_QTY")]
+    public decimal? OkQty { get; set; }
+
+    /// <summary>
+    ///     宸叉敹浣欓噺
+    /// </summary>
+    [SugarColumn(ColumnName = "OK_MQTY")]
+    public decimal? OkMqty { get; set; }
+
+    /// <summary>
+    ///     浜у搧鍨嬪彿
+    /// </summary>
+    [SugarColumn(ColumnName = "BOARD_STYLE")]
+    public string BoardStyle { get; set; }
+
+    /// <summary>
+    ///     浠诲姟鍗曡鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "WORK_LINE")]
+    public decimal? WorkLine { get; set; }
+
+    /// <summary>
+    ///     0銆侀噰璐崟锛�1銆佸澶栧崟
+    /// </summary>
+    [SugarColumn(ColumnName = "F_TYPE")]
+    public decimal? FType { get; set; }
+
+    /// <summary>
+    ///     鏄惁鍏ュ簱
+    /// </summary>
+    [SugarColumn(ColumnName = "ISDEPS_IN")]
+    public short? IsdepsIn { get; set; }
+
+    /// <summary>
+    ///     鍒拌揣鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "DHA001")]
+    public string Dha001 { get; set; }
+
+    /// <summary>
+    ///     宸插叆搴撴暟閲�
+    /// </summary>
+    [SugarColumn(ColumnName = "OK_RKQTY")]
+    public decimal? OkRkqty { get; set; }
+
+    /// <summary>
+    ///     鍒拌揣鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "CBILL_NO")]
+    public string CbillNo { get; set; }
+
+    [SugarColumn(IsIgnore = true)] public string? itemModel { get; set; }
+
+    [SugarColumn(IsIgnore = true)] public string? itemName { get; set; }
+
+    [SugarColumn(IsIgnore = true)] public string? Fname { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Modes/MesInvItemBarcodes.cs b/MES.Service/Modes/MesInvItemBarcodes.cs
new file mode 100644
index 0000000..078ac04
--- /dev/null
+++ b/MES.Service/Modes/MesInvItemBarcodes.cs
@@ -0,0 +1,460 @@
+锘縰sing SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+///     鐗╂枡鏉$爜琛�
+/// </summary>
+[SugarTable("MES_INV_ITEM_BARCODES")]
+public class MesInvItemBarcodes
+{
+   /// <summary>
+   ///     SEQ_BARCODE_PSN_ID
+   /// </summary>
+   [SugarColumn(ColumnName = "ID", IsPrimaryKey = true)]
+    public decimal Id { get; set; }
+
+   /// <summary>
+   ///     鐗╂枡鏉$爜
+   /// </summary>
+   [SugarColumn(ColumnName = "ITEM_BARCODE")]
+    public string ItemBarcode { get; set; }
+
+   /// <summary>
+   ///     瀹㈡埛鎴愬搧缂栫爜
+   /// </summary>
+   [SugarColumn(ColumnName = "C_PRODUCT_CODE")]
+    public string CProductCode { get; set; }
+
+   /// <summary>
+   ///     瀹㈡埛鐗╂枡鏉$爜
+   /// </summary>
+   [SugarColumn(ColumnName = "C_ITEM_BARCODE")]
+    public string CItemBarcode { get; set; }
+
+   /// <summary>
+   ///     瀹㈡埛鐗╂枡缂栫爜
+   /// </summary>
+   [SugarColumn(ColumnName = "C_ITEM_CODE")]
+    public string CItemCode { get; set; }
+
+   /// <summary>
+   ///     鏈徃鐗╂枡缂栫爜
+   /// </summary>
+   [SugarColumn(ColumnName = "ITEM_NO")]
+    public string ItemNo { get; set; }
+
+   /// <summary>
+   ///     鍘傚鎵规
+   /// </summary>
+   [SugarColumn(ColumnName = "LOT_NO")]
+    public string LotNo { get; set; }
+
+   /// <summary>
+   ///     鏁伴噺
+   /// </summary>
+   [SugarColumn(ColumnName = "QUANTITY")]
+    public decimal? Quantity { get; set; }
+
+   /// <summary>
+   ///     鏄惁鐜繚(0:鍚�,1:鏄�)
+   /// </summary>
+   [SugarColumn(ColumnName = "EP_FLAG")]
+    public short? EpFlag { get; set; }
+
+   /// <summary>
+   ///     鐢熶骇宸ュ崟
+   /// </summary>
+   [SugarColumn(ColumnName = "TASK_NO")]
+    public string TaskNo { get; set; }
+
+   /// <summary>
+   ///     鍒涘缓浜�
+   /// </summary>
+   [SugarColumn(ColumnName = "CREATE_BY")]
+    public string CreateBy { get; set; }
+
+   /// <summary>
+   ///     鍒涘缓鏃堕棿
+   /// </summary>
+   [SugarColumn(ColumnName = "CREATE_DATE")]
+    public DateTime? CreateDate { get; set; }
+
+   /// <summary>
+   ///     鏈�鍚庢洿鏂颁汉
+   /// </summary>
+   [SugarColumn(ColumnName = "LASTUPDATE_BY")]
+    public string LastupdateBy { get; set; }
+
+   /// <summary>
+   ///     鏈�鍚庢洿鏂版椂闂�
+   /// </summary>
+   [SugarColumn(ColumnName = "LASTUPDATE_DATE")]
+    public DateTime? LastupdateDate { get; set; }
+
+   /// <summary>
+   ///     瀹㈡埛缂栧彿
+   /// </summary>
+   [SugarColumn(ColumnName = "CUST_NO")]
+    public string CustNo { get; set; }
+
+   /// <summary>
+   ///     鐗╂枡鏉$爜娉ㄩ噴琛孾鍐椾綑锛屾潯鐮侀噸鎵撲娇鐢╙
+   /// </summary>
+   [SugarColumn(ColumnName = "ITEM_BARCODE_TEXT")]
+    public string ItemBarcodeText { get; set; }
+
+   /// <summary>
+   ///     鍘烶SN鐗╂枡鏉$爜
+   /// </summary>
+   [SugarColumn(ColumnName = "OLD_ITEM_BARCODE")]
+    public string OldItemBarcode { get; set; }
+
+   /// <summary>
+   ///     SAP鏀惰揣鐗╂枡鍑瘉鍙�    --閲囪喘鍗曞彿
+   /// </summary>
+   [SugarColumn(ColumnName = "MBLNR")]
+    public string Mblnr { get; set; }
+
+   /// <summary>
+   ///     SAP鏀惰揣鐗╂枡鍑瘉琛屽彿  --閲囪喘鍗曡鍙�
+   /// </summary>
+   [SugarColumn(ColumnName = "ZEILE")]
+    public decimal? Zeile { get; set; }
+
+   /// <summary>
+   ///     鏀舵枡琛↖D
+   /// </summary>
+   [SugarColumn(ColumnName = "ROH_IN_ID")]
+    public decimal? RohInId { get; set; }
+
+   /// <summary>
+   ///     0涓烘湁鏁堟潯鐮侊紱1涓烘棤鏁堟潯鐮�
+   /// </summary>
+   [SugarColumn(ColumnName = "BARCODESTATUS")]
+    public short? Barcodestatus { get; set; }
+
+   /// <summary>
+   ///     鍘熷鏁伴噺
+   /// </summary>
+   [SugarColumn(ColumnName = "OLDQTY")]
+    public decimal? Oldqty { get; set; }
+
+   /// <summary>
+   ///     浣跨敤鏁伴噺
+   /// </summary>
+   [SugarColumn(ColumnName = "USEQTY")]
+    public decimal? Useqty { get; set; }
+
+   /// <summary>
+   ///     0鍦ㄥ簱锛�1鍦ㄧ嚎锛�2浣滃簾
+   /// </summary>
+   [SugarColumn(ColumnName = "LOCATION")]
+    public short? Location { get; set; }
+
+   /// <summary>
+   ///     鍗曚綅
+   /// </summary>
+   [SugarColumn(ColumnName = "UNIT")]
+    public string Unit { get; set; }
+
+   /// <summary>
+   ///     閲嶉噺锛堝崟浣嶏細鍏枻锛�
+   /// </summary>
+   [SugarColumn(ColumnName = "WEIGHT_UNIT")]
+    public decimal? WeightUnit { get; set; }
+
+   /// <summary>
+   ///     鍗曚环
+   /// </summary>
+   [SugarColumn(ColumnName = "PRICE")]
+    public decimal? Price { get; set; }
+
+   /// <summary>
+   ///     鍘熸潯鐮佹暟閲�
+   /// </summary>
+   [SugarColumn(ColumnName = "OLD_BAR_QUANTITY")]
+    public decimal? OldBarQuantity { get; set; }
+
+   /// <summary>
+   ///     姹囨�绘潯鐮�
+   /// </summary>
+   [SugarColumn(ColumnName = "SUM_BARCODE")]
+    public string SumBarcode { get; set; }
+
+   /// <summary>
+   ///     鐢熶骇鏃ユ湡
+   /// </summary>
+   [SugarColumn(ColumnName = "LOT_DATE")]
+    public string LotDate { get; set; }
+
+   /// <summary>
+   ///     妯″彿
+   /// </summary>
+   [SugarColumn(ColumnName = "MOCODE")]
+    public string Mocode { get; set; }
+
+   /// <summary>
+   ///     鏉ユ簮
+   /// </summary>
+   [SugarColumn(ColumnName = "MEMO")]
+    public string Memo { get; set; }
+
+   /// <summary>
+   ///     渚涘簲鍟嗙紪鐮�
+   /// </summary>
+   [SugarColumn(ColumnName = "SUPP_NO")]
+    public string SuppNo { get; set; }
+
+   /// <summary>
+   ///     妗d綅浣庡��
+   /// </summary>
+   [SugarColumn(ColumnName = "SPOSTION")]
+    public string Spostion { get; set; }
+
+   /// <summary>
+   ///     妗d綅楂樺��
+   /// </summary>
+   [SugarColumn(ColumnName = "EPOSTION")]
+    public string Epostion { get; set; }
+
+   /// <summary>
+   ///     鐗╂枡绠�绉�
+   /// </summary>
+   [SugarColumn(ColumnName = "ITEM_SNAME")]
+    public string ItemSname { get; set; }
+
+   /// <summary>
+   ///     鏄惁宸插喕缁�,1鍐荤粨
+   /// </summary>
+   [SugarColumn(ColumnName = "VISABLE")]
+    public short? Visable { get; set; }
+
+   /// <summary>
+   ///     渚涘簲鍟嗘壒娆�
+   /// </summary>
+   [SugarColumn(ColumnName = "TR_LOTNO")]
+    public string TrLotno { get; set; }
+
+   /// <summary>
+   ///     鍐荤粨鏃堕棿
+   /// </summary>
+   [SugarColumn(ColumnName = "FLEZZ_DATE")]
+    public DateTime? FlezzDate { get; set; }
+
+   /// <summary>
+   ///     鍐荤粨鍘熷洜
+   /// </summary>
+   [SugarColumn(ColumnName = "FLEZZ_REASON")]
+    public string FlezzReason { get; set; }
+
+   /// <summary>
+   ///     鍐荤粨浜�
+   /// </summary>
+   [SugarColumn(ColumnName = "FLEZZ_BY")]
+    public string FlezzBy { get; set; }
+
+   /// <summary>
+   ///     寤堕暱淇濊川鏈�
+   /// </summary>
+   [SugarColumn(ColumnName = "DELANY_MONTH")]
+    public decimal? DelanyMonth { get; set; }
+
+   /// <summary>
+   ///     鏈�灏忓寘瑁呮爣璇�
+   /// </summary>
+   [SugarColumn(ColumnName = "MINPACK_FLAG")]
+    public short? MinpackFlag { get; set; }
+
+   /// <summary>
+   ///     鎵撳嵃ID锛岀敤鏉ュ尯鍒嗘墦鍗版鏁�
+   /// </summary>
+   [SugarColumn(ColumnName = "PRINT_ID")]
+    public string PrintId { get; set; }
+
+   /// <summary>
+   ///     鐜繚椤圭洰
+   /// </summary>
+   [SugarColumn(ColumnName = "EP_ITEM")]
+    public string EpItem { get; set; }
+
+   /// <summary>
+   ///     宸ュ巶缂栧彿
+   /// </summary>
+   [SugarColumn(ColumnName = "FACTORY")]
+    public string Factory { get; set; }
+
+   /// <summary>
+   ///     鍏徃缂栧彿
+   /// </summary>
+   [SugarColumn(ColumnName = "COMPANY")]
+    public string Company { get; set; }
+
+   /// <summary>
+   ///     鍗℃澘缂栫爜
+   /// </summary>
+   [SugarColumn(ColumnName = "CB_NO")]
+    public string CbNo { get; set; }
+
+   /// <summary>
+   ///     鍘傚鐢熶骇绾�
+   /// </summary>
+   [SugarColumn(ColumnName = "LINFLINE")]
+    public string Linfline { get; set; }
+
+   /// <summary>
+   ///     鏈夋晥鏈�
+   /// </summary>
+   [SugarColumn(ColumnName = "VALID_TIME")]
+    public DateTime? ValidTime { get; set; }
+
+   /// <summary>
+   ///     璐ㄦ缁撴灉
+   /// </summary>
+   [SugarColumn(ColumnName = "IQC_STATUS")]
+    public string IqcStatus { get; set; }
+
+   /// <summary>
+   ///     灏忚溅鏉$爜
+   /// </summary>
+   [SugarColumn(ColumnName = "FCAR")]
+    public string Fcar { get; set; }
+
+   /// <summary>
+   ///     姣涢噸
+   /// </summary>
+   [SugarColumn(ColumnName = "GWEIGHT")]
+    public string Gweight { get; set; }
+
+   /// <summary>
+   ///     鍑�閲�
+   /// </summary>
+   [SugarColumn(ColumnName = "NWEIGHT")]
+    public string Nweight { get; set; }
+
+   /// <summary>
+   ///     淇濊川鏈�
+   /// </summary>
+   [SugarColumn(ColumnName = "EXT_DATE")]
+    public decimal? ExtDate { get; set; }
+
+   /// <summary>
+   ///     渚涘簲鍟嗐�佽禒鍝併�佸渚涙枡銆佸澶�
+   /// </summary>
+   [SugarColumn(ColumnName = "BARCODETYPE")]
+    public string Barcodetype { get; set; }
+
+   /// <summary>
+   ///     渚涘簲鍟嗗悕绉�
+   /// </summary>
+   [SugarColumn(ColumnName = "SUPP_NAME")]
+    public string SuppName { get; set; }
+
+   /// <summary>
+   ///     鍒拌揣鍗曞彿/鍏ュ簱鍗曞彿
+   /// </summary>
+   [SugarColumn(ColumnName = "BILL_NO")]
+    public string BillNo { get; set; }
+
+   /// <summary>
+   ///     鎬ユ枡鏍囪瘑
+   /// </summary>
+   [SugarColumn(ColumnName = "URGENT_FLAG")]
+    public short? UrgentFlag { get; set; }
+
+   /// <summary>
+   ///     棰滆壊
+   /// </summary>
+   [SugarColumn(ColumnName = "COLOR_NAME")]
+    public string ColorName { get; set; }
+
+   /// <summary>
+   ///     浜у搧鍨嬪彿
+   /// </summary>
+   [SugarColumn(ColumnName = "BOARD_STYLE")]
+    public string BoardStyle { get; set; }
+
+   /// <summary>
+   ///     鏉ユ枡鏃ユ湡
+   /// </summary>
+   [SugarColumn(ColumnName = "INS_DATE")]
+    public DateTime? InsDate { get; set; }
+
+   /// <summary>
+   ///     鍒拌揣鍗曡鍙�
+   /// </summary>
+   [SugarColumn(ColumnName = "WORK_LINE")]
+    public decimal? WorkLine { get; set; }
+
+   /// <summary>
+   ///     涓嶈壇鍘熷洜
+   /// </summary>
+   [SugarColumn(ColumnName = "MEMO_BAD")]
+    public string MemoBad { get; set; }
+
+   /// <summary>
+   ///     浠诲姟鍗曞彿
+   /// </summary>
+   [SugarColumn(ColumnName = "WORK_NO")]
+    public string WorkNo { get; set; }
+
+   /// <summary>
+   ///     鏉$爜鏉ユ簮鏍囪瘑锛�0-鍒濇湡鐗╂枡,1-閲囪喘鍏ュ簱锛�2銆佺敓浜ч��鏂欙紝3銆佸叾瀹冨叆搴擄紝4-瀹緵鏂�,5-鍦ㄥ簱鍒嗘枡锛�6-鍒剁▼鏉$爜
+   /// </summary>
+   [SugarColumn(ColumnName = "COME_FLG")]
+    public short? ComeFlg { get; set; }
+
+   /// <summary>
+   ///     鐢熶骇绾夸綋
+   /// </summary>
+   [SugarColumn(ColumnName = "LINE_NO")]
+    public string LineNo { get; set; }
+
+   /// <summary>
+   ///     涓濆嵃娆℃暟
+   /// </summary>
+   [SugarColumn(ColumnName = "SILK_PQTY")]
+    public decimal? SilkPqty { get; set; }
+
+   /// <summary>
+   ///     涓濆嵃娆℃暟姣�
+   /// </summary>
+   [SugarColumn(ColumnName = "SILK")]
+    public string Silk { get; set; }
+
+   /// <summary>
+   ///     涓濆嵃娲惧伐浠庤〃ID
+   /// </summary>
+   [SugarColumn(ColumnName = "SILK_ID")]
+    public decimal? SilkId { get; set; }
+
+   /// <summary>
+   ///     宸叉姤宸ユ爣璇�
+   /// </summary>
+   [SugarColumn(ColumnName = "WORK_FLG")]
+    public decimal? WorkFlg { get; set; }
+
+   /// <summary>
+   ///     鏈�鍚庡伐搴�
+   /// </summary>
+   [SugarColumn(ColumnName = "WORK_LAST")]
+    public decimal? WorkLast { get; set; }
+
+   /// <summary>
+   ///     0-鏈悎骞舵墦鍗帮紝1-鍚堝苟鎵撳嵃
+   /// </summary>
+   [SugarColumn(ColumnName = "HBDY")]
+    public decimal? Hbdy { get; set; }
+
+   /// <summary>
+   ///     0-鏈夋晥鏉$爜锛�1-鍚堝苟鎷嗗垎鐨勬潯鐮侊紝鏃犳晥
+   /// </summary>
+   [SugarColumn(ColumnName = "HBDYTM")]
+    public decimal? Hbdytm { get; set; }
+
+   /// <summary>
+   ///     鎶ュ伐鏃堕棿
+   /// </summary>
+   [SugarColumn(ColumnName = "WORK_FLGTIME")]
+    public string WorkFlgtime { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Modes/MesInvItemInCDetails.cs b/MES.Service/Modes/MesInvItemInCDetails.cs
new file mode 100644
index 0000000..258cb34
--- /dev/null
+++ b/MES.Service/Modes/MesInvItemInCDetails.cs
@@ -0,0 +1,361 @@
+锘縰sing SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+///     鐗╂枡鍏ュ簱鏉$爜鏄庣粏
+/// </summary>
+[SugarTable("MES_INV_ITEM_IN_C_DETAILS")]
+public class MesInvItemInCDetails
+{
+    /// <summary>
+    ///     SEQ_OUT
+    /// </summary>
+    [SugarColumn(ColumnName = "ID", IsPrimaryKey = true)]
+    public decimal Id { get; set; }
+
+    /// <summary>
+    ///     鍏ュ簱鍗昳d
+    /// </summary>
+    [SugarColumn(ColumnName = "ITEM_IN_ID", IsPrimaryKey = true)]
+    public decimal ItemInId { get; set; }
+
+    /// <summary>
+    ///     鐗╂枡鏉$爜PSN
+    /// </summary>
+    [SugarColumn(ColumnName = "ITEM_BARCODE")]
+    public string ItemBarcode { get; set; }
+
+    /// <summary>
+    ///     瀹㈡埛鐗╂枡缂栫爜锛堟棤鏉$爜鎵嬪伐褰曞叆锛屾湁鏉$爜涓哄啑浣欏瓧娈碉級
+    /// </summary>
+    [SugarColumn(ColumnName = "C_ITEM_CODE")]
+    public string CItemCode { get; set; }
+
+    /// <summary>
+    ///     瀹㈡埛鐗╂枡鏉$爜
+    /// </summary>
+    [SugarColumn(ColumnName = "C_ITEM_BARCODE")]
+    public string CItemBarcode { get; set; }
+
+    /// <summary>
+    ///     楠屾敹鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "QUANTITY")]
+    public decimal? Quantity { get; set; }
+
+    /// <summary>
+    ///     鍏ュ簱鏂瑰紡(1:鏈夋潯鐮�,0:鏃犳潯鐮�)
+    /// </summary>
+    [SugarColumn(ColumnName = "BARCODE_FLAG")]
+    public short? BarcodeFlag { get; set; }
+
+    /// <summary>
+    ///     鐜繚鏍囧織锛�0-闈炵幆淇�,1-鐜繚.鏃犳潯鐮佹墜宸ュ綍鍏ワ紝鏈夋潯鐮佷负鍐椾綑瀛楁锛�
+    /// </summary>
+    [SugarColumn(ColumnName = "EP_FLAG")]
+    public short? EpFlag { get; set; }
+
+    /// <summary>
+    ///     鍒涘缓浜�
+    /// </summary>
+    [SugarColumn(ColumnName = "CREATE_BY")]
+    public string CreateBy { get; set; }
+
+    /// <summary>
+    ///     鍒涘缓鏃堕棿
+    /// </summary>
+    [SugarColumn(ColumnName = "CREATE_DATE")]
+    public DateTime? CreateDate { get; set; }
+
+    /// <summary>
+    ///     鏈�鍚庢洿鏂颁汉
+    /// </summary>
+    [SugarColumn(ColumnName = "LASTUPDATE_BY")]
+    public string LastupdateBy { get; set; }
+
+    /// <summary>
+    ///     鏈�鍚庢洿鏂版椂闂�
+    /// </summary>
+    [SugarColumn(ColumnName = "LASTUPDATE_DATE")]
+    public DateTime? LastupdateDate { get; set; }
+
+    /// <summary>
+    ///     浣滀笟鏂瑰紡0-鏈夌嚎鏉$爜鏋�1-鏃犵嚎鏉$爜鏋�
+    /// </summary>
+    [SugarColumn(ColumnName = "WORK_TYPE")]
+    public decimal? WorkType { get; set; }
+
+    /// <summary>
+    ///     鏈徃鐗╂枡缂栫爜锛堟棤鏉$爜鎵嬪伐褰曞叆锛屾湁鏉$爜涓哄啑浣欏瓧娈碉級
+    /// </summary>
+    [SugarColumn(ColumnName = "ITEM_NO")]
+    public string ItemNo { get; set; }
+
+    /// <summary>
+    ///     鍘傚鎵规
+    /// </summary>
+    [SugarColumn(ColumnName = "LOT_NO")]
+    public string LotNo { get; set; }
+
+    /// <summary>
+    ///     鏄惁鍏辩鐗╂枡(0:鍚︼紝1:鏄�)
+    /// </summary>
+    [SugarColumn(ColumnName = "COMANAGEMENT_FLAG")]
+    public short? ComanagementFlag { get; set; }
+
+    /// <summary>
+    ///     瀹㈡埛缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "CUST_NO")]
+    public string CustNo { get; set; }
+
+    /// <summary>
+    ///     妫�楠岀粨鏋�
+    /// </summary>
+    [SugarColumn(ColumnName = "CHECK_RES")]
+    public string CheckRes { get; set; }
+
+    /// <summary>
+    ///     杩涜揣鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "CHECK_QTY")]
+    public decimal? CheckQty { get; set; }
+
+    /// <summary>
+    ///     妫�楠岀姸鎬�
+    /// </summary>
+    [SugarColumn(ColumnName = "CHECK_STATES")]
+    public string CheckStates { get; set; }
+
+    /// <summary>
+    ///     寮哄埗鍏ュ簱鏍囪0鏃狅紝1-寮哄埗鍏ュ簱  閫�鏂欏崟浣跨敤
+    /// </summary>
+    [SugarColumn(ColumnName = "FORCE_IN_FLAG")]
+    public short? ForceInFlag { get; set; }
+
+    /// <summary>
+    ///     浠撳簱缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "DEPOT_CODE")]
+    public string DepotCode { get; set; }
+
+    /// <summary>
+    ///     璐т綅缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "DEPOT_SECTION_CODE")]
+    public string DepotSectionCode { get; set; }
+
+    /// <summary>
+    ///     鐗硅浜嬮」
+    /// </summary>
+    [SugarColumn(ColumnName = "REMARK")]
+    public string Remark { get; set; }
+
+    /// <summary>
+    ///     鐗╂枡鏉$爜
+    /// </summary>
+    [SugarColumn(ColumnName = "ITEM_BARCODE2")]
+    public string ItemBarcode2 { get; set; }
+
+    /// <summary>
+    ///     鏂版潯鐮�
+    /// </summary>
+    [SugarColumn(ColumnName = "ITEM_BARCODE3")]
+    public string ItemBarcode3 { get; set; }
+
+    /// <summary>
+    ///     浣跨敤鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "USE_QTY")]
+    public decimal? UseQty { get; set; }
+
+    /// <summary>
+    ///     棰嗘枡鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "OUT_QTY")]
+    public decimal? OutQty { get; set; }
+
+    /// <summary>
+    ///     鐗╂枡绠�绉�
+    /// </summary>
+    [SugarColumn(ColumnName = "ITEM_SNAME")]
+    public string ItemSname { get; set; }
+
+    /// <summary>
+    ///     妗d綅浣庡��
+    /// </summary>
+    [SugarColumn(ColumnName = "SPOSTION")]
+    public decimal? Spostion { get; set; }
+
+    /// <summary>
+    ///     妗d綅楂樺��
+    /// </summary>
+    [SugarColumn(ColumnName = "EPOSTION")]
+    public decimal? Epostion { get; set; }
+
+    /// <summary>
+    ///     妫�楠屾棩鏈�
+    /// </summary>
+    [SugarColumn(ColumnName = "CHECK_DATE")]
+    public DateTime? CheckDate { get; set; }
+
+    /// <summary>
+    ///     鍗曚綅
+    /// </summary>
+    [SugarColumn(ColumnName = "UNIT")]
+    public string Unit { get; set; }
+
+    /// <summary>
+    ///     鏄惁妫�楠�
+    /// </summary>
+    [SugarColumn(ColumnName = "ISCHECK")]
+    public decimal? Ischeck { get; set; }
+
+    /// <summary>
+    ///     閲囪喘璁㈠崟
+    /// </summary>
+    [SugarColumn(ColumnName = "EBELN")]
+    public string Ebeln { get; set; }
+
+    /// <summary>
+    ///     鐢熶骇鏃ユ湡
+    /// </summary>
+    [SugarColumn(ColumnName = "LOT_DATE")]
+    public string LotDate { get; set; }
+
+    /// <summary>
+    ///     鍏ュ簱鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "BILL_NO")]
+    public string BillNo { get; set; }
+
+    /// <summary>
+    ///     鍏ュ簱瀹℃牳鏍囧織
+    /// </summary>
+    [SugarColumn(ColumnName = "STOCK_OK")]
+    public short? StockOk { get; set; }
+
+    /// <summary>
+    ///     鍒嗗巶缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "FACTORY")]
+    public string Factory { get; set; }
+
+    /// <summary>
+    ///     鍏徃浠g爜
+    /// </summary>
+    [SugarColumn(ColumnName = "COMPANY")]
+    public string Company { get; set; }
+
+    /// <summary>
+    ///     鍗℃澘缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "CB_NO")]
+    public string CbNo { get; set; }
+
+    /// <summary>
+    ///     绠卞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "BOX_NO")]
+    public string BoxNo { get; set; }
+
+    /// <summary>
+    ///     浠撳簱ID
+    /// </summary>
+    [SugarColumn(ColumnName = "DEPOT_ID")]
+    public decimal? DepotId { get; set; }
+
+    /// <summary>
+    ///     璐т綅ID
+    /// </summary>
+    [SugarColumn(ColumnName = "DEPOT_SECTION_ID")]
+    public decimal? DepotSectionId { get; set; }
+
+    /// <summary>
+    ///     琛屽彿
+    /// </summary>
+    [SugarColumn(ColumnName = "LINE_NUM")]
+    public string LineNum { get; set; }
+
+    /// <summary>
+    ///     鎵爜鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "SM_QTY")]
+    public decimal? SmQty { get; set; }
+
+    /// <summary>
+    ///     閿�鍞鍗�
+    /// </summary>
+    [SugarColumn(ColumnName = "VGBEL")]
+    public string Vgbel { get; set; }
+
+    /// <summary>
+    ///     閿�鍞鍗曡鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "KDPOS")]
+    public decimal? Kdpos { get; set; }
+
+    /// <summary>
+    ///     浠诲姟鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "WORK_NO")]
+    public string WorkNo { get; set; }
+
+    /// <summary>
+    ///     琛屽彿
+    /// </summary>
+    [SugarColumn(ColumnName = "EBELN_LINE_NO")]
+    public decimal? EbelnLineNo { get; set; }
+
+    /// <summary>
+    ///     鍒拌揣鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "CBILL_NO")]
+    public string CbillNo { get; set; }
+
+    /// <summary>
+    ///     鎬ユ枡鏍囪瘑
+    /// </summary>
+    [SugarColumn(ColumnName = "URGENT_FLAG")]
+    public decimal? UrgentFlag { get; set; }
+
+    /// <summary>
+    ///     浜у搧鍨嬪彿
+    /// </summary>
+    [SugarColumn(ColumnName = "BOARD_STYLE")]
+    public string BoardStyle { get; set; }
+
+    /// <summary>
+    ///     浠诲姟鍗曡鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "WORK_LINE")]
+    public decimal? WorkLine { get; set; }
+
+    /// <summary>
+    ///     鐢熶骇宸ュ崟
+    /// </summary>
+    [SugarColumn(ColumnName = "TASK_NO")]
+    public string TaskNo { get; set; }
+
+    /// <summary>
+    ///     渚涘簲鍟�
+    /// </summary>
+    [SugarColumn(ColumnName = "SUPP_NO")]
+    public string SuppNo { get; set; }
+
+    /// <summary>
+    ///     浠诲姟姹囨姤鍗�
+    /// </summary>
+    [SugarColumn(ColumnName = "RBILL_NO")]
+    public string RbillNo { get; set; }
+
+    // 娣诲姞鐨勫瓧娈碉紝骞朵笖瀹冧滑涓嶅睘浜庢暟鎹簱琛�
+    [SugarColumn(IsIgnore = true)] public string? ItemName { get; set; }
+
+    [SugarColumn(IsIgnore = true)] public string? ItemModel { get; set; }
+
+    [SugarColumn(IsIgnore = true)] public string? ItemUnit { get; set; }
+
+    [SugarColumn(IsIgnore = true)] public decimal? SumQuantity { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Modes/MesInvItemInCItems.cs b/MES.Service/Modes/MesInvItemInCItems.cs
new file mode 100644
index 0000000..05e3293
--- /dev/null
+++ b/MES.Service/Modes/MesInvItemInCItems.cs
@@ -0,0 +1,148 @@
+锘縰sing SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+///     鐗╂枡鍏ュ簱鏄庣粏
+/// </summary>
+[SugarTable("MES_INV_ITEM_IN_C_ITEMS")]
+public class MesInvItemInCItems
+{
+ /// <summary>
+ ///     SEQ_OUT
+ /// </summary>
+ [SugarColumn(ColumnName = "ID", IsPrimaryKey = true)]
+    public decimal Id { get; set; }
+
+ /// <summary>
+ ///     鍏ュ簱鍗昳d
+ /// </summary>
+ [SugarColumn(ColumnName = "ITEM_IN_ID", IsPrimaryKey = true)]
+    public decimal ItemInId { get; set; }
+
+ /// <summary>
+ ///     楠屾敹鏁伴噺
+ /// </summary>
+ [SugarColumn(ColumnName = "QUANTITY")]
+    public decimal? Quantity { get; set; }
+
+ /// <summary>
+ ///     鍒涘缓浜�
+ /// </summary>
+ [SugarColumn(ColumnName = "CREATE_BY")]
+    public string CreateBy { get; set; }
+
+ /// <summary>
+ ///     鍒涘缓鏃堕棿
+ /// </summary>
+ [SugarColumn(ColumnName = "CREATE_DATE")]
+    public DateTime? CreateDate { get; set; }
+
+ /// <summary>
+ ///     鏈�鍚庢洿鏂颁汉
+ /// </summary>
+ [SugarColumn(ColumnName = "LASTUPDATE_BY")]
+    public string LastupdateBy { get; set; }
+
+ /// <summary>
+ ///     鏈�鍚庢洿鏂版椂闂�
+ /// </summary>
+ [SugarColumn(ColumnName = "LASTUPDATE_DATE")]
+    public DateTime? LastupdateDate { get; set; }
+
+ /// <summary>
+ ///     鐗╂枡缂栫爜
+ /// </summary>
+ [SugarColumn(ColumnName = "ITEM_NO")]
+    public string ItemNo { get; set; }
+
+ /// <summary>
+ ///     浠撳簱缂栫爜
+ /// </summary>
+ [SugarColumn(ColumnName = "DEPOT_CODE")]
+    public string DepotCode { get; set; }
+
+ /// <summary>
+ ///     璐т綅缂栫爜
+ /// </summary>
+ [SugarColumn(ColumnName = "DEPOT_SECTION_CODE")]
+    public string DepotSectionCode { get; set; }
+
+ /// <summary>
+ ///     鐗硅浜嬮」
+ /// </summary>
+ [SugarColumn(ColumnName = "REMARK")]
+    public string Remark { get; set; }
+
+ /// <summary>
+ ///     鐗╂枡绠�绉�
+ /// </summary>
+ [SugarColumn(ColumnName = "ITEM_SNAME")]
+    public string ItemSname { get; set; }
+
+ /// <summary>
+ ///     鍗曚綅
+ /// </summary>
+ [SugarColumn(ColumnName = "UNIT")]
+    public string Unit { get; set; }
+
+ /// <summary>
+ ///     閲囪喘璁㈠崟
+ /// </summary>
+ [SugarColumn(ColumnName = "EBELN")]
+    public string Ebeln { get; set; }
+
+ /// <summary>
+ ///     鍏ュ簱鍗曞彿
+ /// </summary>
+ [SugarColumn(ColumnName = "BILL_NO")]
+    public string BillNo { get; set; }
+
+ /// <summary>
+ ///     鍒嗗巶缂栫爜
+ /// </summary>
+ [SugarColumn(ColumnName = "FACTORY")]
+    public string Factory { get; set; }
+
+ /// <summary>
+ ///     鍏徃浠g爜
+ /// </summary>
+ [SugarColumn(ColumnName = "COMPANY")]
+    public string Company { get; set; }
+
+ /// <summary>
+ ///     浠诲姟鍗曞彿
+ /// </summary>
+ [SugarColumn(ColumnName = "WORK_NO")]
+    public string WorkNo { get; set; }
+
+ /// <summary>
+ ///     琛屽彿
+ /// </summary>
+ [SugarColumn(ColumnName = "EBELN_LINE_NO")]
+    public decimal? EbelnLineNo { get; set; }
+
+ /// <summary>
+ ///     鍒拌揣鍗曞彿
+ /// </summary>
+ [SugarColumn(ColumnName = "CBILL_NO")]
+    public string CbillNo { get; set; }
+
+ /// <summary>
+ ///     浠诲姟鍗曡鍙�
+ /// </summary>
+ [SugarColumn(ColumnName = "WORK_LINE")]
+    public decimal? WorkLine { get; set; }
+
+ /// <summary>
+ ///     鐢熶骇宸ュ崟
+ /// </summary>
+ [SugarColumn(ColumnName = "TASK_NO")]
+    public string TaskNo { get; set; }
+
+ /// <summary>
+ ///     渚涘簲鍟�
+ /// </summary>
+ [SugarColumn(ColumnName = "SUPP_NO")]
+    public string SuppNo { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Modes/MesInvItemOutCDetails.cs b/MES.Service/Modes/MesInvItemOutCDetails.cs
new file mode 100644
index 0000000..13835d9
--- /dev/null
+++ b/MES.Service/Modes/MesInvItemOutCDetails.cs
@@ -0,0 +1,242 @@
+锘縰sing SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+///     鐗╂枡鍑哄簱鏉$爜鏄庣粏
+/// </summary>
+[SugarTable("MES_INV_ITEM_OUT_C_DETAILS")]
+public class MesInvItemOutCDetails
+{
+    /// <summary>
+    ///     SEQ_INV_ID
+    /// </summary>
+    [SugarColumn(ColumnName = "ID", IsPrimaryKey = true)]
+    public decimal Id { get; set; }
+
+    /// <summary>
+    ///     鍑哄簱鍗昳d
+    /// </summary>
+    [SugarColumn(ColumnName = "ITEM_OUT_ID")]
+    public decimal? ItemOutId { get; set; }
+
+    /// <summary>
+    ///     鐗╂枡鏉$爜
+    /// </summary>
+    [SugarColumn(ColumnName = "ITEM_BARCODE")]
+    public string ItemBarcode { get; set; }
+
+    /// <summary>
+    ///     瀹㈡埛鐗╂枡缂栫爜锛堟棤鏉$爜鎵嬪伐褰曞叆锛屾湁鏉$爜涓哄啑浣欏瓧娈碉級
+    /// </summary>
+    [SugarColumn(ColumnName = "C_ITEM_CODE")]
+    public string CItemCode { get; set; }
+
+    /// <summary>
+    ///     鏈徃鐗╂枡缂栫爜锛堟棤鏉$爜鎵嬪伐褰曞叆锛屾湁鏉$爜涓哄啑浣欏瓧娈碉級
+    /// </summary>
+    [SugarColumn(ColumnName = "ITEM_NO")]
+    public string ItemNo { get; set; }
+
+    /// <summary>
+    ///     鍘傚鎵规
+    /// </summary>
+    [SugarColumn(ColumnName = "LOT_NO")]
+    public string LotNo { get; set; }
+
+    /// <summary>
+    ///     鏁伴噺锛堟棤鏉$爜鎵嬪伐褰曞叆锛屾湁鏉$爜涓哄啑浣欏瓧娈碉級
+    /// </summary>
+    [SugarColumn(ColumnName = "QUANTITY")]
+    public decimal? Quantity { get; set; }
+
+    /// <summary>
+    ///     鎸枡鏍囧織锛�0锛嶅惁锛�1锛嶆槸锛�
+    /// </summary>
+    [SugarColumn(ColumnName = "FORCE_OUT_FLAG")]
+    public decimal? ForceOutFlag { get; set; }
+
+    /// <summary>
+    ///     鍒涘缓浜�
+    /// </summary>
+    [SugarColumn(ColumnName = "CREATE_BY")]
+    public string CreateBy { get; set; }
+
+    /// <summary>
+    ///     鍒涘缓鏃堕棿
+    /// </summary>
+    [SugarColumn(ColumnName = "CREATE_DATE")]
+    public DateTime? CreateDate { get; set; }
+
+    /// <summary>
+    ///     鏈�鍚庢洿鏂颁汉
+    /// </summary>
+    [SugarColumn(ColumnName = "LASTUPDATE_BY")]
+    public string LastupdateBy { get; set; }
+
+    /// <summary>
+    ///     鏈�鍚庢洿鏂版椂闂�
+    /// </summary>
+    [SugarColumn(ColumnName = "LASTUPDATE_DATE")]
+    public DateTime? LastupdateDate { get; set; }
+
+    /// <summary>
+    ///     瀹㈡埛缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "CUST_NO")]
+    public string CustNo { get; set; }
+
+    /// <summary>
+    ///     浠撳簱缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "DEPOT_CODE")]
+    public string DepotCode { get; set; }
+
+    /// <summary>
+    ///     璐т綅缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "DEPOT_SECTION_CODE")]
+    public string DepotSectionCode { get; set; }
+
+    /// <summary>
+    /// </summary>
+    [SugarColumn(ColumnName = "REMARK")]
+    public string Remark { get; set; }
+
+    /// <summary>
+    ///     鍏嶆鏍囪瘑(0-鍚︼紝1-鏄�)
+    /// </summary>
+    [SugarColumn(ColumnName = "FORCE_EXEMPT_FLAG")]
+    public short? ForceExemptFlag { get; set; }
+
+    /// <summary>
+    ///     鎶曟枡鎵规
+    /// </summary>
+    [SugarColumn(ColumnName = "PRD_LOT_NO")]
+    public string PrdLotNo { get; set; }
+
+    /// <summary>
+    ///     鏄惁鍋氭帴鏀舵鏌�
+    /// </summary>
+    [SugarColumn(ColumnName = "CHECK_STATUS")]
+    public short? CheckStatus { get; set; }
+
+    /// <summary>
+    ///     宸ュ巶缂栧彿
+    /// </summary>
+    [SugarColumn(ColumnName = "FACTORY")]
+    public string Factory { get; set; }
+
+    /// <summary>
+    ///     鍏徃缂栧彿
+    /// </summary>
+    [SugarColumn(ColumnName = "COMPANY")]
+    public string Company { get; set; }
+
+    /// <summary>
+    ///     鍘熺敓浜у伐鍗�
+    /// </summary>
+    [SugarColumn(ColumnName = "TASK_NOY")]
+    public string TaskNoy { get; set; }
+
+    /// <summary>
+    ///     绠卞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "BOX_NO")]
+    public string BoxNo { get; set; }
+
+    /// <summary>
+    ///     鍖呰鎵规
+    /// </summary>
+    [SugarColumn(ColumnName = "TASK_PACK")]
+    public string TaskPack { get; set; }
+
+    /// <summary>
+    ///     鍗℃澘
+    /// </summary>
+    [SugarColumn(ColumnName = "KB_NO")]
+    public string KbNo { get; set; }
+
+    /// <summary>
+    ///     浜у搧鏈哄瀷
+    /// </summary>
+    [SugarColumn(ColumnName = "BOARD_STYLE")]
+    public string BoardStyle { get; set; }
+
+    /// <summary>
+    ///     鐢熶骇宸ュ崟
+    /// </summary>
+    [SugarColumn(ColumnName = "TASK_NO")]
+    public string TaskNo { get; set; }
+
+    /// <summary>
+    ///     浠诲姟鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "WORK_NO")]
+    public string WorkNo { get; set; }
+
+    /// <summary>
+    ///     浠诲姟鍗曡鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "WORK_LINE")]
+    public decimal? WorkLine { get; set; }
+
+    /// <summary>
+    ///     渚涘簲鍟嗙紪鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "SUPP_NO")]
+    public string SuppNo { get; set; }
+
+    /// <summary>
+    ///     棰嗘枡鍗曞彿/濮斿璁㈠崟
+    /// </summary>
+    [SugarColumn(ColumnName = "PBILL_NO")]
+    public string PbillNo { get; set; }
+
+    /// <summary>
+    ///     鎺ユ敹鏍囪瘑/1宸叉帴鏀�
+    /// </summary>
+    [SugarColumn(ColumnName = "RECEIVE")]
+    public decimal? Receive { get; set; }
+
+    /// <summary>
+    ///     鎺ユ敹鏃堕棿
+    /// </summary>
+    [SugarColumn(ColumnName = "RTIME")]
+    public DateTime? Rtime { get; set; }
+
+    /// <summary>
+    ///     鎺ユ敹浜�
+    /// </summary>
+    [SugarColumn(ColumnName = "RCV_BY")]
+    public string RcvBy { get; set; }
+
+    /// <summary>
+    ///     鎺ユ敹杞﹂棿
+    /// </summary>
+    [SugarColumn(ColumnName = "RCV_PART")]
+    public string RcvPart { get; set; }
+
+    /// <summary>
+    ///     鍏ュ簱鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "RK_NO")]
+    public string RkNo { get; set; }
+
+    /// <summary>
+    ///     閲囪喘璁㈠崟id
+    /// </summary>
+    [SugarColumn(ColumnName = "EBELN_K3ID")]
+    public decimal? EbelnK3id { get; set; }
+
+    /// <summary>
+    ///     閲囪喘璁㈠崟琛宨d
+    /// </summary>
+    [SugarColumn(ColumnName = "LINE_K3ID")]
+    public decimal? LineK3id { get; set; }
+
+    [SugarColumn(IsIgnore = true)] public string? DepotName { get; set; }
+    [SugarColumn(IsIgnore = true)] public string? ItemName { get; set; }
+    [SugarColumn(IsIgnore = true)] public string? ItemModel { get; set; }
+    [SugarColumn(IsIgnore = true)] public string? Unit { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Modes/MesInvItemOutItems.cs b/MES.Service/Modes/MesInvItemOutItems.cs
new file mode 100644
index 0000000..1e640a8
--- /dev/null
+++ b/MES.Service/Modes/MesInvItemOutItems.cs
@@ -0,0 +1,210 @@
+锘縰sing SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+///     鍑哄簱鐢宠鐗╂枡琛�
+/// </summary>
+[SugarTable("MES_INV_ITEM_OUT_ITEMS")]
+public class MesInvItemOutItems
+{
+    /// <summary>
+    ///     SEQ_ITEM_ID
+    /// </summary>
+    [SugarColumn(ColumnName = "ID", OracleSequenceName = "SEQ_INV_ID",
+        IsPrimaryKey = true)]
+    public decimal Id { get; set; }
+
+    /// <summary>
+    ///     鍑哄簱ID
+    /// </summary>
+    [SugarColumn(ColumnName = "ITEM_OUT_ID")]
+    public decimal? ItemOutId { get; set; }
+
+    /// <summary>
+    ///     鐗╂枡缂栧彿
+    /// </summary>
+    [SugarColumn(ColumnName = "ITEM_NO")]
+    public string? ItemNo { get; set; }
+
+    /// <summary>
+    ///     鐢宠鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "QUANTITY")]
+    public decimal? Quantity { get; set; }
+
+    /// <summary>
+    /// </summary>
+    [SugarColumn(ColumnName = "CREATE_BY")]
+    public string? CreateBy { get; set; }
+
+    /// <summary>
+    /// </summary>
+    [SugarColumn(ColumnName = "CREATE_DATE")]
+    public DateTime? CreateDate { get; set; }
+
+    /// <summary>
+    /// </summary>
+    [SugarColumn(ColumnName = "LASTUPDATE_BY")]
+    public string? LastupdateBy { get; set; }
+
+    /// <summary>
+    /// </summary>
+    [SugarColumn(ColumnName = "LASTUPDATE_DATE")]
+    public DateTime? LastupdateDate { get; set; }
+
+    /// <summary>
+    ///     澶囨敞淇℃伅
+    /// </summary>
+    [SugarColumn(ColumnName = "REMARK")]
+    public string? Remark { get; set; }
+
+    /// <summary>
+    /// </summary>
+    [SugarColumn(ColumnName = "FACTORY")]
+    public string? Factory { get; set; }
+
+    /// <summary>
+    /// </summary>
+    [SugarColumn(ColumnName = "COMPANY")]
+    public string? Company { get; set; }
+
+    /// <summary>
+    ///     鎺ㄤ粙浠撳簱
+    /// </summary>
+    [SugarColumn(ColumnName = "DEPOT_CODE")]
+    public string? DepotCode { get; set; }
+
+    /// <summary>
+    ///     鎺ㄤ粙搴撲綅
+    /// </summary>
+    [SugarColumn(ColumnName = "DEPOT_SECTION_CODE")]
+    public string? DepotSectionCode { get; set; }
+
+    /// <summary>
+    /// </summary>
+    [SugarColumn(ColumnName = "TASK_NO")]
+    public string? TaskNo { get; set; }
+
+    /// <summary>
+    /// </summary>
+    [SugarColumn(ColumnName = "WORK_NO")]
+    public string? WorkNo { get; set; }
+
+    /// <summary>
+    /// </summary>
+    [SugarColumn(ColumnName = "WORK_LINE")]
+    public decimal? WorkLine { get; set; }
+
+    /// <summary>
+    ///     ERP 涓昏〃ID
+    /// </summary>
+    [SugarColumn(ColumnName = "ERP_ID")]
+    public decimal? ErpId { get; set; }
+
+    /// <summary>
+    ///     ERP 浠庤〃ID
+    /// </summary>
+    [SugarColumn(ColumnName = "ERP_AUTOID")]
+    public decimal? ErpAutoid { get; set; }
+
+    /// <summary>
+    ///     ERP_鏂欏彿
+    /// </summary>
+    [SugarColumn(ColumnName = "ERP_ITEM_NO")]
+    public string? ErpItemNo { get; set; }
+
+    /// <summary>
+    ///     棰滆壊
+    /// </summary>
+    [SugarColumn(ColumnName = "COLOR_NAME")]
+    public string? ColorName { get; set; }
+
+    /// <summary>
+    ///     鏈�鏂颁笅杞芥洿鏂版爣璇�
+    /// </summary>
+    [SugarColumn(ColumnName = "UPDATE_FLG")]
+    public decimal? UpdateFlg { get; set; }
+
+    /// <summary>
+    ///     閲囪喘鍗旾D
+    /// </summary>
+    [SugarColumn(ColumnName = "EBELN_K3ID")]
+    public decimal? EbelnK3id { get; set; }
+
+    /// <summary>
+    ///     閲囪喘鍗曡ID
+    /// </summary>
+    [SugarColumn(ColumnName = "LINE_K3ID")]
+    public decimal? LineK3id { get; set; }
+
+    /// <summary>
+    ///     閲囪喘鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "EBELN")]
+    public string? Ebeln { get; set; }
+
+    /// <summary>
+    ///     閲囪喘璁㈠崟琛屽彿
+    /// </summary>
+    [SugarColumn(ColumnName = "EBELN_LINE")]
+    public decimal? EbelnLine { get; set; }
+
+    /// <summary>
+    ///     閲囪喘璁㈠崟鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "EBELN_QTY")]
+    public decimal? EbelnQty { get; set; }
+
+    /// <summary>
+    ///     浜у搧缂栧彿
+    /// </summary>
+    [SugarColumn(ColumnName = "BOARD_ITEM")]
+    public string? BoardItem { get; set; }
+
+    /// <summary>
+    /// </summary>
+    [SugarColumn(ColumnName = "F_TYPE")]
+    public decimal? FType { get; set; }
+
+    /// <summary>
+    /// </summary>
+    [SugarColumn(ColumnName = "STATUS")]
+    public decimal? Status { get; set; }
+
+    /// <summary>
+    ///     瀛愬瓙琛↖D
+    /// </summary>
+    [SugarColumn(ColumnName = "ALLOCATEID")]
+    public decimal? Allocateid { get; set; }
+
+    /// <summary>
+    ///     棰嗘枡缂栧彿
+    /// </summary>
+    [SugarColumn(ColumnName = "PBILL_NO")]
+    public string? PbillNo { get; set; }
+
+    /// <summary>
+    ///     erp鎺ュ彛杩斿洖
+    /// </summary>
+    [SugarColumn(ColumnName = "ERP_MARK")]
+    public string? ErpMark { get; set; }
+
+    /// <summary>
+    ///     鍏ュ簱鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "RK_NO")]
+    public string? RkNo { get; set; }
+
+    /// <summary>
+    ///     宸插叆搴撴暟
+    /// </summary>
+    [SugarColumn(ColumnName = "RK_QTY")]
+    public decimal? RkQty { get; set; }
+
+    /// <summary>
+    ///     宸叉壂鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "TL_QTY")]
+    public decimal? TlQty { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Modes/MesInvItemOuts.cs b/MES.Service/Modes/MesInvItemOuts.cs
new file mode 100644
index 0000000..eeae84c
--- /dev/null
+++ b/MES.Service/Modes/MesInvItemOuts.cs
@@ -0,0 +1,307 @@
+锘縰sing SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+///     鐗╂枡鍑哄簱琛�
+/// </summary>
+[SugarTable("MES_INV_ITEM_OUTS")]
+public class MesInvItemOuts
+{
+    /// <summary>
+    ///     SEQ_INV_ID
+    /// </summary>
+    [SugarColumn(ColumnName = "ID", OracleSequenceName = "SEQ_INV_ID",
+        IsPrimaryKey = true)]
+    public decimal Id { get; set; }
+
+    /// <summary>
+    ///     鍑哄簱鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "ITEM_OUT_NO")]
+    public string? ItemOutNo { get; set; }
+
+    /// <summary>
+    ///     鐢熶骇璁㈠崟
+    /// </summary>
+    [SugarColumn(ColumnName = "TASK_NO")]
+    public string? TaskNo { get; set; }
+
+    /// <summary>
+    ///     宸ュ簭鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "PROC_NO")]
+    public string? ProcNo { get; set; }
+
+    /// <summary>
+    ///     鐘舵�亅0-鏈鏍�1-瀹℃牳
+    /// </summary>
+    [SugarColumn(ColumnName = "STATUS")]
+    public decimal? Status { get; set; }
+
+    /// <summary>
+    ///     鍒涘缓浜�
+    /// </summary>
+    [SugarColumn(ColumnName = "CREATE_BY")]
+    public string? CreateBy { get; set; }
+
+    /// <summary>
+    ///     鍒涘缓鏃堕棿
+    /// </summary>
+    [SugarColumn(ColumnName = "CREATE_DATE")]
+    public DateTime? CreateDate { get; set; }
+
+    /// <summary>
+    ///     鏈�鍚庢洿鏂颁汉
+    /// </summary>
+    [SugarColumn(ColumnName = "LASTUPDATE_BY")]
+    public string? LastupdateBy { get; set; }
+
+    /// <summary>
+    ///     鏈�鍚庢洿鏂版椂闂�
+    /// </summary>
+    [SugarColumn(ColumnName = "LASTUPDATE_DATE")]
+    public DateTime? LastupdateDate { get; set; }
+
+    /// <summary>
+    ///     鍗曟嵁绫诲瀷ID
+    /// </summary>
+    [SugarColumn(ColumnName = "BILL_TYPE_ID")]
+    public decimal? BillTypeId { get; set; }
+
+    /// <summary>
+    ///     浜嬪姟绫诲瀷
+    /// </summary>
+    [SugarColumn(ColumnName = "TRANSACTION_NO")]
+    public decimal? TransactionNo { get; set; }
+
+    /// <summary>
+    ///     澶囨敞淇℃伅
+    /// </summary>
+    [SugarColumn(ColumnName = "REMARK")]
+    public string? Remark { get; set; }
+
+    /// <summary>
+    ///     鍑哄簱鍘熷洜
+    /// </summary>
+    [SugarColumn(ColumnName = "REASON")]
+    public string? Reason { get; set; }
+
+    /// <summary>
+    ///     鐢熶骇绾跨紪鐮�
+    /// </summary>
+    [SugarColumn(ColumnName = "PRODUCE_LINE_NO")]
+    public string? ProduceLineNo { get; set; }
+
+    /// <summary>
+    ///     瀹℃牳浜�
+    /// </summary>
+    [SugarColumn(ColumnName = "CHECK_USER")]
+    public string? CheckUser { get; set; }
+
+    /// <summary>
+    ///     瀹℃牳鏃ユ湡
+    /// </summary>
+    [SugarColumn(ColumnName = "CHECK_DATE")]
+    public DateTime? CheckDate { get; set; }
+
+    /// <summary>
+    ///     棰嗘枡鏃ユ湡
+    /// </summary>
+    [SugarColumn(ColumnName = "OUT_DATE")]
+    public DateTime? OutDate { get; set; }
+
+    /// <summary>
+    ///     棰嗘枡宸ユ
+    /// </summary>
+    [SugarColumn(ColumnName = "MMLIST")]
+    public string? Mmlist { get; set; }
+
+    /// <summary>
+    ///     瀛愬簱CODE
+    /// </summary>
+    [SugarColumn(ColumnName = "DEPOT_CODE")]
+    public string? DepotCode { get; set; }
+
+    /// <summary>
+    ///     SAP杩斿洖鍗曟嵁
+    /// </summary>
+    [SugarColumn(ColumnName = "SAPNO")]
+    public string? Sapno { get; set; }
+
+    /// <summary>
+    ///     鏄惁宸插洖鍐橲AP
+    /// </summary>
+    [SugarColumn(ColumnName = "SAPSTATUS")]
+    public short? Sapstatus { get; set; }
+
+    /// <summary>
+    ///     SAP杩斿洖骞翠唤
+    /// </summary>
+    [SugarColumn(ColumnName = "SAPYEAR")]
+    public short? Sapyear { get; set; }
+
+    /// <summary>
+    ///     SAP杩斿洖淇℃伅
+    /// </summary>
+    [SugarColumn(ColumnName = "SAPTEXT")]
+    public string? Saptext { get; set; }
+
+    /// <summary>
+    ///     宸ュ簭绾夸綋
+    /// </summary>
+    [SugarColumn(ColumnName = "PROC_LINE_NO")]
+    public string? ProcLineNo { get; set; }
+
+    /// <summary>
+    ///     棰嗘枡閮ㄩ棬
+    /// </summary>
+    [SugarColumn(ColumnName = "OUT_PART")]
+    public string? OutPart { get; set; }
+
+    /// <summary>
+    ///     0 鐢熶骇,1 濮斿
+    /// </summary>
+    [SugarColumn(ColumnName = "F_TYPE")]
+    public long? FType { get; set; }
+
+    /// <summary>
+    ///     褰曞叆鎻愪氦
+    /// </summary>
+    [SugarColumn(ColumnName = "OUT_STATUS")]
+    public decimal? OutStatus { get; set; }
+
+    /// <summary>
+    ///     鏄惁鍙
+    /// </summary>
+    [SugarColumn(ColumnName = "IS_VISUAL")]
+    public decimal? IsVisual { get; set; }
+
+    /// <summary>
+    ///     鎺ユ敹浜�
+    /// </summary>
+    [SugarColumn(ColumnName = "RECEIVER")]
+    public string? Receiver { get; set; }
+
+    /// <summary>
+    ///     宸ュ巶缂栧彿
+    /// </summary>
+    [SugarColumn(ColumnName = "FACTORY")]
+    public string? Factory { get; set; }
+
+    /// <summary>
+    ///     鍏徃缂栧彿
+    /// </summary>
+    [SugarColumn(ColumnName = "COMPANY")]
+    public string? Company { get; set; }
+
+    /// <summary>
+    ///     鍐查攢浜嬪姟绫诲瀷缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "MTRANSCTION_NO")]
+    public decimal? MtransctionNo { get; set; }
+
+    /// <summary>
+    ///     浠诲姟鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "WORK_NO")]
+    public string? WorkNo { get; set; }
+
+    /// <summary>
+    ///     浠诲姟鍗曞彿琛屽彿
+    /// </summary>
+    [SugarColumn(ColumnName = "WORK_LINE")]
+    public decimal? WorkLine { get; set; }
+
+    /// <summary>
+    ///     渚涘簲鍟嗙紪鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "SUPP_NO")]
+    public string? SuppNo { get; set; }
+
+    /// <summary>
+    ///     璁㈠崟鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "CMPOCODE")]
+    public string? Cmpocode { get; set; }
+
+    /// <summary>
+    ///     鍘熺墿鏂欏嚭璐ф爣璇�
+    /// </summary>
+    [SugarColumn(ColumnName = "ITEM_FLAG")]
+    public decimal? ItemFlag { get; set; }
+
+    /// <summary>
+    ///     1=鍗婃垚鍝佸嚭璐�
+    /// </summary>
+    [SugarColumn(ColumnName = "BOARD_FLAG")]
+    public decimal? BoardFlag { get; set; }
+
+    /// <summary>
+    ///     鍑哄簱绫诲埆
+    /// </summary>
+    [SugarColumn(ColumnName = "OUT_TYPE")]
+    public string? OutType { get; set; }
+
+    /// <summary>
+    ///     涓氬姟绫诲瀷
+    /// </summary>
+    [SugarColumn(ColumnName = "BUSINESS_TYPE")]
+    public string? BusinessType { get; set; }
+
+    /// <summary>
+    ///     浜у搧缂栧彿
+    /// </summary>
+    [SugarColumn(ColumnName = "BOARD_ITEM")]
+    public string? BoardItem { get; set; }
+
+    /// <summary>
+    ///     浜ч噺
+    /// </summary>
+    [SugarColumn(ColumnName = "PLAN_QTY")]
+    public decimal? PlanQty { get; set; }
+
+    /// <summary>
+    ///     棰嗘枡缂栧彿/濮斿璁㈠崟
+    /// </summary>
+    [SugarColumn(ColumnName = "PBILL_NO")]
+    public string? PbillNo { get; set; }
+
+    /// <summary>
+    ///     琛ユ枡鐢宠鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "BBILL_NO")]
+    public string? BbillNo { get; set; }
+
+    /// <summary>
+    ///     鏍囪瘑 /1宸叉帹閫�
+    /// </summary>
+    [SugarColumn(ColumnName = "NFLAG")]
+    public short? Nflag { get; set; }
+
+    /// <summary>
+    ///     閫�鏂欐柟寮�
+    /// </summary>
+    [SugarColumn(ColumnName = "FMRMODE")]
+    public string? Fmrmode { get; set; }
+
+    /// <summary>
+    ///     erp杩斿洖淇℃伅
+    /// </summary>
+    [SugarColumn(ColumnName = "MSG")]
+    public string? Msg { get; set; }
+
+    /// <summary>
+    ///     鐘舵��
+    /// </summary>
+    [SugarColumn(ColumnName = "STATES")]
+    public string? States { get; set; }
+
+    [SugarColumn(IsIgnore = true)] public string? DepotName { get; set; }
+
+    [SugarColumn(IsIgnore = true)] public string? SuppName { get; set; }
+
+    [SugarColumn(IsIgnore = true)] public string? CreateByFname { get; set; }
+
+    [SugarColumn(IsIgnore = true)] public string? CheckUserFname { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Modes/MesInvItemStocks.cs b/MES.Service/Modes/MesInvItemStocks.cs
new file mode 100644
index 0000000..87babea
--- /dev/null
+++ b/MES.Service/Modes/MesInvItemStocks.cs
@@ -0,0 +1,201 @@
+锘縰sing SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+///     鐗╂枡搴撳瓨琛�
+/// </summary>
+[SugarTable("MES_INV_ITEM_STOCKS")]
+public class MesInvItemStocks
+{
+   /// <summary>
+   /// </summary>
+   [SugarColumn(ColumnName = "ID", IsPrimaryKey = true)]
+    public decimal Id { get; set; }
+
+   /// <summary>
+   ///     鐢熶骇璁㈠崟
+   /// </summary>
+   [SugarColumn(ColumnName = "TASK_NO")]
+    public string TaskNo { get; set; }
+
+   /// <summary>
+   ///     鐗╂枡鏉$爜
+   /// </summary>
+   [SugarColumn(ColumnName = "ITEM_BARCODE")]
+    public string ItemBarcode { get; set; }
+
+   /// <summary>
+   ///     瀹㈡埛鐗╂枡缂栫爜锛堟棤鏉$爜鎵嬪伐褰曞叆锛屾湁鏉$爜涓哄啑浣欏瓧娈碉級
+   /// </summary>
+   [SugarColumn(ColumnName = "C_ITEM_CODE")]
+    public string CItemCode { get; set; }
+
+   /// <summary>
+   ///     鏈徃鐗╂枡缂栫爜锛堟棤鏉$爜鎵嬪伐褰曞叆锛屾湁鏉$爜涓哄啑浣欏瓧娈碉級
+   /// </summary>
+   [SugarColumn(ColumnName = "ITEM_NO")]
+    public string ItemNo { get; set; }
+
+   /// <summary>
+   ///     瀛愬簱id
+   /// </summary>
+   [SugarColumn(ColumnName = "DEPOTS_ID")]
+    public decimal? DepotsId { get; set; }
+
+   /// <summary>
+   ///     璐т綅id
+   /// </summary>
+   [SugarColumn(ColumnName = "DEPOT_SECTIONS_ID")]
+    public decimal? DepotSectionsId { get; set; }
+
+   /// <summary>
+   ///     鍘傚鎵规
+   /// </summary>
+   [SugarColumn(ColumnName = "LOT_NO")]
+    public string LotNo { get; set; }
+
+   /// <summary>
+   ///     鏁伴噺
+   /// </summary>
+   [SugarColumn(ColumnName = "QUANTITY")]
+    public decimal? Quantity { get; set; }
+
+   /// <summary>
+   ///     鐜繚鏍囧織锛堟棤鏉$爜鎵嬪伐褰曞叆锛屾湁鏉$爜涓哄啑浣欏瓧娈碉級(0-鍚︼紝1-鏄�)
+   /// </summary>
+   [SugarColumn(ColumnName = "EP_FLAG")]
+    public short? EpFlag { get; set; }
+
+   /// <summary>
+   ///     瀹㈡埛缂栫爜
+   /// </summary>
+   [SugarColumn(ColumnName = "CUSTOMER_NO")]
+    public string CustomerNo { get; set; }
+
+   /// <summary>
+   ///     閲嶉噺
+   /// </summary>
+   [SugarColumn(ColumnName = "ITEM_WT")]
+    public decimal? ItemWt { get; set; }
+
+   /// <summary>
+   ///     瀛愬簱CODE
+   /// </summary>
+   [SugarColumn(ColumnName = "DEPOTS_CODE")]
+    public string DepotsCode { get; set; }
+
+   /// <summary>
+   ///     璐т綅CODE
+   /// </summary>
+   [SugarColumn(ColumnName = "DEPOT_SECTIONS_CODE")]
+    public string DepotSectionsCode { get; set; }
+
+   /// <summary>
+   ///     妫�楠屾棩鏈�
+   /// </summary>
+   [SugarColumn(ColumnName = "CHECK_DATE")]
+    public DateTime? CheckDate { get; set; }
+
+   /// <summary>
+   ///     0 鐗╂枡 1 鍗婃垚鍝� 2 鎴愬搧
+   /// </summary>
+   [SugarColumn(ColumnName = "ITEM_TYPE")]
+    public short? ItemType { get; set; }
+
+   /// <summary>
+   ///     鍏ュ簱鏃ユ湡
+   /// </summary>
+   [SugarColumn(ColumnName = "INDEP_DATE")]
+    public DateTime? IndepDate { get; set; }
+
+   /// <summary>
+   ///     宸ュ巶缂栧彿
+   /// </summary>
+   [SugarColumn(ColumnName = "FACTORY")]
+    public string Factory { get; set; }
+
+   /// <summary>
+   ///     鍏徃缂栧彿
+   /// </summary>
+   [SugarColumn(ColumnName = "COMPANY")]
+    public string Company { get; set; }
+
+   /// <summary>
+   ///     璐ㄦ鐘舵��
+   /// </summary>
+   [SugarColumn(ColumnName = "IQC_STATUS")]
+    public string IqcStatus { get; set; }
+
+   /// <summary>
+   ///     灏忚溅鏉$爜
+   /// </summary>
+   [SugarColumn(ColumnName = "FCAR")]
+    public string Fcar { get; set; }
+
+   /// <summary>
+   ///     鍐荤粨鎻愪氦閲嶆锛�0锛氬喕缁撴湭鎻愪氦閲嶆锛�1锛氬喕缁撳苟鎻愪氦閲嶆
+   /// </summary>
+   [SugarColumn(ColumnName = "VISABLE_SUBMIT")]
+    public short? VisableSubmit { get; set; }
+
+   /// <summary>
+   ///     鎻愪氦閲嶆浜�
+   /// </summary>
+   [SugarColumn(ColumnName = "VISABLE_SUBMIT_BY")]
+    public string VisableSubmitBy { get; set; }
+
+   /// <summary>
+   ///     鎻愪氦閲嶆鏃堕棿
+   /// </summary>
+   [SugarColumn(ColumnName = "VISABLE_SUBMIT_DATE")]
+    public DateTime? VisableSubmitDate { get; set; }
+
+   /// <summary>
+   ///     浜у搧鍨嬪彿
+   /// </summary>
+   [SugarColumn(ColumnName = "BOARD_STYLE")]
+    public string BoardStyle { get; set; }
+
+   /// <summary>
+   ///     浠诲姟鍗曞彿
+   /// </summary>
+   [SugarColumn(ColumnName = "WORK_NO")]
+    public string WorkNo { get; set; }
+
+   /// <summary>
+   ///     浠诲姟鍗曡鍙�
+   /// </summary>
+   [SugarColumn(ColumnName = "WORK_LINE")]
+    public decimal? WorkLine { get; set; }
+
+   /// <summary>
+   ///     渚涘簲鍟�
+   /// </summary>
+   [SugarColumn(ColumnName = "SUPP_NO")]
+    public string SuppNo { get; set; }
+
+   /// <summary>
+   ///     鐢熶骇绾�
+   /// </summary>
+   [SugarColumn(ColumnName = "LINE_NO")]
+    public string LineNo { get; set; }
+
+   /// <summary>
+   ///     鍗婃垚鍝佸叆搴撳崟鍙�
+   /// </summary>
+   [SugarColumn(ColumnName = "BILL_NO")]
+    public string BillNo { get; set; }
+
+   /// <summary>
+   ///     閲囪喘璁㈠崟id
+   /// </summary>
+   [SugarColumn(ColumnName = "EBELN_K3ID")]
+    public decimal? EbelnK3id { get; set; }
+
+   /// <summary>
+   ///     閲囪喘璁㈠崟琛宨d
+   /// </summary>
+   [SugarColumn(ColumnName = "LINE_K3ID")]
+    public decimal? LineK3id { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Modes/MesQaItemsDetect01.cs b/MES.Service/Modes/MesQaItemsDetect01.cs
new file mode 100644
index 0000000..2a26d0c
--- /dev/null
+++ b/MES.Service/Modes/MesQaItemsDetect01.cs
@@ -0,0 +1,331 @@
+锘縰sing SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+///     鏉ユ枡鍏ュ簱妫�楠岃〃澶�
+/// </summary>
+[SugarTable("MES_QA_ITEMS_DETECT_01")]
+public class MesQaItemsDetect01
+{
+ /// <summary>
+ /// </summary>
+ [SugarColumn(ColumnName = "ID", IsPrimaryKey = true)]
+    public decimal Id { get; set; }
+
+ /// <summary>
+ ///     妫�楠屽崟鍙�
+ /// </summary>
+ [SugarColumn(ColumnName = "RELEASE_NO")]
+    public string ReleaseNo { get; set; }
+
+ /// <summary>
+ ///     妫�楠屾棩鏈�
+ /// </summary>
+ [SugarColumn(ColumnName = "FCHECK_DATE")]
+    public DateTime? FcheckDate { get; set; }
+
+ /// <summary>
+ ///     妫�楠屼汉鍛�
+ /// </summary>
+ [SugarColumn(ColumnName = "FCHECK_BY")]
+    public string FcheckBy { get; set; }
+
+ /// <summary>
+ ///     鐗╂枡缂栫爜
+ /// </summary>
+ [SugarColumn(ColumnName = "ITEM_NO")]
+    public string ItemNo { get; set; }
+
+ /// <summary>
+ ///     鏉ユ枡鏁伴噺
+ /// </summary>
+ [SugarColumn(ColumnName = "FBATCH_QTY")]
+    public decimal? FbatchQty { get; set; }
+
+ /// <summary>
+ ///     鍒ゅ畾缁撴灉
+ /// </summary>
+ [SugarColumn(ColumnName = "FRECE_QTY")]
+    public string FreceQty { get; set; }
+
+ /// <summary>
+ /// </summary>
+ [SugarColumn(ColumnName = "SUPP_NO")]
+    public string SuppNo { get; set; }
+
+ /// <summary>
+ /// </summary>
+ [SugarColumn(ColumnName = "FNG_DESC")]
+    public string FngDesc { get; set; }
+
+ /// <summary>
+ ///     妫�楠岀粨鏋�
+ /// </summary>
+ [SugarColumn(ColumnName = "FCHECK_RESU")]
+    public string FcheckResu { get; set; }
+
+ /// <summary>
+ /// </summary>
+ [SugarColumn(ColumnName = "FREVIEW")]
+    public string Freview { get; set; }
+
+ /// <summary>
+ ///     妫�楠屾按鍑�
+ /// </summary>
+ [SugarColumn(ColumnName = "SAMPLE_SIZE_NO")]
+    public string SampleSizeNo { get; set; }
+
+ /// <summary>
+ ///     妫�楠屾按骞�
+ /// </summary>
+ [SugarColumn(ColumnName = "FCHECK_LEVEL")]
+    public string FcheckLevel { get; set; }
+
+ /// <summary>
+ ///     鎷掓敹姘村钩
+ /// </summary>
+ [SugarColumn(ColumnName = "FAC_LEVEL")]
+    public string FacLevel { get; set; }
+
+ /// <summary>
+ ///     鎶芥鏁伴噺
+ /// </summary>
+ [SugarColumn(ColumnName = "CHECK_QTY")]
+    public string CheckQty { get; set; }
+
+ /// <summary>
+ ///     鎵规鍙�  --鍒拌揣鍗曞彿
+ /// </summary>
+ [SugarColumn(ColumnName = "LOT_NO")]
+    public string LotNo { get; set; }
+
+ /// <summary>
+ ///     鏄惁鎺ㄩ��
+ /// </summary>
+ [SugarColumn(ColumnName = "FMOVE")]
+    public string Fmove { get; set; }
+
+ /// <summary>
+ ///     鏄惁澶勭悊
+ /// </summary>
+ [SugarColumn(ColumnName = "FHANDLE")]
+    public string Fhandle { get; set; }
+
+ /// <summary>
+ ///     鍒涘缓浜�
+ /// </summary>
+ [SugarColumn(ColumnName = "CREATE_BY")]
+    public string CreateBy { get; set; }
+
+ /// <summary>
+ ///     鍒涘缓鏃ユ湡
+ /// </summary>
+ [SugarColumn(ColumnName = "CREATE_DATE")]
+    public DateTime? CreateDate { get; set; }
+
+ /// <summary>
+ ///     鏇存柊浜�
+ /// </summary>
+ [SugarColumn(ColumnName = "LASTUPDATE_BY")]
+    public string LastupdateBy { get; set; }
+
+ /// <summary>
+ ///     鏇存柊鏃ユ湡
+ /// </summary>
+ [SugarColumn(ColumnName = "LASTUPDATE_DATE")]
+    public DateTime? LastupdateDate { get; set; }
+
+ /// <summary>
+ ///     鏄惁瀹℃牳
+ /// </summary>
+ [SugarColumn(ColumnName = "MODIFY1_FLAG")]
+    public decimal? Modify1Flag { get; set; }
+
+ /// <summary>
+ /// </summary>
+ [SugarColumn(ColumnName = "MODIFY1_BY")]
+    public string Modify1By { get; set; }
+
+ /// <summary>
+ /// </summary>
+ [SugarColumn(ColumnName = "MODIFY1_DATE")]
+    public DateTime? Modify1Date { get; set; }
+
+ /// <summary>
+ /// </summary>
+ [SugarColumn(ColumnName = "FACTORY")]
+    public string Factory { get; set; }
+
+ /// <summary>
+ ///     XRF娴嬭瘯鎶ュ憡缂栧彿
+ /// </summary>
+ [SugarColumn(ColumnName = "FCHECK_REPNO")]
+    public string FcheckRepno { get; set; }
+
+ /// <summary>
+ ///     绗笁鏂规姤鍛�
+ /// </summary>
+ [SugarColumn(ColumnName = "FTHIRD_REP")]
+    public string FthirdRep { get; set; }
+
+ /// <summary>
+ ///     鏄惁浣滃簾
+ /// </summary>
+ [SugarColumn(ColumnName = "FCANCEL")]
+    public decimal? Fcancel { get; set; }
+
+ /// <summary>
+ ///     鎻愪氦鏍囪瘑
+ /// </summary>
+ [SugarColumn(ColumnName = "FSUBMIT")]
+    public decimal? Fsubmit { get; set; }
+
+ /// <summary>
+ ///     妫�楠屼緷鎹�
+ /// </summary>
+ [SugarColumn(ColumnName = "FCHECK_ACCORD")]
+    public string FcheckAccord { get; set; }
+
+ /// <summary>
+ ///     绫诲瀷(0 鏉ユ枡 1 鍦ㄥ簱)
+ /// </summary>
+ [SugarColumn(ColumnName = "FTYPE")]
+    public short? Ftype { get; set; }
+
+ /// <summary>
+ ///     鍗曚綅
+ /// </summary>
+ [SugarColumn(ColumnName = "ITEM_UNIT")]
+    public string ItemUnit { get; set; }
+
+ /// <summary>
+ ///     鍑鸿揣鏃ユ湡
+ /// </summary>
+ [SugarColumn(ColumnName = "OUT_DATE")]
+    public string OutDate { get; set; }
+
+ /// <summary>
+ ///     鏄惁鍏嶆
+ /// </summary>
+ [SugarColumn(ColumnName = "FEXEMPTION")]
+    public decimal? Fexemption { get; set; }
+
+ /// <summary>
+ ///     妗d綅鏍囧噯
+ /// </summary>
+ [SugarColumn(ColumnName = "FGEAR_STAND")]
+    public string FgearStand { get; set; }
+
+ /// <summary>
+ ///     涓嶈壇澶勭悊鏂规硶
+ /// </summary>
+ [SugarColumn(ColumnName = "FNG_HANDLE")]
+    public string FngHandle { get; set; }
+
+ /// <summary>
+ ///     绠$悊缂栧彿
+ /// </summary>
+ [SugarColumn(ColumnName = "FMANAGE_NO")]
+    public string FmanageNo { get; set; }
+
+ /// <summary>
+ ///     杞崲鏁伴噺
+ /// </summary>
+ [SugarColumn(ColumnName = "FCOVERT_QTY")]
+    public string FcovertQty { get; set; }
+
+ /// <summary>
+ ///     鐗堟湰
+ /// </summary>
+ [SugarColumn(ColumnName = "FVERSION")]
+    public decimal? Fversion { get; set; }
+
+ /// <summary>
+ /// </summary>
+ [SugarColumn(ColumnName = "COMPANY")]
+    public string Company { get; set; }
+
+ /// <summary>
+ /// </summary>
+ [SugarColumn(ColumnName = "FSECOND_RESU")]
+    public string FsecondResu { get; set; }
+
+ /// <summary>
+ ///     鏈�澶ф娊妫�鏁�
+ /// </summary>
+ [SugarColumn(ColumnName = "MAX_CHECK_QTY")]
+    public decimal? MaxCheckQty { get; set; }
+
+ /// <summary>
+ ///     鐗瑰畾淇敼鏄惁瀹℃牳
+ /// </summary>
+ [SugarColumn(ColumnName = "MODIFY1_FLAG1")]
+    public decimal? Modify1Flag1 { get; set; }
+
+ /// <summary>
+ ///     鐗瑰畾淇敼瀹℃牳浜�
+ /// </summary>
+ [SugarColumn(ColumnName = "MODIFY1_BY1")]
+    public string Modify1By1 { get; set; }
+
+ /// <summary>
+ ///     鐗瑰畾淇敼瀹℃牳鏃堕棿
+ /// </summary>
+ [SugarColumn(ColumnName = "MODIFY1_DATE1")]
+    public DateTime? Modify1Date1 { get; set; }
+
+ /// <summary>
+ ///     灏忔壒娆″彿
+ /// </summary>
+ [SugarColumn(ColumnName = "LOT_NO1")]
+    public string LotNo1 { get; set; }
+
+ /// <summary>
+ ///     閲囪喘鍗曞彿
+ /// </summary>
+ [SugarColumn(ColumnName = "LOT_NO2")]
+    public string LotNo2 { get; set; }
+
+ /// <summary>
+ ///     浜у搧鍨嬪彿
+ /// </summary>
+ [SugarColumn(ColumnName = "BOARD_STYLE")]
+    public string BoardStyle { get; set; }
+
+ /// <summary>
+ ///     浠诲姟鍗曞彿
+ /// </summary>
+ [SugarColumn(ColumnName = "WORK_NO")]
+    public string WorkNo { get; set; }
+
+ /// <summary>
+ ///     鍒拌揣鏃堕棿
+ /// </summary>
+ [SugarColumn(ColumnName = "DHA018")]
+    public string Dha018 { get; set; }
+
+ /// <summary>
+ ///     琛屽彿
+ /// </summary>
+ [SugarColumn(ColumnName = "DHB002")]
+    public decimal? Dhb002 { get; set; }
+
+ /// <summary>
+ ///     鍒拌揣鍗曞彿
+ /// </summary>
+ [SugarColumn(ColumnName = "DHB001")]
+    public string Dhb001 { get; set; }
+
+ /// <summary>
+ ///     渚涘簲鍟�
+ /// </summary>
+ [SugarColumn(ColumnName = "LIFNR")]
+    public string Lifnr { get; set; }
+
+ /// <summary>
+ ///     閫�鏂欐柟寮�
+ /// </summary>
+ [SugarColumn(ColumnName = "FMRMODE")]
+    public string Fmrmode { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Modes/Purdhb.cs b/MES.Service/Modes/Purdhb.cs
new file mode 100644
index 0000000..7fff6ee
--- /dev/null
+++ b/MES.Service/Modes/Purdhb.cs
@@ -0,0 +1,274 @@
+锘縰sing SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+///     閲囪喘鍒拌揣鍗曡〃韬�
+/// </summary>
+[SugarTable("PURDHB")]
+public class Purdhb
+{
+   /// <summary>
+   ///     鍗曞彿
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB001")]
+    public string Dhb001 { get; set; }
+
+   /// <summary>
+   ///     搴忓彿
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB002")]
+    public string Dhb002 { get; set; }
+
+   /// <summary>
+   ///     鐗╂枡缂栫爜
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB003")]
+    public string Dhb003 { get; set; }
+
+   /// <summary>
+   ///     鐗╂枡鍚嶇О
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB004")]
+    public string Dhb004 { get; set; }
+
+   /// <summary>
+   ///     鐗╂枡瑙勬牸
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB005")]
+    public string Dhb005 { get; set; }
+
+   /// <summary>
+   ///     浜よ揣鏁伴噺
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB006")]
+    public decimal? Dhb006 { get; set; }
+
+   /// <summary>
+   ///     鍗曚綅
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB007")]
+    public string Dhb007 { get; set; }
+
+   /// <summary>
+   ///     浠撳簱
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB008")]
+    public string Dhb008 { get; set; }
+
+   /// <summary>
+   ///     浠撳簱鍚嶇О
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB009")]
+    public string Dhb009 { get; set; }
+
+   /// <summary>
+   ///     鎵瑰彿
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB010")]
+    public string Dhb010 { get; set; }
+
+   /// <summary>
+   ///     鏉ユ簮鍗曞彿
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB011")]
+    public string Dhb011 { get; set; }
+
+   /// <summary>
+   ///     鏉ユ簮搴忓彿
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB012")]
+    public decimal? Dhb012 { get; set; }
+
+   /// <summary>
+   ///     娓呯偣鏁伴噺
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB013")]
+    public decimal? Dhb013 { get; set; }
+
+   /// <summary>
+   ///     鍒板巶鏃ユ湡
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB014")]
+    public string Dhb014 { get; set; }
+
+   /// <summary>
+   ///     楠屾敹鏁伴噺
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB015")]
+    public decimal? Dhb015 { get; set; }
+
+   /// <summary>
+   ///     楠岄��鏁伴噺
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB016")]
+    public decimal? Dhb016 { get; set; }
+
+   /// <summary>
+   ///     杩涜揣鍗曚环
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB017")]
+    public decimal? Dhb017 { get; set; }
+
+   /// <summary>
+   ///     杩涜揣閲戦
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB018")]
+    public decimal? Dhb018 { get; set; }
+
+   /// <summary>
+   ///     瀹㈡埛鏂欏彿
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB019")]
+    public string Dhb019 { get; set; }
+
+   /// <summary>
+   ///     閮ㄩ棬缂栧彿
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB020")]
+    public string Dhb020 { get; set; }
+
+   /// <summary>
+   ///     璧犲搧鏁�
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB021")]
+    public decimal? Dhb021 { get; set; }
+
+   /// <summary>
+   ///     鏇存柊ERP
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB022")]
+    public string Dhb022 { get; set; }
+
+   /// <summary>
+   ///     妫�楠岀姸鎬�
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB023")]
+    public string Dhb023 { get; set; }
+
+   /// <summary>
+   ///     澶囨敞
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB024")]
+    public string Dhb024 { get; set; }
+
+   /// <summary>
+   ///     瀹℃牳
+   /// </summary>
+   [SugarColumn(ColumnName = "AUDITING")]
+    public decimal? Auditing { get; set; }
+
+   /// <summary>
+   ///     ERP閲囪喘鍗曞彿ID
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB026")]
+    public decimal? Dhb026 { get; set; }
+
+   /// <summary>
+   ///     ERP閲囪喘搴忓彿ID
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB027")]
+    public decimal? Dhb027 { get; set; }
+
+   /// <summary>
+   ///     ERP鐗╂枡ID
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB028")]
+    public decimal? Dhb028 { get; set; }
+
+   /// <summary>
+   ///     寰呮鏁伴噺
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB029")]
+    public decimal? Dhb029 { get; set; }
+
+   /// <summary>
+   ///     妫�楠屾棩鏈�
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB030")]
+    public string Dhb030 { get; set; }
+
+   /// <summary>
+   ///     妫�楠屽憳
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB031")]
+    public string Dhb031 { get; set; }
+
+   /// <summary>
+   ///     鍏ュ簱鏁伴噺
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB032")]
+    public decimal? Dhb032 { get; set; }
+
+   /// <summary>
+   ///     鍏ュ簱浜�
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB033")]
+    public string Dhb033 { get; set; }
+
+   /// <summary>
+   ///     鍏ュ簱鏃堕棿
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB034")]
+    public string Dhb034 { get; set; }
+
+   /// <summary>
+   ///     閫�璐ф暟閲�
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB035")]
+    public decimal? Dhb035 { get; set; }
+
+   /// <summary>
+   ///     ERPID
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB037")]
+    public decimal? Dhb037 { get; set; }
+
+   /// <summary>
+   ///     閫�璐т汉
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB036")]
+    public string Dhb036 { get; set; }
+
+   /// <summary>
+   ///     ERP鍘熷垎褰曞彿
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB038")]
+    public decimal? Dhb038 { get; set; }
+
+   /// <summary>
+   ///     ERP婧愬崟鍐呯爜
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB039")]
+    public decimal? Dhb039 { get; set; }
+
+   /// <summary>
+   ///     ERP婧愬崟绫诲瀷
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB040")]
+    public decimal? Dhb040 { get; set; }
+
+   /// <summary>
+   ///     ERP璁㈠崟鍐呯爜
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB041")]
+    public decimal? Dhb041 { get; set; }
+
+   /// <summary>
+   ///     鑷鍒�
+   /// </summary>
+   [SugarColumn(ColumnName = "ID")]
+    public decimal? Id { get; set; }
+
+   /// <summary>
+   ///     鏄惁妫�楠岋紝1涓哄凡妫�
+   /// </summary>
+   [SugarColumn(ColumnName = "ISCHECK")]
+    public decimal? Ischeck { get; set; }
+
+   /// <summary>
+   ///     浠撳簱
+   /// </summary>
+   [SugarColumn(ColumnName = "DHB042")]
+    public string Dhb042 { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Modes/Purdka.cs b/MES.Service/Modes/Purdka.cs
new file mode 100644
index 0000000..1c3ea40
--- /dev/null
+++ b/MES.Service/Modes/Purdka.cs
@@ -0,0 +1,130 @@
+锘縰sing SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+///     閫�鏂欏崟澶�
+/// </summary>
+[SugarTable("PURDKA")]
+public class Purdka
+{
+   /// <summary>
+   ///     鑷鍒�
+   /// </summary>
+   [SugarColumn(ColumnName = "ID")]
+    public decimal? Id { get; set; }
+
+   /// <summary>
+   ///     鍒涘缓浜哄憳
+   /// </summary>
+   [SugarColumn(ColumnName = "CREATEUSER")]
+    public string Createuser { get; set; }
+
+   /// <summary>
+   ///     鍒涘缓鏃堕棿
+   /// </summary>
+   [SugarColumn(ColumnName = "CREATETIME")]
+    public string Createtime { get; set; }
+
+   /// <summary>
+   ///     淇敼鏃堕棿
+   /// </summary>
+   [SugarColumn(ColumnName = "MODIFYTIME")]
+    public string Modifytime { get; set; }
+
+   /// <summary>
+   ///     淇敼浜哄憳
+   /// </summary>
+   [SugarColumn(ColumnName = "MODIFYUSER")]
+    public string Modifyuser { get; set; }
+
+   /// <summary>
+   ///     瀹℃牳
+   /// </summary>
+   [SugarColumn(ColumnName = "AUDITING")]
+    public string Auditing { get; set; }
+
+   /// <summary>
+   ///     閫�璐у崟鍙�
+   /// </summary>
+   [SugarColumn(ColumnName = "DKA001")]
+    public string Dka001 { get; set; }
+
+   /// <summary>
+   ///     閫�璐х被鍨�
+   /// </summary>
+   [SugarColumn(ColumnName = "DKA002")]
+    public string Dka002 { get; set; }
+
+   /// <summary>
+   ///     閫�璐ф棩鏈�
+   /// </summary>
+   [SugarColumn(ColumnName = "DKA003")]
+    public string Dka003 { get; set; }
+
+   /// <summary>
+   ///     閫�璐ф椂闂�
+   /// </summary>
+   [SugarColumn(ColumnName = "DKA004")]
+    public string Dka004 { get; set; }
+
+   /// <summary>
+   ///     渚涘簲鍟�
+   /// </summary>
+   [SugarColumn(ColumnName = "DKA005")]
+    public string Dka005 { get; set; }
+
+   /// <summary>
+   ///     渚涘簲鍟嗗悕绉�
+   /// </summary>
+   [SugarColumn(ColumnName = "DKA006")]
+    public string Dka006 { get; set; }
+
+   /// <summary>
+   ///     閮ㄩ棬
+   /// </summary>
+   [SugarColumn(ColumnName = "DKA007")]
+    public string Dka007 { get; set; }
+
+   /// <summary>
+   ///     瀹℃牳鑰�
+   /// </summary>
+   [SugarColumn(ColumnName = "DKA008")]
+    public string Dka008 { get; set; }
+
+   /// <summary>
+   ///     瀹℃牳鏃ユ湡
+   /// </summary>
+   [SugarColumn(ColumnName = "DKA009")]
+    public string Dka009 { get; set; }
+
+   /// <summary>
+   ///     閫�璐х姸鎬侊紝0鎴栫┖涓烘湭閫�璐э紝1涓哄凡閫�瀹�
+   /// </summary>
+   [SugarColumn(ColumnName = "DKA010")]
+    public string Dka010 { get; set; }
+
+   /// <summary>
+   ///     ERPID
+   /// </summary>
+   [SugarColumn(ColumnName = "ERPID")]
+    public decimal? Erpid { get; set; }
+
+   /// <summary>
+   ///     淇濈鍛樼紪鐮�
+   /// </summary>
+   [SugarColumn(ColumnName = "DKA011")]
+    public string Dka011 { get; set; }
+
+   /// <summary>
+   ///     楠屾敹鍛樼紪鐮�
+   /// </summary>
+   [SugarColumn(ColumnName = "DKA012")]
+    public string Dka012 { get; set; }
+
+   /// <summary>
+   ///     鏄惁鎺ㄩ�佺孩瀛楀叆搴�1-鎺ㄩ�侊紝0-鏈帹閫�
+   /// </summary>
+   [SugarColumn(ColumnName = "DKA013")]
+    public decimal? Dka013 { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Modes/Purdkb.cs b/MES.Service/Modes/Purdkb.cs
new file mode 100644
index 0000000..6a0cb38
--- /dev/null
+++ b/MES.Service/Modes/Purdkb.cs
@@ -0,0 +1,142 @@
+锘縰sing SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+///     閫�鏂欏崟瀛愯〃
+/// </summary>
+[SugarTable("PURDKB")]
+public class Purdkb
+{
+    /// <summary>
+    ///     鑷鍒�
+    /// </summary>
+    [SugarColumn(ColumnName = "ID")]
+    public decimal? Id { get; set; }
+
+    /// <summary>
+    ///     瀹℃牳
+    /// </summary>
+    [SugarColumn(ColumnName = "AUDITING")]
+    public string Auditing { get; set; }
+
+    /// <summary>
+    ///     鍒涘缓鏃堕棿
+    /// </summary>
+    [SugarColumn(ColumnName = "CREATETIME")]
+    public string Createtime { get; set; }
+
+    /// <summary>
+    ///     鍒涘缓浜哄憳
+    /// </summary>
+    [SugarColumn(ColumnName = "CREATEUSER")]
+    public string Createuser { get; set; }
+
+    /// <summary>
+    ///     鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "DKB001")]
+    public string Dkb001 { get; set; }
+
+    /// <summary>
+    ///     搴忓彿
+    /// </summary>
+    [SugarColumn(ColumnName = "DKB002")]
+    public string Dkb002 { get; set; }
+
+    /// <summary>
+    ///     鐗╂枡缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "DKB003")]
+    public string Dkb003 { get; set; }
+
+    /// <summary>
+    ///     鐗╂枡鍚嶇О
+    /// </summary>
+    [SugarColumn(ColumnName = "DKB004")]
+    public string Dkb004 { get; set; }
+
+    /// <summary>
+    ///     鐗╂枡瑙勬牸
+    /// </summary>
+    [SugarColumn(ColumnName = "DKB005")]
+    public string Dkb005 { get; set; }
+
+    /// <summary>
+    ///     搴旈��鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "DKB006")]
+    public decimal? Dkb006 { get; set; }
+
+    /// <summary>
+    ///     瀹為��鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "DKB007")]
+    public decimal? Dkb007 { get; set; }
+
+    /// <summary>
+    ///     寰呴��鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "DKB008")]
+    public decimal? Dkb008 { get; set; }
+
+    /// <summary>
+    ///     鍗曚綅
+    /// </summary>
+    [SugarColumn(ColumnName = "DKB009")]
+    public string Dkb009 { get; set; }
+
+    /// <summary>
+    ///     鍗曚环
+    /// </summary>
+    [SugarColumn(ColumnName = "DKB010")]
+    public decimal? Dkb010 { get; set; }
+
+    /// <summary>
+    ///     閲戦
+    /// </summary>
+    [SugarColumn(ColumnName = "DKB011")]
+    public decimal? Dkb011 { get; set; }
+
+    /// <summary>
+    ///     鏉ユ簮鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "DKB012")]
+    public string Dkb012 { get; set; }
+
+    /// <summary>
+    ///     鏉ユ簮搴忓彿
+    /// </summary>
+    [SugarColumn(ColumnName = "DKB013")]
+    public string Dkb013 { get; set; }
+
+    /// <summary>
+    ///     涓嶈壇鍒嗙被
+    /// </summary>
+    [SugarColumn(ColumnName = "DKB014")]
+    public string Dkb014 { get; set; }
+
+    /// <summary>
+    ///     涓嶈壇椤圭洰
+    /// </summary>
+    [SugarColumn(ColumnName = "DKB015")]
+    public string Dkb015 { get; set; }
+
+    /// <summary>
+    ///     浠撳簱缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "DKB016")]
+    public string Dkb016 { get; set; }
+
+    /// <summary>
+    ///     澶囨敞
+    /// </summary>
+    [SugarColumn(ColumnName = "DKB017")]
+    public string Dkb017 { get; set; }
+
+    /// <summary>
+    ///     浠撳簱鍚嶇О
+    /// </summary>
+    [SugarColumn(ColumnName = "DKB018")]
+    public string Dkb018 { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/service/GetErpParametersServer.cs b/MES.Service/service/GetErpParametersServer.cs
new file mode 100644
index 0000000..0c7ab66
--- /dev/null
+++ b/MES.Service/service/GetErpParametersServer.cs
@@ -0,0 +1,179 @@
+锘縰sing System.Text;
+using System.Web;
+using MES.Service.Dto.service;
+using MES.Service.Modes;
+using MES.Service.service.Warehouse;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace MES.Service.service;
+
+public class GetErpParametersServer
+{
+    private readonly MesInvItemInCDetailsManager _invItemInCDetailsServer =
+        new();
+
+    private readonly MesInvItemOutsManager _invItemOutsServer =
+        new();
+
+    private readonly MessageCenterManager _messageCenterServer = new();
+
+    public List<MessageCenter> GetErpParameters(List<MessageCenter> data)
+    {
+        var centers = new List<MessageCenter>();
+
+        //鑾峰彇涓昏姹�
+        var center = data.Find(p => p.Seq == 1);
+
+        //瑙f瀽URL
+        var queryString =
+            center.PageName.Substring(center.PageName.IndexOf('?') + 1);
+        //鎻愬彇鍙傛暟
+        var queryParameters = HttpUtility.ParseQueryString(queryString);
+
+        var strings = center.TableName.Split("_");
+
+        MessageCenter mesToErp = null;
+        var query = new WarehouseQuery();
+        switch (center.TableName)
+        {
+            //閲囪喘鍏ュ簱鍗曞鏍�
+            case "MES_INV_ITEM_INS_A":
+            //閲囪喘鍏ュ簱鍗曞弽瀹℃牳
+            case "MES_INV_ITEM_INS_B":
+
+                //鑾峰彇鍒扮被鍨嬶紙瀹℃牳杩樻槸鍙嶅鏍革級
+                query.Type = strings[^1];
+                //鑾峰彇url涓檮甯︾殑鍙傛暟
+                query.id = Convert.ToDecimal(queryParameters["id"]);
+                query.billNo = queryParameters["billNo"];
+                //閲嶆柊鑾峰彇璇锋眰鐨勬暟鎹�
+                mesToErp = _invItemInCDetailsServer.MesToErpParam(query);
+                //璧嬪�间富id
+                mesToErp.Id = center.Id;
+                centers.Add(mesToErp);
+
+                //鏇存柊鍓╀笅鐨勮姹傜殑鍙傛暟
+                var messageCenter = data[0];
+                var json = new JObject
+                {
+                    new JProperty("id", query.id),
+                    new JProperty("billNo", query.billNo)
+                };
+                messageCenter.Data = json.ToString();
+                centers.Add(messageCenter);
+
+                break;
+
+            //閲囪喘閫�鏂欏崟瀹℃牳
+            case "MES_INV_ITEM_OUTS_A":
+            //閲囪喘閫�鏂欏崟鍙嶅鏍�
+            case "MES_INV_ITEM_OUTS_B":
+
+                //鑾峰彇鍒扮被鍨嬶紙瀹℃牳杩樻槸鍙嶅鏍革級
+                query.Type = strings[^1];
+                query.id = Convert.ToDecimal(queryParameters["id"]);
+                query.billNo = queryParameters["itemOutNo"];
+
+                //閲嶆柊鑾峰彇璇锋眰鐨勬暟鎹�
+                mesToErp = _invItemOutsServer.MesToErpParam(query);
+                //鏇存涓轰富id
+                mesToErp.Id = center.Id;
+                //娣诲姞鍒拌姹傞泦鍚堜腑
+                centers.Add(mesToErp);
+
+                //鑾峰彇鍓╀綑鐨勮姹�
+                var find = data.FindAll(s => s.Seq != 1);
+                var result = new JObject
+                {
+                    new JProperty("id", query.id),
+                    new JProperty("billNo", query.billNo)
+                };
+                find.ForEach(s =>
+                {
+                    s.Data = result.ToString();
+                    centers.Add(s);
+                });
+                break;
+            default:
+                throw new Exception("鏃犳硶璇嗗埆TableName绫诲瀷");
+        }
+
+        //鏍规嵁椤哄簭杩斿洖
+        return centers.OrderBy(p => p.Seq).ToList();
+    }
+
+
+    public string Resend(MessageCenter data)
+    {
+        //鑾峰彇鎵�鏈夌殑鍥炶皟
+        var messageCenters =
+            _messageCenterServer.GetList(it => it.Pid == data.Id);
+        messageCenters.Add(data);
+        var erpParameters = GetErpParameters(messageCenters);
+
+        return sendHttp(erpParameters).Result;
+    }
+
+
+    private async Task<string> sendHttp(List<MessageCenter> requestList)
+    {
+        var sortedRequests = requestList.OrderBy(r => r.Seq).ToList();
+
+        using var httpClient = new HttpClient();
+
+        var responses = "";
+
+        foreach (var request in sortedRequests)
+        {
+            var httpRequestMessage = new HttpRequestMessage
+            {
+                Method = new HttpMethod(request.Method),
+                RequestUri = new Uri(request.Url),
+                Content = new StringContent(request.Data, Encoding.UTF8,
+                    request.ContentType)
+            };
+
+            var response =
+                await httpClient.SendAsync(httpRequestMessage);
+            var responseData = await response.Content.ReadAsStringAsync();
+
+            var result = JsonConvert.DeserializeObject<Result>(responseData);
+
+            responses += result.msg + "!!!";
+            responses += result.message + "!!!";
+
+            if ("500".Equals(result.state))
+            {
+                responses = "杩斿洖鎶ラ敊锛�" + responses;
+                return responses;
+            }
+
+            if ("1".Equals(result.status))
+            {
+                responses = "杩斿洖鎶ラ敊锛�" + responses;
+                return responses;
+            }
+
+            request.Result = 1;
+            request.ResultData = result.msg;
+            request.Status = 1;
+            request.DealWith = 1;
+
+            _messageCenterServer.ResetUpdate(request);
+        }
+
+        responses = "閲嶆帹鎴愬姛锛�" + responses;
+        return responses;
+    }
+}
+
+public class Result
+{
+    public string? state { get; set; }
+    public string? msg { get; set; }
+
+    public string? status { get; set; }
+
+    public string? message { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/service/Warehouse/MesInvItemArnDetailManager.cs b/MES.Service/service/Warehouse/MesInvItemArnDetailManager.cs
new file mode 100644
index 0000000..c827092
--- /dev/null
+++ b/MES.Service/service/Warehouse/MesInvItemArnDetailManager.cs
@@ -0,0 +1,206 @@
+锘縰sing MES.Service.DB;
+using MES.Service.Dto.service;
+using MES.Service.Modes;
+using SqlSugar;
+
+namespace MES.Service.service.Warehouse;
+
+public class MesInvItemArnDetailManager : Repository<MesInvItemArnDetail>
+{
+    //var result = db.Ado.GetString($"SELECT f_getseqnextvalue('{sequenceName}') FROM DUAL");
+
+    private readonly PurdhbManager purdhbManager = new();
+    private readonly PurdkaManager purdkaManager = new();
+    private readonly PurdkbManager purdkbManager = new();
+
+    private readonly MesQaItemsDetect01Manager rohInDataManager = new();
+    //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
+
+    //杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 MesInvItemArnDetailManager.cs
+
+    public List<MesInvItemArnDetail> GetDetails(WarehouseQuery query)
+    {
+        // 鏌ヨ
+        return Db.Queryable<MesInvItemArnDetail, MesItems, MesUnit>(
+                (c, t, u) => new object[]
+                {
+                    JoinType.Left,
+                    c.ItemNo == t.ItemNo && c.Company == t.Company &&
+                    c.Factory == t.Factory,
+                    JoinType.Left,
+                    t.Fpurchaseunitid == u.Id && t.Factory == u.Factory &&
+                    t.Company == u.Company
+                })
+            .Where((c, t, u) => c.Mid == query.id)
+            .Select((c, t, u) => new MesInvItemArnDetail
+            {
+                CheckRes = c.CheckRes,
+                itemModel = t.ItemModel,
+                itemName = t.ItemName,
+                UrgentFlag = c.UrgentFlag,
+                Memo = c.Memo,
+                Quantity = c.Quantity,
+                SubQty = c.SubQty,
+                CheckStates = c.CheckStates,
+                WorkLine = c.WorkLine,
+                IsdepsIn = c.IsdepsIn,
+                OkRkqty = c.OkRkqty,
+                Fname = u.Fname,
+                EbelnQty = c.EbelnQty,
+                ItemNo = c.ItemNo,
+                Id = c.Id,
+                Ebeln = c.Ebeln
+            })
+            .ToList();
+    }
+
+    public List<Material> GetMaterial(WarehouseQuery query)
+    {
+        // 鏌ヨ
+        var result = Db
+            .Queryable<MesQaItemsDetect01, MesInvItemArn, MesInvItemArnDetail,
+                MesItems, MesUnit>(
+                (a, d, b, c, t) => new object[]
+                {
+                    JoinType.Inner, d.BillNo == a.LotNo,
+                    JoinType.Inner, d.Id == b.Mid && b.ItemNo == a.ItemNo,
+                    JoinType.Inner,
+                    a.ItemNo == c.ItemNo && a.Company == c.Company &&
+                    a.Factory == c.Factory,
+                    JoinType.Inner, c.Fpurchaseunitid == t.Id
+                })
+            .Where((a, d, b, c, t) => a.FngHandle == "閫�璐�" &&
+                                      query.ItemArnDetailIds.Contains(b.Id))
+            .Select((a, d, b, c, t) => new Material
+            {
+                FmrMode = a.Fmrmode,
+                FngDesc = a.FngDesc,
+                FsrcEntryId = b.Id,
+                FrmRealQty = b.Quantity,
+                FmaterialId = a.ItemNo,
+                FstockId = d.DepotsCode,
+                Funit = t.Fnumber,
+                FmesEntryId = a.Id,
+                Mid = d.Id
+            })
+            .ToList();
+
+        return result;
+    }
+
+    public bool SetMaterial(Material material)
+    {
+        var b1 = UseTransaction(db =>
+        {
+            var executeCommand = db.Updateable<MesInvItemArnDetail>()
+                .SetColumns(s => s.CheckRes == "涓嶅悎鏍�")
+                .SetColumns(s => s.CheckStates == "閫�璐�")
+                .SetColumns(s => s.Ischeck == 1)
+                .Where(s =>
+                    s.Mid == material.Mid && s.ItemNo == material.FmaterialId)
+                .ExecuteCommand();
+
+            var mesQaItemsDetect01 = db.Queryable<MesQaItemsDetect01>()
+                .Where(a => a.Id == material.FmesEntryId).Single();
+
+            if (mesQaItemsDetect01 == null) return 0;
+
+            var suppName = db.Queryable<MesSupplier>()
+                .Where(b => b.SuppNo == mesQaItemsDetect01.SuppNo)
+                .Select<string>(b => b.SuppName).First();
+
+            var CIdt = db.Ado.GetString(
+                "SELECT f_getseqnextvalue('mes_inv_item_ins') FROM DUAL");
+
+            var billNo = db.Ado.GetString(
+                "SELECT getbillcode1('1000', '1000', 'INV_IN_BACK') FROM DUAL");
+
+            // PURDKA
+            var purdka = GetPurdka(CIdt, billNo, mesQaItemsDetect01, suppName);
+
+            executeCommand += db.Insertable(purdka).ExecuteCommand();
+
+            executeCommand += InsertPurdkbs(db, mesQaItemsDetect01, billNo);
+
+            executeCommand += db.Updateable<MesQaItemsDetect01>()
+                .SetColumns(c => c.Modify1Flag == 1)
+                .SetColumns(c => c.Modify1By == material.UserName)
+                .SetColumns(c => c.Modify1Date == DateTime.Now)
+                .SetColumns(c => c.FngHandle == "閫�璐�")
+                .Where(c => c.ReleaseNo == mesQaItemsDetect01.ReleaseNo)
+                .ExecuteCommand();
+
+            return executeCommand;
+        }) >= 4;
+
+        if (b1 == false) throw new NotImplementedException("鎺ㄩ�佸け璐ワ紝Mes鏂归潰鍑虹幇闂");
+
+        return b1;
+    }
+
+    private int InsertPurdkbs(SqlSugarScope db,
+        MesQaItemsDetect01 mesQaItemsDetect01, string billNo)
+    {
+        var purdhbs = db.Queryable<Purdhb>()
+            .Where(c => c.Dhb001 == mesQaItemsDetect01.LotNo
+                        && c.Dhb003 == mesQaItemsDetect01.ItemNo)
+            .Select(c => new Purdhb
+            {
+                Dhb002 = c.Dhb002,
+                Dhb003 = c.Dhb003,
+                Dhb006 = c.Dhb006,
+                Dhb007 = c.Dhb007,
+                Dhb017 = c.Dhb017,
+                Dhb018 = c.Dhb018,
+                Dhb001 = c.Dhb001,
+                Dhb042 = c.Dhb042
+            }).ToList();
+
+        var list = new List<Purdkb>();
+
+        purdhbs.ForEach(s =>
+        {
+            var id = db.Ado.GetString(
+                "SELECT f_getseqnextvalue('MES_INV_ITEM_IN_C_DETAILS') FROM DUAL");
+
+            var purdkb = new Purdkb();
+            purdkb.Id = Convert.ToDecimal(id);
+            purdkb.Dkb001 = billNo;
+            purdkb.Dkb002 = s.Dhb002;
+            purdkb.Dkb003 = s.Dhb003;
+            purdkb.Dkb006 = s.Dhb006;
+            purdkb.Dkb007 = s.Dhb006;
+            purdkb.Dkb008 = 0;
+            purdkb.Dkb009 = s.Dhb007;
+            purdkb.Dkb010 = s.Dhb017;
+            purdkb.Dkb011 = s.Dhb018;
+            purdkb.Dkb012 = s.Dhb001;
+            purdkb.Dkb013 = s.Dhb002;
+            purdkb.Dkb016 = s.Dhb042;
+
+            list.Add(purdkb);
+        });
+
+        var insertRange = db.Insertable(list).ExecuteCommand();
+
+        return insertRange == purdhbs.Count ? 1 : 0;
+    }
+
+    private static Purdka GetPurdka(string CIdt, string billNo,
+        MesQaItemsDetect01 mesQaItemsDetect01, string suppName)
+    {
+        var date = DateTime.Now.ToString("yyyy-MM-dd");
+        var purdka = new Purdka();
+        purdka.Id = Convert.ToDecimal(CIdt);
+        purdka.Dka001 = billNo;
+        purdka.Dka002 = "閲囪喘閫�璐�";
+        purdka.Dka003 = date;
+        purdka.Dka004 = date;
+        purdka.Dka005 = mesQaItemsDetect01.SuppNo;
+        purdka.Dka006 = suppName;
+        purdka.Dka010 = "1";
+        purdka.Dka013 = 0;
+        purdka.Createuser = mesQaItemsDetect01.LastupdateBy;
+        return purdka;
+    }
+}
\ No newline at end of file
diff --git a/MES.Service/service/Warehouse/MesInvItemArnManager.cs b/MES.Service/service/Warehouse/MesInvItemArnManager.cs
new file mode 100644
index 0000000..c382c5c
--- /dev/null
+++ b/MES.Service/service/Warehouse/MesInvItemArnManager.cs
@@ -0,0 +1,66 @@
+锘縰sing MES.Service.DB;
+using MES.Service.Dto.service;
+using MES.Service.Modes;
+using SqlSugar;
+
+namespace MES.Service.service.Warehouse;
+
+public class MesInvItemArnManager : Repository<MesInvItemArn>
+{
+    //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
+
+    //杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 MesInvItemArnManager.cs
+    public List<MesInvItemArn> GetPagedResults(WarehouseQuery query)
+    {
+        // 鏌ヨ骞跺垎椤�
+        var result = Db.Queryable<MesInvItemArn, MesDepots, MesSupplier>(
+                (a, d, f) => new object[]
+                {
+                    JoinType.Left,
+                    a.DepotsCode == d.DepotCode && d.Factory == a.Factory &&
+                    d.Company == a.Company,
+                    JoinType.Left, a.SuppNo == f.SuppNo
+                })
+            .Where((a, d, f) => a.BillTypeId == 700
+                                && a.TransctionNo == "701"
+                                && a.Factory == "1000"
+                                && a.Company == "1000"
+                                && a.IsVisual == 0)
+            .WhereIF(query.id != null, (a, d, f) => a.Id == query.id)
+            .Select((a, d, f) => new MesInvItemArn
+            {
+                Status = a.Status,
+                SuppNo = a.SuppNo,
+                FType = a.FType,
+                Fstatus = a.Fstatus,
+                Remark = a.Remark,
+                Insdate = a.Insdate,
+                CheckDate = a.CheckDate,
+                DepotsCode = a.DepotsCode,
+                Id = a.Id,
+                UrgentFlag = a.UrgentFlag,
+                CreateBy = a.CreateBy,
+                BillNo = a.BillNo,
+                PaperBillNo = a.PaperBillNo,
+                DepotName = d.DepotName,
+                SuppName = f.SuppName
+            }).OrderByDescending(a => a.BillNo)
+            .ToPageList(query.PageIndex, query.Limit);
+
+        return result;
+    }
+
+    public List<MesSupplier> GetSuppliers()
+    {
+        return Db.Queryable<MesInvItemArn, MesSupplier>((a, b) =>
+                new JoinQueryInfos(JoinType.Left, a.SuppNo == b.SuppNo))
+            .GroupBy((a, b) => new { b.Id, a.SuppNo, b.SuppName })
+            .Select((a, b) => new MesSupplier
+            {
+                SuppNo = a.SuppNo,
+                SuppName = b.SuppName,
+                Id = b.Id
+            })
+            .ToList();
+    }
+}
\ No newline at end of file
diff --git a/MES.Service/service/Warehouse/MesInvItemBarcodesManager.cs b/MES.Service/service/Warehouse/MesInvItemBarcodesManager.cs
new file mode 100644
index 0000000..836f395
--- /dev/null
+++ b/MES.Service/service/Warehouse/MesInvItemBarcodesManager.cs
@@ -0,0 +1,78 @@
+锘縰sing MES.Service.DB;
+using MES.Service.Modes;
+using SqlSugar;
+
+namespace MES.Service.service.Warehouse;
+
+public class MesInvItemBarcodesManager : Repository<MesInvItemBarcodes>
+{
+    //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
+
+    //杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 MesInvItemBarcodesManager.cs
+
+
+    #region 鏁欏鏂规硶
+
+    /// <summary>
+    ///     浠撳偍鏂规硶婊¤冻涓嶄簡澶嶆潅涓氬姟闇�姹傦紝涓氬姟浠g爜璇峰湪杩欓噷闈㈠畾涔夋柟娉�
+    /// </summary>
+    public void Study()
+    {
+        /*********鏌ヨ*********/
+
+        var data1 = base.GetById(1); //鏍规嵁ID鏌ヨ
+        var data2 = base.GetList(); //鏌ヨ鎵�鏈�
+        var data3 = base.GetList(it => 1 == 1); //鏍规嵁鏉′欢鏌ヨ  
+        //var data4 = base.GetSingle(it => 1 == 1);//鏍规嵁鏉′欢鏌ヨ涓�鏉�,濡傛灉瓒呰繃涓�鏉′細鎶ラ敊
+
+        var p = new PageModel { PageIndex = 1, PageSize = 2 }; // 鍒嗛〉鏌ヨ
+        var data5 = base.GetPageList(it => 1 == 1, p);
+        Console.Write(p.TotalCount); //杩斿洖鎬绘暟
+
+        var data6 =
+            base.GetPageList(it => 1 == 1, p,
+                it => SqlFunc.GetRandom()); // 鍒嗛〉鏌ヨ鍔犳帓搴�
+        Console.Write(p.TotalCount); //杩斿洖鎬绘暟
+
+        var conModels = new List<IConditionalModel>(); //缁勮鏉′欢鏌ヨ浣滀负鏉′欢瀹炵幇 鍒嗛〉鏌ヨ鍔犳帓搴�
+        conModels.Add(new ConditionalModel
+        {
+            FieldName = typeof(MesInvItemBarcodes).GetProperties()[0].Name,
+            ConditionalType = ConditionalType.Equal, FieldValue = "1"
+        }); //id=1
+        var data7 = base.GetPageList(conModels, p, it => SqlFunc.GetRandom());
+
+        AsQueryable().Where(x => 1 == 1)
+            .ToList(); //鏀寔浜嗚浆鎹㈡垚queryable,鎴戜滑鍙互鐢╭ueryable瀹炵幇澶嶆潅鍔熻兘
+
+
+        /*********鎻掑叆*********/
+        var insertData = new MesInvItemBarcodes(); //娴嬭瘯鍙傛暟
+        var insertArray = new[] { insertData };
+        base.Insert(insertData); //鎻掑叆
+        base.InsertRange(insertArray); //鎵归噺鎻掑叆
+        var id = base.InsertReturnIdentity(insertData); //鎻掑叆杩斿洖鑷鍒�
+        AsInsertable(insertData).ExecuteCommand(); //鎴戜滑鍙互杞垚 Insertable瀹炵幇澶嶆潅鎻掑叆
+
+
+        /*********鏇存柊*********/
+        var updateData = new MesInvItemBarcodes(); //娴嬭瘯鍙傛暟
+        var updateArray = new[] { updateData }; //娴嬭瘯鍙傛暟
+        base.Update(updateData); //鏍规嵁瀹炰綋鏇存柊
+        base.UpdateRange(updateArray); //鎵归噺鏇存柊
+        //base.Update(it => new MesInvItemBarcodes() { ClassName = "a", CreateTime = DateTime.Now }, it => it.id==1);// 鍙洿鏂癈lassName鍒楀拰CreateTime鍒楋紝鍏跺畠鍒椾笉鏇存柊锛屾潯浠秈d=1
+        AsUpdateable(updateData).ExecuteCommand(); //杞垚Updateable鍙互瀹炵幇澶嶆潅鐨勬彃鍏�
+
+
+        /*********鍒犻櫎*********/
+        var deldata = new MesInvItemBarcodes(); //娴嬭瘯鍙傛暟
+        base.Delete(deldata); //鏍规嵁瀹炰綋鍒犻櫎
+        base.DeleteById(1); //鏍规嵁涓婚敭鍒犻櫎
+        base.DeleteById(new[] { 1, 2 }); //鏍规嵁涓婚敭鏁扮粍鍒犻櫎
+        base.Delete(it => 1 == 2); //鏍规嵁鏉′欢鍒犻櫎
+        AsDeleteable().Where(it => 1 == 2)
+            .ExecuteCommand(); //杞垚Deleteable瀹炵幇澶嶆潅鐨勬搷浣�
+    }
+
+    #endregion
+}
\ No newline at end of file
diff --git a/MES.Service/service/Warehouse/MesInvItemInCDetailsManager.cs b/MES.Service/service/Warehouse/MesInvItemInCDetailsManager.cs
new file mode 100644
index 0000000..48f5973
--- /dev/null
+++ b/MES.Service/service/Warehouse/MesInvItemInCDetailsManager.cs
@@ -0,0 +1,292 @@
+锘縰sing System.Data;
+using MES.Service.DB;
+using MES.Service.Dto.service;
+using MES.Service.Modes;
+using MES.Service.util;
+using Newtonsoft.Json;
+using SqlSugar;
+using DbType = System.Data.DbType;
+
+namespace MES.Service.service.Warehouse;
+
+public class MesInvItemInCDetailsManager : Repository<MesInvItemInCDetails>
+{
+    //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
+
+    public PurchaseInventory SaveBarCodes(WarehouseQuery entity)
+    {
+        // 閲囪喘鍏ュ簱[FILED3[userName[sectionCode[barcode
+        var inputParam = "閲囪喘鍏ュ簱[FILED3[" + entity.userName + "[" +
+                         entity.sectionCode + "[" + entity.barcode;
+
+        // 瀹氫箟杈撳嚭鍙傛暟
+        var outputParam = new SugarParameter("c_result", null,
+            DbType.String, ParameterDirection.Output,
+            4000);
+
+        // 浣跨敤 SqlSugar 鎵ц瀛樺偍杩囩▼
+        Db.Ado.ExecuteCommand(
+            "BEGIN prc_rf_pda_scan_in_barcode_N(:c_in_str, :c_result); END;",
+            new SugarParameter("c_in_str", inputParam,
+                DbType.String), outputParam);
+
+        // 鑾峰彇杈撳嚭鍙傛暟鐨勫��
+        var resultValue = outputParam.Value?.ToString();
+
+// 鏍规嵁杩斿洖鍊煎鐞嗛�昏緫
+        if (resultValue.StartsWith("001"))
+        {
+            // 鎴彇骞跺鐞嗙粨鏋�
+            // 鍘绘帀鍓嶇紑 "001[" 鍜屾渶鍚庣殑 "]"
+            var content = resultValue.Substring(4).TrimEnd(']');
+            // 鎻愬彇绗竴涓�楀彿涔嬪墠鐨勯儴鍒�
+            var parts = content.Split(',');
+
+
+            var mesInvItemInCDetails =
+                base.GetSingle(it => it.ItemBarcode == entity.barcode);
+
+            if (mesInvItemInCDetails == null)
+                throw new Exception("鐗╂枡鍏ュ簱鏉$爜鏄庣粏涓嶅瓨鍦�"); // 鎶涘嚭寮傚父浠ヤ緵鍓嶅彴澶勭悊
+
+            var itemInId = mesInvItemInCDetails.ItemInId;
+            entity.id = itemInId;
+            entity.PageIndex = 1;
+            entity.Limit = 1;
+
+            var inventory = getPurchaseInventory(entity);
+            inventory.ItemNo = parts[0];
+            inventory.SumQuantity = Convert.ToDecimal(parts[1]);
+            return inventory;
+        }
+
+        if (resultValue.StartsWith("002"))
+        {
+            // 鎻愬彇骞舵姏鍑哄紓甯镐俊鎭�
+            var errorMessage = resultValue.Substring(4); // 鑾峰彇 "002" 鍚庨潰鐨勯儴鍒�
+            throw new Exception(errorMessage); // 鎶涘嚭寮傚父浠ヤ緵鍓嶅彴澶勭悊
+        }
+
+        throw new Exception("鏈煡閿欒: " + resultValue);
+    }
+
+
+    public PurchaseInventory getPurchaseInventory(WarehouseQuery query)
+    {
+        return new PurchaseInventory
+        {
+            ItemIns = GetInvItemInsList(query)[0],
+            ItemInDetails = GetItemInDetails(query.id),
+            InvItemInCDetails = GetInvItemInCDetails(query.id)
+        };
+    }
+
+    public List<MesInvItemIns> GetInvItemInsList(WarehouseQuery query)
+    {
+        return Db.Queryable<MesInvItemIns, MesDepots, MesSupplier>((a, b, c) =>
+                new JoinQueryInfos(JoinType.Left, a.DepotsCode == b.DepotCode
+                                                  && b.Factory == a.Factory
+                                                  && b.Company == a.Company,
+                    JoinType.Left, a.SuppNo == c.SuppNo))
+            .WhereIF(query.id > 0, (a, b, c) => a.Id == query.id)
+            .Select((a, b, c) => new MesInvItemIns
+            {
+                Id = a.Id,
+                SuppNo = a.SuppNo,
+                InsDate = a.InsDate,
+                PaperBillNo = a.PaperBillNo,
+                Remark = a.Remark,
+                DepotsCode = a.DepotsCode,
+                CbillNo = a.CbillNo,
+                Status = a.Status,
+                BillNo = a.BillNo,
+                CreateDate = a.CreateDate,
+                CreateBy = a.CreateBy,
+                DepotName = b.DepotName,
+                SuppName = c.SuppName
+            }).ToPageList(query.PageIndex, query.Limit);
+    }
+
+    public List<MesInvItemInCItems> GetItemInDetails(decimal? pid)
+    {
+        var result = Db.Queryable<MesInvItemInCItems>()
+            .WhereIF(pid > 0, g => g.ItemInId == pid).ToList();
+
+        return result;
+    }
+
+    public List<MesInvItemInCDetails> GetInvItemInCDetails(decimal? pid)
+    {
+        var result = Db.Queryable<MesInvItemInCDetails, MesItems, MesUnit>(
+                (g, c, d) => new JoinQueryInfos(
+                    JoinType.Left,
+                    g.ItemNo == c.ItemNo && g.Company == c.Company &&
+                    g.Factory == c.Factory, JoinType.Inner,
+                    d.Id == Convert.ToDecimal(c.ItemUnit)
+                )
+            ).WhereIF(pid > 0, (g, c, d) => g.ItemInId == pid)
+            .Select((g, c, d) => new MesInvItemInCDetails
+            {
+                Id = g.Id,
+                ItemName = c.ItemName,
+                ItemModel = c.ItemModel,
+                ItemUnit = d.Fname,
+                DepotSectionCode = g.DepotSectionCode,
+                CbillNo = g.CbillNo,
+                ItemBarcode = g.ItemBarcode,
+                UrgentFlag = g.UrgentFlag,
+                ItemNo = g.ItemNo,
+                WorkNo = g.WorkNo,
+                Quantity = g.Quantity
+            })
+            .ToList();
+
+        return result;
+    }
+
+    public MessageCenter MesToErpParam(WarehouseQuery query)
+    {
+        var erpParameters = "";
+        var title = "";
+        var tableName = "MES_INV_ITEM_INS_" + query.Type;
+        if ("A".Equals(query.Type))
+        {
+            erpParameters = GetErpParameters(query.billNo);
+            title = "閲囪喘鍏ュ簱鍗�" + query.billNo + "瀹℃牳";
+        }
+        else if ("B".Equals(query.Type))
+        {
+            erpParameters = GetDeApprovePam(query.id);
+            title = "閲囪喘鍏ュ簱鍗�" + query.billNo + "鍙嶅鏍�";
+        }
+
+        var ErpUrl = AppsettingsUtility.Settings.ProductionErpUrl;
+        var message = new MessageCenter
+        {
+            TableName = tableName,
+            Url = ErpUrl,
+            Status = 1,
+            CreateBy = query.userName,
+            Route = query.billNo,
+            Title = title,
+            PageName = "Warehouse/PurchaseInventory/Add?id=" + query.id +
+                       "&billNo=" + query.billNo,
+            CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+            Method = "POST",
+            Seq = 1,
+            Data = erpParameters,
+            IsMessage = 0,
+            ContentType = "application/x-www-form-urlencoded"
+        };
+        return message;
+    }
+
+    public MessageCenter SaveMessageCenter(WarehouseQuery query)
+    {
+        var message = MesToErpParam(query);
+
+        var executeReturnIdentity =
+            Db.Insertable(message).ExecuteReturnIdentity();
+        if (executeReturnIdentity > 0)
+        {
+            message.Id = executeReturnIdentity;
+            message.Pid = executeReturnIdentity;
+            return message;
+        }
+
+        throw new Exception("鑾峰彇鏁版嵁澶辫触");
+    }
+
+    //audit
+    public bool audit(WarehouseQuery entity)
+    {
+        entity.date = DateTime.Now;
+        entity.status = 1;
+        return Update(entity);
+    }
+
+    public bool deApprove(WarehouseQuery entity)
+    {
+        entity.date = null;
+        entity.status = 0;
+        return Update(entity);
+    }
+
+    private bool Update(WarehouseQuery entity)
+    {
+        return Db.Updateable<MesInvItemIns>()
+            .SetColumns(x => x.Status == entity.status)
+            .SetColumns(x => x.InsDate == entity.date)
+            .Where(x => x.BillNo == entity.billNo)
+            .ExecuteCommand() > 0;
+    }
+
+    private string GetErpParameters(string? billNo)
+    {
+        var invItemIns = Db.Queryable<MesInvItemIns>()
+            .Single(x => x.BillNo == billNo);
+
+        if (invItemIns == null) throw new Exception("鍏ュ簱鍗曞彿涓嶅瓨鍦�");
+
+        if (invItemIns.Status == 1) throw new Exception("鍏ュ簱鍗曞凡瀹℃牳锛屼笉鑳介噸澶嶆帹閫�");
+
+        var materials = Db.Queryable<MesInvItemInCItems, MesItems, MesUnit,
+            MesInvItemArnDetail>(
+            (g, c, d, a) => new JoinQueryInfos(
+                JoinType.Left,
+                g.ItemNo == c.ItemNo && g.Company == c.Company &&
+                g.Factory == c.Factory, JoinType.Inner,
+                d.Id == Convert.ToDecimal(c.ItemUnit),
+                JoinType.Inner,
+                a.Ebeln == g.WorkNo && a.WorkLine == g.EbelnLineNo
+                                    && g.CbillNo == a.CbillNo
+            )
+        ).Where((g, c, d, a) => g.BillNo == billNo).Select<Material>(
+            (g, c, d, a) => new Material
+            {
+                FstockId = g.DepotCode,
+                FuintId = d.Fnumber,
+                FsrcEntryId = a.Id,
+                FmesEntryId = g.Id,
+                FmaterialId = a.ItemNo,
+                DepotSectionCode = g.DepotSectionCode,
+                WorkNo = g.WorkNo,
+                Frealqty = g.Quantity
+            }).ToList();
+
+
+        if (materials == null || materials.Count == 0)
+            throw new Exception("娌℃湁鎵惧埌鐩稿叧鏁版嵁"); // 鎶涘嚭寮傚父浠ヤ緵鍓嶅彴澶勭悊
+        // 鏋勯�� JSON
+
+        var jsonEntries = materials.Select(d => new
+        {
+            FMaterialId = d.FmaterialId,
+            FUintId = d.FuintId,
+            FRealQty = d.Frealqty,
+            FStockId = d.FstockId,
+            FSRCENTRYID = d.FsrcEntryId.ToString(),
+            F_MES_ENTRYID = d.FmesEntryId.ToString()
+        }).ToList();
+
+        var fdate = DateTime.Now.ToString("yyyy-MM-dd");
+
+        var jsonString = JsonConvert.SerializeObject(jsonEntries);
+        var encodedUrl = "taskname=CGRK&mesid=" + invItemIns.Id +
+                         "&optype=create&datajson={\"F_MES_ID\":\"" +
+                         invItemIns.Id + "\",\"FDate\":\"" + fdate +
+                         "\",\"cgrkentry\":" + jsonString + "}";
+
+        return encodedUrl;
+    }
+
+
+    private string GetDeApprovePam(decimal? id)
+    {
+        var sid = (int)id;
+        var encodedUrl = "taskname=CGRK&mesid=" + sid +
+                         "&optype=delete&datajson={}";
+
+        return encodedUrl;
+    }
+}
\ No newline at end of file
diff --git a/MES.Service/service/Warehouse/MesInvItemInCItemsManager.cs b/MES.Service/service/Warehouse/MesInvItemInCItemsManager.cs
new file mode 100644
index 0000000..fee3845
--- /dev/null
+++ b/MES.Service/service/Warehouse/MesInvItemInCItemsManager.cs
@@ -0,0 +1,82 @@
+锘縰sing MES.Service.DB;
+using MES.Service.Modes;
+using SqlSugar;
+
+namespace MES.Service.service.Warehouse;
+
+public class MesInvItemInCItemsManager : Repository<MesInvItemInCItems>
+{
+    //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
+
+    //杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 MesInvItemInCItemsManager.cs
+
+
+    #region 鏁欏鏂规硶
+
+    /// <summary>
+    ///     浠撳偍鏂规硶婊¤冻涓嶄簡澶嶆潅涓氬姟闇�姹傦紝涓氬姟浠g爜璇峰湪杩欓噷闈㈠畾涔夋柟娉�
+    /// </summary>
+    public void Study()
+    {
+        /*********鏌ヨ*********/
+
+        var data1 = base.GetById(1); //鏍规嵁ID鏌ヨ
+        var data2 = base.GetList(); //鏌ヨ鎵�鏈�
+        var data3 = base.GetList(it => 1 == 1); //鏍规嵁鏉′欢鏌ヨ  
+        //var data4 = base.GetSingle(it => 1 == 1);//鏍规嵁鏉′欢鏌ヨ涓�鏉�,濡傛灉瓒呰繃涓�鏉′細鎶ラ敊
+
+        var p = new PageModel { PageIndex = 1, PageSize = 2 }; // 鍒嗛〉鏌ヨ
+        var data5 = base.GetPageList(it => 1 == 1, p);
+        Console.Write(p.TotalCount); //杩斿洖鎬绘暟
+
+        var data6 = base.GetPageList(it => 1 == 1, p,
+            it => SqlFunc.GetRandom()); // 鍒嗛〉鏌ヨ鍔犳帓搴�
+        Console.Write(p.TotalCount); //杩斿洖鎬绘暟
+
+        var
+            conModels =
+                new List<IConditionalModel>(); //缁勮鏉′欢鏌ヨ浣滀负鏉′欢瀹炵幇 鍒嗛〉鏌ヨ鍔犳帓搴�
+        conModels.Add(new ConditionalModel
+        {
+            FieldName = typeof(MesInvItemInCItems).GetProperties()[0].Name,
+            ConditionalType = ConditionalType.Equal, FieldValue = "1"
+        }); //id=1
+        var data7 = base.GetPageList(conModels, p,
+            it => SqlFunc.GetRandom());
+
+        AsQueryable().Where(x => 1 == 1)
+            .ToList(); //鏀寔浜嗚浆鎹㈡垚queryable,鎴戜滑鍙互鐢╭ueryable瀹炵幇澶嶆潅鍔熻兘
+
+
+        /*********鎻掑叆*********/
+        var insertData = new MesInvItemInCItems(); //娴嬭瘯鍙傛暟
+        var insertArray = new[] { insertData };
+        base.Insert(insertData); //鎻掑叆
+        base.InsertRange(insertArray); //鎵归噺鎻掑叆
+        var id = base.InsertReturnIdentity(insertData); //鎻掑叆杩斿洖鑷鍒�
+        AsInsertable(insertData)
+            .ExecuteCommand(); //鎴戜滑鍙互杞垚 Insertable瀹炵幇澶嶆潅鎻掑叆
+
+
+        /*********鏇存柊*********/
+        var updateData = new MesInvItemInCItems(); //娴嬭瘯鍙傛暟
+        var updateArray = new[] { updateData }; //娴嬭瘯鍙傛暟
+        base.Update(updateData); //鏍规嵁瀹炰綋鏇存柊
+        base.UpdateRange(updateArray); //鎵归噺鏇存柊
+        //base.Update(it => new MesInvItemInCItems() { ClassName = "a", CreateTime = DateTime.Now }, it => it.id==1);// 鍙洿鏂癈lassName鍒楀拰CreateTime鍒楋紝鍏跺畠鍒椾笉鏇存柊锛屾潯浠秈d=1
+        AsUpdateable(updateData)
+            .ExecuteCommand(); //杞垚Updateable鍙互瀹炵幇澶嶆潅鐨勬彃鍏�
+
+
+        /*********鍒犻櫎*********/
+        var deldata = new MesInvItemInCItems(); //娴嬭瘯鍙傛暟
+        base.Delete(deldata); //鏍规嵁瀹炰綋鍒犻櫎
+        base.DeleteById(1); //鏍规嵁涓婚敭鍒犻櫎
+        base.DeleteById(new[] { 1, 2 }); //鏍规嵁涓婚敭鏁扮粍鍒犻櫎
+        base.Delete(it => 1 == 2); //鏍规嵁鏉′欢鍒犻櫎
+        AsDeleteable().Where(it => 1 == 2)
+            .ExecuteCommand(); //杞垚Deleteable瀹炵幇澶嶆潅鐨勬搷浣�
+    }
+
+    #endregion
+}
\ No newline at end of file
diff --git a/MES.Service/service/Warehouse/MesInvItemOutCDetailsManager.cs b/MES.Service/service/Warehouse/MesInvItemOutCDetailsManager.cs
new file mode 100644
index 0000000..4d40c63
--- /dev/null
+++ b/MES.Service/service/Warehouse/MesInvItemOutCDetailsManager.cs
@@ -0,0 +1,78 @@
+锘縰sing MES.Service.DB;
+using MES.Service.Modes;
+using SqlSugar;
+
+namespace MES.Service.service.Warehouse;
+
+public class MesInvItemOutCDetailsManager : Repository<MesInvItemOutCDetails>
+{
+    //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
+
+    //杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 MesInvItemOutCDetailsManager.cs
+
+
+    #region 鏁欏鏂规硶
+
+    /// <summary>
+    ///     浠撳偍鏂规硶婊¤冻涓嶄簡澶嶆潅涓氬姟闇�姹傦紝涓氬姟浠g爜璇峰湪杩欓噷闈㈠畾涔夋柟娉�
+    /// </summary>
+    public void Study()
+    {
+        /*********鏌ヨ*********/
+
+        var data1 = base.GetById(1); //鏍规嵁ID鏌ヨ
+        var data2 = base.GetList(); //鏌ヨ鎵�鏈�
+        var data3 = base.GetList(it => 1 == 1); //鏍规嵁鏉′欢鏌ヨ  
+        //var data4 = base.GetSingle(it => 1 == 1);//鏍规嵁鏉′欢鏌ヨ涓�鏉�,濡傛灉瓒呰繃涓�鏉′細鎶ラ敊
+
+        var p = new PageModel { PageIndex = 1, PageSize = 2 }; // 鍒嗛〉鏌ヨ
+        var data5 = base.GetPageList(it => 1 == 1, p);
+        Console.Write(p.TotalCount); //杩斿洖鎬绘暟
+
+        var data6 =
+            base.GetPageList(it => 1 == 1, p,
+                it => SqlFunc.GetRandom()); // 鍒嗛〉鏌ヨ鍔犳帓搴�
+        Console.Write(p.TotalCount); //杩斿洖鎬绘暟
+
+        var conModels = new List<IConditionalModel>(); //缁勮鏉′欢鏌ヨ浣滀负鏉′欢瀹炵幇 鍒嗛〉鏌ヨ鍔犳帓搴�
+        conModels.Add(new ConditionalModel
+        {
+            FieldName = typeof(MesInvItemOutCDetails).GetProperties()[0].Name,
+            ConditionalType = ConditionalType.Equal, FieldValue = "1"
+        }); //id=1
+        var data7 = base.GetPageList(conModels, p, it => SqlFunc.GetRandom());
+
+        AsQueryable().Where(x => 1 == 1)
+            .ToList(); //鏀寔浜嗚浆鎹㈡垚queryable,鎴戜滑鍙互鐢╭ueryable瀹炵幇澶嶆潅鍔熻兘
+
+
+        /*********鎻掑叆*********/
+        var insertData = new MesInvItemOutCDetails(); //娴嬭瘯鍙傛暟
+        var insertArray = new[] { insertData };
+        base.Insert(insertData); //鎻掑叆
+        base.InsertRange(insertArray); //鎵归噺鎻掑叆
+        var id = base.InsertReturnIdentity(insertData); //鎻掑叆杩斿洖鑷鍒�
+        AsInsertable(insertData).ExecuteCommand(); //鎴戜滑鍙互杞垚 Insertable瀹炵幇澶嶆潅鎻掑叆
+
+
+        /*********鏇存柊*********/
+        var updateData = new MesInvItemOutCDetails(); //娴嬭瘯鍙傛暟
+        var updateArray = new[] { updateData }; //娴嬭瘯鍙傛暟
+        base.Update(updateData); //鏍规嵁瀹炰綋鏇存柊
+        base.UpdateRange(updateArray); //鎵归噺鏇存柊
+        //base.Update(it => new MesInvItemOutCDetails() { ClassName = "a", CreateTime = DateTime.Now }, it => it.id==1);// 鍙洿鏂癈lassName鍒楀拰CreateTime鍒楋紝鍏跺畠鍒椾笉鏇存柊锛屾潯浠秈d=1
+        AsUpdateable(updateData).ExecuteCommand(); //杞垚Updateable鍙互瀹炵幇澶嶆潅鐨勬彃鍏�
+
+
+        /*********鍒犻櫎*********/
+        var deldata = new MesInvItemOutCDetails(); //娴嬭瘯鍙傛暟
+        base.Delete(deldata); //鏍规嵁瀹炰綋鍒犻櫎
+        base.DeleteById(1); //鏍规嵁涓婚敭鍒犻櫎
+        base.DeleteById(new[] { 1, 2 }); //鏍规嵁涓婚敭鏁扮粍鍒犻櫎
+        base.Delete(it => 1 == 2); //鏍规嵁鏉′欢鍒犻櫎
+        AsDeleteable().Where(it => 1 == 2)
+            .ExecuteCommand(); //杞垚Deleteable瀹炵幇澶嶆潅鐨勬搷浣�
+    }
+
+    #endregion
+}
\ No newline at end of file
diff --git a/MES.Service/service/Warehouse/MesInvItemOutItemsManager.cs b/MES.Service/service/Warehouse/MesInvItemOutItemsManager.cs
new file mode 100644
index 0000000..ec0d8cd
--- /dev/null
+++ b/MES.Service/service/Warehouse/MesInvItemOutItemsManager.cs
@@ -0,0 +1,78 @@
+锘縰sing MES.Service.DB;
+using MES.Service.Modes;
+using SqlSugar;
+
+namespace MES.Service.service.Warehouse;
+
+public class MesInvItemOutItemsManager : Repository<MesInvItemOutItems>
+{
+    //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
+
+    //杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 MesInvItemOutItemsManager.cs
+
+
+    #region 鏁欏鏂规硶
+
+    /// <summary>
+    ///     浠撳偍鏂规硶婊¤冻涓嶄簡澶嶆潅涓氬姟闇�姹傦紝涓氬姟浠g爜璇峰湪杩欓噷闈㈠畾涔夋柟娉�
+    /// </summary>
+    public void Study()
+    {
+        /*********鏌ヨ*********/
+
+        var data1 = base.GetById(1); //鏍规嵁ID鏌ヨ
+        var data2 = base.GetList(); //鏌ヨ鎵�鏈�
+        var data3 = base.GetList(it => 1 == 1); //鏍规嵁鏉′欢鏌ヨ  
+        //var data4 = base.GetSingle(it => 1 == 1);//鏍规嵁鏉′欢鏌ヨ涓�鏉�,濡傛灉瓒呰繃涓�鏉′細鎶ラ敊
+
+        var p = new PageModel { PageIndex = 1, PageSize = 2 }; // 鍒嗛〉鏌ヨ
+        var data5 = base.GetPageList(it => 1 == 1, p);
+        Console.Write(p.TotalCount); //杩斿洖鎬绘暟
+
+        var data6 =
+            base.GetPageList(it => 1 == 1, p,
+                it => SqlFunc.GetRandom()); // 鍒嗛〉鏌ヨ鍔犳帓搴�
+        Console.Write(p.TotalCount); //杩斿洖鎬绘暟
+
+        var conModels = new List<IConditionalModel>(); //缁勮鏉′欢鏌ヨ浣滀负鏉′欢瀹炵幇 鍒嗛〉鏌ヨ鍔犳帓搴�
+        conModels.Add(new ConditionalModel
+        {
+            FieldName = typeof(MesInvItemOutItems).GetProperties()[0].Name,
+            ConditionalType = ConditionalType.Equal, FieldValue = "1"
+        }); //id=1
+        var data7 = base.GetPageList(conModels, p, it => SqlFunc.GetRandom());
+
+        AsQueryable().Where(x => 1 == 1)
+            .ToList(); //鏀寔浜嗚浆鎹㈡垚queryable,鎴戜滑鍙互鐢╭ueryable瀹炵幇澶嶆潅鍔熻兘
+
+
+        /*********鎻掑叆*********/
+        var insertData = new MesInvItemOutItems(); //娴嬭瘯鍙傛暟
+        var insertArray = new[] { insertData };
+        base.Insert(insertData); //鎻掑叆
+        base.InsertRange(insertArray); //鎵归噺鎻掑叆
+        var id = base.InsertReturnIdentity(insertData); //鎻掑叆杩斿洖鑷鍒�
+        AsInsertable(insertData).ExecuteCommand(); //鎴戜滑鍙互杞垚 Insertable瀹炵幇澶嶆潅鎻掑叆
+
+
+        /*********鏇存柊*********/
+        var updateData = new MesInvItemOutItems(); //娴嬭瘯鍙傛暟
+        var updateArray = new[] { updateData }; //娴嬭瘯鍙傛暟
+        base.Update(updateData); //鏍规嵁瀹炰綋鏇存柊
+        base.UpdateRange(updateArray); //鎵归噺鏇存柊
+        //base.Update(it => new MesInvItemOutItems() { ClassName = "a", CreateTime = DateTime.Now }, it => it.id==1);// 鍙洿鏂癈lassName鍒楀拰CreateTime鍒楋紝鍏跺畠鍒椾笉鏇存柊锛屾潯浠秈d=1
+        AsUpdateable(updateData).ExecuteCommand(); //杞垚Updateable鍙互瀹炵幇澶嶆潅鐨勬彃鍏�
+
+
+        /*********鍒犻櫎*********/
+        var deldata = new MesInvItemOutItems(); //娴嬭瘯鍙傛暟
+        base.Delete(deldata); //鏍规嵁瀹炰綋鍒犻櫎
+        base.DeleteById(1); //鏍规嵁涓婚敭鍒犻櫎
+        base.DeleteById(new[] { 1, 2 }); //鏍规嵁涓婚敭鏁扮粍鍒犻櫎
+        base.Delete(it => 1 == 2); //鏍规嵁鏉′欢鍒犻櫎
+        AsDeleteable().Where(it => 1 == 2)
+            .ExecuteCommand(); //杞垚Deleteable瀹炵幇澶嶆潅鐨勬搷浣�
+    }
+
+    #endregion
+}
\ No newline at end of file
diff --git a/MES.Service/service/Warehouse/MesInvItemOutsManager.cs b/MES.Service/service/Warehouse/MesInvItemOutsManager.cs
new file mode 100644
index 0000000..08b04e2
--- /dev/null
+++ b/MES.Service/service/Warehouse/MesInvItemOutsManager.cs
@@ -0,0 +1,706 @@
+锘縰sing System.Data;
+using MES.Service.DB;
+using MES.Service.Dto.service;
+using MES.Service.Modes;
+using MES.Service.util;
+using SqlSugar;
+using DbType = System.Data.DbType;
+
+namespace MES.Service.service.Warehouse;
+
+public class MesInvItemOutsManager : Repository<MesInvItemOuts>
+{
+    //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
+    //杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 MesInvItemOutsManager.cs
+
+    public bool ScanCode(WarehouseQuery query)
+    {
+        decimal billTypeId = 200;
+        decimal transactionNo = 203;
+
+        var count = Db.Queryable<MesInvItemOutCDetails>()
+            .Where(a =>
+                a.ItemBarcode == query.barcode && a.TaskNo == query.billNo)
+            .Count();
+
+        if (count > 0) throw new Exception("鏉$爜閲嶅鎵弿锛岃鏍稿锛�");
+
+        //楠岃瘉鏉$爜
+        var mesInvItemStocks = Db.Queryable<MesInvItemStocks>()
+            .Where(a => a.ItemBarcode == query.barcode
+                        && a.Quantity > 0).Single();
+
+        if (mesInvItemStocks == null)
+            throw new Exception(query.barcode + "搴撳瓨涓棤姝ゆ潯鐮侊紝璇锋牳瀵癸紒");
+
+        //楠岃瘉鍑哄簱鍗昺es_inv_item_outs
+        var mesInvItemOuts = Db.Queryable<MesInvItemOuts>()
+            .Where(d => d.ItemOutNo == query.billNo
+                        && d.BillTypeId == billTypeId &&
+                        d.TransactionNo == transactionNo).Single();
+
+        //鍑哄簱鍗曠殑鏍¢獙
+        if (mesInvItemOuts == null)
+            throw new Exception("鍑哄簱鍗�  " + query.billNo + " 涓嶅瓨鍦紝璇风‘璁わ紒");
+
+        //鏈鏍哥殑涓嶅厑璁哥户缁�
+        if (mesInvItemOuts.Status == null || mesInvItemOuts.Status == 0)
+            throw new Exception("鍑哄簱鍗�  " + query.billNo + "鏈鏍�");
+
+        //宸叉帹閫佺殑涓嶅厑璁哥户缁�
+        if (mesInvItemOuts.Nflag == 1)
+            throw new Exception("鍑哄簱鍗�  " + query.billNo + "宸茬粡鎺ㄩ�侊紝鏃犳硶閲嶅鎺ㄩ��");
+
+        var depotCodeOut = mesInvItemOuts.DepotCode ?? "0";
+        var depotsCodeStock = mesInvItemStocks.DepotsCode ?? "0";
+
+        if (!depotCodeOut.Equals(depotsCodeStock))
+        {
+            // 鍒涘缓閿欒娑堟伅
+            var errorMessage =
+                $"002[鏉$爜浠撳簱{depotsCodeStock}涓庣敵璇蜂粨搴搟depotCodeOut}涓嶄竴鑷达紝璇锋牳瀵癸紒";
+
+            throw new Exception(errorMessage);
+        }
+
+        var StocksNum = mesInvItemStocks.Quantity;
+
+        var sql = string.Format(
+            @"select nvl(SUM(S.QUANTITY),0) - nvl(SUM(S.TL_QTY),0)
+                  from MES_INV_ITEM_OUT_ITEMS S
+                  LEFT JOIN mes_inv_item_outs d
+                    ON S.ITEM_OUT_ID = D.ID
+                 where d.item_out_no = '{0}'
+                   and d.bill_type_id = {1}
+                   and d.transaction_no = {2}
+                   AND S.item_no = '{3}'
+                   and nvl(d.status, 0) = 1
+                   and nvl(d.nflag, 0) = 0", query.billNo, billTypeId,
+            transactionNo,
+            mesInvItemStocks.ItemNo);
+
+        var cqty = Db.Ado.SqlQuerySingle<decimal>(sql);
+
+        if (cqty == null)
+            throw new Exception("鐗╂枡" + mesInvItemStocks.ItemNo +
+                                "鐨勮緟鍔╁睘鎬т笌鏉$爜涓嶄竴鑷达紒璇锋鏌�");
+
+        if (cqty < StocksNum) throw new Exception("璇风‘璁ゅ彂鏂欐暟閲�");
+
+        //璋冪敤瀛樺偍杩囩▼
+        try
+        {
+            // 瀹氫箟杈撳嚭鍙傛暟
+            var outputResult = new SugarParameter("C_RESULT", null,
+                DbType.Int32, ParameterDirection.Output,
+                4000);
+
+            var outputMessage = new SugarParameter("MSG", null, DbType.String,
+                ParameterDirection.Output, 4000);
+
+            // 瀹氫箟杈撳叆鍙傛暟
+            var parameters = new List<SugarParameter>
+            {
+                new("p_item_barcode", query.barcode,
+                    DbType.String, ParameterDirection.Input),
+                new("p_bill_no", query.billNo, DbType.String,
+                    ParameterDirection.Input),
+                new("pi_factory", "1000", DbType.String,
+                    ParameterDirection.Input),
+                new("pi_company", "1000", DbType.String,
+                    ParameterDirection.Input),
+                new("c_user", query.userName, DbType.String,
+                    ParameterDirection.Input),
+                outputResult,
+                outputMessage
+            };
+
+            // 浣跨敤 SqlSugar 鎵ц瀛樺偍杩囩▼
+            Db.Ado.ExecuteCommand(
+                "BEGIN MES_CG_UPDATE_BARCODES(:p_item_barcode, :p_bill_no, :pi_factory, :pi_company, :c_user, :C_RESULT, :MSG); END;",
+                parameters.ToArray());
+
+            // 鑾峰彇杈撳嚭鍙傛暟鐨勫��
+            var resultValue = outputResult.Value?.ToString();
+            var messageValue = outputMessage.Value?.ToString();
+
+            if ("1".Equals(resultValue)) throw new Exception("鏉$爜鎵i櫎澶辫触");
+        }
+        catch (Exception ex)
+        {
+            throw new Exception(ex.Message);
+        }
+
+        // 鍙橀噺鐢ㄤ簬淇濆瓨鏌ヨ缁撴灉
+        decimal? C_SQ_QTY = 0;
+        decimal? C_OK_QTY = 0;
+        var c_result = string.Empty;
+        var C_COUNT = 0;
+
+
+        sql = string.Format(@"
+                SELECT SUM(C.QUANTITY) AS SQ_QTY, SUM(D.QUANTITY_OK) AS OK_QTY
+                FROM MES_INV_ITEM_OUT_ITEMS C
+                LEFT JOIN (
+                    SELECT ITEM_OUT_ID, ITEM_NO, PBILL_NO, RK_NO, SUM(QUANTITY) AS QUANTITY_OK
+                    FROM MES_INV_ITEM_OUT_C_DETAILS
+                    GROUP BY ITEM_OUT_ID, ITEM_NO, PBILL_NO, RK_NO
+                ) D
+                ON D.ITEM_OUT_ID = C.ITEM_OUT_ID
+                AND D.ITEM_NO = C.ITEM_NO
+                AND D.RK_NO = C.RK_NO
+                AND NVL(C.PBILL_NO, '0') = NVL(D.PBILL_NO, '0')
+                WHERE C.ITEM_OUT_ID = {0}", mesInvItemOuts.Id);
+
+        var queryResult = Db.Ado.SqlQuerySingle<dynamic>(sql);
+
+        C_SQ_QTY = queryResult?.SQ_QTY;
+        C_OK_QTY = queryResult?.OK_QTY;
+
+        // 鍒ゆ柇閫昏緫
+        if (C_SQ_QTY < C_OK_QTY) throw new Exception("鎵弿鏁伴噺瓒呰繃鐢宠鏁伴噺,璇烽噸鏂版壂鎻忥紒");
+
+        if (C_SQ_QTY == C_OK_QTY) return true;
+
+        return false;
+    }
+
+
+    public bool Audit(WarehouseQuery query)
+    {
+        // 瀹℃牳鍓嶆牎楠�
+        Validate(query);
+        query.status = 1;
+        //瀹℃牳
+        return Update(query);
+    }
+
+    public bool SetNFlag(WarehouseQuery query)
+    {
+        return Db.Updateable<MesInvItemOuts>()
+            .SetColumns(s => s.Nflag == 1)
+            .Where(s => s.ItemOutNo == query.billNo)
+            .ExecuteCommand() > 0;
+    }
+
+    public bool DeApprove(WarehouseQuery query)
+    {
+        query.date = null;
+        query.status = 0;
+        return Update(query);
+    }
+
+    private bool Update(WarehouseQuery entity)
+    {
+        var userName = entity.userName ?? "system";
+        return Db.Updateable<MesInvItemOuts>()
+            .SetColumns(s => s.Status == entity.status)
+            .SetColumns(s => s.CheckUser == userName)
+            .SetColumns(s => s.CheckDate == DateTime.Now)
+            .Where(s => s.Id == entity.id).ExecuteCommand() > 0;
+    }
+
+
+    public void Validate(WarehouseQuery query)
+    {
+        // 鏍¢獙鍗曞彿鏄惁姝g‘
+        var mesInvItemOuts = Db.Queryable<MesInvItemOuts>()
+            .Where(o => o.ItemOutNo == query.billNo)
+            .Single();
+
+        if (mesInvItemOuts == null)
+            throw new Exception("娌℃壘鍒�" + query.billNo + " 瀵瑰簲鐨勯噰璐��璐у崟锛岃妫�鏌�");
+
+        // 鏍¢獙瀛愯〃鏁版嵁
+        var itemOutItems = Db.Queryable<MesInvItemOutItems>()
+            .Where(o => o.ItemOutId == mesInvItemOuts.Id)
+            .ToList();
+
+        var sql = string.Empty;
+        var P_Msg = string.Empty;
+
+        foreach (var item in itemOutItems)
+        {
+            // 鍒ゆ柇鐢宠鏁伴噺鏄惁澶т簬鍓╀綑鍙��鏁伴噺
+            sql = string.Format(
+                @"SELECT NVL(s1.RK_QTY, 0) - NVL(KT_QTY, 0) KT_QTY --鍓╀綑鍙��
+            FROM MES_INV_ITEM_OUT_ITEMS C
+            LEFT JOIN (SELECT SUM(QUANTITY) KT_QTY,
+                              ITEM_NO,
+                              PBILL_NO,
+                              RK_NO,
+                              WORK_LINE
+                         FROM MES_INV_ITEM_OUT_ITEMS
+                        GROUP BY ITEM_NO, PBILL_NO, WORK_LINE,RK_NO) U
+              ON U.ITEM_NO = C.ITEM_NO
+             AND U.WORK_LINE = C.WORK_LINE
+             AND U.PBILL_NO = C.PBILL_NO
+             AND U.RK_NO = C.RK_NO
+            LEFT JOIN (SELECT SUM(QUANTITY) RK_QTY,
+                              ITEM_NO,
+                              EBELN,
+                              WORK_LINE,BILL_NO
+                         FROM MES_INV_ITEM_IN_C_ITEMS
+                        GROUP BY ITEM_NO, EBELN, WORK_LINE,BILL_NO) s1
+              ON S1.ITEM_NO = C.ITEM_NO
+             AND S1.WORK_LINE = C.WORK_LINE
+             AND S1.EBELN = C.PBILL_NO
+                AND S1.BILL_NO = C.RK_NO
+           WHERE C.ID = {0}", item.Id);
+            var sy_Qty = Db.Ado.SqlQuery<decimal>(sql);
+
+            if (sy_Qty != null && sy_Qty[0] < 0)
+            {
+                P_Msg =
+                    $"閲囪喘璁㈠崟锛歿item.PbillNo}锛岃锛歿item.WorkLine}锛岀墿鏂欙細{item.ItemNo} 鐢宠鏁伴噺澶т簬鍓╀綑鍙敹鏁伴噺";
+                throw new Exception(P_Msg);
+            }
+
+            // 鍒ゆ柇琛屾槸鍚﹂噸澶�
+            var cf_Num = Db.Queryable<MesInvItemOutItems>()
+                .Where(s1 => s1.ItemNo == item.ItemNo &&
+                             s1.WorkLine == item.WorkLine &&
+                             s1.PbillNo == item.PbillNo &&
+                             s1.ItemOutId == mesInvItemOuts.Id &&
+                             s1.RkNo == item.RkNo)
+                .Count();
+
+            if (cf_Num > 1)
+            {
+                P_Msg =
+                    $"閲囪喘璁㈠崟锛歿item.PbillNo}锛岃锛歿item.WorkLine}锛岀墿鏂欙細{item.ItemNo}閲嶅璇峰垹闄ゅ叾涓竴鏉℃暟鎹�";
+                throw new Exception(P_Msg);
+            }
+        }
+
+        // 鏍¢獙涓昏〃鍐呭鏄惁琚垹鎺�
+        // 涓昏〃浠撳簱缂栫爜
+        if (string.IsNullOrEmpty(mesInvItemOuts.DepotCode))
+        {
+            P_Msg = "浠撳簱缂栫爜涓虹┖锛岃妫�鏌�";
+            throw new Exception(P_Msg);
+        }
+
+        var supplierExists = Db.Queryable<MesSupplier>()
+            .Any(supplier => supplier.SuppNo == mesInvItemOuts.SuppNo);
+
+        if (!supplierExists)
+        {
+            P_Msg = $"渚涘簲鍟嗙紪鐮� {mesInvItemOuts.SuppNo} 鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇锋鏌�";
+            throw new Exception(P_Msg);
+        }
+
+        // 瀛愯〃琛屼笌涓昏〃绗﹀悎鎬ф牎楠�
+        foreach (var j in itemOutItems)
+        {
+            // 鏍¢獙瀛愯〃瀵瑰簲閲囪喘璁㈠崟鐨勪緵搴斿晢缂栫爜
+            var c_SuppNo = Db.Queryable<MesRohIn, MesSupplier>(
+                    (roh, supp) => new JoinQueryInfos(
+                        JoinType.Left,
+                        roh.Supplier == supp.Id.ToString()
+                    ))
+                .Where(roh => roh.BillNo == j.PbillNo)
+                .Select((roh, supp) => supp.SuppNo)
+                .Single();
+
+            if (c_SuppNo == null)
+            {
+                P_Msg = $"瀛愯〃琛屼緵搴斿晢缂栫爜 {c_SuppNo} 鍦ㄧ郴缁熶腑鏈壘鍒�";
+                throw new Exception(P_Msg);
+            }
+
+            if (mesInvItemOuts.SuppNo != c_SuppNo)
+            {
+                P_Msg =
+                    $"瀛愯〃閲囪喘璁㈠崟琛岀殑渚涘簲鍟嗙紪鐮� {c_SuppNo} 涓庝富琛ㄤ緵搴斿晢缂栫爜 {mesInvItemOuts.SuppNo} 涓嶄竴鑷达紝璇锋鏌�";
+                throw new Exception(P_Msg);
+            }
+
+            // 鏍¢獙瀛愯〃濮斿閲囪喘绫诲瀷鍜屼富琛ㄧ被鍨嬫槸鍚︿竴鑷�
+            if (j.FType != mesInvItemOuts.FType)
+            {
+                P_Msg =
+                    $"瀛愯〃濮斿绫诲瀷锛歿j.FType}锛屼笌涓昏〃濮斿绫诲瀷锛歿mesInvItemOuts.FType}锛屼笉涓�鑷达紝璇锋鏌�";
+                throw new Exception(P_Msg);
+            }
+
+            // 妫�鏌ュ瓙琛ㄤ粨搴撴槸鍚﹀拰涓昏〃浠撳簱涓�鑷�
+            if (j.DepotCode != mesInvItemOuts.DepotCode)
+            {
+                P_Msg =
+                    $"瀛愯〃浠撳簱缂栫爜锛歿j.DepotCode} 涓庝富琛ㄤ粨搴撶紪鐮侊細{mesInvItemOuts.DepotCode}锛屼笉涓�鑷达紝璇锋鏌�";
+                throw new Exception(P_Msg);
+            }
+        }
+    }
+
+    public OutItemDto SaveCombination(OutItemDto dto)
+    {
+        var mesInvItemOuts = dto.Form;
+        mesInvItemOuts.Status = 0;
+        mesInvItemOuts.BoardFlag = 0;
+        mesInvItemOuts.Sapstatus = 0;
+        mesInvItemOuts.OutStatus = 0;
+        mesInvItemOuts.ItemFlag = 0;
+        mesInvItemOuts.IsVisual = 1;
+        mesInvItemOuts.TransactionNo = 203;
+        mesInvItemOuts.Factory = "1000";
+        mesInvItemOuts.Company = "1000";
+
+        //杩斿洖ID
+        var id = Db.Insertable(mesInvItemOuts)
+            .ExecuteReturnIdentity();
+
+        if (id <= 0) throw new Exception("鎻掑叆閿欒");
+
+        mesInvItemOuts.Id = id;
+        dto.SaveItems.ForEach(s =>
+        {
+            s.ItemOutId = id;
+            s.Factory = "1000";
+            s.Company = "1000";
+            s.Status = 0;
+            s.DepotCode = mesInvItemOuts.DepotCode;
+            s.FType = mesInvItemOuts.FType;
+            s.CreateBy = mesInvItemOuts.CreateBy;
+            s.CreateDate = mesInvItemOuts.CreateDate;
+        });
+
+        var insertable = Db.Insertable(dto.SaveItems)
+            .ExecuteCommand();
+
+        if (insertable < 0) throw new Exception("鎻掑叆閿欒");
+
+        var query = new WarehouseQuery();
+        query.id = id;
+        dto.SelectItems = GetItems(query);
+
+        return dto;
+    }
+
+    public List<MesInvItemOuts> GetPage(WarehouseQuery query)
+    {
+        return
+            Db.Queryable<MesInvItemOuts, MesDepots, MesSupplier, SysUser,
+                    SysUser>((a, e, i, u1, u3) =>
+                    new JoinQueryInfos(
+                        JoinType.Left,
+                        a.DepotCode == e.DepotCode
+                        && e.Factory == a.Factory
+                        && e.Company == a.Company,
+                        JoinType.Left,
+                        a.SuppNo == i.SuppNo,
+                        JoinType.Left,
+                        a.CreateBy == u1.Fcode,
+                        JoinType.Left,
+                        a.CheckUser == u3.Fcode))
+                .WhereIF(query.id > 0,
+                    (a, e, i, u1, u3) => a.Id == query.id)
+                .WhereIF(!string.IsNullOrEmpty(query.billNo),
+                    (a, e, i, u1, u3) => a.ItemOutNo == query.billNo)
+                .Select((a, e, i, u1, u3) => new MesInvItemOuts
+                {
+                    Id = a.Id,
+                    DepotCode = a.DepotCode,
+                    Fmrmode = a.Fmrmode,
+                    CheckDate = a.CheckDate,
+                    CheckUser = a.CheckUser,
+                    States = a.States,
+                    Reason = a.Reason,
+                    Remark = a.Remark,
+                    Nflag = a.Nflag,
+                    FType = a.FType,
+                    SuppNo = a.SuppNo,
+                    DepotName = e.DepotName,
+                    SuppName = i.SuppName,
+                    CreateByFname = u1.Fname,
+                    CheckUserFname = u3.Fname,
+                    CreateDate = a.CreateDate,
+                    CreateBy = a.CreateBy,
+                    Status = a.Status,
+                    ItemOutNo = a.ItemOutNo
+                }).ToPageList(query.PageIndex, query.Limit);
+    }
+
+    public List<MesInvItemOutCDetails> GetScanBarcode(WarehouseQuery query)
+    {
+        return Db.Queryable<MesInvItemOutCDetails, MesInvItemBarcodes, MesItems,
+                MesDepots>(
+                (b, bar, c, d) => new
+                    JoinQueryInfos(
+                        JoinType.Left, b.ItemBarcode == bar.ItemBarcode,
+                        JoinType.Left, b.ItemNo == c.ItemNo &&
+                                       b.Company == c.Company &&
+                                       b.Factory == c.Factory,
+                        JoinType.Left, b.DepotCode == d.DepotCode &&
+                                       b.Company == d.Company &&
+                                       b.Factory == d.Factory
+                    ))
+            .Where((b, bar, c, d) => b.ItemOutId == query.id)
+            .Select((b, bar, c, d) => new MesInvItemOutCDetails
+            {
+                Quantity = b.Quantity,
+                DepotSectionCode = b.DepotSectionCode,
+                DepotCode = b.DepotCode,
+                ItemNo = b.ItemNo,
+                ItemBarcode = b.ItemBarcode,
+                ItemName = c.ItemName,
+                ItemModel = c.ItemModel,
+                DepotName = d.DepotName,
+                Unit = bar.Unit
+            }).ToList();
+    }
+
+    //MESInvItemOutItems
+    public List<MESInvItemOutItems> GetItems(WarehouseQuery query)
+    {
+        var where = "and 1=1";
+        if (query.id != null) where = "and ITEM_OUT_ID = '" + query.id + "'";
+
+        var sql = string.Format(@"select * from (
+        SELECT C.REMARK, C.PBILL_NO, C.ITEM_OUT_ID, C.RK_QTY,
+               C.TL_QTY, C.WORK_LINE, C.QUANTITY, C.ITEM_NO,
+               NVL(s1.RK_QTY, 0) - NVL(KT_QTY, 0) KT_QTY,
+               R.DEPOT_SECTION_CODE, S.ITEM_MODEL, S.ITEM_NAME,
+               K.CGB014, Q.STAFF_NAME, R.DEPOT_CODE
+        FROM MES_INV_ITEM_OUT_ITEMS C JOIN MES_ITEMS S ON C.ITEM_NO = S.ITEM_NO
+                 LEFT JOIN (SELECT SUM(QUANTITY) KT_QTY, ITEM_NO, PBILL_NO, WORK_LINE, RK_NO
+                            FROM MES_INV_ITEM_OUT_ITEMS
+                            GROUP BY ITEM_NO, PBILL_NO, WORK_LINE, RK_NO) U
+                           ON U.ITEM_NO = C.ITEM_NO AND U.WORK_LINE = C.WORK_LINE
+                               AND U.PBILL_NO = C.PBILL_NO AND U.RK_NO = C.RK_NO
+                 LEFT JOIN (SELECT SUM(QUANTITY) RK_QTY, ITEM_NO, EBELN, WORK_LINE, BILL_NO
+                            FROM mes_inv_item_in_c_details
+                            GROUP BY ITEM_NO, EBELN, WORK_LINE, BILL_NO) s1
+                           ON S1.ITEM_NO = C.ITEM_NO AND S1.WORK_LINE = C.WORK_LINE
+                               AND S1.EBELN = C.PBILL_NO AND S1.BILL_NO = C.RK_NO
+                 LEFT JOIN MES_ROH_IN_DATA K
+                           ON K.BILL_NO = C.PBILL_NO AND C.WORK_LINE = K.PURCHASE_ORDER_LINE_NUMBER
+                 left join MES_ROH_IN H on H.BILL_NO = K.BILL_NO
+                 left join MES_STAFF Q on H.PURCHASER = Q.STAFF_NAME
+                 LEFT JOIN MES_SUPPLIER T ON H.SUPPLIER = T.ID
+                 LEFT JOIN (select *
+                            from (SELECT row_number() over (partition by DEPOT_CODE, ITEM_NO, EBELN order by CREATE_DATE) rn, DEPOT_CODE, DEPOT_SECTION_CODE, ITEM_NO,
+                                         EBELN FROM mes_inv_item_in_c_details
+                                  where EBELN is not null)
+                            where rn = 1 and ROWNUM = 1) R ON R.ITEM_NO = C.ITEM_NO) where 1=1 {0}",
+            where);
+        var results = Db.Ado.SqlQuery<MESInvItemOutItems>(sql);
+        return results;
+    }
+
+    public OutItemDto GetSumItem(WarehouseQuery query)
+    {
+        var mesInvItemOuts = base.GetSingle(it => it.ItemOutNo == query.billNo);
+        if (mesInvItemOuts == null) throw new Exception("閲囪喘閫�璐у崟涓嶅瓨鍦�");
+
+        var sql = string.Format(@"SELECT DEPOT ,ITEM_NO,ITEM_MODEL,
+           ITEM_NAME,QTY FROM (SELECT SUM(QTY) QTY, DEPOT, ITEM_NO, ITEM_MODEL, ITEM_NAME
+              FROM (SELECT f_get_section_code2('1000', '1000', b.ITEM_NO,'{0}') DEPOT,
+                           B.ITEM_NO, A.ITEM_MODEL,A.ITEM_NAME,to_char(nvl(b.QUANTITY, 0) - nvl(D.QUANTITY_OK, 0),'FM9999999990.00') QTY
+                      FROM MES_INV_ITEM_OUT_ITEMS B LEFT JOIN mes_ITEMS A
+                        ON B.ITEM_NO = A.ITEM_NO LEFT JOIN (SELECT ITEM_OUT_ID,
+                                       ITEM_NO,PBILL_NO,SUM(QUANTITY) QUANTITY_OK,RK_NO
+                                  FROM MES_INV_ITEM_OUT_C_DETAILS
+                                 WHERE ITEM_OUT_ID = {1}
+                                 GROUP BY ITEM_OUT_ID,ITEM_NO,PBILL_NO,RK_NO) D
+                        ON D.ITEM_OUT_ID = B.ITEM_OUT_ID
+                       AND D.ITEM_NO = B.ITEM_NO
+                       AND D.PBILL_NO = B.PBILL_NO
+                       AND D.RK_NO = B.RK_NO
+                     WHERE B.ITEM_OUT_ID = {1}
+                       AND nvl(b.QUANTITY, 0) - nvl(D.QUANTITY_OK, 0) > 0
+                     ORDER BY f_get_section_code2('1000','1000',b.ITEM_NO,'{0}'),
+                              A.ITEM_MODEL,A.ITEM_NAME)
+             GROUP BY DEPOT, ITEM_NO, ITEM_MODEL, ITEM_NAME)",
+            mesInvItemOuts.DepotCode,
+            mesInvItemOuts.Id);
+
+        var results = Db.Ado.SqlQuery<InventoryItem>(sql);
+
+        var mesInvItemStocks = Db.Queryable<MesInvItemStocks>()
+            .Where(a => a.ItemBarcode == query.barcode).Single();
+
+        var dto = new OutItemDto();
+        dto.SumItem = results;
+
+        if (mesInvItemStocks != null)
+        {
+            dto.ItemNo = mesInvItemStocks.ItemNo;
+            dto.Quantity = mesInvItemStocks.Quantity;
+        }
+
+        return dto;
+    }
+
+    public List<InventoryItemDetail> SelectMaterials(WarehouseQuery query)
+    {
+        var sql = string.Format(@"select B.WORK_NO, b.work_line,
+                               b.item_no, s2.item_name, s2.item_model,
+                               sum(b.quantity)                         sum_Quantity,
+                               b.unit, b.supp_no,
+                               nvl(s1.quantity, 0)                     quantity,
+                               sum(b.quantity) - nvl(U.KT_QTY, 0)      Refundable_Quantity,
+                               B.cbill_no, B.task_no, A.BILL_NO,
+                               to_char(b.CREATE_DATE, 'yyyy-mm-dd') as CREATE_DATE
+                        from mes_inv_item_in_c_details b
+                                 left join mes_inv_item_ins a on b.item_in_id = a.id
+                                 LEFT JOIN (select s.item_no, s.work_line, s.Work_no,
+                                                   sum(s.quantity) quantity, S.RK_NO
+                                            from mes_inv_item_out_c_details s
+                                            group by s.item_no, s.work_line, s.work_no, S.RK_NO) s1
+                                           ON NVL(B.work_LINE, '0') = NVL(s1.work_LINE, '0')
+                                               and B.work_no = s1.work_no
+                                               and B.item_no = s1.item_no
+                                               AND B.BILL_NO = S1.RK_NO
+                                 LEFT JOIN (SELECT SUM(QUANTITY) KT_QTY, ITEM_NO, PBILL_NO, WORK_LINE, RK_NO
+                                            FROM MES_INV_ITEM_OUT_ITEMS
+                                            GROUP BY ITEM_NO, PBILL_NO, WORK_LINE, RK_NO) U
+                                           ON U.ITEM_NO = B.ITEM_NO
+                                               AND U.WORK_LINE = B.WORK_LINE
+                                               AND U.PBILL_NO = B.WORK_NO AND U.RK_NO = B.BILL_NO
+                                 left join mes_items s2 on b.item_no = s2.item_no
+                                 left join purdha da on da.dha001 = b.cbill_no
+                        WHERE A.BILL_NO LIKE 'Q%'
+                          AND A.CBILL_NO like 'L%'
+                        group by b.item_no, b.work_line, b.supp_no, b.remark, s1.quantity, b.unit,
+                                 s2.item_name, s2.item_model, da.dha003, B.WORK_NO, B.cbill_no, B.task_no,
+                                 to_char(b.CREATE_DATE, 'yyyy-mm-dd'), A.BILL_NO, U.KT_QTY, A.CBILL_NO
+                        having b.remark = '閲囪喘鍏ュ簱'
+                           and sum(b.quantity) - nvl(U.KT_QTY, 0) > 0
+                           and b.supp_no = '{0}'
+                        order by to_char(b.CREATE_DATE, 'yyyy-mm-dd')",
+            query.SuppNo);
+
+        var results = Db.Ado.SqlQuery<InventoryItemDetail>(sql);
+        return results;
+    }
+
+    public string GetMaxItemOutNo()
+    {
+        var date = DateTime.Now.ToString("yyyyMMdd");
+        var par = "NTL" + date;
+        var sql =
+            $"select max(ITEM_OUT_NO) from MES_INV_ITEM_OUTS where ITEM_OUT_NO like '{par}%'";
+        var maxBillNo = Db.Ado.SqlQuerySingle<string>(sql);
+
+        var number = "0001";
+        if (maxBillNo != null)
+        {
+            maxBillNo = maxBillNo.Substring(11);
+            var no = Convert.ToInt32(maxBillNo);
+            no++;
+            number = no.ToString().PadLeft(4, '0');
+        }
+
+        return "NTL" + date + number;
+    }
+
+    public MessageCenter SaveMessageCenter(WarehouseQuery query)
+    {
+        var message = MesToErpParam(query);
+
+        var executeReturnIdentity =
+            Db.Insertable(message).ExecuteReturnIdentity();
+        if (executeReturnIdentity > 0)
+        {
+            message.Id = executeReturnIdentity;
+            message.Pid = executeReturnIdentity;
+            return message;
+        }
+
+        throw new Exception("鑾峰彇鏁版嵁澶辫触");
+    }
+
+
+    public MessageCenter MesToErpParam(WarehouseQuery query)
+    {
+        var erpParameters = "";
+        var title = "";
+        var tableName = "MES_INV_ITEM_OUTS_" + query.Type;
+        if ("A".Equals(query.Type))
+        {
+            erpParameters = GetErpParameters(query.billNo);
+            title = "閲囪喘閫�璐у崟" + query.billNo + "瀹℃牳";
+        }
+        else if ("B".Equals(query.Type))
+        {
+            erpParameters = GetDeApprovePam(query.id);
+            title = "閲囪喘閫�璐у崟" + query.billNo + "鍙嶅鏍�";
+        }
+
+        var ErpUrl = AppsettingsUtility.Settings.ProductionErpUrl;
+        var message = new MessageCenter
+        {
+            TableName = tableName,
+            Url = ErpUrl,
+            Status = 1,
+            CreateBy = query.userName,
+            Route = query.billNo,
+            Title = title,
+            PageName = "Warehouse/PurchaseReturn/Add?id=" + query.id +
+                       "&itemOutNo=" + query.billNo,
+            CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+            Method = "POST",
+            Seq = 1,
+            Data = erpParameters,
+            IsMessage = 0,
+            ContentType = "application/x-www-form-urlencoded"
+        };
+        return message;
+    }
+
+    public bool DeApproveBefore(WarehouseQuery query)
+    {
+        var mesInvItemOuts = base.GetById(query.id);
+        if (mesInvItemOuts == null) throw new Exception("鍑哄簱鍗曚笉瀛樺湪");
+
+        var nflag = mesInvItemOuts.Nflag ?? 0;
+
+        if (nflag != 0) return true;
+
+        return false;
+    }
+
+    private string GetDeApprovePam(decimal? id)
+    {
+        var sid = (int)id;
+        var encodedUrl = "taskname=CGTL&mesid=" + sid +
+                         "&optype=delete&datajson={}";
+
+        return encodedUrl;
+    }
+
+    private string GetErpParameters(string? billNo)
+    {
+        var invItemIns = Db.Queryable<MesInvItemOuts>()
+            .Single(x => x.ItemOutNo == billNo);
+
+        //璋冪敤function鍑芥暟
+        var sql =
+            $"SELECT F_GENERATE_DATA_INSERTED('{billNo}') FROM DUAL;";
+        var jsonString = Db.Ado.SqlQuerySingle<string>(sql);
+
+        var encodedUrl = "taskname=CGTL&mesid=" + invItemIns.Id +
+                         "&optype=create&datajson=" + jsonString;
+
+        return encodedUrl;
+    }
+
+    public List<string> GetItemOutNo()
+    {
+        var data5 = Db.Queryable<MesInvItemOuts>().Where(it =>
+                it.BillTypeId == 200 && it.TransactionNo == 203 &&
+                it.Status == 1)
+            .OrderBy(it => it.Id, OrderByType.Desc)
+            .ToPageList(1, 20);
+
+        var ItemOutNos = data5.FindAll(a => a.Nflag == null || a.Nflag == 0)
+            .Select(s => s.ItemOutNo).ToList();
+        //
+        // var ItemOutNos = data5
+        //     .Select(s => s.ItemOutNo).ToList();
+
+        return ItemOutNos;
+    }
+}
\ No newline at end of file
diff --git a/MES.Service/service/Warehouse/MesInvItemStocksManager.cs b/MES.Service/service/Warehouse/MesInvItemStocksManager.cs
new file mode 100644
index 0000000..57a4b41
--- /dev/null
+++ b/MES.Service/service/Warehouse/MesInvItemStocksManager.cs
@@ -0,0 +1,78 @@
+锘縰sing MES.Service.DB;
+using MES.Service.Modes;
+using SqlSugar;
+
+namespace MES.Service.service.Warehouse;
+
+public class MesInvItemStocksManager : Repository<MesInvItemStocks>
+{
+    //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
+
+    //杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 MesInvItemStocksManager.cs
+
+
+    #region 鏁欏鏂规硶
+
+    /// <summary>
+    ///     浠撳偍鏂规硶婊¤冻涓嶄簡澶嶆潅涓氬姟闇�姹傦紝涓氬姟浠g爜璇峰湪杩欓噷闈㈠畾涔夋柟娉�
+    /// </summary>
+    public void Study()
+    {
+        /*********鏌ヨ*********/
+
+        var data1 = base.GetById(1); //鏍规嵁ID鏌ヨ
+        var data2 = base.GetList(); //鏌ヨ鎵�鏈�
+        var data3 = base.GetList(it => 1 == 1); //鏍规嵁鏉′欢鏌ヨ  
+        //var data4 = base.GetSingle(it => 1 == 1);//鏍规嵁鏉′欢鏌ヨ涓�鏉�,濡傛灉瓒呰繃涓�鏉′細鎶ラ敊
+
+        var p = new PageModel { PageIndex = 1, PageSize = 2 }; // 鍒嗛〉鏌ヨ
+        var data5 = base.GetPageList(it => 1 == 1, p);
+        Console.Write(p.TotalCount); //杩斿洖鎬绘暟
+
+        var data6 =
+            base.GetPageList(it => 1 == 1, p,
+                it => SqlFunc.GetRandom()); // 鍒嗛〉鏌ヨ鍔犳帓搴�
+        Console.Write(p.TotalCount); //杩斿洖鎬绘暟
+
+        var conModels = new List<IConditionalModel>(); //缁勮鏉′欢鏌ヨ浣滀负鏉′欢瀹炵幇 鍒嗛〉鏌ヨ鍔犳帓搴�
+        conModels.Add(new ConditionalModel
+        {
+            FieldName = typeof(MesInvItemStocks).GetProperties()[0].Name,
+            ConditionalType = ConditionalType.Equal, FieldValue = "1"
+        }); //id=1
+        var data7 = base.GetPageList(conModels, p, it => SqlFunc.GetRandom());
+
+        AsQueryable().Where(x => 1 == 1)
+            .ToList(); //鏀寔浜嗚浆鎹㈡垚queryable,鎴戜滑鍙互鐢╭ueryable瀹炵幇澶嶆潅鍔熻兘
+
+
+        /*********鎻掑叆*********/
+        var insertData = new MesInvItemStocks(); //娴嬭瘯鍙傛暟
+        var insertArray = new[] { insertData };
+        base.Insert(insertData); //鎻掑叆
+        base.InsertRange(insertArray); //鎵归噺鎻掑叆
+        var id = base.InsertReturnIdentity(insertData); //鎻掑叆杩斿洖鑷鍒�
+        AsInsertable(insertData).ExecuteCommand(); //鎴戜滑鍙互杞垚 Insertable瀹炵幇澶嶆潅鎻掑叆
+
+
+        /*********鏇存柊*********/
+        var updateData = new MesInvItemStocks(); //娴嬭瘯鍙傛暟
+        var updateArray = new[] { updateData }; //娴嬭瘯鍙傛暟
+        base.Update(updateData); //鏍规嵁瀹炰綋鏇存柊
+        base.UpdateRange(updateArray); //鎵归噺鏇存柊
+        //base.Update(it => new MesInvItemStocks() { ClassName = "a", CreateTime = DateTime.Now }, it => it.id==1);// 鍙洿鏂癈lassName鍒楀拰CreateTime鍒楋紝鍏跺畠鍒椾笉鏇存柊锛屾潯浠秈d=1
+        AsUpdateable(updateData).ExecuteCommand(); //杞垚Updateable鍙互瀹炵幇澶嶆潅鐨勬彃鍏�
+
+
+        /*********鍒犻櫎*********/
+        var deldata = new MesInvItemStocks(); //娴嬭瘯鍙傛暟
+        base.Delete(deldata); //鏍规嵁瀹炰綋鍒犻櫎
+        base.DeleteById(1); //鏍规嵁涓婚敭鍒犻櫎
+        base.DeleteById(new[] { 1, 2 }); //鏍规嵁涓婚敭鏁扮粍鍒犻櫎
+        base.Delete(it => 1 == 2); //鏍规嵁鏉′欢鍒犻櫎
+        AsDeleteable().Where(it => 1 == 2)
+            .ExecuteCommand(); //杞垚Deleteable瀹炵幇澶嶆潅鐨勬搷浣�
+    }
+
+    #endregion
+}
\ No newline at end of file
diff --git a/MES.Service/service/Warehouse/MesQaItemsDetect01Manager.cs b/MES.Service/service/Warehouse/MesQaItemsDetect01Manager.cs
new file mode 100644
index 0000000..a6dfa66
--- /dev/null
+++ b/MES.Service/service/Warehouse/MesQaItemsDetect01Manager.cs
@@ -0,0 +1,78 @@
+锘縰sing MES.Service.DB;
+using MES.Service.Modes;
+using SqlSugar;
+
+namespace MES.Service.service.Warehouse;
+
+public class MesQaItemsDetect01Manager : Repository<MesQaItemsDetect01>
+{
+    //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
+
+    //杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 MesQaItemsDetect01Manager.cs
+
+
+    #region 鏁欏鏂规硶
+
+    /// <summary>
+    ///     浠撳偍鏂规硶婊¤冻涓嶄簡澶嶆潅涓氬姟闇�姹傦紝涓氬姟浠g爜璇峰湪杩欓噷闈㈠畾涔夋柟娉�
+    /// </summary>
+    public void Study()
+    {
+        /*********鏌ヨ*********/
+
+        var data1 = base.GetById(1); //鏍规嵁ID鏌ヨ
+        var data2 = base.GetList(); //鏌ヨ鎵�鏈�
+        var data3 = base.GetList(it => 1 == 1); //鏍规嵁鏉′欢鏌ヨ  
+        //var data4 = base.GetSingle(it => 1 == 1);//鏍规嵁鏉′欢鏌ヨ涓�鏉�,濡傛灉瓒呰繃涓�鏉′細鎶ラ敊
+
+        var p = new PageModel { PageIndex = 1, PageSize = 2 }; // 鍒嗛〉鏌ヨ
+        var data5 = base.GetPageList(it => 1 == 1, p);
+        Console.Write(p.TotalCount); //杩斿洖鎬绘暟
+
+        var data6 =
+            base.GetPageList(it => 1 == 1, p,
+                it => SqlFunc.GetRandom()); // 鍒嗛〉鏌ヨ鍔犳帓搴�
+        Console.Write(p.TotalCount); //杩斿洖鎬绘暟
+
+        var conModels = new List<IConditionalModel>(); //缁勮鏉′欢鏌ヨ浣滀负鏉′欢瀹炵幇 鍒嗛〉鏌ヨ鍔犳帓搴�
+        conModels.Add(new ConditionalModel
+        {
+            FieldName = typeof(MesQaItemsDetect01).GetProperties()[0].Name,
+            ConditionalType = ConditionalType.Equal, FieldValue = "1"
+        }); //id=1
+        var data7 = base.GetPageList(conModels, p, it => SqlFunc.GetRandom());
+
+        AsQueryable().Where(x => 1 == 1)
+            .ToList(); //鏀寔浜嗚浆鎹㈡垚queryable,鎴戜滑鍙互鐢╭ueryable瀹炵幇澶嶆潅鍔熻兘
+
+
+        /*********鎻掑叆*********/
+        var insertData = new MesQaItemsDetect01(); //娴嬭瘯鍙傛暟
+        var insertArray = new[] { insertData };
+        base.Insert(insertData); //鎻掑叆
+        base.InsertRange(insertArray); //鎵归噺鎻掑叆
+        var id = base.InsertReturnIdentity(insertData); //鎻掑叆杩斿洖鑷鍒�
+        AsInsertable(insertData).ExecuteCommand(); //鎴戜滑鍙互杞垚 Insertable瀹炵幇澶嶆潅鎻掑叆
+
+
+        /*********鏇存柊*********/
+        var updateData = new MesQaItemsDetect01(); //娴嬭瘯鍙傛暟
+        var updateArray = new[] { updateData }; //娴嬭瘯鍙傛暟
+        base.Update(updateData); //鏍规嵁瀹炰綋鏇存柊
+        base.UpdateRange(updateArray); //鎵归噺鏇存柊
+        //base.Update(it => new MesQaItemsDetect01() { ClassName = "a", CreateTime = DateTime.Now }, it => it.id==1);// 鍙洿鏂癈lassName鍒楀拰CreateTime鍒楋紝鍏跺畠鍒椾笉鏇存柊锛屾潯浠秈d=1
+        AsUpdateable(updateData).ExecuteCommand(); //杞垚Updateable鍙互瀹炵幇澶嶆潅鐨勬彃鍏�
+
+
+        /*********鍒犻櫎*********/
+        var deldata = new MesQaItemsDetect01(); //娴嬭瘯鍙傛暟
+        base.Delete(deldata); //鏍规嵁瀹炰綋鍒犻櫎
+        base.DeleteById(1); //鏍规嵁涓婚敭鍒犻櫎
+        base.DeleteById(new[] { 1, 2 }); //鏍规嵁涓婚敭鏁扮粍鍒犻櫎
+        base.Delete(it => 1 == 2); //鏍规嵁鏉′欢鍒犻櫎
+        AsDeleteable().Where(it => 1 == 2)
+            .ExecuteCommand(); //杞垚Deleteable瀹炵幇澶嶆潅鐨勬搷浣�
+    }
+
+    #endregion
+}
\ No newline at end of file
diff --git a/MES.Service/service/Warehouse/PurdhbManager.cs b/MES.Service/service/Warehouse/PurdhbManager.cs
new file mode 100644
index 0000000..b2b70f3
--- /dev/null
+++ b/MES.Service/service/Warehouse/PurdhbManager.cs
@@ -0,0 +1,11 @@
+锘縰sing MES.Service.DB;
+using MES.Service.Modes;
+
+namespace MES.Service.service.Warehouse;
+
+public class PurdhbManager : Repository<Purdhb>
+{
+    //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
+
+    //杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 PurdhbManager.cs
+}
\ No newline at end of file
diff --git a/MES.Service/service/Warehouse/PurdkaManager.cs b/MES.Service/service/Warehouse/PurdkaManager.cs
new file mode 100644
index 0000000..e17aa76
--- /dev/null
+++ b/MES.Service/service/Warehouse/PurdkaManager.cs
@@ -0,0 +1,11 @@
+锘縰sing MES.Service.DB;
+using MES.Service.Modes;
+
+namespace MES.Service.service.Warehouse;
+
+public class PurdkaManager : Repository<Purdka>
+{
+    //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
+
+    //杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 PurdkaManager.cs
+}
\ No newline at end of file
diff --git a/MES.Service/service/Warehouse/PurdkbManager.cs b/MES.Service/service/Warehouse/PurdkbManager.cs
new file mode 100644
index 0000000..881e38f
--- /dev/null
+++ b/MES.Service/service/Warehouse/PurdkbManager.cs
@@ -0,0 +1,11 @@
+锘縰sing MES.Service.DB;
+using MES.Service.Modes;
+
+namespace MES.Service.service.Warehouse;
+
+public class PurdkbManager : Repository<Purdkb>
+{
+    //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
+
+    //杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 PurdkbManager.cs
+}
\ No newline at end of file
diff --git a/MES.Service/util/AppsettingsUtility.cs b/MES.Service/util/AppsettingsUtility.cs
new file mode 100644
index 0000000..eabb6b4
--- /dev/null
+++ b/MES.Service/util/AppsettingsUtility.cs
@@ -0,0 +1,19 @@
+锘縰sing MES.Service.Dto.@base;
+using Microsoft.Extensions.Configuration;
+
+namespace MES.Service.util;
+
+public class AppsettingsUtility
+{
+    public static AppSettings Settings { get; private set; }
+
+    public void Initial(IConfiguration configuration)
+    {
+        var myOwn = new AppSettings();
+        //娉ㄦ剰锛氬彲浠ヤ娇鐢ㄥ啋鍙锋潵鑾峰彇鍐呭眰鐨勯厤缃」
+        myOwn.TestErpUrl = configuration["AppSettings:TestErpUrl"];
+        myOwn.ProductionErpUrl = configuration["AppSettings:ProductionErpUrl"];
+        myOwn.DataBaseConn = configuration["AppSettings:DataBaseConn"];
+        Settings = myOwn;
+    }
+}
\ No newline at end of file
diff --git a/MESApplication/Controllers/Warehouse/MesInvItemArnController.cs b/MESApplication/Controllers/Warehouse/MesInvItemArnController.cs
new file mode 100644
index 0000000..ab5eb43
--- /dev/null
+++ b/MESApplication/Controllers/Warehouse/MesInvItemArnController.cs
@@ -0,0 +1,202 @@
+锘縰sing System.Dynamic;
+using MES.Service.Dto.service;
+using MES.Service.Modes;
+using MES.Service.service.Warehouse;
+using MES.Service.util;
+using Microsoft.AspNetCore.Mvc;
+
+namespace MESApplication.Controllers.Warehouse;
+
+[ApiController]
+[Route("api/[controller]")]
+public class MesInvItemArnController : ControllerBase
+{
+    private readonly MesInvItemArnManager m = new();
+
+
+    [HttpPost("GetPageList")]
+    public ResponseResult GetPageList(WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetPagedResults(query);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    //GetSuppliers()
+    [HttpPost("GetSuppliers")]
+    public ResponseResult GetSuppliers()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetSuppliers();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     鑾峰彇鎵�鏈�
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetList")]
+    public ResponseResult GetList()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetList();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鑾峰彇
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetById")]
+    public ResponseResult GetById(int id)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetById(id);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鍒犻櫎
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("DeleteByIds")]
+    public ResponseResult DeleteByIds([FromBody] object[] ids)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.DeleteByIds(ids);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Insert")]
+    public ResponseResult Add([FromBody] MesInvItemArn data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Insert(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞杩斿洖鑷
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("InsertReturnIdentity")]
+    public ResponseResult InsertReturnIdentity([FromBody] MesInvItemArn data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.InsertReturnIdentity(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     淇敼
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Update")]
+    public ResponseResult Update([FromBody] MesInvItemArn data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Update(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+}
\ No newline at end of file
diff --git a/MESApplication/Controllers/Warehouse/MesInvItemArnDetailController.cs b/MESApplication/Controllers/Warehouse/MesInvItemArnDetailController.cs
new file mode 100644
index 0000000..5972239
--- /dev/null
+++ b/MESApplication/Controllers/Warehouse/MesInvItemArnDetailController.cs
@@ -0,0 +1,223 @@
+锘縰sing System.Dynamic;
+using MES.Service.Dto.service;
+using MES.Service.Modes;
+using MES.Service.service.Warehouse;
+using MES.Service.util;
+using Microsoft.AspNetCore.Mvc;
+
+namespace MESApplication.Controllers.Warehouse;
+
+[ApiController]
+[Route("api/[controller]")]
+public class MesInvItemArnDetailController : ControllerBase
+{
+    private readonly MesInvItemArnDetailManager m = new();
+
+    [HttpPost("GetDetails")]
+    public ResponseResult GetDetails(WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetDetails(query);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    //
+    [HttpPost("GetMaterial")]
+    public ResponseResult GetMaterial(WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetMaterial(query);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    //SetMaterial
+    [HttpPost("SetMaterial")]
+    public ResponseResult SetMaterial(Material material)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.SetMaterial(material);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     鑾峰彇鎵�鏈�
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetList")]
+    public ResponseResult GetList()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetList();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鑾峰彇
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetById")]
+    public ResponseResult GetById(int id)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetById(id);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鍒犻櫎
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("DeleteByIds")]
+    public ResponseResult DeleteByIds([FromBody] object[] ids)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.DeleteByIds(ids);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Insert")]
+    public ResponseResult Add([FromBody] MesInvItemArnDetail data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Insert(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞杩斿洖鑷
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("InsertReturnIdentity")]
+    public ResponseResult InsertReturnIdentity(
+        [FromBody] MesInvItemArnDetail data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.InsertReturnIdentity(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     淇敼
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Update")]
+    public ResponseResult Update([FromBody] MesInvItemArnDetail data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Update(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+}
\ No newline at end of file
diff --git a/MESApplication/Controllers/Warehouse/MesInvItemBarcodesController.cs b/MESApplication/Controllers/Warehouse/MesInvItemBarcodesController.cs
new file mode 100644
index 0000000..b783353
--- /dev/null
+++ b/MESApplication/Controllers/Warehouse/MesInvItemBarcodesController.cs
@@ -0,0 +1,163 @@
+锘縰sing System.Dynamic;
+using MES.Service.Modes;
+using MES.Service.service.Warehouse;
+using MES.Service.util;
+using Microsoft.AspNetCore.Mvc;
+
+namespace MESApplication.Controllers.Warehouse;
+
+[ApiController]
+[Route("api/[controller]")]
+public class MesInvItemBarcodesController : ControllerBase
+{
+    private readonly MesInvItemBarcodesManager m = new();
+
+
+    /***杩涘叆妯$増绠$悊鍙互淇敼妯$増***/
+
+    /// <summary>
+    ///     鑾峰彇鎵�鏈�
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetList")]
+    public ResponseResult GetList()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetList();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鑾峰彇
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetById")]
+    public ResponseResult GetById(int id)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetById(id);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鍒犻櫎
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("DeleteByIds")]
+    public ResponseResult DeleteByIds([FromBody] object[] ids)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.DeleteByIds(ids);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Insert")]
+    public ResponseResult Add([FromBody] MesInvItemBarcodes data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Insert(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞杩斿洖鑷
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("InsertReturnIdentity")]
+    public ResponseResult InsertReturnIdentity(
+        [FromBody] MesInvItemBarcodes data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.InsertReturnIdentity(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     淇敼
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Update")]
+    public ResponseResult Update([FromBody] MesInvItemBarcodes data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Update(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+}
\ No newline at end of file
diff --git a/MESApplication/Controllers/Warehouse/MesInvItemInCDetailsController.cs b/MESApplication/Controllers/Warehouse/MesInvItemInCDetailsController.cs
new file mode 100644
index 0000000..7cc9221
--- /dev/null
+++ b/MESApplication/Controllers/Warehouse/MesInvItemInCDetailsController.cs
@@ -0,0 +1,288 @@
+锘縰sing System.Dynamic;
+using MES.Service.Dto.service;
+using MES.Service.Modes;
+using MES.Service.service.Warehouse;
+using MES.Service.util;
+using Microsoft.AspNetCore.Mvc;
+
+namespace MESApplication.Controllers.Warehouse;
+
+[ApiController]
+[Route("api/[controller]")]
+public class MesInvItemInCDetailsController : ControllerBase
+{
+    private readonly MesInvItemInCDetailsManager m = new();
+
+    //audit
+    [HttpPost("Audit")]
+    public ResponseResult Audit(WarehouseQuery entity)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.audit(entity);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    //deApprove
+    [HttpPost("DeApprove")]
+    public ResponseResult DeApprove(WarehouseQuery entity)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.deApprove(entity);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    //getPurchaseInventory
+    [HttpPost("GetPurchaseInventory")]
+    public ResponseResult GetPurchaseInventory(WarehouseQuery entity)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.getPurchaseInventory(entity);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    [HttpPost("GetInvItemInsList")]
+    public ResponseResult GetInvItemInsList(WarehouseQuery entity)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetInvItemInsList(entity);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    //SaveBarCodes
+    [HttpPost("SaveBarCodes")]
+    public ResponseResult SaveBarCodes(WarehouseQuery entity)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.SaveBarCodes(entity);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    //MesToErp
+    [HttpPost("SaveMessageCenter")]
+    public ResponseResult SaveMessageCenter(WarehouseQuery entity)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.SaveMessageCenter(entity);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /***杩涘叆妯$増绠$悊鍙互淇敼妯$増***/
+
+    /// <summary>
+    ///     鑾峰彇鎵�鏈�
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetList")]
+    public ResponseResult GetList()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetList();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鑾峰彇
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetById")]
+    public ResponseResult GetById(int id)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetById(id);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鍒犻櫎
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("DeleteByIds")]
+    public ResponseResult DeleteByIds([FromBody] object[] ids)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.DeleteByIds(ids);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Insert")]
+    public ResponseResult Add([FromBody] MesInvItemInCDetails data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Insert(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞杩斿洖鑷
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("InsertReturnIdentity")]
+    public ResponseResult InsertReturnIdentity(
+        [FromBody] MesInvItemInCDetails data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.InsertReturnIdentity(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     淇敼
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Update")]
+    public ResponseResult Update([FromBody] MesInvItemInCDetails data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Update(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+}
\ No newline at end of file
diff --git a/MESApplication/Controllers/Warehouse/MesInvItemInCItemsController.cs b/MESApplication/Controllers/Warehouse/MesInvItemInCItemsController.cs
new file mode 100644
index 0000000..e849ce3
--- /dev/null
+++ b/MESApplication/Controllers/Warehouse/MesInvItemInCItemsController.cs
@@ -0,0 +1,163 @@
+锘縰sing System.Dynamic;
+using MES.Service.Modes;
+using MES.Service.service.Warehouse;
+using MES.Service.util;
+using Microsoft.AspNetCore.Mvc;
+
+namespace MESApplication.Controllers.Warehouse;
+
+[ApiController]
+[Route("api/[controller]")]
+public class MesInvItemInCItemsController : ControllerBase
+{
+    private readonly MesInvItemInCItemsManager m = new();
+
+
+    /***杩涘叆妯$増绠$悊鍙互淇敼妯$増***/
+
+    /// <summary>
+    ///     鑾峰彇鎵�鏈�
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetList")]
+    public ResponseResult GetList()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetList();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鑾峰彇
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetById")]
+    public ResponseResult GetById(int id)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetById(id);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鍒犻櫎
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("DeleteByIds")]
+    public ResponseResult DeleteByIds([FromBody] object[] ids)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.DeleteByIds(ids);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Insert")]
+    public ResponseResult Add([FromBody] MesInvItemInCItems data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Insert(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞杩斿洖鑷
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("InsertReturnIdentity")]
+    public ResponseResult InsertReturnIdentity(
+        [FromBody] MesInvItemInCItems data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.InsertReturnIdentity(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     淇敼
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Update")]
+    public ResponseResult Update([FromBody] MesInvItemInCItems data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Update(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+}
\ No newline at end of file
diff --git a/MESApplication/Controllers/Warehouse/MesInvItemOutCDetailsController.cs b/MESApplication/Controllers/Warehouse/MesInvItemOutCDetailsController.cs
new file mode 100644
index 0000000..91c79f4
--- /dev/null
+++ b/MESApplication/Controllers/Warehouse/MesInvItemOutCDetailsController.cs
@@ -0,0 +1,163 @@
+锘縰sing System.Dynamic;
+using MES.Service.Modes;
+using MES.Service.service.Warehouse;
+using MES.Service.util;
+using Microsoft.AspNetCore.Mvc;
+
+namespace MESApplication.Controllers.Warehouse;
+
+[ApiController]
+[Route("api/[controller]")]
+public class MesInvItemOutCDetailsController : ControllerBase
+{
+    private readonly MesInvItemOutCDetailsManager m = new();
+
+
+    /***杩涘叆妯$増绠$悊鍙互淇敼妯$増***/
+
+    /// <summary>
+    ///     鑾峰彇鎵�鏈�
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetList")]
+    public ResponseResult GetList()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetList();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鑾峰彇
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetById")]
+    public ResponseResult GetById(int id)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetById(id);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鍒犻櫎
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("DeleteByIds")]
+    public ResponseResult DeleteByIds([FromBody] object[] ids)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.DeleteByIds(ids);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Insert")]
+    public ResponseResult Add([FromBody] MesInvItemOutCDetails data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Insert(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞杩斿洖鑷
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("InsertReturnIdentity")]
+    public ResponseResult InsertReturnIdentity(
+        [FromBody] MesInvItemOutCDetails data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.InsertReturnIdentity(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     淇敼
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Update")]
+    public ResponseResult Update([FromBody] MesInvItemOutCDetails data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Update(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+}
\ No newline at end of file
diff --git a/MESApplication/Controllers/Warehouse/MesInvItemOutItemsController.cs b/MESApplication/Controllers/Warehouse/MesInvItemOutItemsController.cs
new file mode 100644
index 0000000..405bdb7
--- /dev/null
+++ b/MESApplication/Controllers/Warehouse/MesInvItemOutItemsController.cs
@@ -0,0 +1,163 @@
+锘縰sing System.Dynamic;
+using MES.Service.Modes;
+using MES.Service.service.Warehouse;
+using MES.Service.util;
+using Microsoft.AspNetCore.Mvc;
+
+namespace MESApplication.Controllers.Warehouse;
+
+[ApiController]
+[Route("api/[controller]")]
+public class MesInvItemOutItemsController : ControllerBase
+{
+    private readonly MesInvItemOutItemsManager m = new();
+
+
+    /***杩涘叆妯$増绠$悊鍙互淇敼妯$増***/
+
+    /// <summary>
+    ///     鑾峰彇鎵�鏈�
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetList")]
+    public ResponseResult GetList()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetList();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鑾峰彇
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetById")]
+    public ResponseResult GetById(int id)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetById(id);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鍒犻櫎
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("DeleteByIds")]
+    public ResponseResult DeleteByIds([FromBody] object[] ids)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.DeleteByIds(ids);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Insert")]
+    public ResponseResult Add([FromBody] MesInvItemOutItems data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Insert(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞杩斿洖鑷
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("InsertReturnIdentity")]
+    public ResponseResult InsertReturnIdentity(
+        [FromBody] MesInvItemOutItems data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.InsertReturnIdentity(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     淇敼
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Update")]
+    public ResponseResult Update([FromBody] MesInvItemOutItems data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Update(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+}
\ No newline at end of file
diff --git a/MESApplication/Controllers/Warehouse/MesInvItemOutsController.cs b/MESApplication/Controllers/Warehouse/MesInvItemOutsController.cs
new file mode 100644
index 0000000..908f78a
--- /dev/null
+++ b/MESApplication/Controllers/Warehouse/MesInvItemOutsController.cs
@@ -0,0 +1,453 @@
+锘縰sing System.Dynamic;
+using MES.Service.Dto.service;
+using MES.Service.Modes;
+using MES.Service.service.Warehouse;
+using MES.Service.util;
+using Microsoft.AspNetCore.Mvc;
+
+namespace MESApplication.Controllers.Warehouse;
+
+[ApiController]
+[Route("api/[controller]")]
+public class MesInvItemOutsController : ControllerBase
+{
+    private readonly MesInvItemOutsManager m = new();
+
+
+    [HttpPost("ScanCode")]
+    public ResponseResult ScanCode(WarehouseQuery entity)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.ScanCode(entity);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    [HttpPost("GetScanBarcode")]
+    public ResponseResult GetScanBarcode(WarehouseQuery entity)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetScanBarcode(entity);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    [HttpPost("SaveMessageCenter")]
+    public ResponseResult SaveMessageCenter(WarehouseQuery entity)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.SaveMessageCenter(entity);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    //GetItemOutNo
+    [HttpPost("GetItemOutNo")]
+    public ResponseResult GetItemOutNo()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetItemOutNo();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+
+    //Audit
+    [HttpPost("Audit")]
+    public ResponseResult Audit(WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Audit(query);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    //SetNFlag
+    [HttpPost("SetNFlag")]
+    public ResponseResult SetNFlag(WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.SetNFlag(query);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    //DeApproveBefore
+    [HttpPost("DeApproveBefore")]
+    public ResponseResult DeApproveBefore(WarehouseQuery entity)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.DeApproveBefore(entity);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    [HttpPost("DeApprove")]
+    public ResponseResult DeApprove(WarehouseQuery entity)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.DeApprove(entity);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    //SaveCombination
+    [HttpPost("SaveCombination")]
+    public ResponseResult SaveCombination(OutItemDto dto)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.SaveCombination(dto);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    //GetMaxItemOutNo
+    [HttpPost("GetMaxItemOutNo")]
+    public ResponseResult GetMaxItemOutNo()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetMaxItemOutNo();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    [HttpPost("GetPage")]
+    public ResponseResult GetPage(WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetPage(query);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    //GetItems
+    [HttpPost("GetItems")]
+    public ResponseResult GetItems(WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetItems(query);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    [HttpPost("GetSumItem")]
+    public ResponseResult GetSumItem(WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetSumItem(query);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    //SelectMaterials
+    [HttpPost("SelectMaterials")]
+    public ResponseResult SelectMaterials(WarehouseQuery query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.SelectMaterials(query);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /***杩涘叆妯$増绠$悊鍙互淇敼妯$増***/
+
+    /// <summary>
+    ///     鑾峰彇鎵�鏈�
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetList")]
+    public ResponseResult GetList()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetList();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鑾峰彇
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetById")]
+    public ResponseResult GetById(int id)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetById(id);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鍒犻櫎
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("DeleteByIds")]
+    public ResponseResult DeleteByIds([FromBody] object[] ids)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.DeleteByIds(ids);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Insert")]
+    public ResponseResult Add([FromBody] MesInvItemOuts data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Insert(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞杩斿洖鑷
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("InsertReturnIdentity")]
+    public ResponseResult InsertReturnIdentity(
+        [FromBody] MesInvItemOuts data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.InsertReturnIdentity(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     淇敼
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Update")]
+    public ResponseResult Update([FromBody] MesInvItemOuts data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Update(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+}
\ No newline at end of file
diff --git a/MESApplication/Controllers/Warehouse/MesInvItemStocksController.cs b/MESApplication/Controllers/Warehouse/MesInvItemStocksController.cs
new file mode 100644
index 0000000..43605be
--- /dev/null
+++ b/MESApplication/Controllers/Warehouse/MesInvItemStocksController.cs
@@ -0,0 +1,162 @@
+锘縰sing System.Dynamic;
+using MES.Service.Modes;
+using MES.Service.service.Warehouse;
+using MES.Service.util;
+using Microsoft.AspNetCore.Mvc;
+
+namespace MESApplication.Controllers.Warehouse;
+
+[ApiController]
+[Route("api/[controller]")]
+public class MesInvItemStocksController : ControllerBase
+{
+    private readonly MesInvItemStocksManager m = new();
+
+
+    /***杩涘叆妯$増绠$悊鍙互淇敼妯$増***/
+
+    /// <summary>
+    ///     鑾峰彇鎵�鏈�
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetList")]
+    public ResponseResult GetList()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetList();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鑾峰彇
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetById")]
+    public ResponseResult GetById(int id)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetById(id);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鍒犻櫎
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("DeleteByIds")]
+    public ResponseResult DeleteByIds([FromBody] object[] ids)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.DeleteByIds(ids);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Insert")]
+    public ResponseResult Add([FromBody] MesInvItemStocks data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Insert(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞杩斿洖鑷
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("InsertReturnIdentity")]
+    public ResponseResult InsertReturnIdentity([FromBody] MesInvItemStocks data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.InsertReturnIdentity(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     淇敼
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Update")]
+    public ResponseResult Update([FromBody] MesInvItemStocks data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Update(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+}
\ No newline at end of file
diff --git a/MESApplication/Controllers/Warehouse/MesQaItemsDetect01Controller.cs b/MESApplication/Controllers/Warehouse/MesQaItemsDetect01Controller.cs
new file mode 100644
index 0000000..8ede063
--- /dev/null
+++ b/MESApplication/Controllers/Warehouse/MesQaItemsDetect01Controller.cs
@@ -0,0 +1,163 @@
+锘縰sing System.Dynamic;
+using MES.Service.Modes;
+using MES.Service.service.Warehouse;
+using MES.Service.util;
+using Microsoft.AspNetCore.Mvc;
+
+namespace MESApplication.Controllers.Warehouse;
+
+[ApiController]
+[Route("api/[controller]")]
+public class MesQaItemsDetect01Controller : ControllerBase
+{
+    private readonly MesQaItemsDetect01Manager m = new();
+
+
+    /***杩涘叆妯$増绠$悊鍙互淇敼妯$増***/
+
+    /// <summary>
+    ///     鑾峰彇鎵�鏈�
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetList")]
+    public ResponseResult GetList()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetList();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鑾峰彇
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetById")]
+    public ResponseResult GetById(int id)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetById(id);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鍒犻櫎
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("DeleteByIds")]
+    public ResponseResult DeleteByIds([FromBody] object[] ids)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.DeleteByIds(ids);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Insert")]
+    public ResponseResult Add([FromBody] MesQaItemsDetect01 data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Insert(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞杩斿洖鑷
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("InsertReturnIdentity")]
+    public ResponseResult InsertReturnIdentity(
+        [FromBody] MesQaItemsDetect01 data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.InsertReturnIdentity(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     淇敼
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Update")]
+    public ResponseResult Update([FromBody] MesQaItemsDetect01 data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Update(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+}
\ No newline at end of file
diff --git a/MESApplication/Controllers/Warehouse/PurdhbController.cs b/MESApplication/Controllers/Warehouse/PurdhbController.cs
new file mode 100644
index 0000000..3687f1d
--- /dev/null
+++ b/MESApplication/Controllers/Warehouse/PurdhbController.cs
@@ -0,0 +1,162 @@
+锘縰sing System.Dynamic;
+using MES.Service.Modes;
+using MES.Service.service.Warehouse;
+using MES.Service.util;
+using Microsoft.AspNetCore.Mvc;
+
+namespace MESApplication.Controllers.Warehouse;
+
+[ApiController]
+[Route("api/[controller]")]
+public class PurdhbController : ControllerBase
+{
+    private readonly PurdhbManager m = new();
+
+
+    /***杩涘叆妯$増绠$悊鍙互淇敼妯$増***/
+
+    /// <summary>
+    ///     鑾峰彇鎵�鏈�
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetList")]
+    public ResponseResult GetList()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetList();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鑾峰彇
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetById")]
+    public ResponseResult GetById(int id)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetById(id);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鍒犻櫎
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("DeleteByIds")]
+    public ResponseResult DeleteByIds([FromBody] object[] ids)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.DeleteByIds(ids);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Insert")]
+    public ResponseResult Add([FromBody] Purdhb data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Insert(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞杩斿洖鑷
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("InsertReturnIdentity")]
+    public ResponseResult InsertReturnIdentity([FromBody] Purdhb data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.InsertReturnIdentity(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     淇敼
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Update")]
+    public ResponseResult Update([FromBody] Purdhb data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Update(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+}
\ No newline at end of file
diff --git a/MESApplication/Controllers/Warehouse/PurdkaController.cs b/MESApplication/Controllers/Warehouse/PurdkaController.cs
new file mode 100644
index 0000000..3f0b71d
--- /dev/null
+++ b/MESApplication/Controllers/Warehouse/PurdkaController.cs
@@ -0,0 +1,162 @@
+锘縰sing System.Dynamic;
+using MES.Service.Modes;
+using MES.Service.service.Warehouse;
+using MES.Service.util;
+using Microsoft.AspNetCore.Mvc;
+
+namespace MESApplication.Controllers.Warehouse;
+
+[ApiController]
+[Route("api/[controller]")]
+public class PurdkaController : ControllerBase
+{
+    private readonly PurdkaManager m = new();
+
+
+    /***杩涘叆妯$増绠$悊鍙互淇敼妯$増***/
+
+    /// <summary>
+    ///     鑾峰彇鎵�鏈�
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetList")]
+    public ResponseResult GetList()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetList();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鑾峰彇
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetById")]
+    public ResponseResult GetById(int id)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetById(id);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鍒犻櫎
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("DeleteByIds")]
+    public ResponseResult DeleteByIds([FromBody] object[] ids)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.DeleteByIds(ids);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Insert")]
+    public ResponseResult Add([FromBody] Purdka data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Insert(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞杩斿洖鑷
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("InsertReturnIdentity")]
+    public ResponseResult InsertReturnIdentity([FromBody] Purdka data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.InsertReturnIdentity(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     淇敼
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Update")]
+    public ResponseResult Update([FromBody] Purdka data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Update(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+}
\ No newline at end of file
diff --git a/MESApplication/Controllers/Warehouse/PurdkbController.cs b/MESApplication/Controllers/Warehouse/PurdkbController.cs
new file mode 100644
index 0000000..8ebf009
--- /dev/null
+++ b/MESApplication/Controllers/Warehouse/PurdkbController.cs
@@ -0,0 +1,162 @@
+锘縰sing System.Dynamic;
+using MES.Service.Modes;
+using MES.Service.service.Warehouse;
+using MES.Service.util;
+using Microsoft.AspNetCore.Mvc;
+
+namespace MESApplication.Controllers.Warehouse;
+
+[ApiController]
+[Route("api/[controller]")]
+public class PurdkbController : ControllerBase
+{
+    private readonly PurdkbManager m = new();
+
+
+    /***杩涘叆妯$増绠$悊鍙互淇敼妯$増***/
+
+    /// <summary>
+    ///     鑾峰彇鎵�鏈�
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetList")]
+    public ResponseResult GetList()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetList();
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鑾峰彇
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("GetById")]
+    public ResponseResult GetById(int id)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.GetById(id);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     鏍规嵁涓婚敭鍒犻櫎
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("DeleteByIds")]
+    public ResponseResult DeleteByIds([FromBody] object[] ids)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.DeleteByIds(ids);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Insert")]
+    public ResponseResult Add([FromBody] Purdkb data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Insert(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     娣诲姞杩斿洖鑷
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("InsertReturnIdentity")]
+    public ResponseResult InsertReturnIdentity([FromBody] Purdkb data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.InsertReturnIdentity(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    ///     淇敼
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("Update")]
+    public ResponseResult Update([FromBody] Purdkb data)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos.tbBillList = m.Update(data);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3