#
Junjie
2025-05-08 a9a915e7042ab588dfeb0f8ac290fc8ce26a0f29
src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
@@ -292,8 +292,10 @@
            requestCommandAsync(readStatusCommand);//请求状态
            if (this.socketReadResults.isEmpty()) {
                //offline
                shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE);
                if (System.currentTimeMillis() - shuttleProtocol.getLastOnlineTime() > 1000 * 60) {
                    //最后一次上线时间超过60s,认定离线
                    this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE);
                }
                return;
            }
@@ -302,7 +304,7 @@
            if (data == null) {
                if (System.currentTimeMillis() - shuttleProtocol.getLastOnlineTime() > 1000 * 60) {
                    //最后一次上线时间超过60s,认定离线
                    shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE);
                    this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE);
                }
                OutputQueue.SHUTTLE.offer(MessageFormat.format("【{0}】四向穿梭车Socket状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
            }else {
@@ -359,9 +361,13 @@
                    shuttleProtocol.setPakMk(true);
                }
                if (shuttleProtocol.getProtocolStatusType() == null && shuttleProtocol.getDeviceStatus().intValue() == 0) {
                if (shuttleProtocol.getProtocolStatusType() == null && shuttleProtocol.getDeviceStatus().intValue() == 1) {
                    //小车空闲状态、小车任务状态为未知,认定曾离线过,需要复位成空闲
                    shuttleProtocol.setProtocolStatusType(ShuttleProtocolStatusType.IDLE);
                    this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
                }
                if (shuttleProtocol.getProtocolStatusType().equals(ShuttleProtocolStatusType.OFFLINE) && shuttleProtocol.getDeviceStatus().intValue() == 1) {
                    this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
                }
                this.originDeviceData = data;
@@ -405,6 +411,9 @@
                String requestType = resultBody.getString("requestType");
                Integer requestId = resultHeader.getInteger("requestId");
                if (requestType.equals("init")) {
                    removeIdx = i;//此数据已经处理,从结果集中剔除
                    socketResults.remove(removeIdx);
                    Integer code = resultBody.getInteger("code");
                    //小车复位请求
                    ShuttleCommand initCommand = getInitCommand(requestId, code);
@@ -412,16 +421,10 @@
                    NyShuttleHttpCommand httpCommand = JSON.parseObject(initCommand.getBody(), NyShuttleHttpCommand.class);
                    JSONObject requestResult = requestCommand(httpCommand);
                    removeIdx = i;//此数据已经处理,从结果集中剔除
                    log.info(MessageFormat.format("【{0}】四向车复位上报 ===>> [code:{1}] [ip:{2}] [port:{3}]", slave.getId(), code, slave.getIp(), slave.getPort()));
                    OutputQueue.SHUTTLE.offer(MessageFormat.format("【{0}】四向车复位上报 ===>> [code:{1}] [ip:{2}] [port:{3}]", slave.getId(), code, slave.getIp(), slave.getPort()));
                    break;
                }
            }
            if (removeIdx != -1) {
                socketResults.remove(removeIdx);
            }
        } catch (Exception e) {
            e.printStackTrace();
@@ -1115,46 +1118,51 @@
    //发出请求
    private JSONObject requestCommand(NyShuttleHttpCommand httpCommand) throws IOException {
        if (this.socket == null) {
            return null;
        }
        try {
            if (this.socket == null) {
                return null;
            }
        //压缩数据包
        JSONObject data = JSON.parseObject(JSON.toJSONString(httpCommand));
        data.remove("nodes");
            //压缩数据包
            JSONObject data = JSON.parseObject(JSON.toJSONString(httpCommand));
            data.remove("nodes");
        // 获取输出流
        OutputStreamWriter writer = new OutputStreamWriter(this.socket.getOutputStream());
        writer.write(JSON.toJSONString(data) + "\r\n");
        writer.flush();
            // 获取输出流
            OutputStreamWriter writer = new OutputStreamWriter(this.socket.getOutputStream());
            writer.write(JSON.toJSONString(data) + "\r\n");
            writer.flush();
//            System.out.println("Sent message to server: " + JSON.toJSONString(httpCommand));
        String requestType = null;
        String taskId = null;
        try {
            requestType = httpCommand.getRequest().getBody().get("requestType").toString();
            taskId = httpCommand.getRequest().getBody().get("taskId").toString();
        } catch (Exception e) {
            String requestType = null;
            String taskId = null;
            try {
                requestType = httpCommand.getRequest().getBody().get("requestType").toString();
                taskId = httpCommand.getRequest().getBody().get("taskId").toString();
            } catch (Exception e) {
//            return null;
            //taskId可能取空,不报错,正常情况
        }
        // 获取服务器响应
        // 尝试10次
        JSONObject result = null;
        for (int i = 0; i < 10; i++) {
            result = getRequestBody(requestType, taskId);
            if (result == null) {
                try {
                    Thread.sleep(100);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else {
                break;
                //taskId可能取空,不报错,正常情况
            }
            // 获取服务器响应
            // 尝试10次
            JSONObject result = null;
            for (int i = 0; i < 10; i++) {
                result = getRequestBody(requestType, taskId);
                if (result == null) {
                    try {
                        Thread.sleep(100);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }else {
                    break;
                }
            }
            return result;//返回Body结果集
        }catch (Exception e) {
            e.printStackTrace();
        }
        return result;//返回Body结果集
        return null;
    }
    private void requestCommandAsync(NyShuttleHttpCommand httpCommand) throws IOException {
@@ -1162,15 +1170,19 @@
            return;
        }
        //压缩数据包
        JSONObject data = JSON.parseObject(JSON.toJSONString(httpCommand));
        data.remove("nodes");
       try {
           //压缩数据包
           JSONObject data = JSON.parseObject(JSON.toJSONString(httpCommand));
           data.remove("nodes");
        // 获取输出流
        OutputStreamWriter writer = new OutputStreamWriter(this.socket.getOutputStream());
        writer.write(JSON.toJSONString(data) + "\r\n");
        writer.flush();
           // 获取输出流
           OutputStreamWriter writer = new OutputStreamWriter(this.socket.getOutputStream());
           writer.write(JSON.toJSONString(data) + "\r\n");
           writer.flush();
//            System.out.println("Sent message to server: " + JSON.toJSONString(httpCommand));
       }catch (Exception e) {
           e.printStackTrace();
       }
    }
    private JSONObject filterBodyData(JSONObject data) {