自动化立体仓库 - WCS系统
#
Junjie
2025-04-10 1d624dfdb040825ffecba6c792c480be662b2dbc
src/main/java/com/zy/core/action/ForkLiftAction.java
@@ -34,99 +34,99 @@
    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;
        }
//        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) {
//        Object obj = redisUtil.get(RedisKeyType.FORK_LIFT_WORK_FLAG.key + taskNo);
//        if (obj == 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.info("货叉提升机命令下发成功,提升机号={},任务数据={}", command.getLiftNo(), JSON.toJSON(command));
            }
            commandStep++;
            //更新redis数据
            redisCommand.setCommandStep(commandStep);
            // 更新redis数据
            redisUtil.set(RedisKeyType.FORK_LIFT_WORK_FLAG.key + taskNo, JSON.toJSONString(redisCommand));
        }
//
////        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.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;
    }