From a0a0df2e824b6fe7e5a3c0afce78127fecf84fc9 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期一, 03 十一月 2025 08:23:05 +0800
Subject: [PATCH] ERP接口代码更新,WCS代码优化,出入库分配优化
---
项目代码/WMS/WMSServices/WIDESEA_InboundService/PurchaseBSTOrderService.cs | 105 +++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 98 insertions(+), 7 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/PurchaseBSTOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/PurchaseBSTOrderService.cs"
index 9d625d1..369453e 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/PurchaseBSTOrderService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_InboundService/PurchaseBSTOrderService.cs"
@@ -6,14 +6,16 @@
using System.Text;
using System.Threading.Tasks;
using WIDESEA_BasicRepository;
+using WIDESEA_Common.MaterielEnum;
using WIDESEA_Common.OrderEnum;
+using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_DTO;
-using WIDESEA_DTO.Basic;
+using WIDESEA_DTO.ERP;
using WIDESEA_IBasicRepository;
using WIDESEA_IInboundRepository;
using WIDESEA_IInboundService;
@@ -57,43 +59,132 @@
List<BSTPurchaseOrderDTO> bSTPurchaseOrderDTOsUpdate = bSTPurchaseOrderDTOs.Where(x => x.Way == 2).ToList();
//鍒犻櫎
List<BSTPurchaseOrderDTO> bSTPurchaseOrderDTOsDel = bSTPurchaseOrderDTOs.Where(x => x.Way == 3).ToList();
-
+ //鑾峰彇鎵�鏈夌墿鏂�
+ List<Dt_MaterielInfo> materielInfos = _basicRepository.MaterielInfoRepository.QueryData(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt() && x.MaterielInvOrgId == MaterielInvOrgEnum.鑰佸巶.ObjToInt() && x.MaterialSourceId != 0);
+ //鑾峰彇鎵�鏈変緵搴斿晢
+ List<Dt_SupplierInfo> supplierInfos = _basicRepository.SupplierInfoRepository.QueryData(x => x.InvOrgId == MaterielInvOrgEnum.鑰佸巶.ObjToInt());
+
List<Dt_PurchaseBSTOrder> purchaseAddBSTOrders = new List<Dt_PurchaseBSTOrder>();
List<Dt_PurchaseBSTOrder> purchaseUpdateBSTOrders = new List<Dt_PurchaseBSTOrder>();
List<Dt_PurchaseBSTOrder> purchaseDeleteBSTOrders = new List<Dt_PurchaseBSTOrder>();
+ List<Dt_PurchaseBSTOrderDetail> purchaseBSTOrderDetailsDel = new List<Dt_PurchaseBSTOrderDetail>();
+ //鏂板
if (bSTPurchaseOrderDTOsAdd.Count>0)
{
- //鍒ゆ柇閲嶅鎻掑叆
+ //鍒ゆ柇渚涘簲鍟�
+ BSTPurchaseOrderDTO? bSTPurchaseOrderDTO = bSTPurchaseOrderDTOsAdd.FirstOrDefault(x => !supplierInfos.Select(x=>x.SupplierCode).Contains(x.VendNo));
+ if (bSTPurchaseOrderDTO != null)
+ {
+ return content.Error($"閲囪喘{nameof(BSTPurchaseOrderDTO.PaperReceiptNo)}:{bSTPurchaseOrderDTO.PaperReceiptNo}渚涘簲鍟�:{bSTPurchaseOrderDTO.VendNo}涓嶅瓨鍦�");
+ }
+ //鍒ゆ柇鍗曟嵁
Dt_PurchaseBSTOrder? ExistAddPurchase = OldpurchaseBSTOrders.FirstOrDefault(x => bSTPurchaseOrderDTOsAdd.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId));
if (ExistAddPurchase != null)
{
return content.Error($"閲囪喘鏀惰揣Id{nameof(BSTPurchaseOrderDTO.PaperReceiptId)}:{ExistAddPurchase.PaperReceiptId}宸插瓨鍦�");
}
+ //楠岃瘉鏉$爜閲嶅
+ List<Dt_PurchaseBSTOrderDetail> purchaseBSTOrderDetails = OldpurchaseBSTOrders.SelectMany(x => x.Details).ToList();
+ List<PaperReceiptDetailsItem> paperReceiptDetailsItemsAdd = bSTPurchaseOrderDTOsAdd.SelectMany(x => x.PaperReceiptDetails).ToList();
+ var ExistDetail = purchaseBSTOrderDetails.FirstOrDefault(x => paperReceiptDetailsItemsAdd.Select(x => x.Barcode).Contains(x.Barcode));
+ if (ExistDetail!=null)
+ {
+ return content.Error($"閲囪喘鏉$爜{nameof(ExistDetail.Barcode)}:{ExistDetail.Barcode}宸插瓨鍦�");
+ }
+ //鍒ゆ柇鏄惁瀛樺湪鐗╂枡
+ PaperReceiptDetailsItem? paperReceiptDetailsItem = paperReceiptDetailsItemsAdd.FirstOrDefault(x => !materielInfos.Select(x => x.MaterialSourceId).Contains(x.MaterialId));
+ if (paperReceiptDetailsItem!=null)
+ {
+ return content.Error($"閲囪喘鏉$爜{nameof(paperReceiptDetailsItem.Barcode)}:{paperReceiptDetailsItem.Barcode}鐗╂枡Id:{paperReceiptDetailsItem.MaterialId}涓嶅瓨鍦�");
+ }
foreach (var item in bSTPurchaseOrderDTOsAdd)
{
+ if (bSTPurchaseOrderDTOsUpdate.FirstOrDefault(x=>x.PaperReceiptId== item.PaperReceiptId)!=null)
+ {
+ continue;
+ }
+ List<Dt_PurchaseBSTOrderDetail> bSTOrderDetails = item.PaperReceiptDetails.Select(x=>_mapper.Map<Dt_PurchaseBSTOrderDetail>(x)).ToList();
Dt_PurchaseBSTOrder purchaseBSTOrder = _mapper.Map<Dt_PurchaseBSTOrder>(item);
+ bSTOrderDetails.ForEach(x =>
+ {
+ x.MaterielName = materielInfos.FirstOrDefault(t => t.MaterialSourceId == x.MaterialId)?.MaterielName;
+ });
+ purchaseBSTOrder.Details = bSTOrderDetails;
purchaseAddBSTOrders.Add(purchaseBSTOrder);
}
}
-
+ //鏇存柊
if (bSTPurchaseOrderDTOsUpdate.Count > 0)
{
- List<Dt_PurchaseBSTOrder>? ExistUpdatePurchase = OldpurchaseBSTOrders.Where(x => bSTPurchaseOrderDTOsUpdate.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId)).ToList();
+ //瀛樺湪鐨勯噰璐崟
+ List<Dt_PurchaseBSTOrder>? ExistpurchaseBSTOrders = OldpurchaseBSTOrders.Where(x => bSTPurchaseOrderDTOsUpdate.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId)).Distinct().ToList();
+
+ foreach (var item in bSTPurchaseOrderDTOsUpdate)
+ {
+ Dt_PurchaseBSTOrder? purchaseBSTOrderUpdate = ExistpurchaseBSTOrders.FirstOrDefault(x => x.PaperReceiptId == item.PaperReceiptId);
+ //濡傛灉璁㈠崟宸插瓨鍦ㄥ垯杩涜鏇存敼
+ if (purchaseBSTOrderUpdate != null)
+ {
+ if (purchaseBSTOrderUpdate.PurchaseOrderStatus!=InOrderStatusEnum.鏈紑濮�.ObjToInt())
+ {
+ return content.Error($"閲囪喘{nameof(purchaseBSTOrderUpdate.PaperReceiptId)}:{purchaseBSTOrderUpdate.PaperReceiptId}璁㈠崟鍏ュ簱涓紝涓嶅彲鏇存敼");
+ }
+ purchaseBSTOrderDetailsDel.AddRange(purchaseBSTOrderUpdate.Details);
+
+ //鏇存柊
+ List<Dt_PurchaseBSTOrderDetail> bSTOrderDetails = item.PaperReceiptDetails.Select(x => _mapper.Map<Dt_PurchaseBSTOrderDetail>(x)).ToList();
+ bSTOrderDetails.ForEach(x =>
+ {
+ x.PurchaseBSTOrderId = purchaseBSTOrderUpdate.Id;
+ });
+ purchaseBSTOrderUpdate.Details = bSTOrderDetails;
+ purchaseBSTOrderUpdate.PaperReceiptId = item.PaperReceiptId;
+ purchaseBSTOrderUpdate.PaperReceiptNo = item.PaperReceiptNo;
+ purchaseBSTOrderUpdate.VendNo = item.VendNo;
+ purchaseBSTOrderUpdate.ReceiptDate = DateTimeOffset.FromUnixTimeMilliseconds(item.ReceiptDate).DateTime;
+ purchaseBSTOrderUpdate.TotalProcurementLength = item.TotalProcurementLength;
+ purchaseUpdateBSTOrders.Add(purchaseBSTOrderUpdate);
+ }
+ else //濡傛灉涓嶅瓨鍦ㄥ垯杩涜鏂板
+ {
+ List<Dt_PurchaseBSTOrderDetail> bSTOrderDetails = item.PaperReceiptDetails.Select(x => _mapper.Map<Dt_PurchaseBSTOrderDetail>(x)).ToList();
+ Dt_PurchaseBSTOrder purchaseBSTOrder = _mapper.Map<Dt_PurchaseBSTOrder>(item);
+ bSTOrderDetails.ForEach(x =>
+ {
+ x.MaterielName = materielInfos.FirstOrDefault(t => t.MaterialSourceId == x.MaterialId)?.MaterielName;
+ });
+ purchaseBSTOrder.Details = bSTOrderDetails;
+ purchaseAddBSTOrders.Add(purchaseBSTOrder);
+ }
+ }
+
+ }
+ //鍒犻櫎
+ if (bSTPurchaseOrderDTOsDel.Count>0)
+ {
+ List<Dt_PurchaseBSTOrder>? ExistDelPurchase = OldpurchaseBSTOrders.Where(x => bSTPurchaseOrderDTOsDel.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId)).ToList();
//鏇存柊鐨勫崟鎹槸鍚﹀瓨鍦�
- if (ExistUpdatePurchase.Count == bSTPurchaseOrderDTOsUpdate.Count)
+ if (ExistDelPurchase.Count == bSTPurchaseOrderDTOsDel.Count)
{
}
else
{
- BSTPurchaseOrderDTO? bSTPurchaseOrderDTO = bSTPurchaseOrderDTOsUpdate.FirstOrDefault(x => !ExistUpdatePurchase.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId));
+ BSTPurchaseOrderDTO? bSTPurchaseOrderDTO = bSTPurchaseOrderDTOsDel.FirstOrDefault(x => !ExistDelPurchase.Select(x => x.PaperReceiptId).Contains(x.PaperReceiptId));
return content.Error($"鏈壘鍒版寚瀹氶噰璐敹璐у崟{nameof(BSTPurchaseOrderDTO.PaperReceiptId)}:{bSTPurchaseOrderDTO?.PaperReceiptId}");
}
}
+ //鏇存柊鏁版嵁
+ _unitOfWorkManage.BeginTran();
+ BaseDal.Db.InsertNav(purchaseAddBSTOrders).Include(x => x.Details).ExecuteCommand();
+ _purchaseBSTOrderDetailRepository.DeleteData(purchaseBSTOrderDetailsDel);
+ BaseDal.Db.UpdateNav(purchaseUpdateBSTOrders).Include(x => x.Details).ExecuteCommand();
+ _unitOfWorkManage.CommitTran();
content.OK("鎺ユ敹鎴愬姛");
}
catch (Exception ex)
{
+ _unitOfWorkManage.RollbackTran();
content.Error(ex.Message);
}
return content;
--
Gitblit v1.9.3