Files

88 lines
3.5 KiB
C#
Raw Permalink Normal View History

2026-09-02 16:31:50 +08:00
using JSMachine.WMS.App.Dto;
using JSMachine.WMS.App.Dto.Enum;
using JSMachine.WMS.App.IService;
using JSMachine.WMS.Business.Common.IService;
using JSMachine.WMS.Infrastructure;
using JSMachine.WMS.Infrastructure.Helper;
using JSMachine.WMS.Job.Enum;
using JSMachine.WMS.Job.JobAttributes;
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JSMachine.WMS.Job.Job
{
/// <summary>
/// 中转区域调度作业
/// </summary>
[DisallowConcurrentExecution]
[PersistJobDataAfterExecution]
[Job(Name = nameof(TransferAreaJob)
, Group = nameof(TransferAreaJob) + "_Group"
, Description = "中转区域作业调度"
, ScheduleType = ScheduleType.Simple
, IntervalMilliSeconds = 2000
, RepeatCount = 0
, StartTimeStr = null)]
public class TransferAreaJob : IJob
{
private static readonly IERPTaskService ERPTaskService = GlobalServericeProvidor.GetService<IERPTaskService>();
private static readonly IAGVTaskService AgvTaskService = GlobalServericeProvidor.GetService<IAGVTaskService>();
private static readonly ICommonService CommonService = GlobalServericeProvidor.GetService<ICommonService>();
private static readonly IStorageRackService StorageRackService = GlobalServericeProvidor.GetService<IStorageRackService>();
public async Task Execute(IJobExecutionContext context)
{
//1.查询关联的erp任务类型
//2.如果是出库,且任务批次和当前物料批次一致(这种情况是出库没有可用的提升机库位,从而暂时运到中转区),则该任务需要去往提升机出库
//3.除了2以外的所有情况,均搬运到存储区
StorageRackDto storageRack = await StorageRackService.GetSingalByExpression(p =>
p.Transport == TransportEnum.TransitArea &&
!p.IsLock &&
!p.IsDisabled &&
!string.IsNullOrEmpty(p.BarCode));
if (storageRack == null)
{
return;
}
AGVTaskDto lastAgvTaskRelated = await AgvTaskService.GetSingalByExpression(
p => p.EndPositionCode == storageRack.StorageRackNo,
p => p.CreationTime,
SqlSugar.OrderByType.Desc
);
if (lastAgvTaskRelated==null)
{
LogHelper.Error($"中转区业务 未查询到物料 {storageRack.BarCode} 上一次agv任务,无法调度该物料,需要手动处理");
return;
}
ERPTaskDto erpTask = await ERPTaskService.GetSingalByExpression(p => p.Id == lastAgvTaskRelated.ErpTaskId);
if(erpTask==null)
{
LogHelper.Error($"中转区业务 未查询到物料 {storageRack.BarCode} 关联的erp任务,无法调度该物料,需要手动处理");
return;
}
bool bRet = await CommonService.CreateAgvTaskFromTransferArea(storageRack, lastAgvTaskRelated, erpTask);
if(!bRet)
{
_ = ERPTaskService.UpdateTaskMsg(erpTask.Id, "中转区作业调度中,存储区已满或者无可用提升机库位,调度失败");
LogHelper.Error("中转区作业调度中,存储区已满或者无可用提升机库位,调度失败");
}
else
{
_ = ERPTaskService.UpdateTaskMsg(erpTask.Id, "");
}
}
}
}