#
zjj
2024-06-19 16171041fc0e2e86a5e56504e00a3d4742ad60a9
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayLiftThread.java
@@ -34,7 +34,7 @@
@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()));
@@ -92,7 +93,7 @@
                //模式
                liftProtocol.setModel(true);
                //运行状态
                liftProtocol.setRun(data.getInteger("runningstate") == 1);
                liftProtocol.setRun(data.getInteger("runningState") == 1);
                //就绪状态
                liftProtocol.setReady(data.getInteger("readyState") == 1);
                //有托盘
@@ -100,7 +101,7 @@
                //有小车
                liftProtocol.setHasCar(data.getString("haveCar").equals("Y"));
                //故障码
                liftProtocol.setErrorCode("");
                liftProtocol.setErrorCode("0");
                //层
                liftProtocol.setLev(data.getInteger("curFloor"));
@@ -345,12 +346,43 @@
        // 判断提升机是否自动、就绪、空闲、未锁定
        if (this.liftProtocol.getModel()
                && !this.liftProtocol.getRun()
                && this.liftProtocol.getReady()
                && this.liftProtocol.getPakMk()
                && this.liftProtocol.getReady()
                && this.liftProtocol.getErrorCode().equals("0")
                && this.liftProtocol.getProtocolStatus().equals(LiftProtocolStatusType.IDLE)
                && (this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.IDLE)
                || this.liftProtocol.getProtocolStatusType().equals(LiftProtocolStatusType.WAITING))
                && !extend.getLock()
        ) {
            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;
@@ -372,6 +404,36 @@
    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;
            }
            HashMap<String, Object> headers = new HashMap<>();
            headers.put("Authorization", "Bearer " + loginToken);
            String response = new HttpHandler.Builder()
                    .setUri(API_URL)
                    .setPath("/RDS/lifterOperation")
                    .setHeaders(headers)
                    .setJson(command.getBody())
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            Integer code = jsonObject.getInteger("code");
            if (code.equals(200)) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    //***************设备层通讯-不同厂商设备通讯方案不一致***************
@@ -403,37 +465,37 @@
    //获取设备状态
    private JSONObject requestDeviceStatus() {
        //模拟数据
        String data = "[{\"taskNo\":1244,\"curFloor\":2,\"readyState\":1,\"haveCar\":'N',\"completeTaskNo\":0,\"haveCargo\":\"Y\",\"runningstate\":0,\"floors\":[{\"floor\":1,\"location\":1,\"run\":1,\"error\":1,\"cargoState\":\"Y\"},{\"floor\":1,\"location\":2,\"run\":0,\"error\":0,\"cargoState\":\"N\"}]}]";
        return JSON.parseArray(data).getJSONObject(0);
//        try {
//            String loginToken = requestLoginToken();
//            if (loginToken == null) {
//                return null;
//            }
//
//            HashMap<String, Object> headers = new HashMap<>();
//            headers.put("Authorization", "Bearer " + loginToken);
//
//            HashMap<String, Object> param = new HashMap<>();
//            param.put("messageName", "deviceRgvStatus");
//            param.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
//            param.put("deviceNo", device.getDeviceNo());
//            String response = new HttpHandler.Builder()
//                    .setUri(API_URL)
//                    .setPath("/RDS/deviceLifterStatus")
//                    .setHeaders(headers)
//                    .setJson(JSON.toJSONString(param))
//                    .build()
//                    .doPost();
//            JSONObject jsonObject = JSON.parseObject(response);
//            Integer code = jsonObject.getInteger("code");
//            if (code.equals(200)) {
//                return jsonObject.getJSONArray("data").getJSONObject(0);
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//        String data = "[{\"taskNo\":1244,\"curFloor\":2,\"readyState\":1,\"haveCar\":'N',\"completeTaskNo\":0,\"haveCargo\":\"Y\",\"runningstate\":0,\"floors\":[{\"floor\":1,\"location\":1,\"run\":1,\"error\":1,\"cargoState\":\"Y\"},{\"floor\":1,\"location\":2,\"run\":0,\"error\":0,\"cargoState\":\"N\"}]}]";
//        return JSON.parseArray(data).getJSONObject(0);
        try {
            String loginToken = requestLoginToken();
            if (loginToken == null) {
                return null;
            }
            HashMap<String, Object> headers = new HashMap<>();
            headers.put("Authorization", "Bearer " + loginToken);
            HashMap<String, Object> param = new HashMap<>();
            param.put("messageName", "deviceRgvStatus");
            param.put("msgTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
            param.put("deviceNo", device.getDeviceNo());
            String response = new HttpHandler.Builder()
                    .setUri(API_URL)
                    .setPath("/RDS/deviceLifterStatus")
                    .setHeaders(headers)
                    .setJson(JSON.toJSONString(param))
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            Integer code = jsonObject.getInteger("code");
            if (code.equals(200)) {
                return jsonObject.getJSONArray("data").getJSONObject(0);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    //空载移动
@@ -448,6 +510,8 @@
        body.put("taskId", taskNo);
        body.put("startLayer", 0);
        body.put("endLayer", targetLev);
        body.put("startLocation", 0);
        body.put("endLocation", 0);
        body.put("model", taskMode);
        LiftCommand command = new LiftCommand();
@@ -469,6 +533,8 @@
        body.put("taskId", taskNo);
        body.put("startLayer", sourceLev);
        body.put("endLayer", targetLev);
        body.put("startLocation", 0);
        body.put("endLocation", 0);
        body.put("model", 2);//载车移动
        LiftCommand command = new LiftCommand();
@@ -540,6 +606,21 @@
        return command;
    }
    //获取提升机任务清除命令
    private 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()));
        body.put("deviceNo", Integer.parseInt(this.device.getDeviceNo()));
        body.put("operation", 1);
        LiftCommand command = new LiftCommand();
        command.setLiftNo(Integer.valueOf(this.device.getDeviceNo()));
        command.setBody(JSON.toJSONString(body));
        command.setMode(LiftCommandModeType.RESET.id);
        return command;
    }
    /**
     * 扩展字段
     */