From 63d187526792e6e29bfec07d0e3f0dce07df31b3 Mon Sep 17 00:00:00 2001 From: helongyang <647556386@qq.com> Date: 星期六, 19 七月 2025 17:32:41 +0800 Subject: [PATCH] 成品报废单新增优化 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs | 212 +++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 151 insertions(+), 61 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 e4efd48..a50e159 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" @@ -58,11 +58,16 @@ { delProStockDetails.Add(proStockInfoDetail); proStockInfo.proStockInfoDetails.Remove(proStockInfoDetail); + item.OutDetailId = proStockInfoDetail.OutDetailId; + item.OutDetailSaleNo = proStockInfoDetail.OutDetailSaleNo; } else { proStockInfoDetail.StockPcsQty -= item.StockPcsQty; proStockInfoDetail.SETQty -= item.SETQty; + proStockInfoDetail.OutboundQuantity = 0; + item.OutDetailId = 0; + item.OutDetailSaleNo = ""; upProStockDetails.Add(proStockInfoDetail); } @@ -83,7 +88,7 @@ { _stockRepository.ProStockInfoDetailRepository.UpdateData(upProStockDetails); } - content.OK(); + content.OK("鎴愬姛", proStockInfoDetails); } catch (Exception ex) { @@ -108,6 +113,12 @@ List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehouse.WarehouseId); return BaseDal.GetProStocks(mesRworkOutboundOrder, locationCodes); } + //鏌ユ壘鍙敤鎶ュ簾搴撳瓨 + public List<Dt_ProStockInfo> GetUseableStocks(int warehoseId, Dt_ErpProScrapSheetDetail erpProScrapSheetDetail) + { + List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehoseId); + return BaseDal.GetProStocks(erpProScrapSheetDetail, locationCodes); + } /// <summary> /// 鑾峰彇鍑哄簱搴撳瓨 /// </summary> @@ -125,33 +136,40 @@ { Dt_ProStockInfo stockInfo = stockInfos[index]; float useableStockQuantity = stockInfo.proStockInfoDetails - .Where(x => x.SaleOrder == outOrderDetail.SaleOrder && x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer - && (isCanLot ? isCanLot : x.LotNumber == outOrderDetail.PLot) + .Where(x => x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0,1)) + && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot) && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode)) .Sum(x => x.StockPcsQty - x.OutboundQuantity); - if (useableStockQuantity < needQuantity) + if (useableStockQuantity < needQuantity && useableStockQuantity >0) { - stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockPcsQty); + stockInfo.proStockInfoDetails.Where(x => x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0, 1)) + && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot) + && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode)).ToList().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 - && (isCanLot ? isCanLot : x.LotNumber == outOrderDetail.PLot) + //婊¤冻鏉′欢杩涜鍒嗛厤 + if ((x.StockPcsQty > x.OutboundQuantity) + && x.ProductCode == outOrderDetail.PCode && x.ProductVersion.StartsWith(outOrderDetail.PVer.Substring(0, 1)) + && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot) && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode)) { if (x.StockPcsQty - x.OutboundQuantity >= needQuantity) { x.OutboundQuantity += needQuantity; needQuantity = 0; + x.OutDetailSaleNo = outOrderDetail.SaleOrder; + x.OutDetailId = outOrderDetail.Id; } else { needQuantity -= (x.StockPcsQty - x.OutboundQuantity); x.OutboundQuantity = x.StockPcsQty; + x.OutDetailSaleNo = outOrderDetail.SaleOrder; + x.OutDetailId = outOrderDetail.Id; } } }); @@ -160,44 +178,110 @@ index++; } } - else + #region 鎴愬搧鍙敤搴撳瓨涓嶈冻涓嶈繘琛屽垎閰� + //else + //{ + // for (int i = 0; i < stockInfos.Count; i++) + // { + // Dt_ProStockInfo stockInfo = stockInfos[i]; + // float useableStockQuantity = stockInfo.proStockInfoDetails + // .Where(x => x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer + // && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot) + // && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode)) + // .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.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer + // && (isCanLot ? isCanLot : x.BagNo == outOrderDetail.PLot) + // && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode)) + // { + // if (x.StockPcsQty - x.OutboundQuantity >= needQuantity) + // { + // x.OutboundQuantity += needQuantity; + // needQuantity = 0; + // } + // else + // { + // needQuantity -= (x.StockPcsQty - x.OutboundQuantity); + // x.OutboundQuantity = x.StockPcsQty; + // } + // } + // }); + // } + // stockInfo.proStockInfoDetails.ForEach(x => + // { + // x.OutDetailSaleNo = outOrderDetail.SaleOrder; + // x.OutDetailId = outOrderDetail.Id; + // }); + // assignOutStocks.Add(stockInfo); + // } + //} + #endregion + residueQuantity = needQuantity; + return assignOutStocks; + } + /// <summary> + /// 鑾峰彇鎶ュ簾搴撳瓨 + /// </summary> + public List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_ErpProScrapSheetDetail 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)//搴撳瓨澶� { - for (int i = 0; i < stockInfos.Count; i++) + int index = 0; + while (needQuantity > 0) { - Dt_ProStockInfo stockInfo = stockInfos[i]; + Dt_ProStockInfo stockInfo = stockInfos[index]; float useableStockQuantity = stockInfo.proStockInfoDetails - .Where(x => x.SaleOrder == outOrderDetail.SaleOrder && x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer - && (isCanLot ? isCanLot : x.LotNumber == outOrderDetail.PLot) - && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode)) + .Where(x => + x.ProductCode == outOrderDetail.ScrapProCode + && x.ProductVersion==outOrderDetail.ScrapProVersion + && x.LotNumber == outOrderDetail.ScrapProLotNo) .Sum(x => x.StockPcsQty - x.OutboundQuantity); - if (useableStockQuantity < needQuantity) + if (useableStockQuantity < needQuantity && useableStockQuantity > 0) { - stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockPcsQty); + stockInfo.proStockInfoDetails.Where(x => + x.ProductCode == outOrderDetail.ScrapProCode + && x.ProductVersion == outOrderDetail.ScrapProVersion + && x.LotNumber == outOrderDetail.ScrapProLotNo).ToList().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 - && (isCanLot ? isCanLot : x.LotNumber == outOrderDetail.PLot) - && (isCanDate ? isCanDate : x.DateCode == outOrderDetail.DateCode)) + //婊¤冻鏉′欢杩涜鍒嗛厤 + if ((x.StockPcsQty > x.OutboundQuantity) + && x.ProductCode == outOrderDetail.ScrapProCode + && x.ProductVersion == outOrderDetail.ScrapProVersion + && x.LotNumber == outOrderDetail.ScrapProLotNo) { if (x.StockPcsQty - x.OutboundQuantity >= needQuantity) { x.OutboundQuantity += needQuantity; needQuantity = 0; + x.OutDetailId = outOrderDetail.Id; } else { needQuantity -= (x.StockPcsQty - x.OutboundQuantity); x.OutboundQuantity = x.StockPcsQty; + x.OutDetailId = outOrderDetail.Id; } } }); } assignOutStocks.Add(stockInfo); + index++; } } residueQuantity = needQuantity; @@ -255,47 +339,6 @@ index++; } } - else - { - for (int i = 0; i < stockInfos.Count; i++) - { - Dt_ProStockInfo stockInfo = stockInfos[i]; - float useableStockQuantity = stockInfo.proStockInfoDetails - .Where(x => x.SaleOrder == mesRworkOutboundOrder.SaleOrder - && x.ProductCode == mesRworkOutboundOrder.ProductCode - && x.ProductVersion == mesRworkOutboundOrder.ProductVersion - && (isCanDate ? isCanDate : x.DateCode == mesRworkOutboundOrder.DateCode)) - .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 == mesRworkOutboundOrder.SaleOrder - && x.ProductCode == mesRworkOutboundOrder.ProductCode - && x.ProductVersion == mesRworkOutboundOrder.ProductVersion - && (isCanDate ? isCanDate : x.DateCode == mesRworkOutboundOrder.DateCode)) - { - 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; } @@ -319,5 +362,52 @@ // } // return (deleteStockDetails, updateStockDetails); //} + public WebResponseContent GetProCodeByWarehouse(int warehouseId) + { + try + { + List<Dt_ProStockInfo> proStockInfo = BaseDal.QueryData(x => x.WarehouseId == warehouseId); + List<int> proStockId = proStockInfo.Select(x => x.Id).ToList(); + List<Dt_ProStockInfoDetail> proStockInfoDetails = BaseDal.Db.Queryable<Dt_ProStockInfoDetail>().Where(x => proStockId.Contains(x.OutDetailId)).ToList(); + List<string> proCode = proStockInfoDetails.Select(x => x.ProductCode).ToList(); + return WebResponseContent.Instance.OK(data: proCode); + } + catch (Exception ex) + { + return WebResponseContent.Instance.Error(ex.Message); + } + } + + public WebResponseContent GetProVersionByCode(string scrapProCode, int warehouseId) + { + try + { + List<Dt_ProStockInfo> proStockInfo = BaseDal.QueryData(x => x.WarehouseId == warehouseId); + List<int> proStockId = proStockInfo.Select(x => x.Id).ToList(); + List<Dt_ProStockInfoDetail> proStockInfoDetails = BaseDal.Db.Queryable<Dt_ProStockInfoDetail>().Where(x => scrapProCode.Contains(x.ProductCode) && proStockId.Contains(x.OutDetailId)).ToList(); + List<string> productVersion = proStockInfoDetails.Select(x => x.ProductVersion).ToList(); + return WebResponseContent.Instance.OK(data: productVersion); + } + catch (Exception ex) + { + return WebResponseContent.Instance.Error(ex.Message); + } + } + + public WebResponseContent GetProLotNoByCode(string scrapProCode, int warehouseId) + { + try + { + List<Dt_ProStockInfo> proStockInfo = BaseDal.QueryData(x => x.WarehouseId == warehouseId); + List<int> proStockId = proStockInfo.Select(x => x.Id).ToList(); + List<Dt_ProStockInfoDetail> proStockInfoDetails = BaseDal.Db.Queryable<Dt_ProStockInfoDetail>().Where(x => scrapProCode.Contains(x.ProductCode) && proStockId.Contains(x.OutDetailId)).ToList(); + List<string> lotNumber = proStockInfoDetails.Select(x => x.LotNumber).ToList(); + return WebResponseContent.Instance.OK(data: lotNumber); + } + catch (Exception ex) + { + return WebResponseContent.Instance.Error(ex.Message); + } + } } } -- Gitblit v1.9.3