using JSMachine.WMS.App.Dto; using JSMachine.WMS.App.Dto.Enum; using JSMachine.WMS.App.IService; using JSMachine.WMS.App.ServiceImpl; using JSMachine.WMS.Business.Common.IService; using JSMachine.WMS.Business.RcsCallBack.IService.StaePattern; using JSMachine.WMS.Business.SSE; using JSMachine.WMS.RPC.RcsRPC.Dto.In; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static JSMachine.WMS.App.Dto.StorageRackDto; namespace JSMachine.WMS.Business.RcsCallBack.ServiceImpl.StatePattern.PutdownCompleted { /// /// 存储区(包括中转区)放货完成处理器 /// public class StockAreaHandler : PutdownCompletedStateHandler { public StockAreaHandler( IStorageRackService storageRackService, IAGVTaskService agvTaskService, IElevatorPlcQueueService elevatorPlcQueueService, IElevatorCountService elevatorCountService, IERPTaskService erpTaskService) : base(storageRackService, agvTaskService, elevatorPlcQueueService, elevatorCountService, erpTaskService) { } public async override Task HandleAsync(AgvExcutionInfo agvExcutionInfo, AGVTaskDto agvTask, StorageRackDto destWarehouse) { //1.将物料绑定到目标库位 //2.解锁目标库位 //3.更改agv任务为完成 destWarehouse.BingdingMaterial(new MateriaInfo { BarCode = agvTask.BarCode, MateriaBatch = agvTask.MateriaBatch, MateriaCode = agvTask.MateriaCode, MateriaName = agvTask.MateriaName, MateriaNum = agvTask.MateriaNum.ToString(), MateriaType = agvTask.MateriaType, OrderNo = agvTask.OrderNo }); destWarehouse.IsLock = false; await _storageRackService.EditSingal(destWarehouse); await CompleteTask(agvTask); //更新erp任务为完成状态 if (agvTask.TaskType == TaskTypeEnum.PdaIn || agvTask.TaskType == TaskTypeEnum.TailIn || agvTask.TaskType == TaskTypeEnum.TransferStockIn) { ERPTaskDto erpTask = await _erpTaskService.GetSingalByExpression(p => p.Id == agvTask.ErpTaskId); if (erpTask != null) { erpTask.TaskStatus = TaskStatusEnum.Completed; erpTask.TaskMsg = ""; await _erpTaskService.EditSingalWithSpecificCols(erpTask, ["TaskStatus", "TaskMsg"]); } } //发送广播通知前端网站刷新页面 SseEngine.BrodCast(agvTask.Floor.ToString()); return true; } } }