Files
ww-jst/wmsjst/JSMachine.WMS.Job/Job/StockInSecondFloorJob.cs
T

83 lines
4.4 KiB
C#
Raw 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.Business.Common.Models;
using JSMachine.WMS.Business.StockIn.IService;
using JSMachine.WMS.Business.StockIn.ServiceImpl.Strategy;
using JSMachine.WMS.Common.Cache;
using JSMachine.WMS.Infrastructure;
using JSMachine.WMS.Infrastructure.Helper;
using JSMachine.WMS.Job.Enum;
using JSMachine.WMS.Job.JobAttributes;
using Newtonsoft.Json;
using Quartz;
namespace JSMachine.WMS.Job.Job
{
[DisallowConcurrentExecution]
[PersistJobDataAfterExecution]
[Job(Name = nameof(StockInSecondFloorJob)
, Group = nameof(StockInSecondFloorJob) + "_Group"
, Description = "入库二楼任务生成作业"
, ScheduleType = ScheduleType.Simple
, IntervalMilliSeconds = 2000
, RepeatCount = 0
, StartTimeStr = null)]
public class StockInSecondFloorJob : IJob
{
private static readonly ICommonService CommonService = GlobalServericeProvidor.GetService<ICommonService>();
private static readonly IAGVTaskService AgvTaskService = GlobalServericeProvidor.GetService<IAGVTaskService>();
private static readonly IStorageRackService StorageRackService = GlobalServericeProvidor.GetService<IStorageRackService>();
private static readonly IERPTaskService ErpTaskService = GlobalServericeProvidor.GetService<IERPTaskService>();
private static readonly IElevatorPlcQueueService ElevatorPlcQueueService = GlobalServericeProvidor.GetService<IElevatorPlcQueueService>();
public async Task Execute(IJobExecutionContext context)
{
if (StockInSecondFloorCache.StockInSecondFloorQue.TryDequeue(out AllowPickUpInfo allowPickUpInfo))
{
//二楼提升机出口可以取货,生成二楼agv任务
IStockInStrategy stockInStrategy = StrategyFactory.CreateStockInStrategy(
TransportEnum.Elevator,
FloorEnum.SecondFloor,
allowPickUpInfo.AgvTask.MateriaBatch);
StorageRackDto destWarehouseSecondFloor = await stockInStrategy.CalCulateWarehouse();
if (destWarehouseSecondFloor == null)
{
LogHelper.Warn($"二楼暂无可用的库位,AgvTask {allowPickUpInfo.AgvTask.Id} 对应的二楼任务暂无法生成");
//队列再写回去,没有库位的时候队列再写回去,此时整理出空余库位后任务会继续生成(可考虑给pda弹窗报警)
StockInSecondFloorCache.StockInSecondFloorQue.Enqueue(allowPickUpInfo);
return;
}
ERPTaskDto erpTask = await ErpTaskService.GetSingalByExpression(p => p.Id == allowPickUpInfo.AgvTask.ErpTaskId);
allowPickUpInfo.StartWarehouseSecondFloor.BingdingMaterial(new App.Dto.StorageRackDto.MateriaInfo
{
BarCode = allowPickUpInfo.AgvTask.BarCode,
MateriaBatch = allowPickUpInfo.AgvTask.MateriaBatch,
MateriaName = allowPickUpInfo.AgvTask.MateriaName,
MateriaType = allowPickUpInfo.AgvTask.MateriaType,
MateriaCode = allowPickUpInfo.AgvTask.MateriaCode,
MateriaNum = allowPickUpInfo.AgvTask.MateriaNum.ToString(),
OrderNo = allowPickUpInfo.AgvTask.OrderNo
});
await CommonService.CreateAndInsertAgvTask(new AgvTaskCreationParam()
{
StartPosition = allowPickUpInfo.StartWarehouseSecondFloor,
EndPosition = destWarehouseSecondFloor,
ErpTaskId = erpTask.Id,
TaskType = destWarehouseSecondFloor.Transport == TransportEnum.NormalArea ? erpTask.TaskType : TaskTypeEnum.TransferStockIn,
ErpUploadStatus = (erpTask.TaskType == TaskTypeEnum.TailIn || destWarehouseSecondFloor.Transport != TransportEnum.NormalArea) ?
ErpUploadStatusEnum.Unnecessary : ErpUploadStatusEnum.WaittingToUpload
});
await ElevatorPlcQueueService.DeleteById(allowPickUpInfo.ElevatorPlcQueue.Id);
LogHelper.Info($"入库任务已生成,提升机队列被删除,队列原始信息 {JsonConvert.SerializeObject(allowPickUpInfo.ElevatorPlcQueue)}");
}
}
}
}