Files
ww-jst/wmsjst/JSMachine.WMS.Business/RcsCallBack/ServiceImpl/StrategyPatternImpl/TaskCompletionStrategyFactory.cs
T
2026-09-02 16:31:50 +08:00

47 lines
1.9 KiB
C#

using JSMachine.WMS.App.Dto;
using JSMachine.WMS.App.Dto.Enum;
using JSMachine.WMS.Business.RcsCallBack.IService.StrategyPattern;
using JSMachine.WMS.Domain.Entity;
using JSMachine.WMS.Infrastructure;
using JSMachine.WMS.Infrastructure.Helper;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JSMachine.WMS.Business.RcsCallBack.ServiceImpl.StrategyPatternImpl
{
/// <summary>
/// 根据任务楼层、目标区域和提升机区域选择任务完成处理策略。
/// </summary>
public class TaskCompletionStrategyFactory
{
/// <summary>
/// 解析 AGV 任务完成后的后续处理策略。
/// </summary>
/// <param name="agvTask">已完成的 AGV 任务。</param>
/// <param name="destWarehouse">任务目标库位。</param>
/// <returns>匹配的策略实例;无法匹配时返回空值。</returns>
public ITaskCompletionStrategy GetStrategy(AGVTaskDto agvTask, StorageRackDto destWarehouse)
{
if (agvTask.Floor == FloorEnum.FirstFloor)
{
if (destWarehouse.Transport == TransportEnum.NormalArea)
return GlobalServericeProvidor.GetService<StorageAreaStrategy>();
else if (destWarehouse.ReservoirAreaId == 1091 || destWarehouse.ReservoirAreaId == 1092)
return GlobalServericeProvidor.GetService<ElevatorStrategy>();
}
else if (
agvTask.Floor == FloorEnum.SecondFloor &&
(destWarehouse.Transport == TransportEnum.NormalArea || destWarehouse.Transport == TransportEnum.TransitArea))
{
return GlobalServericeProvidor.GetService<StorageAreaStrategy>();
}
return null;
}
}
}