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.SSE; using JSMachine.WMS.Infrastructure; using JSMachine.WMS.Infrastructure.Helper; using JSMachine.WMS.PLC.ModbusImpl.Elevator.Model; using JSMachine.WMS.PLC.ModbusImpl.PaperFeedGroundRack.ModbusIO.Write; using JSMachine.WMS.RPC.RcsRPC.Dto.In; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace JSMachine.WMS.Business.RcsCallBack.ServiceImpl.StatePattern.PutdownCompleted { /// /// 提升机处理器 /// public class ElevatorDeliveryHandler : PutdownCompletedStateHandler { public ElevatorDeliveryHandler (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) { var elevatorPlcStatus = new ElevatorPlcStatus(); //2.1 写PLC放货完成 int elevatorNo = destWarehouse.StorageRackName.Contains("1号") ? 1 : 2; elevatorPlcStatus.ElevatorNo = elevatorNo; if (destWarehouse.ElevatorChannel == 1001) { elevatorPlcStatus.StockInPutdownChanelTwo = true; } if (destWarehouse.ElevatorChannel == 1011) { elevatorPlcStatus.StockInPutdownChanelOne = true; } if (destWarehouse.ElevatorChannel == 2001) { elevatorPlcStatus.StockOutPutdownChanelTwo = true; } if (destWarehouse.ElevatorChannel == 2011) { elevatorPlcStatus.StockOutPutdownChanelOne = true; } bool bRet = await ElevatorWrite.WriteElevator(elevatorPlcStatus); if (!bRet) { LogHelper.Error($"{agvTask.TaskType.GetDescription()}: " + $"向 {elevatorPlcStatus.ElevatorNo} 号提升机 {destWarehouse.ElevatorChannel} 网带写放货完成信号失败"); return false; } if(agvTask.TaskType!=TaskTypeEnum.Carry) { //2.2 写PLC队列信息 ElevatorPlcQueueDto elevatorPlcQueue = new() { ElevatorNo = elevatorNo, ElevatorChannel = destWarehouse.ElevatorChannel.Value, AgvTaskId = agvTask.Id, IsLock = false }; bRet = await _elevatorPlcQueueService.Add(elevatorPlcQueue); if (!bRet) { LogHelper.Error($"{agvTask.TaskType.GetDescription()}:写PLC队列失败"); return false; } else { LogHelper.Info($"{agvTask.TaskType.GetDescription()}:" + $"写PLC队列成功,提升机编号 {elevatorPlcQueue.ElevatorNo} 通道号 {elevatorPlcQueue.ElevatorChannel}"); } //提升机计数 await _elevatorCountService.IncrementCount(elevatorNo, elevatorPlcQueue.ElevatorChannel); } //2.3 更新agvtask的状态为完成 await base.CompleteTask(agvTask); //2.4 解锁提升机库位 await _storageRackService.Unlock(destWarehouse); //发送广播通知前端网站刷新页面 SseEngine.BrodCast(agvTask.Floor.ToString()); return true; } } }