liulijun
2026-03-12 fe256a7afaa132910875d3dc73783d9ab2d7ace5
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_StockService/ProStockInfoService.cs
@@ -26,5 +26,52 @@
            _stockRepository = stockRepository;
            _basicRepository = basicRepository;
        }
        public List<Dt_ProStockInfo> GetUseableStocks(string materielCode, int warehoseId)
        {
            List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehoseId);
            return BaseDal.GetStockInfos(materielCode, locationCodes);
        }
        public List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, decimal needQuantity)
        {
            List<Dt_ProStockInfo> assignOutStocks = new List<Dt_ProStockInfo>();
            decimal stockTotalQuantity = stockInfos.Select(x => x.proStockInfoDetails.Sum(v => v.StockQty-v.OutboundQuantity)).Sum(x => x);
            if (stockTotalQuantity >= needQuantity)//库存够
            {
                int index = 0;
                while (needQuantity > 0)
                {
                    Dt_ProStockInfo stockInfo = stockInfos[index];
                    decimal useableStockQuantity = stockInfo.proStockInfoDetails
                        .Sum(x => x.StockQty - x.OutboundQuantity);
                    if (useableStockQuantity < needQuantity && useableStockQuantity > 0)
                    {
                        stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockQty);
                        needQuantity -= useableStockQuantity;
                    }
                    else
                    {
                        stockInfo.proStockInfoDetails.ForEach(x =>
                        {
                            if (x.StockQty - x.OutboundQuantity >= needQuantity)
                            {
                                x.OutboundQuantity += needQuantity;
                                needQuantity = 0;
                            }
                            else
                            {
                                needQuantity -= (x.StockQty - x.OutboundQuantity);
                                x.OutboundQuantity = x.StockQty;
                            }
                        });
                    }
                    assignOutStocks.Add(stockInfo);
                    index++;
                }
            }
            return assignOutStocks;
        }
    }
}