From 94c9e2a81a3808e9e974ad43b7c2798093b632ed Mon Sep 17 00:00:00 2001
From: zjh <2207896513@qq.com>
Date: 星期二, 29 七月 2025 14:20:09 +0800
Subject: [PATCH] 1、销售模块:预测订单、标准出货、销售退货接口代码提交 2、仓退申请单接口bug修复代码提交

---
 StandardPda/MES.Service/service/BasicData/SalesReturnNoticeManager.cs |  203 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 202 insertions(+), 1 deletions(-)

diff --git a/StandardPda/MES.Service/service/BasicData/SalesReturnNoticeManager.cs b/StandardPda/MES.Service/service/BasicData/SalesReturnNoticeManager.cs
index 90ef3df..8d22032 100644
--- a/StandardPda/MES.Service/service/BasicData/SalesReturnNoticeManager.cs
+++ b/StandardPda/MES.Service/service/BasicData/SalesReturnNoticeManager.cs
@@ -1,5 +1,10 @@
 锘縰sing MES.Service.DB;
+using System.Data;
+using System.Globalization;
+using MES.Service.Dto.webApi;
 using MES.Service.Modes;
+using SqlSugar;
+using DbType = System.Data.DbType;
 
 namespace MES.Service.service.BasicData;
 
@@ -7,5 +12,201 @@
 {
     //褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
 
-    //杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 SalesReturnNoticeManager.cs
+    private readonly SalesReturnDetailManager _SalesReturnDetailManager =
+        new();
+    //ErpSalesRerurn
+    public bool Save(ErpSalesRerurn SalesReturn)
+    {
+        var erpSalesReturnDto = SalesReturn.OrderDto;
+        var mesSalesReturn = ConvertErpToSalesReturn(SalesReturn.OrderDto);
+        var mesSalesReturnDatas = ConvertErpToSalesReturnDetail(SalesReturn.Items);
+
+        return UseTransaction(db =>
+        {
+            switch (erpSalesReturnDto.Type)
+            {
+                // case "2":
+                //     return InsertData(db, mesSalesReturn, mesSalesReturnDatas,
+                //         rohInErpRohIn.FBILLTYPE)
+                //         ? 1
+                //         : 0;
+                case "3":
+                    return UpdateData(db, mesSalesReturn, mesSalesReturnDatas) ? 1 : 0;
+                case "2":
+                case "4":
+                    return SaveOrUpdateData(db, mesSalesReturn, mesSalesReturnDatas, erpSalesReturnDto.Type)
+                        ? 1
+                        : 0;
+                default:
+                    throw new NotImplementedException(
+                        $"type娌℃湁{erpSalesReturnDto.Type}杩欎釜绫诲瀷");
+            }
+        }) > 0;
+    }
+
+    private bool UpdateData(SqlSugarScope db, SalesReturnNotice mesSalesReturn,
+        List<SalesReturnNoticeDetail> mesSalesReturnDatas)
+    {
+        var decimals = mesSalesReturnDatas.Select(s => s.Id).ToArray();
+        var update = base.DeleteById(mesSalesReturn.Id);
+        var insertOrUpdate = db
+            .Deleteable<SalesReturnNoticeDetail>().In(decimals)
+            .ExecuteCommand() > 0;
+
+        if (update && insertOrUpdate) return true;
+        throw new NotImplementedException("鏇存柊澶辫触");
+    }
+
+    // 鎻掑叆鎴栨洿鏂版暟鎹殑鏂规硶
+    private bool SaveOrUpdateData(SqlSugarScope db, SalesReturnNotice mesSalesReturn,
+        List<SalesReturnNoticeDetail> mesSalesReturnDatas, string type)
+    {
+        if (mesSalesReturn.Id != null) base.DeleteById(mesSalesReturn.Id);
+
+        if (mesSalesReturnDatas.Count > 0)
+            db.Deleteable<SalesReturnNoticeDetail>()
+                .Where(s => s.ErpHeadId == mesSalesReturn.ErpId).ExecuteCommand();
+
+        var orUpdate = base.Insert(mesSalesReturn);
+        var baOrUpdate = _SalesReturnDetailManager.InsertRange(mesSalesReturnDatas);
+        if (orUpdate && baOrUpdate) return true;
+
+
+        throw new NotImplementedException("鎻掑叆鎴栨洿鏂板け璐�");
+    }
+
+    // 鎵归噺淇濆瓨璁板綍鐨勬柟娉�
+    public bool SaveList(List<ErpSalesRerurn> salesOrder)
+    {
+        var result = salesOrder.Select(Save).ToList();
+        return result.All(b => b);
+    }
+
+    private SalesReturnNotice ConvertErpToSalesReturn(
+        ErpSalesReturnDto erpDto)
+    {
+        DateTime parsedDate;
+
+        // 鏃堕棿鏍煎紡杞崲鍑芥暟锛孍RP鏃堕棿鏍煎紡涓� "yyyy-MM-dd HH:mm:ss"
+        DateTime? ParseDateTime(string dateStr)
+        {
+            if (DateTime.TryParseExact(dateStr, "yyyy-MM-dd HH:mm:ss",
+                    CultureInfo.InvariantCulture,
+                    DateTimeStyles.None,
+                    out parsedDate))
+                return parsedDate;
+
+            return null; // 濡傛灉杞崲澶辫触锛岃繑鍥瀗ull
+        }
+
+        var salesOrder = new SalesReturnNotice
+        {
+            BillNo = erpDto.FBillNo,
+            ErpId = erpDto.ErpID,
+            FDate = ParseDateTime(erpDto.FDate) ?? null,
+            BillType = erpDto.FBillTypeID, // 鍗曟嵁绫诲瀷
+            ReturnCustomer = erpDto.FRetcustId, // 閫�璐у鎴�
+            ReturnReason = erpDto.FRetcustReason, // 閫�璐у師鍥�
+            DeliveryLocation = erpDto.FHeadLocId, // 浜よ揣鍦扮偣
+            ReceiverContact = erpDto.FReceiveCusContact, // 鏀惰揣鏂硅仈绯讳汉
+            ReceiverAddress = erpDto.FReceiveAddress, // 鏀惰揣鏂瑰湴鍧�
+            CreatedBy = erpDto.FCreatorId, // 鍒涘缓浜�
+            CreatedDate = ParseDateTime(erpDto.FCreateDate) ?? null, // 鍒涘缓鏃堕棿
+            ApprovedBy = erpDto.FApproverId, // 瀹℃牳浜�
+            ApprovedDate = ParseDateTime(erpDto.FApproveDate) ?? null, // 瀹℃牳鏃ユ湡
+            BillStatus = erpDto.FDocumentStatus, //鍗曟嵁鐘舵��
+            ReturnType= erpDto.ReturnType, // 閫�鍥炵被鍨�
+            TotalQuantity = erpDto.TotalQuantity, // 鎬绘暟閲�
+            SourceDocumentCategory = erpDto.SourceDocumentCategory, // 鏉ユ簮鍗曟嵁绫诲埆
+            SourceDocument = erpDto.SourceDocument, // 婧愬崟鎹�
+            ReplenishmentOrganization= erpDto.ReplenishmentOrganization, // 琛ヨ揣缁勭粐
+            CustomerRequestDate = erpDto.CustomerRequestDate,  // 瀹㈡埛瑕佹眰鏃ユ湡
+            ReturnSalesman= erpDto.ReturnSalesman, // 閫�璐ч攢鍞憳
+            ReturnDescription = erpDto.ReturnDescription, // 閫�璐ц鏄�
+            ReturnDepartment = erpDto.ReturnDepartment // 閫�璐ч儴闂�
+
+        };
+
+        var single = base.GetSingle(it => it.ErpId == erpDto.ErpID);
+        if (single != null) salesOrder.Id = single.Id;
+
+        return salesOrder;
+    }
+
+    private List<SalesReturnNoticeDetail> ConvertErpToSalesReturnDetail(
+        List<ErpSalesReturnDetailDto> erpDtoList)
+
+    {
+        var salesOrderSubList =
+            new List<SalesReturnNoticeDetail>();
+
+        DateTime parsedDate;
+        // 鏃堕棿鏍煎紡杞崲鍑芥暟锛孍RP鏃堕棿鏍煎紡涓� "yyyy-MM-dd HH:mm:ss"
+        DateTime? ParseDateTime(string dateStr)
+        {
+            if (DateTime.TryParseExact(dateStr, "yyyy-MM-dd HH:mm:ss",
+                    CultureInfo.InvariantCulture,
+                    DateTimeStyles.None,
+                    out parsedDate))
+                return parsedDate;
+
+            return null; // 濡傛灉杞崲澶辫触锛岃繑鍥瀗ull
+        }
+
+
+
+        foreach (var erpDto in erpDtoList)
+        {
+            var salesOrderSub = new SalesReturnNoticeDetail
+            {
+                ErpLineId = erpDto.ErpID,//ERP琛孖D
+                ErpHeadId = erpDto.EHID,//ERP澶碔D
+                MaterialId = erpDto.FMaterialId,//鐗╂枡缂栧彿
+                //SalesUnitId = erpDto.FUnitID,//閿�鍞崟浣�
+                SalesQuantity = Convert.ToDecimal(erpDto.FQty),//閿�鍞暟閲�
+                //IsFree = erpDto.FIsFree,//鏄惁璧犲搧
+                //ReturnDate = ParseDateTime(erpDto.FDeliverydate),//閫�璐ф棩鏈�
+                Warehouse = erpDto.FStockId,//浠撳簱
+                //PlanTrackingNumber = erpDto.FMtoNo,//璁″垝璺熻釜鍙�
+                LotNumber = erpDto.FLot,//鎵瑰彿
+                Note = erpDto.FEntryDescription,//澶囨敞
+                //ReturnType = erpDto.FRmType,//閫�璐х被鍨�
+                //InventoryUnit = erpDto.FStockUnitID,//搴撳瓨鍗曚綅
+                //InventoryQuantity = Convert.ToDecimal(erpDto.FStockQty),//搴撳瓨鏁伴噺
+                //OwnerTypeId = erpDto.FOwnerTypeID,//璐т富绫诲瀷
+                OwnerId = erpDto.FOwnerId,//璐т富
+                SourceBillType = erpDto.FSrcType,
+                SourceBillNo = erpDto.FSrcBillNo,
+                OrderBillNo = erpDto.FOrderNo,
+                FLineNumber= erpDto.FLineNumber, // 琛屽彿
+                FLineStatus= erpDto.FLineStatus, // 琛岀姸鎬�
+                FRefundCustomer = erpDto.FRefundCustomer, // 閫�娆惧鎴�
+                FSupplier = erpDto.FSupplier, // 渚涘簲鍟�
+                FFreebieType = erpDto.FFreebieType, // 鍏嶈垂鍝佺被鍨�
+                FFreebieReason = erpDto.FFreebieReason, // 鍏嶈垂鍝佸師鍥�
+                FSourceDocLineNo = erpDto.FSourceDocLineNo, // 婧愬ご鍗曟嵁琛屽彿
+                FSourceDocSubLineNo = erpDto.FSourceDocSubLineNo, // 婧愬ご鍗曟嵁瀛愯鍙�
+                FSourceDocType = erpDto.FSourceDocType,// 婧愬ご鍗曟嵁绫诲瀷
+                FOriginalDocLineNo = erpDto.FOriginalDocLineNo,// 鍘熷鍗曟嵁琛屽彿
+                FReplenishOrg = erpDto.FReplenishOrg,// 琛ヨ揣缁勭粐
+                FReceivingOrg = erpDto.FReceivingOrg,// 鏀惰揣缁勭粐
+                FOriginalSalesman = erpDto.FOriginalSalesman,// 鍘熷閿�鍞憳
+                FOriginalDept = erpDto.FOriginalDept,// 鍘熷閮ㄩ棬
+                FProject = erpDto.FProject, // 椤圭洰
+                FReturnReason = erpDto.FReturnReason,// 閫�璐у師鍥�
+                FReturnDescription = erpDto.FReturnDescription,// 閫�璐ц鏄�
+
+            };
+
+            var single = _SalesReturnDetailManager.GetSingle(it =>
+                it.ErpLineId == salesOrderSub.ErpLineId);
+            if (single != null) salesOrderSub.Id = single.Id;
+
+            salesOrderSubList.Add(salesOrderSub);
+        }
+
+        return salesOrderSubList;
+    }
+
+
 }
\ No newline at end of file

--
Gitblit v1.9.3