#
Junjie
12 小时以前 9af70943c966b0c74dcd735217ff18c9d7564221
#
2个文件已修改
201 ■■■■ 已修改文件
src/main/java/com/zy/common/utils/RedisUtil.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/thread/impl/NyShuttleThread.java 198 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/utils/RedisUtil.java
@@ -1,6 +1,7 @@
package com.zy.common.utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
@@ -134,6 +135,7 @@
    public boolean set(String key, Object value) {
        try {
            redisTemplate.opsForValue().set(key, value);
            redisTemplate.execute((RedisCallback<Void>) connection -> null);
            long start = System.currentTimeMillis();
            while (System.currentTimeMillis() - start < 10000) {//有效期10s
                Object o = redisTemplate.opsForValue().get(key);
@@ -167,6 +169,7 @@
            } else {
                set(key, value);
            }
            redisTemplate.execute((RedisCallback<Void>) connection -> null);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
@@ -265,10 +265,10 @@
            }
            NyShuttleHttpCommand readStatusCommand = getReadStatusCommand(deviceConfig.getDeviceNo());
            //指令超过五条,不再下发任务状态请求
            //指令超过2条,不再下发任务状态请求
            TreeSet<String> deviceCommandMsgListKey = deviceMsgUtils.getDeviceCommandMsgListKey(SlaveType.Shuttle, deviceConfig.getDeviceNo());
            if (deviceCommandMsgListKey.size() < 5) {
                requestCommandAsync(readStatusCommand);//请求状态
            if (deviceCommandMsgListKey.size() < 2) {
                requestCommand(readStatusCommand);//请求状态
            }
            if (this.socketReadResults.isEmpty()) {
@@ -382,7 +382,7 @@
                    ShuttleCommand initCommand = getInitCommand(requestId, code);
                    //发出请求
                    NyShuttleHttpCommand httpCommand = JSON.parseObject(initCommand.getBody(), NyShuttleHttpCommand.class);
                    JSONObject requestResult = requestCommand(httpCommand);
                    requestCommand(httpCommand);
                    log.info(MessageFormat.format("【{0}】四向车复位上报 ===>> [code:{1}] [ip:{2}] [port:{3}]", deviceConfig.getDeviceNo(), code, deviceConfig.getIp(), deviceConfig.getPort()));
                    OutputQueue.SHUTTLE.offer(MessageFormat.format("【{0}】四向车复位上报 ===>> [code:{1}] [ip:{2}] [port:{3}]", deviceConfig.getDeviceNo(), code, deviceConfig.getIp(), deviceConfig.getPort()));
@@ -413,58 +413,81 @@
        return response;
    }
//    @Override
//    public CommandResponse move(ShuttleCommand command) {
//        CommandResponse response = new CommandResponse(false);
//        try {
//            //发出请求
//            NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class);
//            Map<String, Object> body = httpCommand.getRequest().getBody();
//            Object pathObj = body.get("path");
//            int taskId = Integer.parseInt(body.get("taskId").toString());
//            List<JSONObject> path = JSON.parseArray(JSON.toJSONString(pathObj), JSONObject.class);
//            ArrayList<NyShuttleHttpCommand> commandList = new ArrayList<>();
//            while (!path.isEmpty()) {
//                ArrayList<Map<String, Object>> list = new ArrayList<>();
//                if (path.size() > 10) {
//                    List<JSONObject> subList = path.subList(0, 10);
//                    list.addAll(subList);
//
//                    List<JSONObject> tmp = new ArrayList<>();
//                    for (int i = 10; i < path.size(); i++) {
//                        tmp.add(path.get(i));
//                    }
//                    path = tmp;
//                }else  {
//                    list.addAll(path);
//                    path.clear();
//                }
//
//                NyShuttleHttpCommand httpCommandCopy = JSON.parseObject(JSON.toJSONString(httpCommand), NyShuttleHttpCommand.class);
//                JSONObject bodyCopy = JSON.parseObject(JSON.toJSONString(body));
//
//                NyShuttleHttpCommand.NyRequest request = httpCommandCopy.getRequest();
//                bodyCopy.put("path", list);
//                bodyCopy.put("taskId", taskId++);
//                request.setBody(bodyCopy);
//                httpCommandCopy.setRequest(request);
//
//                commandList.add(httpCommandCopy);//add copy
//            }
//
//            for (NyShuttleHttpCommand requestCommand : commandList) {
//                while (true) {
//                    JSONObject result = requestCommand(requestCommand);
//                    if (result == null) {
////                        return response;//请求失败
//                        continue;//请求失败尝试重新请求
//                    }
//                    this.shuttleProtocol.setSendTime(System.currentTimeMillis());//指令下发时间
//                    response.setMessage(JSON.toJSONString(result));
//                    response.setResult(true);
//                    break;
//                }
//            }
//            return response;
//        } catch (Exception e) {
//            e.printStackTrace();
//            response.setMessage(e.getMessage());
//            return response;
//        }
//    }
    @Override
    public CommandResponse move(ShuttleCommand command) {
        CommandResponse response = new CommandResponse(false);
        try {
            //发出请求
            NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class);
            Map<String, Object> body = httpCommand.getRequest().getBody();
            Object pathObj = body.get("path");
            int taskId = Integer.parseInt(body.get("taskId").toString());
            List<JSONObject> path = JSON.parseArray(JSON.toJSONString(pathObj), JSONObject.class);
            ArrayList<NyShuttleHttpCommand> commandList = new ArrayList<>();
            while (!path.isEmpty()) {
                ArrayList<Map<String, Object>> list = new ArrayList<>();
                if (path.size() > 10) {
                    List<JSONObject> subList = path.subList(0, 10);
                    list.addAll(subList);
                    List<JSONObject> tmp = new ArrayList<>();
                    for (int i = 10; i < path.size(); i++) {
                        tmp.add(path.get(i));
                    }
                    path = tmp;
                }else  {
                    list.addAll(path);
                    path.clear();
                }
                NyShuttleHttpCommand httpCommandCopy = JSON.parseObject(JSON.toJSONString(httpCommand), NyShuttleHttpCommand.class);
                JSONObject bodyCopy = JSON.parseObject(JSON.toJSONString(body));
                NyShuttleHttpCommand.NyRequest request = httpCommandCopy.getRequest();
                bodyCopy.put("path", list);
                bodyCopy.put("taskId", taskId++);
                request.setBody(bodyCopy);
                httpCommandCopy.setRequest(request);
                commandList.add(httpCommandCopy);//add copy
            JSONObject requestToken = requestCommand(httpCommand);
            //查询请求结果
            JSONObject result = queryCommandStatus(requestToken.getString("requestType"), requestToken.getString("taskId"));
            if (result == null) {
                return response;//请求失败
            }
            for (NyShuttleHttpCommand requestCommand : commandList) {
                while (true) {
                    JSONObject result = requestCommand(requestCommand);
                    if (result == null) {
//                        return response;//请求失败
                        continue;//请求失败尝试重新请求
                    }
                    this.shuttleProtocol.setSendTime(System.currentTimeMillis());//指令下发时间
                    response.setMessage(JSON.toJSONString(result));
                    response.setResult(true);
                    break;
                }
            }
            this.shuttleProtocol.setSendTime(System.currentTimeMillis());//指令下发时间
            response.setMessage(JSON.toJSONString(result));
            response.setResult(true);
            return response;
        } catch (Exception e) {
            e.printStackTrace();
@@ -479,7 +502,9 @@
        try {
            //发出请求
            NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class);
            JSONObject result = requestCommand(httpCommand);
            JSONObject requestToken = requestCommand(httpCommand);
            //查询请求结果
            JSONObject result = queryCommandStatus(requestToken.getString("requestType"), requestToken.getString("taskId"));
            if (result == null) {
                return response;//请求失败
            }
@@ -499,7 +524,9 @@
        try {
            //发出请求
            NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class);
            JSONObject result = requestCommand(httpCommand);
            JSONObject requestToken = requestCommand(httpCommand);
            //查询请求结果
            JSONObject result = queryCommandStatus(requestToken.getString("requestType"), requestToken.getString("taskId"));
            if (result == null) {
                return response;//请求失败
            }
@@ -527,7 +554,9 @@
        try {
            //发出请求
            NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class);
            JSONObject result = requestCommand(httpCommand);
            JSONObject requestToken = requestCommand(httpCommand);
            //查询请求结果
            JSONObject result = queryCommandStatus(requestToken.getString("requestType"), requestToken.getString("taskId"));
            if (result == null) {
                return response;//请求失败
            }
@@ -1097,7 +1126,7 @@
        return httpStandard;
    }
    //发出请求-同步
    //发出请求
    private JSONObject requestCommand(NyShuttleHttpCommand httpCommand) throws IOException {
        try {
            DeviceMsgUtils deviceMsgUtils = SpringUtils.getBean(DeviceMsgUtils.class);
@@ -1125,58 +1154,33 @@
                //taskId可能取空,不报错,正常情况
            }
            // 获取服务器响应
            // 尝试30次
            JSONObject result = null;
            for (int i = 0; i < 30; i++) {
                result = getRequestBody(requestType, taskId);
                if (result == null) {
                    try {
                        Thread.sleep(100);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }else {
                    break;
                }
            }
            return result;//返回Body结果集
            JSONObject result = new JSONObject();
            result.put("requestType", requestType);
            result.put("taskId", taskId);
            return result;
        }catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    //发出请求-移步
    private void requestCommandAsync(NyShuttleHttpCommand httpCommand) throws IOException {
        try {
            DeviceMsgUtils deviceMsgUtils = SpringUtils.getBean(DeviceMsgUtils.class);
            if (deviceMsgUtils == null) {
                return;
    private JSONObject queryCommandStatus(String requestType, String taskId) {
        // 获取服务器响应
        // 尝试50次
        JSONObject result = null;
        for (int i = 0; i < 50; i++) {
            result = getRequestBody(requestType, taskId);
            if (result == null) {
                try {
                    Thread.sleep(500);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else {
                break;
            }
            //压缩数据包
            JSONObject data = JSON.parseObject(JSON.toJSONString(httpCommand));
            data.remove("nodes");
            DeviceCommandMsgModel commandMsgModel = new DeviceCommandMsgModel();
            commandMsgModel.setDeviceId(deviceConfig.getDeviceNo());
            commandMsgModel.setDeviceType(String.valueOf(SlaveType.Shuttle));
            commandMsgModel.setCommand(data);
            String key = deviceMsgUtils.sendDeviceCommand(SlaveType.Shuttle, deviceConfig.getDeviceNo(), commandMsgModel);
            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可能取空,不报错,正常情况
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    private JSONObject filterBodyData(JSONObject data) {