Files
ww-jst/wmsjst/JSMachine.WMS.Business/StockIn/ServiceImpl/ResponsibilityChain/StockInByNew.cs
T
2026-09-02 16:31:50 +08:00

62 lines
1.8 KiB
C#

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
{
/// <summary>
/// 放置在一个空白列列上
/// </summary>
public class StockInByNew : StockInHandler
{
public override async Task<StorageRackDto> CalculateWarehouse(
TransportEnum startArea,
FloorEnum floor,
string materialBatch,
List<StorageRackDto> storageRacks)
{
if (storageRacks.IsNullOrEmpty())
{
storageRacks = await base.GetStorageRackExceptStockout(floor);
}
if (storageRacks.IsNullOrEmpty())
{
LogHelper.Info("没有可用库位");
return null;
}
List<StorageRackDto> storageRacksSorted = storageRacks
.OrderBy(p => p.AreaNumSort)
.ThenBy(p => p.ReservoirAreaColumnId).ToList();
var groupByColumn = storageRacksSorted.GroupBy(p => p.ReservoirAreaColumnId);
StorageRackDto destWarehouse = null;
foreach (IGrouping<long, StorageRackDto> 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;
}
}
}
}