From 0023d3db5bd701864b73e57c0240c219c40c3a4e Mon Sep 17 00:00:00 2001 From: wangxinhui <wangxinhui@hnkhzn.com> Date: 星期一, 14 七月 2025 14:12:34 +0800 Subject: [PATCH] 1 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesRworkOutboundOrderService.cs | 115 +++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 71 insertions(+), 44 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 332fcd7..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); } @@ -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