Junjie
2025-03-18 67636f00821da36edc76da0e69c23b9d1cff5514
src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
@@ -120,6 +120,9 @@
//                    //小车空闲且有跑库程序
//                    shuttleAction.moveLoc(slave.getId());
                    //演示模式
                    shuttleAction.demo(slave.getId());
                    Thread.sleep(200);
                } catch (Exception e) {
                    e.printStackTrace();
@@ -200,7 +203,7 @@
        }
    }
    public JSONObject getRequestBody(String type) {
    public JSONObject getRequestBody(String type, String taskId) {
        try {
            // 获取服务器响应
            JSONObject result = null;
@@ -217,12 +220,17 @@
                JSONObject resultResponse = JSON.parseObject(socketResult.get("response").toString());
                JSONObject resultBody = JSON.parseObject(resultResponse.get("body").toString());
                String responseType = resultBody.get("responseType").toString();
                String responseTaskId = resultBody.get("taskId").toString();
                if (DEBUG) {
                    result = socketResult;
                    break;
                }
                if (!responseType.equals(type)) {
                    continue;//响应类型与请求类型不一致,不在调试模式下
                }
                if (taskId != null && !responseTaskId.equals(taskId)) {
                    continue;//响应ID与请求ID不一致,不在调试模式下
                }
@@ -455,13 +463,21 @@
            }
            for (NyShuttleHttpCommand requestCommand : commandList) {
                JSONObject result = requestCommand(requestCommand);
                if (result == null) {
                    return response;//请求失败
                while (true) {
                    int i = 0;
                    i++;
                    JSONObject result = requestCommand(requestCommand);
                    if (result == null) {
//                        return response;//请求失败
                        News.info("Socket命令下发失败,任务数据={},次数={}", JSON.toJSON(requestCommand), i);
                        continue;//请求失败尝试重新请求
                    }
                    this.shuttleProtocol.setSendTime(System.currentTimeMillis());//指令下发时间
                    response.setMessage(JSON.toJSONString(result));
                    response.setResult(true);
                    News.info("Socket命令下发成功,任务数据={},次数={},响应数据={}", JSON.toJSON(requestCommand), i, JSON.toJSONString(result));
                    break;
                }
                this.shuttleProtocol.setSendTime(System.currentTimeMillis());//指令下发时间
                response.setMessage(JSON.toJSONString(result));
                response.setResult(true);
            }
            return response;
        } catch (Exception e) {
@@ -804,6 +820,19 @@
    }
    @Override
    public boolean enableDemo(boolean enable) {
        shuttleProtocol.setDemo(enable);
        return true;
    }
    @Override
    public boolean offerSystemMsg(String format, Object... arguments) {
        String msg = News.replace(format, arguments);
        shuttleProtocol.setSystemMsg(msg);
        return true;
    }
    @Override
    public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes) {
        NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class);
        NyShuttleHttpCommand httpStandard = getHttpStandard(slave.getId(), taskNo);
@@ -1055,17 +1084,20 @@
//            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) {
            return null;
//            return null;
            //taskId可能取空,不报错,正常情况
        }
        // 获取服务器响应
        // 尝试10次
        // 尝试100次
        JSONObject result = null;
        for (int i = 0; i < 10; i++) {
            result = getRequestBody(requestType);
        for (int i = 0; i < 100; i++) {
            result = getRequestBody(requestType, taskId);
            if (result == null) {
                try {
                    Thread.sleep(100);