fyxc
2025-05-22 09fcc4ec56a1ce6c0fcb308348d8dd5e2c08d336
src/main/java/com/zy/core/action/ForkLiftAction.java
@@ -1,27 +1,18 @@
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 {
@@ -34,99 +25,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.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;
    }