山东雷驰
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

62 lines
2.2 KiB

using Kean.Domain.Task.Commands;
using Kean.Domain.Task.Models;
using Kean.Domain.Task.Repositories;
using Kean.Domain.Task.SharedServices.Proxies;
using Kean.Infrastructure.Configuration;
using System.Linq;
using System.Threading.Tasks;
namespace Kean.Domain.Task.Strategies
{
/// <summary>
/// 简单避让策略
/// </summary>
public sealed class AvertStrategy_Simple : AvertStrategy
{
private readonly IWarehouseRepository _warehouseRepository; // 库房仓库
private readonly BarcodeInterpreter _barcodeInterpreter; // 条码解释器
private readonly StockProxy _stockProxy; // 仓储域代理
/// <summary>
/// 依赖注入
/// </summary>
public AvertStrategy_Simple(
IWarehouseRepository warehouseRepository,
BarcodeInterpreter barcodeInterpreter,
StockProxy stockProxy)
{
_warehouseRepository = warehouseRepository;
_barcodeInterpreter = barcodeInterpreter;
_stockProxy = stockProxy;
}
/*
* 实现 Kean.Domain.Task.Strategies.AvertStrategy.AutoCommand 方法
*/
public override async Task<TransferCommand> AutoCommand(Cell cell)
{
var barcode = await _stockProxy.GetBarcode(cell.Id);
if (barcode == null)
{
return new();
}
else
{
var spec = await _stockProxy.GetSpec(barcode) ?? cell.Spec;
var pallet = await _barcodeInterpreter.Interpret(barcode);
var goodsid = await _stockProxy.GetStorageMaterial(barcode);
var destination = (await _warehouseRepository.GetFreeCell(cell.Laneway, spec, pallet, goodsid))
.OrderByDescending(c => c.Deep)
.ThenBy(r=>r.Row)
.ThenBy(r=>r.Column)
.FirstOrDefault();
return new()
{
Barcode = barcode,
Destination = destination,
Warehouse = destination == null ? 0 : destination.Warehouse
};
}
}
}
}