83 lines
4.4 KiB
C#
83 lines
4.4 KiB
C#
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)}");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|