#
Junjie
2024-10-17 d835d1b51f832889929cdf69010034a30ef44d02
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
@@ -12,6 +12,7 @@
import com.zy.asrs.wcs.core.entity.BasLift;
import com.zy.asrs.wcs.core.model.command.LiftCommand;
import com.zy.asrs.wcs.core.model.enums.LiftCommandModeType;
import com.zy.asrs.wcs.core.model.enums.MotionCtgType;
import com.zy.asrs.wcs.core.service.BasLiftService;
import com.zy.asrs.wcs.rcs.News;
import com.zy.asrs.wcs.rcs.cache.OutputQueue;
@@ -27,14 +28,13 @@
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.*;
@Slf4j
@SuppressWarnings("all")
public class SurayLiftThread implements LiftThread {
    private static final String API_URL = "http://127.0.0.1:8082";
    private static String API_URL = "http://127.0.0.1:8082";
    private Device device;
    private RedisUtil redisUtil;
@@ -43,6 +43,7 @@
    public SurayLiftThread(Device device,RedisUtil redisUtil) {
        this.device = device;
        this.redisUtil = redisUtil;
        API_URL = "http://" + device.getIp() + ":" + device.getPort();
    }
    @Override
@@ -63,9 +64,9 @@
        try {
            readStatus();
            //提升机处于运行状态,将标记置为false
            //提升机处于运行状态,将标记置为true
            if (liftProtocol.getRun()) {
                liftProtocol.setPakMk(false);
                liftProtocol.setPakMk(true);
            }
        } catch (Exception e) {
            OutputQueue.LIFT.offer(MessageFormat.format("【{0}】读取提升机状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort()));
@@ -91,18 +92,25 @@
                //----------读取提升机状态-----------
                //模式
                liftProtocol.setModel(true);
                boolean runningState = data.getInteger("runningState") == 1;
                if (!data.getInteger("completeTaskNo").equals(data.getInteger("taskNo"))) {
                    runningState = true;//工作号不一致,认为处于运行中
                }
                //运行状态
                liftProtocol.setRun(data.getInteger("runningState") == 1);
                liftProtocol.setRun(runningState);
                //就绪状态
                liftProtocol.setReady(data.getInteger("readyState") == 1);
                //有托盘
                liftProtocol.setHasTray(data.getString("haveCargo").equals("Y"));
                //有小车
                liftProtocol.setHasCar(data.getString("haveCar").equals("Y"));
                liftProtocol.setHasCar(data.getInteger("haveCar") == 1);
                //故障码
                liftProtocol.setErrorCode("0");
                //层
                liftProtocol.setLev(data.getInteger("curFloor"));
                //已完成的任务号
                liftProtocol.setCompleteTaskNo(data.getString("completeTaskNo"));
                //************补充扩展字段*************
@@ -326,58 +334,7 @@
    @Override
    public synchronized boolean reset(LiftCommand command) {
        return false;
    }
    @Override
    public boolean isIdle() {
        return isIdle(null);
    }
    @Override
    public boolean isIdle(ExecuteSupport support) {
        if (null != support) {
            if (!support.judgement()) {
                return false;
            }
        }
        InnerLiftExtend extend = (InnerLiftExtend) this.liftProtocol.getExtend();//获取扩展字段
        // 判断提升机是否自动、就绪、空闲、未锁定
        if (this.liftProtocol.getModel()
                && !this.liftProtocol.getRun()
                && this.liftProtocol.getReady()
//                && this.liftProtocol.getPakMk()
                && this.liftProtocol.getErrorCode().equals("0")
                && this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.IDLE)
                && !extend.getLock()
        ) {
            return true;
        }
        return false;
    }
    @Override
    public boolean setProtocolStatus(LiftProtocolStatusType status) {
        this.liftProtocol.setProtocolStatus(status);
        return true;
    }
    @Override
    public boolean setSyncTaskNo(Integer taskNo) {
        this.liftProtocol.setTaskNo(taskNo);
        return true;
    }
    @Override
    public boolean isLock(ExecuteSupport support) {
        InnerLiftExtend extend = (InnerLiftExtend) this.liftProtocol.getExtend();
        return extend.getLock();
    }
    @Override
    public boolean commandFinished(Integer taskNo) {
        try {
            LiftCommand command = getTaskClearCommand();
            String loginToken = requestLoginToken();
            if (loginToken == null) {
                return false;
@@ -402,6 +359,133 @@
            e.printStackTrace();
        }
        return false;
    }
    @Override
    public boolean isIdle() {
        return isIdle(null);
    }
    @Override
    public boolean isIdle(MotionCtgType flag) {
        if (flag == null) {
            InnerLiftExtend extend = (InnerLiftExtend) this.liftProtocol.getExtend();//获取扩展字段
            // 判断提升机是否自动、就绪、空闲、未锁定
            if (this.liftProtocol.getModel()
                    && !this.liftProtocol.getRun()
                    && this.liftProtocol.getPakMk()
                    && this.liftProtocol.getReady()
                    && this.liftProtocol.getErrorCode().equals("0")
                    && (this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.IDLE)
                    || this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.WAITING))
                    && !extend.getLock()
            ) {
                return true;
            }
            return false;
        }
        switch (Objects.requireNonNull(MotionCtgType.get(String.valueOf(flag)))){
            case SHUTTLE_MOVE_FROM_LIFT://穿梭车出提升机
            case SHUTTLE_MOVE_TO_LIFT://穿梭车进提升机
            case LIFT_SHUTTLE_ARRIVAL://提升机解锁
                return isIdleShuttleMoveToLift();
            case LIFT_LOCK://提升机锁定
            case LIFT_UNLOCK://提升机解锁
                return isIdleLiftLock();
        }
        return false;
    }
    //穿梭车进提升机时-提升机状态判断
    private boolean isIdleShuttleMoveToLift() {
        InnerLiftExtend extend = (InnerLiftExtend) this.liftProtocol.getExtend();//获取扩展字段
        // 判断提升机是否自动、就绪、空闲
        if (this.liftProtocol.getModel()
                && !this.liftProtocol.getRun()
                && this.liftProtocol.getPakMk()
                && this.liftProtocol.getErrorCode().equals("0")
                && (this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.IDLE)
                || this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.WAITING))
        ) {
            if (!extend.getLock()) {
                //提升机未锁定,需要判断是否就绪
                if (!this.liftProtocol.getReady()) {
                    return false;
                }
            }
            return true;
        }
        return false;
    }
    //提升机锁定-提升机状态判断
    private boolean isIdleLiftLock() {
        // 判断提升机是否自动、就绪、空闲
        if (this.liftProtocol.getModel()
                && !this.liftProtocol.getRun()
                && this.liftProtocol.getPakMk()
                && this.liftProtocol.getErrorCode().equals("0")
                && (this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.IDLE)
                || this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.WAITING))
        ) {
            return true;
        }
        return false;
    }
    @Override
    public boolean isDeviceIdle() {
        return isDeviceIdle(null);
    }
    @Override
    public boolean isDeviceIdle(ExecuteSupport support) {
        if (null != support) {
            Boolean judgement = support.judgement();
            if (judgement != null && !judgement) {
                return true;
            }
        }
        // 判断提升机是否自动、就绪、空闲
        if (this.liftProtocol.getModel()
                && !this.liftProtocol.getRun()
                && this.liftProtocol.getErrorCode().equals("0")
        ) {
            if (this.liftProtocol.getTaskNo() == 0) {
                //无任务情况下检测是否就绪
                if (!this.liftProtocol.getReady()) {
                    return false;
                }
            }
            return true;
        }
        return false;
    }
    @Override
    public boolean setProtocolStatus(LiftProtocolStatusType status) {
        this.liftProtocol.setProtocolStatus(status);
        return true;
    }
    @Override
    public boolean setSyncTaskNo(Integer taskNo) {
        this.liftProtocol.setTaskNo(taskNo);
        return true;
    }
    @Override
    public boolean isLock(ExecuteSupport support) {
        InnerLiftExtend extend = (InnerLiftExtend) this.liftProtocol.getExtend();
        return extend.getLock();
    }
    @Override
    public int generateDeviceTaskNo(int taskNo, MotionCtgType motionCtgType) {
        return taskNo;
    }
    //***************设备层通讯-不同厂商设备通讯方案不一致***************
@@ -468,7 +552,7 @@
    //空载移动
    @Override
    public LiftCommand getMoveCommand(Integer taskNo, Integer sourceLev, Integer targetLev, LiftCommandModeType mode) {
    public List<LiftCommand> getMoveCommand(Integer taskNo, Integer sourceLev, Integer targetLev, LiftCommandModeType mode) {
        int taskMode = 3;//空载移动
        HashMap<String, Object> body = new HashMap<>();
@@ -488,12 +572,16 @@
        command.setMode(LiftCommandModeType.MOVE.id);
        command.setOriginLev(0);
        command.setTargetLev(targetLev);
        return command;
        ArrayList<LiftCommand> list = new ArrayList<>();
        list.add(command);
        list.addAll(getTaskClearCommand());
        return list;
    }
    //载车移动
    @Override
    public LiftCommand getMoveWithShuttleCommand(Integer taskNo, Integer sourceLev, Integer targetLev, LiftCommandModeType mode) {
    public List<LiftCommand> getMoveWithShuttleCommand(Integer taskNo, Integer sourceLev, Integer targetLev, LiftCommandModeType mode) {
        HashMap<String, Object> body = new HashMap<>();
        body.put("messageName", "lifterTask");
        body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
@@ -511,12 +599,16 @@
        command.setMode(LiftCommandModeType.MOVE.id);
        command.setOriginLev(sourceLev);
        command.setTargetLev(targetLev);
        return command;
        ArrayList<LiftCommand> list = new ArrayList<>();
        list.add(command);
        list.addAll(getTaskClearCommand());
        return list;
    }
    //托盘出入
    @Override
    public LiftCommand getPalletInOutCommand(Integer taskNo, Integer sourceLev, Integer targetLev, Integer originSta, Integer targetSta, LiftCommandModeType mode) {
    public List<LiftCommand> getPalletInOutCommand(Integer taskNo, Integer sourceLev, Integer targetLev, Integer originSta, Integer targetSta, LiftCommandModeType mode) {
        HashMap<String, Object> body = new HashMap<>();
        body.put("messageName", "lifterTask");
        body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
@@ -536,12 +628,16 @@
        command.setTargetLev(targetLev);
        command.setOriginSta(originSta);
        command.setTargetSta(targetSta);
        return command;
        ArrayList<LiftCommand> list = new ArrayList<>();
        list.add(command);
        list.addAll(getTaskClearCommand());
        return list;
    }
    //锁定/解锁提升机
    @Override
    public LiftCommand getLockCommand(Integer taskNo, Boolean lock) {
    public List<LiftCommand> getLockCommand(Integer taskNo, Boolean lock) {
        HashMap<String, Object> body = new HashMap<>();
        body.put("messageName", "lifterOperation");
        body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
@@ -554,12 +650,15 @@
        command.setLiftNo(Integer.valueOf(this.device.getDeviceNo()));
        command.setBody(JSON.toJSONString(body));
        command.setMode(lock ? LiftCommandModeType.LOCK.id : LiftCommandModeType.UNLOCK.id);
        return command;
        ArrayList<LiftCommand> list = new ArrayList<>();
        list.add(command);
        return list;
    }
    //小车已到位/已驶离信号
    @Override
    public LiftCommand getShuttleSignalCommand(Integer taskNo, Boolean signal) {
    public List<LiftCommand> getShuttleSignalCommand(Integer taskNo, Boolean signal) {
        HashMap<String, Object> body = new HashMap<>();
        body.put("messageName", "lifterOperation");
        body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
@@ -571,11 +670,14 @@
        command.setLiftNo(Integer.valueOf(this.device.getDeviceNo()));
        command.setBody(JSON.toJSONString(body));
        command.setMode(signal ? LiftCommandModeType.LOCK.id : LiftCommandModeType.UNLOCK.id);
        return command;
        ArrayList<LiftCommand> list = new ArrayList<>();
        list.add(command);
        return list;
    }
    //获取提升机任务清除命令
    private LiftCommand getTaskClearCommand() {
    private List<LiftCommand> getTaskClearCommand() {
        HashMap<String, Object> body = new HashMap<>();
        body.put("messageName", "lifterOperation");
        body.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
@@ -586,7 +688,10 @@
        command.setLiftNo(Integer.valueOf(this.device.getDeviceNo()));
        command.setBody(JSON.toJSONString(body));
        command.setMode(LiftCommandModeType.RESET.id);
        return command;
        ArrayList<LiftCommand> list = new ArrayList<>();
        list.add(command);
        return list;
    }
    /**