package com.zy.core.action; import com.alibaba.fastjson.JSON; import com.zy.asrs.entity.BasLiftOpt; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.BasLiftOptService; import com.zy.asrs.service.WrkMastService; import com.zy.common.utils.RedisUtil; import com.zy.core.News; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.ForkLiftTaskModeType; import com.zy.core.enums.RedisKeyType; import com.zy.core.enums.SlaveType; import com.zy.core.model.CommandResponse; import com.zy.core.model.command.ForkLiftCommand; import com.zy.core.model.command.LiftAssignCommand; import com.zy.core.model.command.LiftRedisCommand; import com.zy.core.model.protocol.ForkLiftProtocol; import com.zy.core.thread.ForkLiftThread; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; @Component public class ForkLiftAction { @Autowired private RedisUtil redisUtil; @Autowired private WrkMastService wrkMastService; @Autowired private BasLiftOptService basLiftOptService; public synchronized boolean assignWork(Integer liftNo, LiftAssignCommand assignCommand) { // ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); // if (forkLiftThread == null) { // return false; // } // // ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); // if (forkLiftProtocol == null) { // return false; // } // // LiftRedisCommand redisCommand = new LiftRedisCommand(); // redisCommand.setLiftNo(assignCommand.getLiftNo());//提升机号 // redisCommand.setWrkNo(assignCommand.getTaskNo());//工作号 // redisCommand.setCommandStep(0);//命令执行步序 // redisCommand.setAssignCommand(assignCommand);//命令 // //任务数据保存到redis // if (redisUtil.set(RedisKeyType.FORK_LIFT_WORK_FLAG.key + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand))) { // forkLiftThread.setSyncTaskNo(assignCommand.getTaskNo().intValue()); // return true; // } return false; } public synchronized boolean executeWork(Integer liftNo, Integer taskNo) { // Object obj = redisUtil.get(RedisKeyType.FORK_LIFT_WORK_FLAG.key + taskNo); // if (obj == null) { // return false; // } // //// WrkMast wrkMast = wrkMastService.selectByWorkNo(taskNo); //// if (wrkMast == null) { //// return false; //// } // // LiftRedisCommand redisCommand = JSON.parseObject(obj.toString(), LiftRedisCommand.class); // if (redisCommand == null) { // return false; // } // // ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); // if (forkLiftThread == null) { // return false; // } // // ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); // if (forkLiftProtocol == null) { // return false; // } // // List commands = redisCommand.getAssignCommand().getCommands(); // if (commands.isEmpty()) { // return false; // } // // LiftAssignCommand assignCommand = redisCommand.getAssignCommand(); // int commandStep = redisCommand.getCommandStep(); // // if (commandStep == 0) { // //取出命令 // ForkLiftCommand command = commands.get(commandStep); // // //判断提升机是否空闲 // if (!forkLiftThread.isDeviceIdle()) { // return false; // } // // // 下发命令 // CommandResponse response = write(command, liftNo); // // //保存命令日志 // BasLiftOpt basLiftOpt = new BasLiftOpt(); // basLiftOpt.setWrkNo(taskNo); // basLiftOpt.setLiftNo(liftNo); // basLiftOpt.setCommand(JSON.toJSONString(command)); // basLiftOpt.setSystemStatus(JSON.toJSONString(forkLiftProtocol)); // basLiftOpt.setDeviceWrk(String.valueOf(command.getTaskNo())); // basLiftOpt.setSendTime(new Date());//指令下发时间 // //保存命令流水 // basLiftOptService.insert(basLiftOpt); // // if (!response.getResult()) { // News.error("货叉提升机命令下发失败,提升机号={},任务数据={}", command.getLiftNo(), JSON.toJSON(command)); // return false; // } else { // News.info("货叉提升机命令下发成功,提升机号={},任务数据={}", command.getLiftNo(), JSON.toJSON(command)); // } // // commandStep++; // //更新redis数据 // redisCommand.setCommandStep(commandStep); // // 更新redis数据 // redisUtil.set(RedisKeyType.FORK_LIFT_WORK_FLAG.key + taskNo, JSON.toJSONString(redisCommand)); // } return true; } private synchronized CommandResponse write(ForkLiftCommand command, Integer liftNo) { CommandResponse response = new CommandResponse(false); if (null == command) { News.error("提升机写入命令为空"); response.setMessage("提升机写入命令为空"); return response; } ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); if (forkLiftThread == null) { return response; } if (command.getMode().intValue() == ForkLiftTaskModeType.PICK_PUT.id) { response = forkLiftThread.pickAndPut(command); } else if (command.getMode().intValue() == ForkLiftTaskModeType.SHUTTLE_SWITCH.id) { response = forkLiftThread.shuttleSwitch(command); } return response; } }