From 2e37035392c187b26a09a2c2edcc6133e96532cc Mon Sep 17 00:00:00 2001
From: kyy <3283105747@qq.com>
Date: 星期四, 04 九月 2025 15:57:15 +0800
Subject: [PATCH] 1、收料通知单接口 2、采购订单接口加委外订单分录内码

---
 MESApplication/Controllers/BasicData/MesInvItemArnController.cs |  339 +++++++++++++++++++
 MES.Service/Dto/webApi/ErpSltzBList.cs                          |   84 ++++
 MES.Service/Modes/MesRohInData.cs                               |    7 
 MES.Service/service/BasicData/MesRohInManager.cs                |   32 -
 MES.Service/Modes/MesInvItemArn.cs                              |   69 ++++
 MES.Service/Dto/webApi/ErpRohinData.cs                          |    3 
 MES.Service/Dto/webApi/ErpSltz.cs                               |    7 
 MES.Service/Dto/webApi/ErpSltza.cs                              |   55 +++
 MES.Service/service/BasicData/MesInvItemArnManager.cs           |  263 +++++++++++++++
 MES.Service/Modes/MesInvItemArnDetail.cs                        |  117 ++++++
 10 files changed, 948 insertions(+), 28 deletions(-)

diff --git a/MES.Service/Dto/webApi/ErpRohinData.cs b/MES.Service/Dto/webApi/ErpRohinData.cs
index 91bb37d..eda56a3 100644
--- a/MES.Service/Dto/webApi/ErpRohinData.cs
+++ b/MES.Service/Dto/webApi/ErpRohinData.cs
@@ -53,5 +53,8 @@
     public string? FDEMANDBILLENTRYSEQ { get; set; }
     public string? SalesOrderId { get; set; }
     public string? OrderLineId { get; set; }
+    public string? FSUBREQENTRYID { get; set; }
+    
+ 
     
 }
\ No newline at end of file
diff --git a/MES.Service/Dto/webApi/ErpSltz.cs b/MES.Service/Dto/webApi/ErpSltz.cs
new file mode 100644
index 0000000..f690bf2
--- /dev/null
+++ b/MES.Service/Dto/webApi/ErpSltz.cs
@@ -0,0 +1,7 @@
+namespace MES.Service.Dto.webApi;
+
+public class ErpSltz
+{
+    public ErpSltza ErpSltza { get; set; }
+    public List<ErpSltzBList> ErpSltzBList { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Dto/webApi/ErpSltzBList.cs b/MES.Service/Dto/webApi/ErpSltzBList.cs
new file mode 100644
index 0000000..befa74f
--- /dev/null
+++ b/MES.Service/Dto/webApi/ErpSltzBList.cs
@@ -0,0 +1,84 @@
+namespace MES.Service.Dto.webApi;
+
+public class ErpSltzBList
+{
+    /// <summary>
+    /// 鏀舵枡閫氱煡鍗曞垎褰曞唴鐮�
+    /// </summary>
+    public string? LineNo { get; set; }
+
+    /// <summary>
+    /// 璁㈠崟鍗曞彿
+    /// </summary>
+    public string? FBillNo { get; set; }
+
+    /// <summary>
+    /// 鐗╂枡缂栫爜
+    /// </summary>
+    public string? ProductCode { get; set; }
+
+    /// <summary>
+    /// 璁㈠崟鏁伴噺
+    /// </summary>
+    public string? PurchaseQty { get; set; }
+
+    /// <summary>
+    /// 鏈搴旀敹鏁伴噺
+    /// </summary>
+    public string? DeliveryQty { get; set; }
+
+    /// <summary>
+    /// 浜よ揣鏁伴噺
+    /// </summary>
+    public string? IncludeQty { get; set; }
+
+    /// <summary>
+    /// 鏀舵枡鍗曚綅
+    /// </summary>
+    public string? PurchaseUnit { get; set; }
+
+    /// <summary>
+    /// 搴撳瓨鍗曚綅
+    /// </summary>
+    public string? InventoryUnit { get; set; }
+
+    /// <summary>
+    /// 澶囨敞
+    /// </summary>
+    public string? Remark { get; set; }
+
+    /// <summary>
+    /// 婧愬崟鍗曞彿
+    /// </summary>
+    public string? FSrcBillNo { get; set; }
+
+    /// <summary>
+    /// 婧愬崟鍒嗗綍鍐呯爜
+    /// </summary>
+    public string? FSrcBillLine { get; set; }
+
+    /// <summary>
+    /// 閿�鍞鍗曞彿
+    /// </summary>
+    public string? SalesOrderId { get; set; }
+
+    /// <summary>
+    /// 璁″垝璺熻釜鍙�
+    /// </summary>
+    public string? FMtoNo { get; set; }
+
+    /// <summary>
+    /// 鎵瑰彿
+    /// </summary>
+    public string? FLot { get; set; }
+
+    /// <summary>
+    /// 鎬ユ枡鏍囪瘑
+    /// </summary>
+    public string? urgentFlag { get; set; }
+
+    /// <summary>
+    /// 浠撳簱
+    /// </summary>
+    public string? DepotId { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Dto/webApi/ErpSltza.cs b/MES.Service/Dto/webApi/ErpSltza.cs
new file mode 100644
index 0000000..b82b28f
--- /dev/null
+++ b/MES.Service/Dto/webApi/ErpSltza.cs
@@ -0,0 +1,55 @@
+namespace MES.Service.Dto.webApi;
+
+public class ErpSltza
+{
+    
+    /// <summary>
+    /// 鎿嶄綔绫诲瀷
+    /// </summary>
+    public string? TYPE { get; set; }
+
+    /// <summary>
+    /// 鍗曟嵁缂栧彿
+    /// </summary>
+    public string? billNo { get; set; }
+
+    /// <summary>
+    /// 渚涘簲鍟�
+    /// </summary>
+    public string? SupplierId { get; set; }
+
+    /// <summary>
+    /// 鍗曟嵁鏃ユ湡
+    /// </summary>
+    public string? FDate { get; set; }
+
+    /// <summary>
+    /// 澶囨敞
+    /// </summary>
+    public string? Remark { get; set; }
+
+    /// <summary>
+    /// 鏄惁渚涘崗
+    /// </summary>
+    public string? F_ZJXF_sfgx { get; set; }
+
+    /// <summary>
+    /// 鏀舵枡閫氱煡鍗曡〃澶村唴鐮�
+    /// </summary>
+    public string? erpId { get; set; }
+
+    /// <summary>
+    /// 鍒涘缓浜�
+    /// </summary>
+    public string? createBy { get; set; }
+
+    /// <summary>
+    /// 鏄惁濮斿
+    /// </summary>
+    public string? fType { get; set; }
+
+    /// <summary>
+    /// 鏀舵枡缁勭粐
+    /// </summary>
+    public string? ReceiveOrgId { 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..802d235
--- /dev/null
+++ b/MES.Service/Modes/MesInvItemArn.cs
@@ -0,0 +1,69 @@
+using SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+/// 鏀舵枡鍗曡〃锛堝搴擬ES_INV_ITEM_ARN琛級
+/// </summary>
+[SugarTable("MES_INV_ITEM_ARN")]
+public class MesInvItemArn
+{
+    /// <summary>
+    /// 璁板綍鍞竴鏍囪瘑锛堜富閿級
+    /// </summary>
+    [SugarColumn(ColumnName = "GUID", IsPrimaryKey = true)]
+    public Guid Id { get; set; }
+    /// <summary>
+    /// 鏀舵枡鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "bill_no")]
+    public string? BillNo { get; set; }
+
+    /// <summary>
+    /// 渚涘簲鍟嗙紪鍙�
+    /// </summary>
+    [SugarColumn(ColumnName = "supp_id")]
+    public string? SuppId { get; set; }
+
+    /// <summary>
+    /// 鍗曟嵁鏃ユ湡
+    /// </summary>
+    [SugarColumn(ColumnName = "create_date")]
+    public DateTime? CreateDate { get; set; }
+
+    /// <summary>
+    /// 澶囨敞淇℃伅
+    /// </summary>
+    [SugarColumn(ColumnName = "remark")]
+    public string? Remark { get; set; }
+
+    /// <summary>
+    /// 鏄惁srm锛�0鍚︺��1鏄級
+    /// </summary>
+    [SugarColumn(ColumnName = "IS_SRM")]
+    public int? IsSrm { get; set; }
+
+    /// <summary>
+    /// ERPID
+    /// </summary>
+    [SugarColumn(ColumnName = "ebeln_k3id")]
+    public string? EbelnK3id { get; set; }
+
+    /// <summary>
+    /// 鍒涘缓浜�
+    /// </summary>
+    [SugarColumn(ColumnName = "create_by")]
+    public string? CreateBy { get; set; }
+
+    /// <summary>
+    /// 鏄惁濮斿
+    /// </summary>
+    [SugarColumn(ColumnName = "f_type")]
+    public bool? FType { get; set; }
+
+    /// <summary>
+    /// 鏀舵枡缁勭粐
+    /// </summary>
+    [SugarColumn(ColumnName = "ReceiveOrgId")]
+    public string? ReceiveOrgId { 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..0ee4404
--- /dev/null
+++ b/MES.Service/Modes/MesInvItemArnDetail.cs
@@ -0,0 +1,117 @@
+using SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+/// 鏀舵枡鍗曟槑缁嗚〃锛堝搴擬ES_INV_ITEM_ARN_DETAIL琛級
+/// </summary>
+[SugarTable("MES_INV_ITEM_ARN_DETAIL")]
+public class MesInvItemArnDetail
+{
+    // /// <summary>
+    // /// 鏀舵枡閫氱煡鍗曞垎褰曞唴鐮�
+    // /// </summary>
+    // [SugarColumn(IsPrimaryKey = true)] // 榛樿涓轰富閿紙鑻ュ疄闄呬富閿笉鏄瀛楁锛屽彲鏍规嵁涓氬姟璋冩暣涓婚敭閰嶇疆锛�
+    // public int? LineNo { get; set; }
+
+    /// <summary>
+    /// 閲囪喘鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "ebeln")]
+    public string? Ebeln { get; set; }
+    /// <summary>
+    /// 鏄庣粏琛ㄨ褰曞敮涓�鏍囪瘑锛堜富閿級
+    /// </summary>
+    [SugarColumn(ColumnName = "GUID", IsPrimaryKey = true)]
+    public Guid Id { get; set; }
+
+    /// <summary>
+    /// 鍏宠仈涓昏〃锛圡ES_INV_ITEM_ARN锛夌殑 ID
+    /// </summary>
+    [SugarColumn(ColumnName = "parent_Guid")]
+    public Guid? Mid { get; set; }
+    
+    /// <summary>
+    /// 鐗╂枡缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "item_id")]
+    public int? ItemId { get; set; }
+
+    /// <summary>
+    /// 閲囪喘璁㈠崟鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "ebeln_qty")]
+    public decimal? EbelnQty { get; set; }
+
+    /// <summary>
+    /// 鏈搴旀敹鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "sub_qty")]
+    public decimal? SubQty { get; set; }
+
+    /// <summary>
+    /// 鏈瀹炴敹鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "quantity")]
+    public decimal? Quantity { get; set; }
+
+    // /// <summary>
+    // /// 閲囪喘鍗曚綅
+    // /// </summary>
+    // [SugarColumn] // 鏈彁渚涘叿浣揗ES鏍囪瘑锛岄粯璁ゆ寜灞炴�у悕鏄犲皠锛堣嫢瀹為檯瀛楁鍚嶄笉鍚岋紝闇�琛ュ厖ColumnName锛�
+    // public string? PurchaseUnit { get; set; }
+    //
+    // /// <summary>
+    // /// 搴撳瓨鍗曚綅
+    // /// </summary>
+    // [SugarColumn] // 鏈彁渚涘叿浣揗ES鏍囪瘑锛岄粯璁ゆ寜灞炴�у悕鏄犲皠锛堣嫢瀹為檯瀛楁鍚嶄笉鍚岋紝闇�琛ュ厖ColumnName锛�
+    // public string? InventoryUnit { get; set; }
+
+    /// <summary>
+    /// 澶囨敞
+    /// </summary>
+    [SugarColumn(ColumnName = "memo")]
+    public string? Memo { get; set; }
+
+    /// <summary>
+    /// 閲囪喘鍗旾D
+    /// </summary>
+    [SugarColumn(ColumnName = "ebeln_k3id")]
+    public int? EbelnK3id { get; set; }
+
+    /// <summary>
+    /// 閲囪喘鍗曡ID
+    /// </summary>
+    [SugarColumn(ColumnName = "line_k3id")]
+    public int? LineK3id { get; set; }
+
+    // /// <summary>
+    // /// 閿�鍞鍗曞彿
+    // /// </summary>
+    // [SugarColumn] // 鏈彁渚涘叿浣揗ES鏍囪瘑锛岄粯璁ゆ寜灞炴�у悕鏄犲皠锛堣嫢瀹為檯瀛楁鍚嶄笉鍚岋紝闇�琛ュ厖ColumnName锛�
+    // public string? SalesOrderId { get; set; }
+    //
+    // /// <summary>
+    // /// 璁″垝璺熻釜鍙�
+    // /// </summary>
+    // [SugarColumn] // 鏈彁渚涘叿浣揗ES鏍囪瘑锛岄粯璁ゆ寜灞炴�у悕鏄犲皠锛堣嫢瀹為檯瀛楁鍚嶄笉鍚岋紝闇�琛ュ厖ColumnName锛�
+    // public string? FMtoNo { get; set; }
+    //
+    // /// <summary>
+    // /// 鎵瑰彿
+    // /// </summary>
+    // [SugarColumn] // 鏈彁渚涘叿浣揗ES鏍囪瘑锛岄粯璁ゆ寜灞炴�у悕鏄犲皠锛堣嫢瀹為檯瀛楁鍚嶄笉鍚岋紝闇�琛ュ厖ColumnName锛�
+    // public string? FLot { get; set; }
+
+    /// <summary>
+    /// 鎬ユ枡鏍囪瘑
+    /// </summary>
+    [SugarColumn(ColumnName = "urgent_flag")]
+    public bool? UrgentFlag { get; set; }
+
+    // /// <summary>
+    // /// 鏀惰揣浠撳簱缂栧彿
+    // /// </summary>
+    // [SugarColumn(ColumnName = "FSTOCKID")]
+    // public string? FStockId { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Modes/MesRohInData.cs b/MES.Service/Modes/MesRohInData.cs
index 271c45a..d7ad04c 100644
--- a/MES.Service/Modes/MesRohInData.cs
+++ b/MES.Service/Modes/MesRohInData.cs
@@ -355,4 +355,11 @@
     /// </summary>
     [SugarColumn(ColumnName = "FDEMANDBILLNO_LINE")]
     public string? FdemandbillnoLine { get; set; }
+    
+    /// <summary>
+    ///     濮斿璁㈠崟鍒嗗綍鍐呯爜
+    /// </summary>
+    [SugarColumn(ColumnName = "FSUBREQENTRYID")]
+    public string? FSUBREQENTRYID { get; set; }
+  
 }
\ No newline at end of file
diff --git a/MES.Service/service/BasicData/MesInvItemArnManager.cs b/MES.Service/service/BasicData/MesInvItemArnManager.cs
new file mode 100644
index 0000000..53e92ad
--- /dev/null
+++ b/MES.Service/service/BasicData/MesInvItemArnManager.cs
@@ -0,0 +1,263 @@
+using MES.Service.DB;
+using MES.Service.Dto.webApi;
+using MES.Service.Modes;
+using MES.Service.util;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace MES.Service.service;
+
+/// <summary>
+/// 鏀舵枡鍗曟暟鎹鐞嗙被锛堝鐞咵RP鏀舵枡鍗曟暟鎹悓姝ュ埌MES鏀舵枡鍗曡〃锛�
+/// 鍏宠仈涓昏〃锛歁esInvItemArn锛屾槑缁嗚〃锛歁esInvItemArnDetail
+/// 鍏宠仈ERP DTO锛欵rpSltz锛堣仛鍚堢被锛夈�丒rpSltza锛圗RP涓昏〃锛夈�丒rpSltzBList锛圗RP鏄庣粏锛�
+/// </summary>
+public class MesInvItemArnManager : Repository<MesInvItemArn>
+{
+    /// <summary>
+    /// 鎵归噺淇濆瓨鏀舵枡鍗曪紙涓昏〃+鏄庣粏锛�- 浜嬪姟淇濊瘉鎵归噺鎿嶄綔涓�鑷存��
+    /// </summary>
+    /// <param name="erpSltzList">ERP鏀舵枡鍗曞垪琛紙鍚富琛�+鏄庣粏锛�</param>
+    /// <returns>鍏ㄩ儴鎴愬姛杩斿洖true锛屽惁鍒檉alse</returns>
+    public bool SaveList(List<ErpSltz> erpSltzList)
+    {
+        if (erpSltzList == null || !erpSltzList.Any())
+            throw new ArgumentNullException(nameof(erpSltzList), "寰呬繚瀛樼殑鏀舵枡鍗曞垪琛ㄤ笉鑳戒负绌�");
+
+        // 淇锛氱敤浜嬪姟鍖呰9鎵归噺鎿嶄綔锛岀‘淇濇暟鎹竴鑷存��
+        return UseTransaction(db =>
+        {
+            foreach (var erpSltz in erpSltzList)
+            {
+                // 淇锛氳皟鐢ㄤ簨鍔″唴鐨凷ave鏂规硶锛屼紶鍏b瀹炰緥
+                if (!Save(db, erpSltz))
+                {
+                    return 0; // 鍗曟潯澶辫触锛屼簨鍔″洖婊�
+                }
+            }
+            return 1; // 鍏ㄩ儴鎴愬姛
+        }) > 0;
+    }
+
+    /// <summary>
+    /// 鍗曟潯淇濆瓨鏀舵枡鍗曪紙涓昏〃+鏄庣粏锛�- 浜嬪姟鍐呰皟鐢紙淇璁块棶淇グ绗︼紝纭繚浜嬪姟鍐呭彲鐢級
+    /// </summary>
+    /// <param name="db">浜嬪姟鍐呯殑SqlSugar瀹炰緥</param>
+    /// <param name="erpSltz">ERP鏀舵枡鍗曪紙鍚富琛�+鏄庣粏锛�</param>
+    /// <returns>鍗曟潯澶勭悊鎴愬姛杩斿洖true</returns>
+    private bool Save(SqlSugarScope db, ErpSltz erpSltz)
+    {
+        // 1. 鍙傛暟鏍¢獙
+        if (erpSltz == null)
+            throw new ArgumentNullException(nameof(erpSltz), "鏀舵枡鍗曟暟鎹笉鑳戒负绌�");
+        if (erpSltz.ErpSltza == null)
+            throw new ArgumentNullException(nameof(erpSltz.ErpSltza), "鏀舵枡鍗曚富琛ㄦ暟鎹笉鑳戒负绌�");
+
+        // 2. 鎻愬彇ERP涓昏〃鍜屾槑缁嗘暟鎹�
+        var erpMain = erpSltz.ErpSltza;
+        var erpDetails = erpSltz.ErpSltzBList ?? new List<ErpSltzBList>();
+
+        // 3. 淇锛氱敤浜嬪姟鍐呯殑db鏌ヨ锛岀‘淇濇暟鎹竴鑷存��
+        Guid mainId = GetOrCreateMainId(db, erpMain);
+
+        // 4. 鏄犲皠ERP鏁版嵁鍒癕ES瀹炰綋锛堜慨澶嶅瓧娈垫敞閲婏紝琛ュ厖鍏抽敭灞炴�э級
+        var mesMain = MapErpSltzaToMesInvItemArn(erpMain, mainId);
+        var mesDetails = MapErpSltzBListToMesInvItemArnDetail(erpDetails, mainId);
+
+        // 5. 鏍规嵁鎿嶄綔绫诲瀷澶勭悊鏁版嵁
+        switch (erpMain.TYPE?.Trim())
+        {
+            case "1": // 鏂板
+            case "2": // 鏇存柊
+                return HandleSaveOrUpdate(db, mesMain, mesDetails, mainId);
+            case "3": // 鍒犻櫎
+                return HandleDelete(db, mesMain, mesDetails, mainId);
+            default:
+                throw new NotImplementedException($"鏈疄鐜扮殑鏀舵枡鍗曟搷浣滅被鍨嬶細{erpMain.TYPE}锛堟敮鎸佺被鍨嬶細1-鏂板锛�2-鏇存柊锛�3-鍒犻櫎锛�");
+        }
+    }
+
+    /// <summary>
+    /// 鍗曟潯淇濆瓨鏀舵枡鍗曪紙涓昏〃+鏄庣粏锛�- 瀵瑰鍏紑鎺ュ彛锛堜緵鎺у埗鍣ㄨ皟鐢級
+    /// </summary>
+    /// <param name="erpSltz">ERP鏀舵枡鍗曟暟鎹紙鍚富琛�+鏄庣粏锛�</param>
+    /// <returns>淇濆瓨鎴愬姛杩斿洖true</returns>
+    public bool Save(ErpSltz erpSltz)
+    {
+        if (erpSltz == null)
+            throw new ArgumentNullException(nameof(erpSltz), "鏀舵枡鍗曟暟鎹笉鑳戒负绌�");
+        if (erpSltz.ErpSltza == null)
+            throw new ArgumentNullException(nameof(erpSltz.ErpSltza), "鏀舵枡鍗曚富琛ㄦ暟鎹笉鑳戒负绌�");
+
+        // 浜嬪姟鍐呭鐞嗕富浠庤〃淇濆瓨
+        return UseTransaction(db =>
+        {
+            return Save(db, erpSltz) ? 1 : 0;
+        }) > 0;
+    }
+
+    /// <summary>
+    /// 鎻愬墠鑾峰彇鎴栫敓鎴怣ES涓昏〃ID锛堜慨澶嶏細鐢ㄤ簨鍔″唴db鏌ヨ锛�
+    /// </summary>
+    private Guid GetOrCreateMainId(SqlSugarScope db, ErpSltza erpMain)
+    {
+        if (string.IsNullOrEmpty(erpMain.billNo))
+            throw new ArgumentException("ERP鏀舵枡鍗曞崟鎹彿涓嶈兘涓虹┖锛屾棤娉曠‘瀹氫富琛ㄥ敮涓�鎬�", nameof(erpMain.billNo));
+
+        // 淇锛氱敤浜嬪姟鍐呯殑db鏌ヨ锛岃�岄潪Context
+        var existingMain = db.Queryable<MesInvItemArn>()
+            .Where(m => m.BillNo == erpMain.billNo)
+            .First();
+
+        return existingMain != null 
+            ? existingMain.Id 
+            : Guid.NewGuid();
+    }
+
+    /// <summary>
+    /// 澶勭悊鏀舵枡鍗曟柊澧�/鏇存柊锛堜富琛�+鏄庣粏锛�
+    /// </summary>
+    private bool HandleSaveOrUpdate(SqlSugarScope db, MesInvItemArn mesMain, List<MesInvItemArnDetail> mesDetails, Guid mainId)
+    {
+        mesMain.Id = mainId;
+        bool isMainExist = db.Queryable<MesInvItemArn>().Where(m => m.Id == mainId).Any();
+        int mainOperateResult;
+
+        if (isMainExist)
+        {
+            mainOperateResult = db.Updateable(mesMain)
+                .IgnoreColumns(m => new { m.CreateDate })
+                .Where(m => m.Id == mainId)
+                .ExecuteCommand();
+        }
+        else
+        {
+            mesMain.CreateDate = DateTime.Now;
+            mainOperateResult = db.Insertable(mesMain).ExecuteCommand();
+        }
+
+        // 澶勭悊鏄庣粏
+        int deleteOldDetailResult = db.Deleteable<MesInvItemArnDetail>()
+            .Where(d => d.Mid == mainId)
+            .ExecuteCommand();
+
+        int insertNewDetailResult = mesDetails.Count > 0
+            ? db.Insertable(mesDetails).ExecuteCommand()
+            : 1;
+
+        return mainOperateResult > 0 && (deleteOldDetailResult >= 0 && insertNewDetailResult > 0);
+    }
+
+    /// <summary>
+    /// 澶勭悊鏀舵枡鍗曞垹闄わ紙涓昏〃+鏄庣粏锛�
+    /// </summary>
+    private bool HandleDelete(SqlSugarScope db, MesInvItemArn mesMain, List<MesInvItemArnDetail> mesDetails, Guid mainId)
+    {
+        db.Deleteable<MesInvItemArnDetail>().Where(d => d.Mid == mainId).ExecuteCommand();
+        int mainDeleteResult = db.Deleteable<MesInvItemArn>().Where(m => m.Id == mainId).ExecuteCommand();
+        return mainDeleteResult >= 0;
+    }
+
+    /// <summary>
+    /// ERP涓昏〃鏄犲皠鍒癕ES涓昏〃锛堜慨澶嶏細鍙栨秷鍏抽敭瀛楁娉ㄩ噴锛屼慨姝Type閫昏緫锛�
+    /// </summary>
+    private MesInvItemArn MapErpSltzaToMesInvItemArn(ErpSltza erpMain, Guid mainId)
+    {
+        // 鍗曟嵁鏃ユ湡杞崲
+        DateTime.TryParse(erpMain.FDate, out DateTime parsedDate);
+        // 鏄惁SRM杞崲锛�0-鍚︼紝1-鏄級
+        int.TryParse(erpMain.F_ZJXF_sfgx, out int isSrm);
+        // 渚涘簲鍟咺D杞崲锛堝瓧绗︿覆鐩存帴璧嬪�硷紝鍖归厤MES瀛楁绫诲瀷锛�
+        string suppId = string.IsNullOrEmpty(erpMain.SupplierId) ? null : erpMain.SupplierId.Trim();
+        // 淇锛氣�滄槸鍚﹀澶栤�濋�昏緫锛堝亣璁綞RP鐨刦Type鏄��1鈥�=鏄紝鈥�0鈥�=鍚︼紝鎴朾ool瀛楃涓诧級
+        bool isOutsourcing = false;
+        if (!string.IsNullOrEmpty(erpMain.fType))
+        {
+            isOutsourcing = erpMain.fType.Trim() == "1" || erpMain.fType.Trim().Equals("true", StringComparison.OrdinalIgnoreCase);
+        }
+
+        return new MesInvItemArn
+        {
+            // 淇锛氬彇娑堝叧閿瓧娈垫敞閲婏紝琛ュ厖璧嬪��
+            Id = mainId,
+            BillNo = erpMain.billNo?.Trim() ?? throw new ArgumentException("鏀舵枡鍗曞崟鎹彿涓嶈兘涓虹┖"),
+            SuppId = suppId,
+            CreateDate = parsedDate == DateTime.MinValue ? null : (DateTime?)parsedDate,
+            Remark = erpMain.Remark?.Trim(),
+            IsSrm = isSrm,
+            EbelnK3id = erpMain.erpId?.Trim(), // ERP涓昏〃ID锛堝搴攅beln_k3id锛�
+            CreateBy = erpMain.createBy?.Trim() ?? "SYSTEM", // 榛樿涓虹郴缁�
+            FType = isOutsourcing, // 淇锛氭纭殑鏄惁濮斿閫昏緫
+            ReceiveOrgId = erpMain.ReceiveOrgId?.Trim(),
+            // LastUpdateUser = erpMain.FCreatorId?.Trim() ?? "SYSTEM",
+            // LastUpdateTime = DateTime.Now,
+            // IsOut = false, // 鍒濆鏈嚭搴�
+            // Status = false // 鍒濆鏈鏍�
+        };
+    }
+
+    /// <summary>
+    /// ERP鏄庣粏鏄犲皠鍒癕ES鏄庣粏锛堜慨澶嶏細鍙栨秷鍏抽敭瀛楁娉ㄩ噴锛屼慨姝belnK3id杞崲锛�
+    /// </summary>
+    private List<MesInvItemArnDetail> MapErpSltzBListToMesInvItemArnDetail(List<ErpSltzBList> erpDetails, Guid mainId)
+    {
+        return erpDetails.Select(erpDetail =>
+        {
+            // 鏁板�肩被鍨嬪畨鍏ㄨ浆鎹�
+            int.TryParse(erpDetail.LineNo, out int lineNo); // 鏄庣粏涓婚敭
+            int.TryParse(erpDetail.ProductCode, out int itemId); // 鐗╂枡缂栫爜
+            decimal.TryParse(erpDetail.PurchaseQty, out decimal purchaseQty); // 閲囪喘璁㈠崟鏁伴噺
+            decimal.TryParse(erpDetail.DeliveryQty, out decimal deliveryQty); // 鏈搴旀敹鏁伴噺
+            decimal.TryParse(erpDetail.IncludeQty, out decimal includeQty); // 鏈瀹炴敹鏁伴噺
+            // 淇锛氱敤閲囪喘鍗旾D瀛楁锛坋beln_k3id锛夎浆int锛岃�岄潪婧愬崟鍗曞彿
+            int.TryParse(erpDetail.FSrcBillNo, out int ebelnK3id); 
+            int.TryParse(erpDetail.FSrcBillLine, out int lineK3id); // 閲囪喘鍗曡ID
+            bool.TryParse(erpDetail.urgentFlag, out bool urgentFlag); // 鎬ユ枡鏍囪瘑
+
+            return new MesInvItemArnDetail
+            {
+                // 淇锛氬彇娑堝叧閿瓧娈垫敞閲婏紝琛ュ厖璧嬪��
+            //    LineNo = lineNo, // 鏄庣粏涓婚敭锛堝繀椤昏祴鍊硷級
+                Mid = mainId, // 澶栭敭锛堝叧鑱斾富琛↖D锛屽繀椤昏祴鍊硷級
+                Ebeln = erpDetail.FBillNo?.Trim(), // 閲囪喘鍗曞彿
+                ItemId = itemId,
+                EbelnQty = purchaseQty,
+                SubQty = deliveryQty,
+                Quantity = includeQty,
+              //  PurchaseUnit = erpDetail.PurchaseUnit?.Trim(), // 閲囪喘鍗曚綅锛堣ˉ鍏呰祴鍊硷級
+              //  InventoryUnit = erpDetail.InventoryUnit?.Trim(), // 搴撳瓨鍗曚綅锛堣ˉ鍏呰祴鍊硷級
+                Memo = erpDetail.Remark?.Trim(),
+                EbelnK3id = ebelnK3id, // 淇锛氭纭殑閲囪喘鍗旾D杞崲
+                LineK3id = lineK3id,
+             //   SalesOrderId = erpDetail.SalesOrderId?.Trim(), // 閿�鍞鍗曞彿锛堣ˉ鍏呰祴鍊硷級
+              //  FMtoNo = erpDetail.FMtoNo?.Trim(), // 璁″垝璺熻釜鍙凤紙琛ュ厖璧嬪�硷級
+             //   FLot = erpDetail.FLot?.Trim(), // 鎵瑰彿锛堣ˉ鍏呰祴鍊硷級
+                UrgentFlag = urgentFlag
+                //FStockId = erpDetail.DepotId?.Trim() // 鏀惰揣浠撳簱缂栧彿
+            };
+        }).ToList();
+    }
+
+    /// <summary>
+    /// 鎸夊崟鎹彿鏌ヨMES鏀舵枡鍗曪紙涓昏〃+鏄庣粏锛�
+    /// </summary>
+    public (MesInvItemArn main, List<MesInvItemArnDetail> details) GetByBillNo(string billNo)
+    {
+        if (string.IsNullOrEmpty(billNo))
+            throw new ArgumentNullException(nameof(billNo), "鏌ヨ鏉′欢鍗曟嵁鍙蜂笉鑳戒负绌�");
+
+        var main = Context.Queryable<MesInvItemArn>()
+            .Where(m => m.BillNo == billNo)
+            .First();
+
+        var details = main != null
+            ? Context.Queryable<MesInvItemArnDetail>()
+                .Where(d => d.Mid == main.Id)
+                .ToList()
+            : new List<MesInvItemArnDetail>();
+
+        return (main, details);
+    }
+}
\ No newline at end of file
diff --git a/MES.Service/service/BasicData/MesRohInManager.cs b/MES.Service/service/BasicData/MesRohInManager.cs
index 217fa4c..b6a6442 100644
--- a/MES.Service/service/BasicData/MesRohInManager.cs
+++ b/MES.Service/service/BasicData/MesRohInManager.cs
@@ -90,21 +90,16 @@
     {
         var eid = long.Parse(rohIn.id);
         var mesRohIn = new MesRohIn();
-
-
         var single = base.GetSingle(it => it.EbelnK3id == eid);
         if (single != null) mesRohIn.Guid = single.Guid;
-
         mesRohIn.EbelnK3id = eid;
         mesRohIn.BillNo = rohIn.FBillNo;
         mesRohIn.DocumentStatus = rohIn.FDocumentStatus;
         mesRohIn.DocumentType = rohIn.FBillTypeID;
         mesRohIn.BusinessType = rohIn.FBusinessType;
-
         if (rohIn.FDate != null)
             mesRohIn.PurchaseDate = DateTime.ParseExact(rohIn.FDate,
                 "yyyy-MM-dd HH:mm:ss", null);
-
         mesRohIn.Supplier = rohIn.FSupplierId;
         mesRohIn.CloseStatus = rohIn.FCloseStatus;
         mesRohIn.PurchaseOrg = rohIn.FPurchaseOrgId;
@@ -117,25 +112,19 @@
         mesRohIn.Remarks = rohIn.Remarks;
         mesRohIn.CancellationStatus = rohIn.FCancelStatus;
         mesRohIn.CancellationPerson = rohIn.FCancellerId;
-
         if (rohIn.FCancelDate != null)
             if (!mesRohIn.CancellationPerson.IsNullOrEmpty())
                 mesRohIn.CancellationDate =
                     DateTime.ParseExact(rohIn.FCancelDate,
                         "yyyy-MM-dd HH:mm:ss", null);
-
         mesRohIn.CreateBy = rohIn.FCreatorId;
-
         if (rohIn.FCreateDate != null)
             mesRohIn.CreateDate = DateTime.ParseExact(rohIn.FCreateDate,
                 "yyyy-MM-dd HH:mm:ss", null);
-
         mesRohIn.LastupdateBy = rohIn.FModifierId;
-
         if (rohIn.FModifyDate != null)
             mesRohIn.LastupdateDate = DateTime.ParseExact(rohIn.FModifyDate,
                 "yyyy-MM-dd HH:mm:ss", null);
-
         mesRohIn.ErpCheckBy = rohIn.FApproverId;
         mesRohIn.ErpCheckDate = rohIn.FApproveDate;
         mesRohIn.Changereason = rohIn.FChangeReason;
@@ -143,10 +132,8 @@
             ? DateTime.ParseExact(rohIn.Prearrivaldate,
                 "yyyy-MM-dd HH:mm:ss", null)
             : null;
-
         mesRohIn.ReceiveOrgId = rohIn.FReceiveOrgId;
         mesRohIn.ProviderId = rohIn.FProviderId;
-
         mesRohIn.Anred = rohIn.FTContact;
         mesRohIn.Telf1 = rohIn.Fmobilephone;
         mesRohIn.FixedTelephone = rohIn.FixedTelephone;
@@ -195,21 +182,8 @@
                 BusinessClose = s.FMRPCloseStatus,
                 BusinessFreeze = s.FMRPFreezeStatus,
                 Freezer = s.FFreezerId,
-                //FreezeTime = !string.IsNullOrEmpty(s.FFreezeDate)
-                //            && DateTime.TryParseExact(s.FFreezeDate,
-                //                new[] { "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd" },  // 鏀寔澶氱鏍煎紡
-                //                CultureInfo.InvariantCulture,
-                //                DateTimeStyles.None,
-                //                out var parsedDate)
-                //            && parsedDate > new DateTime(1900, 1, 1)
-                //                ? parsedDate
-                //                : (DateTime?)null,
                 BusinessTerminate = s.FMRPTerminateStatus,
                 Terminator = s.FTerminaterId,
-                //TerminateTime = s.FTerminateDate != null
-                //    ? DateTime.ParseExact(s.FTerminateDate,
-                //        "yyyy-MM-dd HH:mm:ss", null)
-                //    : null,
                 TotalReceivedQty = Convert.ToDecimal(s.FReceiveQty), //绱鏀舵枡鏁�
                 RemainingReceivedQty =
                     Convert.ToDecimal(s.FRemainReceiveQty),
@@ -237,7 +211,9 @@
                 DemandDepartment = s.FRequireDeptId,
                 ReceivingDepartment = s.FReceiveDeptId,
                 SalesOrderId = s.SalesOrderId,
-                OrderLineId = s.OrderLineId
+                OrderLineId = s.OrderLineId,
+                FSUBREQENTRYID = s.FSUBREQENTRYID
+               
             };
 
             if (s.FFreezeDate != null)
@@ -255,7 +231,7 @@
             var single = rohInDataManager.GetSingle(it =>
                 it.EbelnK3id == entity.EbelnK3id);
             if (single != null) entity.Guid = single.Guid;
-
+           
             return entity;
         }).ToList();
     }
diff --git a/MESApplication/Controllers/BasicData/MesInvItemArnController.cs b/MESApplication/Controllers/BasicData/MesInvItemArnController.cs
new file mode 100644
index 0000000..5ede88f
--- /dev/null
+++ b/MESApplication/Controllers/BasicData/MesInvItemArnController.cs
@@ -0,0 +1,339 @@
+using System.Dynamic;
+using MES.Service.Dto.webApi;
+using MES.Service.Modes;
+using MES.Service.service;
+using MES.Service.service.BasicData;
+using MES.Service.util;
+using Microsoft.AspNetCore.Mvc;
+using Newtonsoft.Json;
+
+namespace MESApplication.Controllers.BasicData;
+
+/// <summary>
+/// 鏀舵枡鍗曟帶鍒跺櫒锛堝鐞嗘敹鏂欏崟鐩稿叧API璇锋眰锛屽叧鑱擬ES_INV_ITEM_ARN涓昏〃涓嶮ES_INV_ITEM_ARN_DETAIL鏄庣粏琛級
+/// </summary>
+[ApiController]
+[Route("api/[controller]")]
+public class MesInvItemArnController : ControllerBase
+{
+    // 娑堟伅涓績绠$悊鍣紙鐢ㄤ簬鎺ュ彛鏃ュ織璁板綍锛�
+    private readonly MessageCenterManager _messageCenterManager = new();
+    // 鏀舵枡鍗曚笟鍔¢�昏緫绠$悊鍣紙鏍稿績涓氬姟澶勭悊锛�
+    private readonly MesInvItemArnManager _mesInvItemArnManager = new();
+
+    // 鎺ュ彛鍩虹閰嶇疆锛堣姹傛柟娉曘�佽〃鍚嶃�佸熀纭�URL锛�
+    private readonly string _method = "POST";
+    private readonly string _tableName = "MES_INV_ITEM_ARN";
+    private readonly string _baseUrl = "http://localhost:10054/api/MesInvItemArn/";
+
+    /// <summary>
+    /// 淇濆瓨鏀舵枡鍗曪紙鍗曟潯锛屽惈涓昏〃+鏄庣粏锛�
+    /// </summary>
+    /// <param name="erpSltz">ERP鏀舵枡鍗曟暟鎹紙鍚富琛‥rpSltza+鏄庣粏ErpSltzBList锛�</param>
+    /// <returns>淇濆瓨缁撴灉锛堟垚鍔�/澶辫触鐘舵��+璇︽儏锛�</returns>
+    [HttpPost("Save")]
+    public ResponseResult Save(ErpSltz erpSltz)
+    {
+        // 1. 鍒濆鍖栨秷鎭腑蹇冨疄浣擄紙璁板綍鎺ュ彛璋冪敤鏃ュ織锛岀敤浜庤拷婧級
+        var messageEntity = new MessageCenter
+        {
+            TableName = _tableName,
+            Url = _baseUrl + "Save",
+            Method = _method,
+            Data = JsonConvert.SerializeObject(erpSltz),
+            Status = 1, // 鐘舵�侊細1-寰呭鐞�
+            CreateBy = "SYSTEM", // 鍒涘缓浜猴細绯荤粺鏍囪瘑
+            Route = erpSltz?.ErpSltza?.billNo ?? "鏈煡鍗曟嵁鍙�" // 璺敱鏍囪瘑锛氱敤鏀舵枡鍗曞崟鎹彿
+        };
+
+        try
+        {
+            dynamic resultData = new ExpandoObject();
+            // 2. 璋冪敤涓氬姟灞備繚瀛樻柟娉曪紙澶勭悊涓昏〃+鏄庣粏鍚屾锛�
+            var saveSuccess = _mesInvItemArnManager.Save(erpSltz);
+            resultData.saveResult = saveSuccess;
+
+            // 3. 鏇存柊娑堟伅涓績鐘舵�侊紙淇濆瓨鎴愬姛锛�
+            messageEntity.Result = 1; // 缁撴灉锛�1-鎴愬姛
+            messageEntity.DealWith = 1; // 澶勭悊鐘舵�侊細1-宸插鐞�
+            _messageCenterManager.save(messageEntity);
+
+            // 4. 杩斿洖鎴愬姛鍝嶅簲
+            return new ResponseResult
+            {
+                status = 0,
+                message = "鏀舵枡鍗曚繚瀛樻垚鍔�",
+                data = resultData
+            };
+        }
+        catch (Exception ex)
+        {
+            // 5. 寮傚父澶勭悊锛氳褰曢敊璇棩蹇�
+            messageEntity.Result = 0; // 缁撴灉锛�0-澶辫触
+            messageEntity.DealWith = 0; // 澶勭悊鐘舵�侊細0-鏈鐞�
+            messageEntity.ResultData = ex.Message + (ex.InnerException != null ? $"锛堝唴閮ㄥ紓甯革細{ex.InnerException.Message}锛�" : ""); // 閿欒璇︽儏
+            _messageCenterManager.save(messageEntity);
+
+            // 6. 杩斿洖閿欒鍝嶅簲
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 鎵归噺淇濆瓨鏀舵枡鍗曪紙澶氭潯锛屽惈涓昏〃+鏄庣粏锛屼簨鍔′繚璇佷竴鑷存�э級
+    /// </summary>
+    /// <param name="erpSltzList">ERP鏀舵枡鍗曞垪琛紙姣忔潯鍚富琛�+鏄庣粏锛�</param>
+    /// <returns>鎵归噺淇濆瓨缁撴灉锛堟�绘潯鏁般�佹垚鍔熸潯鏁帮級</returns>
+    [HttpPost("SaveList")]
+    public ResponseResult SaveList(List<ErpSltz> erpSltzList)
+    {
+        // 1. 鍒濆鍖栨秷鎭腑蹇冨疄浣�
+        var messageEntity = new MessageCenter
+        {
+            TableName = _tableName,
+            Url = _baseUrl + "SaveList",
+            Method = _method,
+            Data = JsonConvert.SerializeObject(erpSltzList),
+            Status = 1,
+            CreateBy = "SYSTEM",
+            Route = $"鎵归噺鏁版嵁锛堝叡{erpSltzList?.Count ?? 0}鏉★級"
+        };
+
+        try
+        {
+            dynamic resultData = new ExpandoObject();
+            int totalCount = erpSltzList?.Count ?? 0;
+            
+            // 2. 璋冪敤涓氬姟灞傛壒閲忎繚瀛樻柟娉曪紙浜嬪姟鍐呭鐞嗭紝瑕佷箞鍏ㄦ垚鍔熻涔堝叏澶辫触锛�
+            var batchSaveSuccess = _mesInvItemArnManager.SaveList(erpSltzList);
+            
+            // 3. 缁勮杩斿洖鏁版嵁锛堟�绘潯鏁般�佹垚鍔熸潯鏁帮級
+            resultData.totalCount = totalCount;
+            resultData.successCount = batchSaveSuccess ? totalCount : 0;
+
+            // 4. 鏇存柊娑堟伅涓績鐘舵��
+            messageEntity.Result = batchSaveSuccess ? 1 : 0;
+            messageEntity.DealWith = 1;
+            _messageCenterManager.save(messageEntity);
+
+            // 5. 杩斿洖鎴愬姛鍝嶅簲
+            return new ResponseResult
+            {
+                status = 0,
+                message = $"鏀舵枡鍗曟壒閲忎繚瀛樺畬鎴愶紝鍏眥totalCount}鏉℃暟鎹�",
+                data = resultData
+            };
+        }
+        catch (Exception ex)
+        {
+            // 6. 寮傚父澶勭悊锛氳褰曢敊璇棩蹇�
+            messageEntity.Result = 0;
+            messageEntity.DealWith = 0;
+            messageEntity.ResultData = ex.Message + (ex.InnerException != null ? $"锛堝唴閮ㄥ紓甯革細{ex.InnerException.Message}锛�" : "");
+            _messageCenterManager.save(messageEntity);
+
+            // 7. 杩斿洖閿欒鍝嶅簲
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 鑾峰彇鏀舵枡鍗曞垪琛紙涓昏〃鏁版嵁锛屾敮鎸佸悗缁墿灞曞垎椤�/绛涢�夛級
+    /// </summary>
+    /// <returns>鏀舵枡鍗曞垪琛紙鎬绘潯鏁�+鍒楄〃鏁版嵁锛�</returns>
+    [HttpGet("GetList")]
+    public ResponseResult GetList()
+    {
+        try
+        {
+            // 1. 璋冪敤涓氬姟灞傛煡璇㈠垪琛ㄦ柟娉�
+            var invArnList = _mesInvItemArnManager.GetList();
+            
+            // 2. 杩斿洖鏌ヨ缁撴灉
+            return new ResponseResult
+            {
+                status = 0,
+                message = "鏀舵枡鍗曞垪琛ㄦ煡璇㈡垚鍔�",
+                data = new { total = invArnList.Count, list = invArnList }
+            };
+        }
+        catch (Exception ex)
+        {
+            // 3. 寮傚父澶勭悊
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 鏍规嵁ID鑾峰彇鏀舵枡鍗曡鎯咃紙鍚富琛�+鍏宠仈鏄庣粏锛�
+    /// </summary>
+    /// <param name="id">鏀舵枡鍗曚富琛↖D锛圙uid瀛楃涓诧級</param>
+    /// <returns>鏀舵枡鍗曚富琛�+鏄庣粏璇︽儏</returns>
+    // [HttpGet("GetById")]
+    // public ResponseResult GetById(string id)
+    // {
+    //     try
+    //     {
+    //         // 1. 鏍¢獙ID鏍煎紡锛圙uid杞崲锛�
+    //         if (!Guid.TryParse(id, out Guid mainId))
+    //         {
+    //             return new ResponseResult
+    //             {
+    //                 status = 1,
+    //                 message = "ID鏍煎紡閿欒锛岃浼犲叆鏈夋晥鐨凣uid瀛楃涓�",
+    //                 data = null
+    //             };
+    //         }
+    //
+    //         // 2. 璋冪敤涓氬姟灞傛煡璇㈣鎯呮柟娉曪紙涓昏〃+鏄庣粏锛�
+    //         var (mainEntity, detailList) = _mesInvItemArnManager.GetByIdWithDetails(mainId);
+    //         
+    //         // 3. 缁勮杩斿洖鏁版嵁锛堜富琛�+鏄庣粏锛�
+    //         var resultData = new
+    //         {
+    //             main = mainEntity,
+    //             details = detailList
+    //         };
+    //
+    //         // 4. 杩斿洖璇︽儏缁撴灉
+    //         return new ResponseResult
+    //         {
+    //             status = 0,
+    //             message = "鏀舵枡鍗曡鎯呮煡璇㈡垚鍔�",
+    //             data = resultData
+    //         };
+    //     }
+    //     catch (Exception ex)
+    //     {
+    //         // 5. 寮傚父澶勭悊
+    //         return ResponseResult.ResponseError(ex);
+    //     }
+    // }
+
+    /// <summary>
+    /// 鏍规嵁鍗曟嵁鍙疯幏鍙栨敹鏂欏崟璇︽儏锛堝惈涓昏〃+鍏宠仈鏄庣粏锛�
+    /// </summary>
+    /// <param name="billNo">鏀舵枡鍗曞崟鎹彿</param>
+    /// <returns>鏀舵枡鍗曚富琛�+鏄庣粏璇︽儏</returns>
+    [HttpGet("GetByBillNo")]
+    public ResponseResult GetByBillNo(string billNo)
+    {
+        try
+        {
+            // 1. 鏍¢獙鍗曟嵁鍙峰弬鏁�
+            if (string.IsNullOrEmpty(billNo))
+            {
+                return new ResponseResult
+                {
+                    status = 1,
+                    message = "鍗曟嵁鍙蜂笉鑳戒负绌�",
+                    data = null
+                };
+            }
+
+            // 2. 璋冪敤涓氬姟灞傛寜鍗曟嵁鍙锋煡璇㈡柟娉曪紙涓昏〃+鏄庣粏锛�
+            var (mainEntity, detailList) = _mesInvItemArnManager.GetByBillNo(billNo);
+            
+            // 3. 缁勮杩斿洖鏁版嵁
+            var resultData = new
+            {
+                main = mainEntity,
+                details = detailList
+            };
+
+            // 4. 杩斿洖璇︽儏缁撴灉
+            return new ResponseResult
+            {
+                status = 0,
+                message = $"鍗曟嵁鍙枫�恵billNo}銆戞敹鏂欏崟璇︽儏鏌ヨ鎴愬姛",
+                data = resultData
+            };
+        }
+        catch (Exception ex)
+        {
+            // 5. 寮傚父澶勭悊
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 鏂板鏀舵枡鍗曪紙鐩存帴浼犲叆MES瀹炰綋锛岄�傜敤浜庡唴閮ㄧ郴缁熷垱寤猴級
+    /// </summary>
+    /// <param name="entity">鏀舵枡鍗曚富琛ㄥ疄浣�</param>
+    /// <returns>鏂板缁撴灉锛圛D+鎴愬姛鐘舵�侊級</returns>
+    [HttpPost("Insert")]
+    public ResponseResult Insert([FromBody] MesInvItemArn entity)
+    {
+        try
+        {
+            // 1. 琛ュ叏瀹炰綋榛樿鍊硷紙涓婚敭銆佸垱寤烘椂闂达級
+            entity.Id = Guid.NewGuid();
+            entity.CreateDate = DateTime.Now;
+            entity.CreateBy = "SYSTEM"; // 榛樿涓虹郴缁熷垱寤猴紝鍙牴鎹疄闄呴渶姹傛敼涓哄綋鍓嶇櫥褰曠敤鎴�
+          //  entity.LastUpdateTime = DateTime.Now;
+           // entity.LastUpdateUser = "SYSTEM";
+           // entity.Status = false; // 鍒濆鐘舵�侊細鏈鏍�
+           // entity.IsOut = false; // 鍒濆鐘舵�侊細鏈嚭搴�
+            entity.IsSrm = 0; // 鍒濆鐘舵�侊細闈濻RM
+
+            // 2. 璋冪敤涓氬姟灞傛柊澧炴柟娉�
+            var insertSuccess = _mesInvItemArnManager.Insert(entity);
+
+            // 3. 杩斿洖鏂板缁撴灉
+            return new ResponseResult
+            {
+                status = 0,
+                message = insertSuccess ? "鏀舵枡鍗曟柊澧炴垚鍔�" : "鏀舵枡鍗曟柊澧炲け璐�",
+                data = new { id = entity.Id, success = insertSuccess }
+            };
+        }
+        catch (Exception ex)
+        {
+            // 4. 寮傚父澶勭悊
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    /// <summary>
+    /// 鏇存柊鏀舵枡鍗曪紙鐩存帴浼犲叆MES瀹炰綋锛岄�傜敤浜庡唴閮ㄧ郴缁熸洿鏂帮級
+    /// </summary>
+    /// <param name="entity">鏀舵枡鍗曚富琛ㄥ疄浣擄紙闇�鍚獻D锛�</param>
+    /// <returns>鏇存柊缁撴灉锛堟垚鍔熺姸鎬侊級</returns>
+    // [HttpPost("Update")]
+    // public ResponseResult Update([FromBody] MesInvItemArn entity)
+    // {
+    //     try
+    //     {
+    //         // 1. 鏍¢獙ID锛堝繀椤讳紶鍏ュ凡瀛樺湪鐨処D锛�
+    //         if (entity.Id == Guid.Empty)
+    //         {
+    //             return new ResponseResult
+    //             {
+    //                 status = 1,
+    //                 message = "鏇存柊澶辫触锛氭敹鏂欏崟ID涓嶈兘涓虹┖",
+    //                 data = false
+    //             };
+    //         }
+    //
+    //         // 2. 琛ュ叏鏇存柊瀛楁锛堟渶鍚庢洿鏂版椂闂淬�佹渶鍚庢洿鏂颁汉锛�
+    //         entity.LastUpdateTime = DateTime.Now;
+    //         entity.LastUpdateUser = "SYSTEM"; // 鍙敼涓哄綋鍓嶇櫥褰曠敤鎴�
+    //
+    //         // 3. 璋冪敤涓氬姟灞傛洿鏂版柟娉曪紙蹇界暐鍒涘缓鏃堕棿锛岄伩鍏嶈鐩栵級
+    //         var updateSuccess = _mesInvItemArnManager.Update(entity, ignoreColumns: m => new { m.CreateDate });
+    //
+    //         // 4. 杩斿洖鏇存柊缁撴灉
+    //         return new ResponseResult
+    //         {
+    //             status = 0,
+    //             message = updateSuccess ? "鏀舵枡鍗曟洿鏂版垚鍔�" : "鏀舵枡鍗曟洿鏂板け璐ワ紙鏈壘鍒板搴旀暟鎹垨鏇存柊寮傚父锛�",
+    //             data = updateSuccess
+    //         };
+    //     }
+    //     catch (Exception ex)
+    //     {
+    //         // 5. 寮傚父澶勭悊
+    //         return ResponseResult.ResponseError(ex);
+    //     }
+    // }
+}
\ No newline at end of file

--
Gitblit v1.9.3