From 47f6ab7374c3f88ba364ea82021dd296f4bdf9e6 Mon Sep 17 00:00:00 2001
From: crz <1278080563@qq.com>
Date: 星期六, 01 三月 2025 08:58:16 +0800
Subject: [PATCH] 销售订单

---
 MESApplication/Controllers/MesSalesOrderController.cs    |  312 ++++++++++++++++++++
 MES.Service/Dto/webApi/ErpSales.cs                       |    8 
 MES.Service/service/MesSalesOrderDetailManager.cs        |   79 +++++
 MESApplication/bin/Debug/net8.0/MES.Service.pdb          |    0 
 MESApplication/bin/Debug/net8.0/MESApplication.dll       |    0 
 MES.Service/bin/Debug/net8.0/MES.Service.dll             |    0 
 MESApplication/bin/Debug/net8.0/MESApplication.xml       |   36 ++
 MES.Service/service/WomcaaManager.cs                     |    2 
 MESApplication/bin/Debug/net8.0/MES.Service.dll          |    0 
 MES.Service/MES.Service.csproj                           |    4 
 MES.Service/Modes/MesSalesOrderDetail.cs                 |  113 +++++++
 MES.Service/Dto/webApi/ErpORDER.cs                       |   22 +
 MESApplication/bin/Debug/net8.0/MESApplication.pdb       |    0 
 MES.Service/Modes/MesSalesOrder.cs                       |  113 +++++++
 MES.Service/Dto/webApi/ErpDETAIL.cs                      |   28 +
 MESApplication/bin/Debug/net8.0/MESApplication.deps.json |    5 
 MESApplication/bin/Debug/net8.0/MESApplication.exe       |    0 
 MES.Service/bin/Debug/net8.0/MES.Service.pdb             |    0 
 MES.Service/service/MesSalesOrderManager.cs              |  177 +++++++++++
 19 files changed, 895 insertions(+), 4 deletions(-)

diff --git a/MES.Service/Dto/webApi/ErpDETAIL.cs b/MES.Service/Dto/webApi/ErpDETAIL.cs
new file mode 100644
index 0000000..8570d33
--- /dev/null
+++ b/MES.Service/Dto/webApi/ErpDETAIL.cs
@@ -0,0 +1,28 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MES.Service.Dto.webApi
+{
+    public class ErpDETAIL
+    {
+        public string ? F_UNW_Text_xsddh { get; set; }
+        public string? LineNumber { get; set; }
+        public string ?  FMaterialId { get; set;}
+        public string ? FMaterialName { get; set;}
+        public string ? FMaterialModel { get; set;}
+        public string ? FMinPlanDeliveryDate { get; set;}
+        public string ? FQty { get; set;}
+        public string ? FUnitID { get; set;}
+        public string ? FPrice { get; set;}
+        public string ? FAmount { get; set;}
+        public string ? FDeliCommitQty { get; set;}
+        public string ? FEntryNote { get; set;}
+
+
+
+
+    }
+}
diff --git a/MES.Service/Dto/webApi/ErpORDER.cs b/MES.Service/Dto/webApi/ErpORDER.cs
new file mode 100644
index 0000000..49490d8
--- /dev/null
+++ b/MES.Service/Dto/webApi/ErpORDER.cs
@@ -0,0 +1,22 @@
+锘縩amespace MES.Service.Dto.webApi
+{
+    public class ErpORDER
+    {
+        public string ? FBillNo { get; set; }
+
+        public string? Type { get; set; }
+        public string ? FBillTypeID { get; set; }
+        public string ? F_UNW_Date_KHXQ { get; set; }
+        public string ? FVersionNo { get; set; }
+        public string ? FDate { get; set; }
+        public string ? FCustId { get; set; }
+        public string ? F_UNW_Text_KHDD { get; set; }
+        public string ? FSaleDeptId { get; set; }
+        public string ? FNote { get; set; }
+        public string ? F_UNW_LargeText_TBKHBZ { get; set; }
+        public string ? FApproveDate { get; set; }
+        public string ? FApproverId { get; set; }
+    
+
+    }
+}
diff --git a/MES.Service/Dto/webApi/ErpSales.cs b/MES.Service/Dto/webApi/ErpSales.cs
new file mode 100644
index 0000000..c9814d7
--- /dev/null
+++ b/MES.Service/Dto/webApi/ErpSales.cs
@@ -0,0 +1,8 @@
+锘縩amespace MES.Service.Dto.webApi
+{
+    public class ErpSales
+    {
+        public ErpORDER ErpOrder { get; set; }
+        public List<ErpDETAIL> ErpDetails { get; set; }
+    }
+}
diff --git a/MES.Service/MES.Service.csproj b/MES.Service/MES.Service.csproj
index 5e01337..34f3c32 100644
--- a/MES.Service/MES.Service.csproj
+++ b/MES.Service/MES.Service.csproj
@@ -7,8 +7,8 @@
     </PropertyGroup>
 
     <ItemGroup>
-        <PackageReference Include="Masuit.Tools.Core" Version="2024.3.4"/>
-        <PackageReference Include="SqlSugarCore" Version="5.1.4.158"/>
+        <PackageReference Include="Masuit.Tools.Core" Version="2024.3.4" />
+        <PackageReference Include="SqlSugarCore" Version="5.1.4.158" />
     </ItemGroup>
 
 </Project>
diff --git a/MES.Service/Modes/MesSalesOrder.cs b/MES.Service/Modes/MesSalesOrder.cs
new file mode 100644
index 0000000..39fb73b
--- /dev/null
+++ b/MES.Service/Modes/MesSalesOrder.cs
@@ -0,0 +1,113 @@
+锘縰sing SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+///     閿�鍞鍗曡〃
+/// </summary>
+[SugarTable("MES_SALES_ORDER")]
+public class MesSalesOrder
+{
+    /// <summary>
+    ///     SEQ_sales搴忓垪
+    /// </summary>
+    [SugarColumn(ColumnName = "ID", OracleSequenceName = "SEQ_SALES",
+        IsPrimaryKey = true)]
+    public decimal Id { get; set; }
+
+    /// <summary>
+    ///     璁㈠崟鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "ORDER_ID")]
+    public string OrderId { get; set; }
+
+    /// <summary>
+    ///     璁㈠崟鍗曞埆
+    /// </summary>
+    [SugarColumn(ColumnName = "ORDER_TYPE")]
+    public string OrderType { get; set; }
+
+    /// <summary>
+    ///     鍙楄鏃ユ湡
+    /// </summary>
+    [SugarColumn(ColumnName = "ORDER_DATE")]
+    public DateTime? OrderDate { get; set; }
+
+    /// <summary>
+    ///     鍗曟嵁鐗堟湰
+    /// </summary>
+    [SugarColumn(ColumnName = "DOCUMENT_VERSION")]
+    public long? DocumentVersion { get; set; }
+
+    /// <summary>
+    ///     鍗曟嵁鏃ユ湡
+    /// </summary>
+    [SugarColumn(ColumnName = "DOCUMENT_DATE")]
+    public DateTime? DocumentDate { get; set; }
+
+    /// <summary>
+    ///     宸ュ巶缂栧彿
+    /// </summary>
+    [SugarColumn(ColumnName = "FACTORY_ID")]
+    public string FactoryId { get; set; }
+
+    /// <summary>
+    ///     宸ュ巶绠�绉�
+    /// </summary>
+    [SugarColumn(ColumnName = "FACTORY_NAME")]
+    public string FactoryName { get; set; }
+
+    /// <summary>
+    ///     瀹㈡埛缂栧彿
+    /// </summary>
+    [SugarColumn(ColumnName = "CUSTOMER_ID")]
+    public string CustomerId { get; set; }
+
+    /// <summary>
+    ///     瀹㈡埛绠�绉�
+    /// </summary>
+    [SugarColumn(ColumnName = "CUSTOMER_NAME")]
+    public string CustomerName { get; set; }
+
+    /// <summary>
+    ///     瀹㈡埛鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "CUSTOMER_ORDER_ID")]
+    public string CustomerOrderId { get; set; }
+
+    /// <summary>
+    ///     閮ㄩ棬缂栧彿
+    /// </summary>
+    [SugarColumn(ColumnName = "DEPARTMENT_ID")]
+    public string DepartmentId { get; set; }
+
+    /// <summary>
+    ///     鎬绘暟閲�
+    /// </summary>
+    [SugarColumn(ColumnName = "TOTAL_QUANTITY")]
+    public decimal? TotalQuantity { get; set; }
+
+    /// <summary>
+    ///     澶囨敞
+    /// </summary>
+    [SugarColumn(ColumnName = "REMARKS")]
+    public string Remarks { get; set; }
+
+    /// <summary>
+    ///     erp瀹℃牳鏃ユ湡
+    /// </summary>
+    [SugarColumn(ColumnName = "APPROVAL_DATE")]
+    public DateTime? ApprovalDate { get; set; }
+
+    /// <summary>
+    ///     erp瀹℃牳鑰�
+    /// </summary>
+    [SugarColumn(ColumnName = "APPROVER")]
+    public string Approver { get; set; }
+
+    /// <summary>
+    ///     ERPID
+    /// </summary>
+    [SugarColumn(ColumnName = "ERP_ID")]
+    public string ErpId { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/Modes/MesSalesOrderDetail.cs b/MES.Service/Modes/MesSalesOrderDetail.cs
new file mode 100644
index 0000000..e491ac8
--- /dev/null
+++ b/MES.Service/Modes/MesSalesOrderDetail.cs
@@ -0,0 +1,113 @@
+锘縰sing SqlSugar;
+
+namespace MES.Service.Modes;
+
+/// <summary>
+///     閿�鍞鍗曟槑缁嗚〃
+/// </summary>
+[SugarTable("MES_SALES_ORDER_DETAIL")]
+public class MesSalesOrderDetail
+{
+    /// <summary>
+    ///     SEQ_sales搴忓垪
+    /// </summary>
+    [SugarColumn(ColumnName = "ID", OracleSequenceName = "SEQ_sales",
+        IsPrimaryKey = true)]
+    public decimal Id { get; set; }
+
+    /// <summary>
+    ///     璁㈠崟鍗曞彿
+    /// </summary>
+    [SugarColumn(ColumnName = "ORDER_ID")] 
+    public string OrderId { get; set; }
+
+    /// <summary>
+    ///     搴忓彿
+    /// </summary>
+    [SugarColumn(ColumnName = "LINE_NUMBER")]
+    public string? LineNumber { get; set; }
+
+    /// <summary>
+    ///     浜у搧缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "PRODUCT_CODE")]
+    public string ProductCode { get; set; }
+
+    /// <summary>
+    ///     浜у搧鍚嶇О
+    /// </summary>
+    [SugarColumn(ColumnName = "PRODUCT_NAME")]
+    public string ProductName { get; set; }
+
+    /// <summary>
+    ///     浜у搧瑙勬牸
+    /// </summary>
+    [SugarColumn(ColumnName = "PRODUCT_SPEC")]
+    public string ProductSpec { get; set; }
+
+    /// <summary>
+    ///     棰勪氦璐ф棩鏈�
+    /// </summary>
+    [SugarColumn(ColumnName = "SCHEDULED_DELIVERY_DATE")]
+    public DateTime? ScheduledDeliveryDate { get; set; }
+
+    /// <summary>
+    ///     璁㈠崟鏁伴噺
+    /// </summary>
+    [SugarColumn(ColumnName = "ORDER_QUANTITY")]
+    public decimal? OrderQuantity { get; set; }
+
+    /// <summary>
+    ///     鍗曚綅
+    /// </summary>
+    [SugarColumn(ColumnName = "UNIT")]
+    public string Unit { get; set; }
+
+    /// <summary>
+    ///     鍗曚环
+    /// </summary>
+    [SugarColumn(ColumnName = "UNIT_PRICE")]
+    public decimal? UnitPrice { get; set; }
+
+    /// <summary>
+    ///     閲戦
+    /// </summary>
+    [SugarColumn(ColumnName = "AMOUNT")]
+    public decimal? Amount { get; set; }
+
+    /// <summary>
+    ///     瀹㈡埛浜у搧缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "CUSTOMER_PRODUCT_CODE")]
+    public string CustomerProductCode { get; set; }
+
+    /// <summary>
+    ///     宸蹭氦璐ф暟
+    /// </summary>
+    [SugarColumn(ColumnName = "DELIVERED_QUANTITY")]
+    public decimal? DeliveredQuantity { get; set; }
+
+    /// <summary>
+    ///     缁撴潫
+    /// </summary>
+    [SugarColumn(ColumnName = "IS_CLOSED")]
+    public string IsClosed { get; set; }
+
+    /// <summary>
+    ///     澶囨敞
+    /// </summary>
+    [SugarColumn(ColumnName = "REMARKS")]
+    public string Remarks { get; set; }
+
+    /// <summary>
+    ///     ERPID
+    /// </summary>
+    [SugarColumn(ColumnName = "ERP_ID")]
+    public string ErpId { get; set; }
+
+    /// <summary>
+    ///     ERP澶碔D
+    /// </summary>
+    [SugarColumn(ColumnName = "ERP_HEAD_ID")]
+    public string ErpHeadId { get; set; }
+}
\ No newline at end of file
diff --git a/MES.Service/bin/Debug/net8.0/MES.Service.dll b/MES.Service/bin/Debug/net8.0/MES.Service.dll
index 8af5a30..1f38dfc 100644
--- a/MES.Service/bin/Debug/net8.0/MES.Service.dll
+++ b/MES.Service/bin/Debug/net8.0/MES.Service.dll
Binary files differ
diff --git a/MES.Service/bin/Debug/net8.0/MES.Service.pdb b/MES.Service/bin/Debug/net8.0/MES.Service.pdb
index d5df46b..53a8e81 100644
--- a/MES.Service/bin/Debug/net8.0/MES.Service.pdb
+++ b/MES.Service/bin/Debug/net8.0/MES.Service.pdb
Binary files differ
diff --git a/MES.Service/service/MesSalesOrderDetailManager.cs b/MES.Service/service/MesSalesOrderDetailManager.cs
new file mode 100644
index 0000000..0561857
--- /dev/null
+++ b/MES.Service/service/MesSalesOrderDetailManager.cs
@@ -0,0 +1,79 @@
+锘縰sing MES.Service.DB;
+using MES.Service.Modes;
+using SqlSugar;
+
+namespace MES.Service.service;
+
+public class MesSalesOrderDetailManager : Repository<MesSalesOrderDetail>
+{
+    //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
+
+    //杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 SalesOrderDetailManager.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(SalesOrderDetail).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 SalesOrderDetail(); //娴嬭瘯鍙傛暟
+    //    var insertArray = new[] { insertData };
+    //    base.Insert(insertData); //鎻掑叆
+    //    base.InsertRange(insertArray); //鎵归噺鎻掑叆
+    //    var id = base.InsertReturnIdentity(insertData); //鎻掑叆杩斿洖鑷鍒�
+    //    AsInsertable(insertData).ExecuteCommand(); //鎴戜滑鍙互杞垚 Insertable瀹炵幇澶嶆潅鎻掑叆
+
+
+    //    /*********鏇存柊*********/
+    //    var updateData = new SalesOrderDetail(); //娴嬭瘯鍙傛暟
+    //    var updateArray = new[] { updateData }; //娴嬭瘯鍙傛暟
+    //    base.Update(updateData); //鏍规嵁瀹炰綋鏇存柊
+    //    base.UpdateRange(updateArray); //鎵归噺鏇存柊
+    //    //base.Update(it => new SalesOrderDetail() { ClassName = "a", CreateTime = DateTime.Now }, it => it.id==1);// 鍙洿鏂癈lassName鍒楀拰CreateTime鍒楋紝鍏跺畠鍒椾笉鏇存柊锛屾潯浠秈d=1
+    //    AsUpdateable(updateData).ExecuteCommand(); //杞垚Updateable鍙互瀹炵幇澶嶆潅鐨勬彃鍏�
+
+
+    //    /*********鍒犻櫎*********/
+    //    var deldata = new SalesOrderDetail(); //娴嬭瘯鍙傛暟
+    //    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/MesSalesOrderManager.cs b/MES.Service/service/MesSalesOrderManager.cs
new file mode 100644
index 0000000..e559f71
--- /dev/null
+++ b/MES.Service/service/MesSalesOrderManager.cs
@@ -0,0 +1,177 @@
+锘縰sing AngleSharp.Dom;
+using MES.Service.DB;
+using MES.Service.Dto.webApi;
+using MES.Service.Modes;
+using SqlSugar;
+using System.Data;
+using System.Globalization;
+using DbType = System.Data.DbType;
+
+namespace MES.Service.service;
+
+public class MesSalesOrderManager : Repository<MesSalesOrder>
+{
+    //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
+
+    //杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 SalesOrderManager.cs
+
+    private readonly MesSalesOrderDetailManager _MesSalesOrderDetailManagerManager = new();
+
+    public bool SaveList(List<ErpSales> rohIns)
+    {
+        var result = rohIns.Select(Save).ToList();
+        return result.All(b => b);
+    }
+
+    public bool Save(ErpSales sales)
+    {
+        var salesErpOrder = sales.ErpOrder;
+        var mesSalesOrder = MapErpORDERtoMesSalesOrder(salesErpOrder);
+        var mesSalesOrderDetails = MapErpDETAILtoMesSalesOrderDetail(sales.ErpDetails);
+
+        return UseTransaction(db =>
+        {
+            switch (salesErpOrder.Type)
+            {
+                case "3":
+                    return UpdateData(db, mesSalesOrder, mesSalesOrderDetails) ? 1 : 0;
+                case "2":
+                    return SaveOrUpdateData(db, mesSalesOrder, mesSalesOrderDetails)
+                        ? 1
+                        : 0;
+                default:
+                    throw new NotImplementedException(
+                        $"type娌℃湁{salesErpOrder.Type}杩欎釜绫诲瀷");
+            }
+        }) > 0;
+    }
+    private bool SaveOrUpdateData(SqlSugarScope db, MesSalesOrder mesSalesOrder,
+        List<MesSalesOrderDetail> mesSalesOrderDetails)
+    {
+
+        if (mesSalesOrder.OrderId != null && mesSalesOrder.OrderType != null)
+        {
+
+            db.Deleteable<MesSalesOrder>()
+           .Where(it => it.OrderId == mesSalesOrder.OrderId &&
+                        it.OrderType == mesSalesOrder.OrderType)
+           .ExecuteCommand();
+
+        };
+        if (mesSalesOrderDetails.Count > 0)
+        {
+
+            var mesSalesOrderDetail = mesSalesOrderDetails.Select(s => new { s.OrderId, s.LineNumber }).ToList();
+
+            db.Deleteable<MesSalesOrderDetail>()
+            .Where(it => mesSalesOrderDetails
+            .Any(p => p.OrderId == it.OrderId
+             && p.LineNumber == it.LineNumber))
+            .ExecuteCommand();
+
+        };
+
+        var orUpdate = db.Insertable(mesSalesOrder).ExecuteCommand();
+        var baOrUpdate = db.Insertable(mesSalesOrderDetails).ExecuteCommand();
+
+        return orUpdate > 0 && baOrUpdate > 0;
+        throw new NotImplementedException("鎻掑叆鎴栨洿鏂板け璐�");
+
+
+    }
+    private bool UpdateData(SqlSugarScope db, MesSalesOrder mesSalesOrder,
+        List<MesSalesOrderDetail> mesSalesOrderDetails)
+    {
+        //鏍规嵁鍗曞埆鍜屽崟鍙疯繘琛屽垹闄�
+        var update = db.Deleteable<MesSalesOrder>()
+        .Where(it => it.OrderId == mesSalesOrder.OrderId &&
+                     it.OrderType == mesSalesOrder.OrderType)
+        .ExecuteCommand() > 0;
+
+        var mesSalesOrderDetail = mesSalesOrderDetails.Select(s => new { s.OrderId, s.LineNumber }).ToList();
+        
+        var insertOrUpdate = db.Deleteable<MesSalesOrderDetail>().Where(it => mesSalesOrderDetail.Any(p => p.OrderId == it.OrderId && p.LineNumber==it.LineNumber)).ExecuteCommand() > 0;
+
+
+        if (update && insertOrUpdate) return true;
+        throw new NotImplementedException("鏇存柊澶辫触");
+    }
+
+    private MesSalesOrder MapErpORDERtoMesSalesOrder(ErpORDER dto)
+    {
+        var entity = new MesSalesOrder
+        {
+            OrderId = dto.FBillNo,
+            OrderType = dto.FBillTypeID,
+            OrderDate = DateTime.TryParse(dto.F_UNW_Date_KHXQ, out DateTime orderDate) ? (DateTime?)orderDate : null,
+            DocumentVersion = long.TryParse(dto.FVersionNo, out long versionNo) ? (long?)versionNo : null,
+            DocumentDate = DateTime.TryParseExact(dto.FDate, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime documentDate) ? (DateTime?)documentDate : null,
+            CustomerId = dto.FCustId,
+            CustomerOrderId= dto.F_UNW_Text_KHDD,
+            DepartmentId= dto.FSaleDeptId,
+            TotalQuantity = long.TryParse(dto.FNote, out long quantity) ? (long?)quantity : null,
+            Remarks =dto.F_UNW_LargeText_TBKHBZ,
+            ApprovalDate = DateTime.TryParse(dto.FApproveDate, out DateTime approveDate) ? (DateTime?)approveDate : null,
+            Approver = dto.FApproverId
+        };
+
+
+
+        return entity;
+    }
+
+    private List<MesSalesOrderDetail> MapErpDETAILtoMesSalesOrderDetail(List<ErpDETAIL> dtoList)
+    {
+        var detailList = new List<MesSalesOrderDetail>();
+        
+        foreach (var dto in dtoList)
+        {
+            var mesSalesOrderDetail = new MesSalesOrderDetail
+            {
+                
+                OrderId= dto.F_UNW_Text_xsddh,
+                LineNumber = dto.LineNumber,
+                ProductCode =dto.FMaterialId,
+                ProductName =dto.FMaterialName,
+                ProductSpec=dto.FMaterialModel,
+                ScheduledDeliveryDate = DateTime.TryParse(dto.FMinPlanDeliveryDate, out DateTime scheduledDeliveryDate) ? (DateTime?)scheduledDeliveryDate : null,
+                OrderQuantity = long.TryParse(dto.FQty, out long quantity) ? (long?)quantity : null,
+                Unit = dto.FUnitID,
+                UnitPrice = long.TryParse(dto.FPrice, out long price) ? (long?)price : null,
+                Amount = long.TryParse(dto.FAmount, out long amount) ? (long?)amount : null,
+                
+
+            };
+            detailList.Add(mesSalesOrderDetail);
+        }
+        return detailList;
+    }
+
+
+    public bool Delete(YFDelete data)
+    {
+
+        return UseTransaction(db =>
+        {
+            var update = db.Deleteable<MesSalesOrder>()
+                   .Where(it => it.OrderId == data.FBillNo &&
+                                it.OrderType == data.FBillTypeID)
+                   .ExecuteCommand() > 0;
+
+            var insertOrUpdate = db.Deleteable<MesSalesOrderDetail>()
+                  .Where(it => it.OrderId == data.FBillNo 
+                         && it.LineNumber == data.FBillTypeID)
+                  .ExecuteCommand() > 0;
+
+
+
+            if (update && insertOrUpdate) return 1;
+            throw new NotImplementedException("鍒犻櫎澶辫触");
+        }) > 0;
+
+
+    }
+
+
+   
+}
\ No newline at end of file
diff --git a/MES.Service/service/WomcaaManager.cs b/MES.Service/service/WomcaaManager.cs
index cc348ef..209a96b 100644
--- a/MES.Service/service/WomcaaManager.cs
+++ b/MES.Service/service/WomcaaManager.cs
@@ -25,7 +25,7 @@
 
     public bool Save(ErpWOM wom)
     {
-        var womErpCaa = wom.ErpCaa;
+        var womErpCaa = wom. ErpCaa;
         var mesWomcaa = MapErpCAAtoWomcaa(womErpCaa);
         var mesWomcabs =  MapErpCABtoWomcab(wom.ErpCabs);
 
diff --git a/MESApplication/Controllers/MesSalesOrderController.cs b/MESApplication/Controllers/MesSalesOrderController.cs
new file mode 100644
index 0000000..02b58a1
--- /dev/null
+++ b/MESApplication/Controllers/MesSalesOrderController.cs
@@ -0,0 +1,312 @@
+锘縰sing System.Dynamic;
+using MES.Service.Dto.webApi;
+using MES.Service.Modes;
+using MES.Service.service;
+using MES.Service.util;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using Newtonsoft.Json;
+
+namespace MESApplication.Controllers;
+
+[ApiController]
+[Route("api/[controller]")]
+public class MesSalesOrderController : ControllerBase
+{
+    private readonly MessageCenterManager _manager = new();
+    private readonly MesSalesOrderManager m = new();
+
+
+    private readonly string METHOD = "POST";
+
+    private readonly string TableName = "MES_SALES_ORDER";
+
+    private readonly string URL = "http://localhost:10054/api/MesSalesOrder/";
+
+
+
+    [HttpPost("Save")]
+    public ResponseResult Save(ErpSales rohIn)
+    {
+        var entity = new MessageCenter();
+        entity.TableName = TableName;
+        entity.Url = URL + "Save";
+        entity.Method = METHOD;
+        entity.PageName = rohIn.ErpOrder.FBillTypeID + "-" + rohIn.ErpOrder.FBillNo; //鍗曞埆鍜屽崟鍙风殑鎷兼帴
+        entity.Title = "閿�鍞鍗�";
+        entity.Data = JsonConvert.SerializeObject(rohIn);
+        entity.Status = 1;
+        entity.CreateBy = "PL017";
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var save = m.Save(rohIn);
+
+            resultInfos.tbBillList = save;
+
+            entity.Result = 0;
+            entity.DealWith = 0;
+            if (save)
+            {
+                entity.Result = 1;
+                entity.DealWith = 1;
+            }
+
+            _manager.save(entity);
+
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            entity.Result = 0;
+
+            entity.DealWith = 0;
+
+            entity.ResultData = ex.Message;
+
+            _manager.save(entity);
+
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    [HttpPost("SaveList")]
+    public ResponseResult SaveList(List<ErpSales> units)
+    {
+        var entity = new MessageCenter();
+        entity.TableName = TableName;
+        entity.Url = URL + "SaveList";
+        entity.Method = METHOD;
+        entity.Data = JsonConvert.SerializeObject(units);
+        entity.Status = 1;
+        entity.CreateBy = "PL017";
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var save = m.SaveList(units);
+            resultInfos.tbBillList = save;
+
+            entity.Result = 0;
+            if (save) entity.Result = 1;
+
+            entity.DealWith = 1;
+            _manager.save(entity);
+
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            entity.Result = 0;
+
+            entity.DealWith = 0;
+
+            entity.ResultData = ex.Message;
+
+            _manager.save(entity);
+
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+
+    [HttpPost("Delete")]
+    public ResponseResult Delete(YFDelete data)
+    {
+        var entity = new MessageCenter();
+        entity.TableName = TableName;
+        entity.Url = URL + "Delete";
+        entity.Method = METHOD;
+        entity.PageName = data.FBillTypeID + "-" + data.FBillNo; //鍗曞埆鍜屽崟鍙风殑鎷兼帴
+        entity.Title = "閿�鍞鍗�";
+        entity.Data = JsonConvert.SerializeObject(data);
+        entity.Status = 1;
+        entity.CreateBy = "PL017";
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var save = m.Delete(data);
+
+            resultInfos.tbBillList = save;
+
+            entity.Result = 0;
+            if (save) entity.Result = 1;
+
+            entity.DealWith = 1;
+            _manager.save(entity);
+
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            entity.Result = 0;
+
+            entity.DealWith = 0;
+
+            entity.ResultData = ex.Message;
+
+            _manager.save(entity);
+
+            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] MesSalesOrder 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] MesSalesOrder 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] MesSalesOrder 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);
+        }
+    }
+}
diff --git a/MESApplication/bin/Debug/net8.0/MES.Service.dll b/MESApplication/bin/Debug/net8.0/MES.Service.dll
index 8af5a30..1f38dfc 100644
--- a/MESApplication/bin/Debug/net8.0/MES.Service.dll
+++ b/MESApplication/bin/Debug/net8.0/MES.Service.dll
Binary files differ
diff --git a/MESApplication/bin/Debug/net8.0/MES.Service.pdb b/MESApplication/bin/Debug/net8.0/MES.Service.pdb
index d5df46b..53a8e81 100644
--- a/MESApplication/bin/Debug/net8.0/MES.Service.pdb
+++ b/MESApplication/bin/Debug/net8.0/MES.Service.pdb
Binary files differ
diff --git a/MESApplication/bin/Debug/net8.0/MESApplication.deps.json b/MESApplication/bin/Debug/net8.0/MESApplication.deps.json
index a38b276..95a84e5 100644
--- a/MESApplication/bin/Debug/net8.0/MESApplication.deps.json
+++ b/MESApplication/bin/Debug/net8.0/MESApplication.deps.json
@@ -1412,7 +1412,10 @@
           "SqlSugarCore": "5.1.4.158"
         },
         "runtime": {
-          "MES.Service.dll": {}
+          "MES.Service.dll": {
+            "assemblyVersion": "1.0.0",
+            "fileVersion": "1.0.0.0"
+          }
         }
       }
     }
diff --git a/MESApplication/bin/Debug/net8.0/MESApplication.dll b/MESApplication/bin/Debug/net8.0/MESApplication.dll
index ef08bb7..4b810a9 100644
--- a/MESApplication/bin/Debug/net8.0/MESApplication.dll
+++ b/MESApplication/bin/Debug/net8.0/MESApplication.dll
Binary files differ
diff --git a/MESApplication/bin/Debug/net8.0/MESApplication.exe b/MESApplication/bin/Debug/net8.0/MESApplication.exe
index 6ccdd0e..c06bdad 100644
--- a/MESApplication/bin/Debug/net8.0/MESApplication.exe
+++ b/MESApplication/bin/Debug/net8.0/MESApplication.exe
Binary files differ
diff --git a/MESApplication/bin/Debug/net8.0/MESApplication.pdb b/MESApplication/bin/Debug/net8.0/MESApplication.pdb
index 4924f3b..86dfcdb 100644
--- a/MESApplication/bin/Debug/net8.0/MESApplication.pdb
+++ b/MESApplication/bin/Debug/net8.0/MESApplication.pdb
Binary files differ
diff --git a/MESApplication/bin/Debug/net8.0/MESApplication.xml b/MESApplication/bin/Debug/net8.0/MESApplication.xml
index d3e5c89..0696b68 100644
--- a/MESApplication/bin/Debug/net8.0/MESApplication.xml
+++ b/MESApplication/bin/Debug/net8.0/MESApplication.xml
@@ -822,6 +822,42 @@
             </summary>
             <returns></returns>
         </member>
+        <member name="M:MESApplication.Controllers.MesSalesOrderController.GetList">
+            <summary>
+                鑾峰彇鎵�鏈�
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:MESApplication.Controllers.MesSalesOrderController.GetById(System.Int32)">
+            <summary>
+                鏍规嵁涓婚敭鑾峰彇
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:MESApplication.Controllers.MesSalesOrderController.DeleteByIds(System.Object[])">
+            <summary>
+                鏍规嵁涓婚敭鍒犻櫎
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:MESApplication.Controllers.MesSalesOrderController.Add(MES.Service.Modes.MesSalesOrder)">
+            <summary>
+                娣诲姞
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:MESApplication.Controllers.MesSalesOrderController.InsertReturnIdentity(MES.Service.Modes.MesSalesOrder)">
+            <summary>
+                娣诲姞杩斿洖鑷
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:MESApplication.Controllers.MesSalesOrderController.Update(MES.Service.Modes.MesSalesOrder)">
+            <summary>
+                淇敼
+            </summary>
+            <returns></returns>
+        </member>
         <member name="M:MESApplication.Controllers.QC.MesLineUserController.GetList">
             <summary>
                 鑾峰彇鎵�鏈�

--
Gitblit v1.9.3