From efaf0b8aeb26aca6536a4b384c912cc3cac4d070 Mon Sep 17 00:00:00 2001 From: wangxinhui <wangxinhui@hnkhzn.com> Date: 星期六, 15 三月 2025 16:07:45 +0800 Subject: [PATCH] 成品代码,其他仓优化,前端优化界面增加 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs | 99 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 97 insertions(+), 2 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs" index fc4b072..e7b3f37 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs" @@ -5,6 +5,7 @@ using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core.BaseServices; +using WIDESEA_IBasicRepository; using WIDESEA_IStockRepository; using WIDESEA_IStockService; using WIDESEA_Model.Models; @@ -14,11 +15,16 @@ public partial class ProStockInfoService : ServiceBase<Dt_ProStockInfo, IProStockInfoRepository>, IProStockInfoService { public IProStockInfoRepository Repository => BaseDal; - public IStockRepository _stockRepository; - public ProStockInfoService(IProStockInfoRepository BaseDal,IStockRepository stockRepository) : base(BaseDal) + private readonly IStockRepository _stockRepository; + private readonly IBasicRepository _basicRepository; + public ProStockInfoService(IProStockInfoRepository BaseDal,IStockRepository stockRepository, IBasicRepository basicRepository) : base(BaseDal) { _stockRepository = stockRepository; + _basicRepository = basicRepository; } + /// <summary> + /// 鏍规嵁澶栧寘淇℃伅瑙g粦鍐呭寘淇℃伅 + /// </summary> public WebResponseContent UnBindStock(List<Dt_ProStockInfoDetail> proStockInfoDetails) { WebResponseContent content = new WebResponseContent(); @@ -37,5 +43,94 @@ } return content; } + //鏌ユ壘鍙敤搴撳瓨 + public List<Dt_ProStockInfo> GetUseableStocks(int warehoseId,Dt_ProOutOrderDetail proOutOrderDetail) + { + List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehoseId); + return BaseDal.GetProStocks(proOutOrderDetail,locationCodes); + } + /// <summary> + /// 鑾峰彇鍑哄簱搴撳瓨 + /// </summary> + public List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_ProOutOrderDetail outOrderDetail, float needQuantity, out float residueQuantity) + { + List<Dt_ProStockInfo> assignOutStocks =new List<Dt_ProStockInfo>(); + float stockTotalQuantity = stockInfos.Select(x => x.proStockInfoDetails.Sum(v => v.StockPcsQty - v.OutboundQuantity)).Sum(x => x); + //stockInfos = stockInfos.OrderBy(x => x.Id).ToList(); + if (stockTotalQuantity >= needQuantity)//搴撳瓨澶� + { + int index = 0; + while (needQuantity > 0) + { + Dt_ProStockInfo stockInfo = stockInfos[index]; + float useableStockQuantity = stockInfo.proStockInfoDetails + .Where(x => x.SaleOrder == outOrderDetail.SaleOrder && x.ProductCode==outOrderDetail.PCode && x.ProductVersion==outOrderDetail.PVer) + .Sum(x => x.StockPcsQty - x.OutboundQuantity); + if (useableStockQuantity < needQuantity) + { + stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockPcsQty); + needQuantity -= useableStockQuantity; + } + else + { + stockInfo.proStockInfoDetails.ForEach(x => + { + if ((x.StockPcsQty > x.OutboundQuantity) && x.SaleOrder == outOrderDetail.SaleOrder && x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer) + { + if (x.StockPcsQty - x.OutboundQuantity >= needQuantity) + { + x.OutboundQuantity += needQuantity; + needQuantity = 0; + } + else + { + needQuantity -= (x.StockPcsQty - x.OutboundQuantity); + x.OutboundQuantity = x.StockPcsQty; + } + } + }); + } + assignOutStocks.Add(stockInfo); + index++; + } + } + else + { + for (int i = 0; i < stockInfos.Count; i++) + { + Dt_ProStockInfo stockInfo = stockInfos[i]; + float useableStockQuantity = stockInfo.proStockInfoDetails + .Where(x => x.SaleOrder == outOrderDetail.SaleOrder && x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer) + .Sum(x => x.StockPcsQty - x.OutboundQuantity); + if (useableStockQuantity < needQuantity) + { + stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockPcsQty); + needQuantity -= useableStockQuantity; + } + else + { + stockInfo.proStockInfoDetails.ForEach(x => + { + if (x.StockPcsQty > x.OutboundQuantity && x.SaleOrder == outOrderDetail.SaleOrder && x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer) + { + if (x.StockPcsQty - x.OutboundQuantity >= needQuantity) + { + x.OutboundQuantity += needQuantity; + needQuantity = 0; + } + else + { + needQuantity -= (x.StockPcsQty - x.OutboundQuantity); + x.OutboundQuantity = x.StockPcsQty; + } + } + }); + } + assignOutStocks.Add(stockInfo); + } + } + residueQuantity = needQuantity; + return assignOutStocks; + } } } -- Gitblit v1.9.3