using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.StockEnum; using WIDESEA_Common.WareHouseEnum; using WIDESEA_Core; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_IBasicRepository; using WIDESEA_IStockRepository; using WIDESEA_IStockService; using WIDESEA_Model.Models; namespace WIDESEA_StockService { public partial class ProStockInfoService : ServiceBase, IProStockInfoService { public IProStockInfoRepository Repository => BaseDal; private readonly IStockRepository _stockRepository; private readonly IBasicRepository _basicRepository; public ProStockInfoService(IProStockInfoRepository BaseDal,IStockRepository stockRepository, IBasicRepository basicRepository) : base(BaseDal) { _stockRepository = stockRepository; _basicRepository = basicRepository; } public List GetUseableStocks(string materielCode, int warehoseId) { List locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehoseId); return BaseDal.GetStockInfos(materielCode, locationCodes); } public List GetOutboundStocks(List stockInfos, decimal needQuantity) { List assignOutStocks = new List(); 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; } } }