From c5751829f3a3dc86a510c90fb5e987d72533a08e Mon Sep 17 00:00:00 2001
From: 如洲 陈 <1278080563@qq.com>
Date: 星期三, 24 九月 2025 09:56:03 +0800
Subject: [PATCH] 退货通知单
---
MES.Service/service/BasicData/SalesReturnNoticeManager.cs | 267 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 266 insertions(+), 1 deletions(-)
diff --git a/MES.Service/service/BasicData/SalesReturnNoticeManager.cs b/MES.Service/service/BasicData/SalesReturnNoticeManager.cs
index 206f0ea..53e0f51 100644
--- a/MES.Service/service/BasicData/SalesReturnNoticeManager.cs
+++ b/MES.Service/service/BasicData/SalesReturnNoticeManager.cs
@@ -1,4 +1,6 @@
-锘縰sing MES.Service.DB;
+锘縰sing System.Globalization;
+using MES.Service.DB;
+using MES.Service.Dto.webApi;
using MES.Service.Modes;
using SqlSugar;
@@ -8,6 +10,269 @@
{
//褰撳墠绫诲凡缁忕户鎵夸簡 Repository 澧炪�佸垹銆佹煡銆佹敼鐨勬柟娉�
+ private readonly SalesReturnNoticeDetailManager _SalesReturnDetailManager =
+ new();
+
+ //ErpSalesReturn
+ public bool Save(ErpSalesReturn 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 deleteDetails = db.Deleteable<SalesReturnNoticeDetail>()
+ .Where(s => s.ErpHeadId == mesSalesReturn.ErpId)
+ .ExecuteCommand() >= 0; // 浣跨敤>=0锛屽洜涓哄彲鑳芥病鏈夋槑缁嗘暟鎹�
+
+ // 鍐嶅垹闄や富琛ㄦ暟鎹�
+ var deleteMain = base.DeleteById(mesSalesReturn.Id);
+
+ if (deleteMain && deleteDetails) return true;
+ throw new NotImplementedException("鍒犻櫎澶辫触");
+ }
+
+ // 鎻掑叆鎴栨洿鏂版暟鎹殑鏂规硶
+ private bool SaveOrUpdateData(SqlSugarScope db,
+ SalesReturnNotice mesSalesReturn,
+ List<SalesReturnNoticeDetail> mesSalesReturnDatas, string type)
+ {
+ // 濡傛灉瀛樺湪涓昏〃璁板綍锛屽厛鍒犻櫎浠庤〃鏁版嵁锛屽啀鍒犻櫎涓昏〃
+ if (mesSalesReturn.Id != null)
+ {
+ // 鍏堝垹闄や粠琛ㄦ暟鎹紙鏄庣粏琛級
+ db.Deleteable<SalesReturnNoticeDetail>()
+ .Where(s => s.ErpHeadId == mesSalesReturn.ErpId)
+ .ExecuteCommand();
+
+ // 鍐嶅垹闄や富琛ㄦ暟鎹�
+ base.DeleteById(mesSalesReturn.Id);
+ }
+ else
+ {
+ // 濡傛灉涓昏〃涓嶅瓨鍦紝浣嗗彲鑳芥湁浠庤〃鏁版嵁锛屼篃鍒犻櫎浠庤〃鏁版嵁
+ db.Deleteable<SalesReturnNoticeDetail>()
+ .Where(s => s.ErpHeadId == mesSalesReturn.ErpId)
+ .ExecuteCommand();
+ }
+
+ // 鎻掑叆鏂扮殑涓昏〃鏁版嵁
+ var orUpdate = base.Insert(mesSalesReturn);
+
+ // 鎻掑叆鏂扮殑浠庤〃鏁版嵁
+ var baOrUpdate = true;
+ if (mesSalesReturnDatas.Count > 0)
+ {
+ baOrUpdate = _SalesReturnDetailManager.InsertRange(mesSalesReturnDatas);
+ }
+
+ if (orUpdate && baOrUpdate) return true;
+
+ throw new NotImplementedException("鎻掑叆鎴栨洿鏂板け璐�");
+ }
+
+ // 鎵归噺淇濆瓨璁板綍鐨勬柟娉�
+ public bool SaveList(List<ErpSalesReturn> salesOrder)
+ {
+ var result = salesOrder.Select(Save).ToList();
+ return result.All(b => b);
+ }
+
+ // 閲嶅啓DeleteById鏂规硶锛屽疄鐜扮骇鑱斿垹闄�
+ public new bool DeleteById(object id)
+ {
+ return UseTransaction(db =>
+ {
+ // 鍏堣幏鍙栦富琛ㄨ褰曪紝鑾峰彇ErpId鐢ㄤ簬鍒犻櫎浠庤〃
+ var mainRecord = base.GetById(Convert.ToDecimal(id));
+ if (mainRecord != null)
+ {
+ // 鍏堝垹闄や粠琛ㄦ暟鎹紙鏄庣粏琛級
+ db.Deleteable<SalesReturnNoticeDetail>()
+ .Where(s => s.ErpHeadId == mainRecord.ErpId)
+ .ExecuteCommand();
+ }
+
+ // 鍐嶅垹闄や富琛ㄦ暟鎹�
+ return base.DeleteById(id) ? 1 : 0;
+ }) > 0;
+ }
+
+ // 閲嶅啓DeleteByIds鏂规硶锛屽疄鐜扮骇鑱斿垹闄�
+ public new bool DeleteByIds(object[] ids)
+ {
+ return UseTransaction(db =>
+ {
+ var successCount = 0;
+ foreach (var id in ids)
+ {
+ // 鍏堣幏鍙栦富琛ㄨ褰曪紝鑾峰彇ErpId鐢ㄤ簬鍒犻櫎浠庤〃
+ var mainRecord = base.GetById(Convert.ToDecimal(id));
+ if (mainRecord != null)
+ {
+ // 鍏堝垹闄や粠琛ㄦ暟鎹紙鏄庣粏琛級
+ db.Deleteable<SalesReturnNoticeDetail>()
+ .Where(s => s.ErpHeadId == mainRecord.ErpId)
+ .ExecuteCommand();
+ }
+
+ // 鍐嶅垹闄や富琛ㄦ暟鎹�
+ if (base.DeleteById(id))
+ {
+ successCount++;
+ }
+ }
+ return successCount;
+ }) > 0;
+ }
+
+ 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, // 鍗曟嵁绫诲瀷
+ Currency = erpDto.FSettleCurrld, // 缁撶畻甯佸埆
+ SalesDept = erpDto.FSaleDeptId, //閿�鍞儴闂�
+ ReturnCustomer = erpDto.FRetcustId, // 閫�璐у鎴�
+ ReturnReason = erpDto.FRetcustReason, // 閫�璐у師鍥�
+ DeliveryLocation = erpDto.FHeadLocId, // 浜よ揣鍦扮偣
+ InventoryDept = erpDto.FRetDeptId, // 搴撳瓨閮ㄩ棬
+ InventoryGroup = erpDto.FStockerGroupId, // 搴撳瓨缁�
+ WarehouseManager = erpDto.FStockerId, // 浠撶鍛�
+ SalesGroup = erpDto.FSaleGroupId, // 閿�鍞粍
+ SalesPerson = erpDto.FSalesManId, //閿�鍞憳
+ Receiver = erpDto.FReceiveCusId, // 鏀惰揣鏂�
+ ReceiverContact = erpDto.FReceiveCusContact, // 鏀惰揣鏂硅仈绯讳汉
+ ReceiverAddress = erpDto.FReceiveAddress, // 鏀惰揣鏂瑰湴鍧�
+ ReceiverName = erpDto.FLinkMan, // 鏀惰揣鏂瑰鍚�
+ SettleParty = erpDto.FSettleCusId, // 缁撶畻鏂�
+ CreatedBy = erpDto.FCreatorId, // 鍒涘缓浜�
+ CreatedDate = ParseDateTime(erpDto.FCreateDate) ?? null, // 鍒涘缓鏃堕棿
+ ModifiedBy = erpDto.FModifierId, // 淇敼浜�
+ ModifiedDate = ParseDateTime(erpDto.FModifyDate) ?? null, // 淇敼鏃堕棿
+ ClosedBy = erpDto.FCloserId, // 鍏抽棴浜�
+ CloseReason = erpDto.FCloseReason, // 鍏抽棴鍘熷洜
+ CloseDate = ParseDateTime(erpDto.FCloseDate) ?? null, // 鍏抽棴鏃ユ湡
+ ApprovedBy = erpDto.FApproverId, // 瀹℃牳浜�
+ ApprovedDate = ParseDateTime(erpDto.FApproveDate) ?? null, // 瀹℃牳鏃ユ湡
+ CancelStatus = erpDto.FCancelStatus, // 浣滃簾鐘舵��
+ CancelledBy = erpDto.FCancellerId, // 浣滃簾浜�
+ CancelDate = ParseDateTime(erpDto.FCancelDate) ?? null, // 浣滃簾鏃ユ湡
+ CloseStatus = erpDto.FBillCloseStatus, // 鍏抽棴鐘舵��
+ BillStatus = erpDto.FDocumentStatus //鍗曟嵁鐘舵��
+ };
+
+ 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
+ };
+
+ var single = _SalesReturnDetailManager.GetSingle(it =>
+ it.ErpLineId == salesOrderSub.ErpLineId);
+ if (single != null) salesOrderSub.Id = single.Id;
+
+ salesOrderSubList.Add(salesOrderSub);
+ }
+
+ return salesOrderSubList;
+ }
+
//杩欓噷闈㈠啓鐨勪唬鐮佷笉浼氱粰瑕嗙洊,濡傛灉瑕侀噸鏂扮敓鎴愯鍒犻櫎 SalesReturnNoticeManager.cs
--
Gitblit v1.9.3