From 362fb69c690a2b36e251996f8b22d87e97d385ba Mon Sep 17 00:00:00 2001
From: cnf <3200815559@qq.com>
Date: 星期三, 12 二月 2025 16:06:33 +0800
Subject: [PATCH] 新增销售订单保存接口,销售退货通知单保存接口,销售发货通知单保存接口

---
 MES.Service/service/BasicData/SalesOrderManager.cs |  188 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 187 insertions(+), 1 deletions(-)

diff --git a/MES.Service/service/BasicData/SalesOrderManager.cs b/MES.Service/service/BasicData/SalesOrderManager.cs
index b466f00..d635c50 100644
--- a/MES.Service/service/BasicData/SalesOrderManager.cs
+++ b/MES.Service/service/BasicData/SalesOrderManager.cs
@@ -1,4 +1,5 @@
 锘縰sing MES.Service.DB;
+using MES.Service.Dto.webApi;
 using MES.Service.Modes;
 using SqlSugar;
 
@@ -38,7 +39,8 @@
         conModels.Add(new ConditionalModel
         {
             FieldName = typeof(SalesOrder).GetProperties()[0].Name,
-            ConditionalType = ConditionalType.Equal, FieldValue = "1"
+            ConditionalType = ConditionalType.Equal,
+            FieldValue = "1"
         }); //id=1
         var data7 = base.GetPageList(conModels, p, it => SqlFunc.GetRandom());
 
@@ -75,4 +77,188 @@
     }
 
     #endregion
+
+
+    private readonly SalesOrderDetailManager salesOrderDetailManager = new();
+
+    // Save 鏂规硶鐢ㄤ簬淇濆瓨鍗曚釜 閿�鍞鍗�(SalesOrder) 璁板綍锛屾牴鎹被鍨嬫墽琛屼笉鍚岀殑鎿嶄綔
+    public bool Save(SalesOrders salesOrders)
+    {
+        var salesOrdersErpSalesOrder = salesOrders.ErpSalesOrder;
+        var mesSalesOrders = GetMesSalesOrder(salesOrdersErpSalesOrder);
+        var mesSalesOrderDetail = GetErpSalesOrderDetail(salesOrders.ErpSalesOrderDetails,salesOrdersErpSalesOrder.Type);
+
+        return UseTransaction(db =>
+        {
+            switch (salesOrdersErpSalesOrder.Type)
+            {
+                case "3":
+                    return UpdateData(db, mesSalesOrders, mesSalesOrderDetail) ? 1 : 0;
+                case "2":
+                case "4":
+                case "5":
+                case "B":
+                    return SaveOrUpdateData(db, mesSalesOrders, mesSalesOrderDetail)
+                        ? 1
+                        : 0;
+                default:
+                    throw new NotImplementedException(
+                        $"type娌℃湁{salesOrdersErpSalesOrder.Type}杩欎釜绫诲瀷");
+            }
+        }) > 0;
+
+    }
+
+
+
+    // 鏇存柊鏁版嵁鐨勬柟娉�(鍗曠函鐨勫垹闄�)
+    private bool UpdateData(SqlSugarScope db, SalesOrder salesOrder,
+        List<SalesOrderDetail> salesOrderDetails)
+    {
+        var decimals = salesOrderDetails.Select(s => s.Id).ToArray();
+        var update = base.DeleteById(salesOrder.Id);
+        var insertOrUpdate = db
+            .Deleteable<SalesOrderDetail>().In(decimals)
+            .ExecuteCommand() > 0;
+
+        if (update && insertOrUpdate) return true;
+        throw new NotImplementedException("鍒犻櫎澶辫触");
+    }
+
+    // 鎻掑叆鎴栨洿鏂版暟鎹殑鏂规硶
+    private bool SaveOrUpdateData(SqlSugarScope db, SalesOrder salesOrder,
+        List<SalesOrderDetail> salesOrderDetails)
+    {
+        if (salesOrder.Id != null) base.DeleteById(salesOrder.Id);
+
+        if (salesOrderDetails.Count > 0)
+            db.Deleteable<SalesOrderDetail>()
+                .Where(s => s.ErpId == salesOrder.Id).ExecuteCommand();
+
+        var orUpdate = base.Insert(salesOrder);
+        var baOrUpdate = salesOrderDetailManager.InsertRange(salesOrderDetails);
+        if (orUpdate && baOrUpdate) return true;
+        throw new NotImplementedException("鎻掑叆鎴栨洿鏂板け璐�");
+    }
+
+    // 鎵归噺淇濆瓨璁板綍鐨勬柟娉�
+    public bool SaveList(List<SalesOrders> salesOrders)
+    {
+        var result = salesOrders.Select(Save).ToList();
+        return result.All(b => b);
+    }
+
+
+    // 灏� ErpSalesOrder 瀵硅薄杞崲涓� SalesOrder 瀵硅薄鐨勬柟娉�
+    public SalesOrder GetMesSalesOrder(ErpSalesOrder erpSalesOrder)
+    {
+
+        var eid = Convert.ToDecimal(erpSalesOrder.Id);
+        var MesSalesOrder = new SalesOrder();
+
+        var single = base.GetSingle(it => it.Id == eid);
+        if (single != null) MesSalesOrder.Id = single.Id;
+
+        MesSalesOrder.ErpId = Convert.ToDecimal(erpSalesOrder.ErpID);
+        MesSalesOrder.BillNo = erpSalesOrder.FBillNo;
+        MesSalesOrder.BillTypeId = erpSalesOrder.FBillTypeID;
+        MesSalesOrder.DocumentStatus = erpSalesOrder.FDocumentStatus;
+
+        if (erpSalesOrder.FDate != null)
+            MesSalesOrder.FDate = DateTime.ParseExact(erpSalesOrder.FDate, "yyyy-MM-dd HH:mm:ss", null);
+
+        MesSalesOrder.BusinessType = erpSalesOrder.FBusinessType;
+        MesSalesOrder.HeadDeliveryWay = erpSalesOrder.FHeadDeliveryWay;
+        MesSalesOrder.CloseStatus = erpSalesOrder.FCloseStatus;
+        MesSalesOrder.HeadLocId = erpSalesOrder.FHEADLOCID;
+        MesSalesOrder.CustId = erpSalesOrder.FCustId;
+        MesSalesOrder.CloseStatus = erpSalesOrder.FCloseStatus;
+        MesSalesOrder.SaleDeptId = erpSalesOrder.FSaleDeptId;
+        MesSalesOrder.SalerId = erpSalesOrder.FSalerId;
+        MesSalesOrder.ChangeReason = erpSalesOrder.FChangeReason;
+        MesSalesOrder.Note = erpSalesOrder.FNote;
+        MesSalesOrder.SettleId = erpSalesOrder.FSettleId;
+        MesSalesOrder.LinkMan = erpSalesOrder.FLinkMan;
+        MesSalesOrder.ChargeId = erpSalesOrder.FChargeId;
+        MesSalesOrder.LinkPhone = erpSalesOrder.FLinkPhone;
+        MesSalesOrder.CreatorId = erpSalesOrder.FCreatorId;
+
+        if (erpSalesOrder.FCreateDate != null)
+            MesSalesOrder.CreateDate = DateTime.ParseExact(erpSalesOrder.FCreateDate, "yyyy-MM-dd HH:mm:ss", null);
+
+        MesSalesOrder.ModifierId = erpSalesOrder.FModifierId;
+
+        if (erpSalesOrder.FModifyDate != null)
+            MesSalesOrder.ModifyDate = DateTime.ParseExact(erpSalesOrder.FModifyDate, "yyyy-MM-dd HH:mm:ss", null);
+
+        if (erpSalesOrder.FApproveDate != null)
+            MesSalesOrder.ApproveDate = DateTime.ParseExact(erpSalesOrder.FApproveDate, "yyyy-MM-dd HH:mm:ss", null);
+
+        MesSalesOrder.CloserId = erpSalesOrder.FCloserId;
+
+        if (erpSalesOrder.FCloseDate != null)
+            MesSalesOrder.CloseDate = DateTime.ParseExact(erpSalesOrder.FCloseDate, "yyyy-MM-dd HH:mm:ss", null);
+
+        if (erpSalesOrder.FChangeDate != null)
+            MesSalesOrder.ChangeDate = DateTime.ParseExact(erpSalesOrder.FChangeDate, "yyyy-MM-dd HH:mm:ss", null);
+
+        MesSalesOrder.CancelStatus = erpSalesOrder.FCancelStatus;
+        MesSalesOrder.CancellerId = erpSalesOrder.FCancellerId;
+        MesSalesOrder.VersionNo = Convert.ToDecimal(erpSalesOrder.FVersionNo);
+        MesSalesOrder.ChangerId = erpSalesOrder.FChangerId;
+        MesSalesOrder.EntryNote = erpSalesOrder.FEntryNote;
+
+        return MesSalesOrder;
+    }
+
+    // 灏� ErpSalesOrderDetail 瀵硅薄杞崲涓� SalesOrderDetail 瀵硅薄鐨勬柟娉�
+    public List<SalesOrderDetail> GetErpSalesOrderDetail(
+        List<ErpSalesOrderDetail> erpSalesOrderDetails, string type)
+    {
+        return erpSalesOrderDetails.Select(s =>
+        {
+            var entity = new SalesOrderDetail
+            {
+                Id = Convert.ToDecimal(s.Id),
+                ErpId = Convert.ToDecimal(s.ErpID),
+                EHid = Convert.ToDecimal(s.EHID),
+                MaterialIDd = s.FMaterialId,
+                UnitId = s.FUnitID,
+                Qty = Convert.ToDecimal(s.FQty),
+                PriceUnitId = s.FPriceUnitId,
+                PriceUnitQty = Convert.ToDecimal(s.FPriceUnitQty),
+                DeliveryDate = s.FDeliveryDate != null ? DateTime.ParseExact(s.FDeliveryDate, "yyyy-MM-dd HH:mm:ss", null) : null,
+                IsFree = s.FIsFree,
+                OwnerTypeId = s.FOwnerTypeId,
+                OwnerId = s.FOwnerId,
+                EntryNote = s.FEntryNote,
+                MtoNo = s.FMtoNo,
+                Lot = s.FLot,
+                DeliveryMaxQty = Convert.ToDecimal(s.FDeliveryMaxQty),
+                DeliveryMinQty = Convert.ToDecimal(s.FDeliveryMinQty),
+                OutLmtUnitId = s.FOutLmtUnitID,
+                MrpCloseStatus = s.FMrpCloseStatus,
+                MrpTerminateStatus = s.FMrpTerminateStatus,
+                TerminateDate = s.FTerminateDate != null ? DateTime.ParseExact(s.FTerminateDate, "yyyy-MM-dd HH:mm:ss", null) : null,
+                TerminaterId = s.FTerminaterId,
+                SrcType = s.FSrcType,
+                SrcBillNo = s.FSrcBillNo,
+                DeliQty = Convert.ToDecimal(s.FDeliQty),
+                StockOutQty = Convert.ToDecimal(s.FStockOutQty),
+                BaseRetNoticeQty = Convert.ToDecimal(s.FBaseRetNoticeQty),
+                BaseReturnQty = Convert.ToDecimal(s.FBaseReturnQty),
+                BaseRemainOutQty = Convert.ToDecimal(s.FBaseRemainOutQty),
+                BaseArQty = Convert.ToDecimal(s.FBASEARQTY),
+
+
+
+            };
+
+            var single = salesOrderDetailManager.GetSingle(it =>
+                it.Id == entity.Id);
+            if (single != null) entity.Id = single.Id;
+
+            return entity;
+        }).ToList();
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3