using JSMachine.WMS.App.Dto; using JSMachine.WMS.App.Dto.Enum; using JSMachine.WMS.Infrastructure.Helper; using NPOI.SS.Formula.Functions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace JSMachine.WMS.Business.StockIn.ServiceImpl.ResponsibilityChain { /// /// 放置在一个空白列列上 /// public class StockInByNew : StockInHandler { public override async Task CalculateWarehouse( TransportEnum startArea, FloorEnum floor, string materialBatch, List storageRacks) { if (storageRacks.IsNullOrEmpty()) { storageRacks = await base.GetStorageRackExceptStockout(floor); } if (storageRacks.IsNullOrEmpty()) { LogHelper.Info("没有可用库位"); return null; } List storageRacksSorted = storageRacks .OrderBy(p => p.AreaNumSort) .ThenBy(p => p.ReservoirAreaColumnId).ToList(); var groupByColumn = storageRacksSorted.GroupBy(p => p.ReservoirAreaColumnId); StorageRackDto destWarehouse = null; foreach (IGrouping column in groupByColumn) { if (column.All(p => p.IsEmpty())) { destWarehouse = column.OrderByDescending(p => p.NumSort).First(); break; } } if (destWarehouse == null) { return await HandleByNext(startArea, floor,materialBatch, storageRacksSorted); } else { return destWarehouse; } } } }