From a9a3f943efb083de8ed88b293897886b3ef612a2 Mon Sep 17 00:00:00 2001
From: helongyang <647556386@qq.com>
Date: 星期一, 11 八月 2025 17:37:09 +0800
Subject: [PATCH] 功能增添优化
---
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesRworkOutboundOrderService.cs | 119 ++++++++++++++++++++++++++++++++++++-----------------------
1 files changed, 73 insertions(+), 46 deletions(-)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesRworkOutboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesRworkOutboundOrderService.cs"
index a49dd0f..c0b232b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesRworkOutboundOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesRworkOutboundOrderService.cs"
@@ -26,6 +26,8 @@
using WIDESEA_OutboundRepository;
using WIDESEA_Common.APIEnum;
using WIDESEA_Common.OrderEnum;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
+using System.Reflection.Metadata;
namespace WIDESEA_OutboundService
{
@@ -66,63 +68,50 @@
Dt_MesRworkOutboundOrder assignOutOrder= new Dt_MesRworkOutboundOrder();
List<Dt_OutProStockInfo> outProStockInfos=new List<Dt_OutProStockInfo>();
List<Dt_LocationInfo> locationInfos=new List<Dt_LocationInfo>();
- float originalNeedQuantity = mesRworkOutboundOrder.RequiredQuantity;
-
- float needQuantity = originalNeedQuantity;
-
+ float needQty = mesRworkOutboundOrder.RequiredQuantity;
//鏌ユ壘鍙敤搴撳瓨
List<Dt_ProStockInfo> stockInfoss = _stockService.ProStockInfoService.GetUseableStocks(mesRworkOutboundOrder);
if (!stockInfoss.Any())
{
throw new Exception("鏈壘鍒板彲鍒嗛厤搴撳瓨");
}
- List<Dt_ProStockInfo> autoAssignStocks = _stockService.ProStockInfoService.GetOutboundStocks(stockInfoss,mesRworkOutboundOrder, needQuantity,out float residueQuantity);
- mesRworkOutboundOrder.LockQuantity += needQuantity - residueQuantity;
- autoAssignStocks.OrderBy(x => x.proStockInfoDetails.FirstOrDefault()?.StockPcsQty).ToList();
- proStockInfos.AddRange(autoAssignStocks);
- float assignQuantity = needQuantity - residueQuantity;
-
+ //鑾峰彇鍑哄簱搴撳瓨
+ List<Dt_ProStockInfo> assignOutStocks = _stockService.ProStockInfoService.GetOutboundStocks(stockInfoss, mesRworkOutboundOrder, needQty, out float residueQuantity);
+ mesRworkOutboundOrder.LockQuantity += needQty - residueQuantity;
+ if (mesRworkOutboundOrder.RequiredQuantity > mesRworkOutboundOrder.LockQuantity)
+ {
+ throw new Exception($"浜у搧缂栫爜{mesRworkOutboundOrder.ProductCode},鐗堟湰{mesRworkOutboundOrder.ProductVersion}鍙垎閰嶆暟閲忎笉瓒�,鍙敤鏁伴噺{mesRworkOutboundOrder.LockQuantity}");
+ }
+ proStockInfos.AddRange(assignOutStocks);
+ //鍒嗛厤鍑哄簱鐨凱CS鏁伴噺
+ float assignQuantity = needQty;
+ //璁㈠崟鏄庣粏鐨勫嚭搴揚CS鏁伴噺
float orderQuantity = mesRworkOutboundOrder.RequiredQuantity;
- bool isCanDate = string.IsNullOrEmpty(mesRworkOutboundOrder.DateCode);
- for (int j = 0; j < autoAssignStocks.Count; j++)
+ for (int j = 0; j < assignOutStocks.Count; j++)
{
//鍑哄簱璁㈠崟鏄庣粏宸插垎閰嶆暟閲�
- float detailAssignQuantity = outProStockInfos
- .Where(x => x.SaleOrder == mesRworkOutboundOrder.SaleOrder
- && x.PCode == mesRworkOutboundOrder.ProductCode
- && x.PVer == mesRworkOutboundOrder.ProductVersion
- && (isCanDate ? isCanDate : x.DateCode == mesRworkOutboundOrder.DateCode))
- .Sum(x => x.AssignQuantity);
+ float detailAssignQuantity = outProStockInfos.Where(x => x.OrderDetailId == mesRworkOutboundOrder.Id).Sum(x => x.AssignQuantity);
- //鍑哄簱璇︽儏宸插垎閰嶆暟閲�
- float palletAssignQuantity = outProStockInfos
- .Where(x => x.SaleOrder == mesRworkOutboundOrder.SaleOrder
- && x.PCode == mesRworkOutboundOrder.ProductCode
- && x.PVer == mesRworkOutboundOrder.ProductVersion
- && x.PalletCode == autoAssignStocks[j].PalletCode
- && (isCanDate ? isCanDate : x.DateCode == mesRworkOutboundOrder.DateCode))
- .Sum(x => x.AssignQuantity);
-
- float palletOutboundQuantity = autoAssignStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity);
- if (palletAssignQuantity < palletOutboundQuantity)//濡傛灉鍑哄簱璇︽儏宸插垎閰嶆暟閲忓皬浜庢墭鐩樺凡鍒嗛厤鏁伴噺锛屽垯鍙互缁х画娣诲姞璇ユ墭鐩樺嚭搴撲俊鎭�
+ //鎵�鍓╂暟閲�
+ float orderDetailNeedQuantity = mesRworkOutboundOrder.RequiredQuantity - detailAssignQuantity;
+ //鐢熸垚鍑哄簱璇︽儏
+ if (orderDetailNeedQuantity > assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity))
{
- float orderDetailNeedQuantity = mesRworkOutboundOrder.RequiredQuantity - detailAssignQuantity;
- if (orderDetailNeedQuantity > autoAssignStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity)
- {
- mesRworkOutboundOrder.LockQuantity += autoAssignStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity;
- Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(mesRworkOutboundOrder, autoAssignStocks[j], autoAssignStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity);
- outProStockInfos.Add(outStockLockInfo);
- }
- else
- {
- Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(mesRworkOutboundOrder, autoAssignStocks[j], mesRworkOutboundOrder.RequiredQuantity-mesRworkOutboundOrder.LockQuantity);
- outProStockInfos.Add(outStockLockInfo);
- mesRworkOutboundOrder.LockQuantity = mesRworkOutboundOrder.RequiredQuantity;
- break;
- }
+ mesRworkOutboundOrder.LockQuantity += assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity);
+ Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(mesRworkOutboundOrder, assignOutStocks[j], assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity));
+ outProStockInfos.Add(outStockLockInfo);
+ }
+ else
+ {
+ Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(mesRworkOutboundOrder, assignOutStocks[j], mesRworkOutboundOrder.RequiredQuantity - detailAssignQuantity);
+ outProStockInfos.Add(outStockLockInfo);
+ mesRworkOutboundOrder.LockQuantity = mesRworkOutboundOrder.RequiredQuantity;
+ break;
}
}
- locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(proStockInfos.Select(x => x.LocationCode).ToList()));
+ List<string> locationArr = proStockInfos.Select(x => x.LocationCode).ToList();
+
+ locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(locationArr));
return (proStockInfos, mesRworkOutboundOrder, outProStockInfos, locationInfos);
}
@@ -244,9 +233,9 @@
proStockInfo.proStockInfoDetails.Remove(proStockInfoDetail);
if (proStockInfo.proStockInfoDetails.Count==0)
{
- _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfo, OperateTypeEnum.鑷姩瀹屾垚);
+ _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfo, OperateTypeEnum.鑷姩鍒犻櫎);
}
- _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfoDetail, OperateTypeEnum.鑷姩瀹屾垚);
+ _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfoDetail, OperateTypeEnum.鑷姩鍒犻櫎);
}
else
{
@@ -311,6 +300,44 @@
};
return mesProductOutBound;
}
+ //搴撳瓨鏉挎暟鎹浆鎹�
+ public MesProductOutBound MesProOutBound(Dt_MesRworkOutboundOrder mesRworkOutboundOrder, List<Dt_ProStockInfoDetail> proStockInfoDetails)
+ {
+ //鑾峰彇浠撳簱淇℃伅
+ Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == mesRworkOutboundOrder.WarehouseId);
+ List<MesInventoryInfo> inventoryInfos = new List<MesInventoryInfo>();
+ foreach (var item in proStockInfoDetails.Where(x=>x.OutboundQuantity>0))
+ {
+ int setinterval = (int)item.StockPcsQty / (int)item.SETQty;
+ if (setinterval == 0)
+ {
+ throw new Exception($"{item.BagNo}鑾峰彇SET鏁伴噺杞崲澶辫触");
+ }
+ item.OutSETQty = (int)item.OutboundQuantity / setinterval;
+ if (item.OutSETQty == 0)
+ {
+ throw new Exception($"{item.BagNo}鑾峰彇SET鏁伴噺杞崲澶辫触");
+ }
+ MesInventoryInfo mesInventoryInfo = new MesInventoryInfo()
+ {
+ Warhouseno = warehouse.WarehouseCode,
+ InternalPackageNumber = item.BagNo,
+ SetCount = (int)item.OutSETQty,
+ EligiblePcsCount = (int)item.OutboundQuantity
+ };
+ inventoryInfos.Add(mesInventoryInfo);
+ }
+ MesProductOutBound mesProductOutBound = new MesProductOutBound()
+ {
+ TaskNo = mesRworkOutboundOrder.TaskNo,
+ ProductCode = mesRworkOutboundOrder.ProductCode,
+ ProductVersion = mesRworkOutboundOrder.ProductVersion,
+ DateCode = mesRworkOutboundOrder.DateCode,
+ SaleOrder = mesRworkOutboundOrder.SaleOrder,
+ InventoryInfo = inventoryInfos
+ };
+ return mesProductOutBound;
+ }
/// <summary>
/// 鎴愬搧搴撳瓨鏉垮悓姝ユ帴鍙�
/// </summary>
--
Gitblit v1.9.3