|  |  | 
 |  |  | 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 { | 
 |  |  | 
 |  |  |     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.key + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand))) { | 
 |  |  |             forkLiftThread.setSyncTaskNo(assignCommand.getTaskNo().intValue()); | 
 |  |  |             return true; | 
 |  |  |         } | 
 |  |  | //        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.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<ForkLiftCommand> 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.isIdle()) { | 
 |  |  |                 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.key + taskNo, JSON.toJSONString(redisCommand)); | 
 |  |  |         } | 
 |  |  | //        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<ForkLiftCommand> 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.taskInfo(wrkMast.getWrkNo(),"货叉提升机命令下发成功,提升机号={},任务数据={}", 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; | 
 |  |  |     } |