#
Junjie
3 天以前 3c45d4f9f3aba5bc85a9577e43c0dffc71b93a22
src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
@@ -8,6 +8,7 @@
import com.core.exception.CoolException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zy.asrs.entity.BasShuttle;
import com.zy.asrs.entity.DeviceConfig;
import com.zy.asrs.entity.DeviceDataLog;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.service.BasShuttleService;
@@ -29,7 +30,6 @@
import com.zy.core.enums.*;
import com.zy.core.model.CommandResponse;
import com.zy.core.model.DeviceMsgModel;
import com.zy.core.model.ShuttleSlave;
import com.zy.core.model.command.NyShuttleHttpCommand;
import com.zy.core.model.command.ShuttleCommand;
import com.zy.core.model.command.ShuttleRedisCommand;
@@ -49,26 +49,26 @@
@SuppressWarnings("all")
public class NyShuttleThread implements ShuttleThread {
    private ShuttleSlave slave;
    private DeviceConfig deviceConfig;
    private RedisUtil redisUtil;
    private ShuttleProtocol shuttleProtocol;
    private static final boolean DEBUG = false;//调试模式
    private List<JSONObject> socketReadResults = new ArrayList<>();
    private List<JSONObject> socketResults = new ArrayList<>();
    private List<DeviceMsgModel> socketResults = new ArrayList<>();
    //原始设备数据
    private Object originDeviceData;
    public NyShuttleThread(ShuttleSlave slave, RedisUtil redisUtil) {
        this.slave = slave;
    public NyShuttleThread(DeviceConfig deviceConfig, RedisUtil redisUtil) {
        this.deviceConfig = deviceConfig;
        this.redisUtil = redisUtil;
    }
    @Override
    public void run() {
        News.info("{}号四向车线程启动", slave.getId());
        News.info("{}号四向车线程启动", deviceConfig.getDeviceNo());
        //设备读取
        Thread readThread = new Thread(() -> {
@@ -100,7 +100,7 @@
                        continue;
                    }
                    Object object = redisUtil.get(RedisKeyType.SHUTTLE_FLAG.key + slave.getId());
                    Object object = redisUtil.get(RedisKeyType.SHUTTLE_FLAG.key + deviceConfig.getDeviceNo());
                    if (object == null) {
                        continue;
                    }
@@ -108,14 +108,14 @@
                    Integer taskNo = Integer.valueOf(String.valueOf(object));
                    if (taskNo != 0) {
                        //存在任务需要执行
                        boolean result = shuttleAction.executeWork(slave.getId(), taskNo);
                        boolean result = shuttleAction.executeWork(deviceConfig.getDeviceNo(), taskNo);
                    }
//                    //小车空闲且有跑库程序
//                    shuttleAction.moveLoc(slave.getId());
//                    shuttleAction.moveLoc(deviceConfig.getDeviceNo());
                    //演示模式
                    shuttleAction.demo(slave.getId());
                    shuttleAction.demo(deviceConfig.getDeviceNo());
                    Thread.sleep(200);
                } catch (Exception e) {
@@ -155,24 +155,29 @@
                deviceDataLog.setOriginData(JSON.toJSONString(this.originDeviceData));
                deviceDataLog.setWcsData(JSON.toJSONString(shuttleProtocol));
                deviceDataLog.setType(String.valueOf(SlaveType.Shuttle));
                deviceDataLog.setDeviceNo(slave.getId());
                deviceDataLog.setDeviceNo(deviceConfig.getDeviceNo());
                deviceDataLog.setCreateTime(new Date());
                deviceDataLogService.insert(deviceDataLog);
                //更新采集时间
                shuttleProtocol.setDeviceDataLog(System.currentTimeMillis());
                OutputQueue.SHUTTLE.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
                OutputQueue.SHUTTLE.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), deviceConfig.getDeviceNo()));
            }
        }
    }
    private void listenMessageFromRedis() {
        try {
            DeviceMsgUtils deviceMsgUtils = SpringUtils.getBean(DeviceMsgUtils.class);
            DeviceMsgUtils deviceMsgUtils = null;
            try {
                deviceMsgUtils = SpringUtils.getBean(DeviceMsgUtils.class);
            }catch (Exception e){
            }
            if (deviceMsgUtils == null) {
                return;
            }
            DeviceMsgModel deviceMsg = deviceMsgUtils.getDeviceMsg(SlaveType.Shuttle, slave.getId());
            DeviceMsgModel deviceMsg = deviceMsgUtils.getDeviceMsg(SlaveType.Shuttle, deviceConfig.getDeviceNo());
            if(deviceMsg == null){
                return;
            }
@@ -183,54 +188,32 @@
                data.put("originDeviceData", deviceMsg.getDeviceOriginMsg());
                socketReadResults.add(data);
            } else {
                socketResults.add(data);//添加数据
                socketResults.add(deviceMsg);//添加数据
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public JSONObject getRequestBody(String type, String taskId) {
    public JSONObject getRequestBody(String resultKey) {
        try {
            // 获取服务器响应
            JSONObject result = null;
            if (type.equals("readState")) {
                type = "state";
            }
            int idx = -1;
            for (int i = 0; i < socketResults.size(); i++) {
                JSONObject socketResult = socketResults.get(i);
                if (!socketResult.get("msgType").equals("responseMsg")) {//不是响应内容
                    continue;
                }
                JSONObject resultResponse = JSON.parseObject(socketResult.get("response").toString());
                JSONObject resultBody = JSON.parseObject(resultResponse.get("body").toString());
                String responseType = resultBody.get("responseType").toString();
                if (DEBUG) {
                    result = socketResult;
                DeviceMsgModel deviceMsgModel = socketResults.get(i);
                if(deviceMsgModel.getResultKey().equals(resultKey)){
                    idx = i;
                    result = JSON.parseObject(JSON.toJSONString(deviceMsgModel.getDeviceMsg()));
                    break;
                }
                if (!responseType.equals(type)) {
                    continue;//响应类型与请求类型不一致,不在调试模式下
                }
                if (taskId != null) {
                    String responseTaskId = resultBody.get("taskId").toString();
                    if (!responseTaskId.equals(taskId)) {
                        continue;//响应ID与请求ID不一致,不在调试模式下
                    }
                }
                result = socketResult;
                break;
            }
            if (result == null) {
                return null;//无响应结果
            }
            socketResults.remove(idx);
            return filterBodyData(result);//返回Body结果集
        } catch (Exception e) {
            return null;
@@ -241,7 +224,7 @@
        try {
            if (null == shuttleProtocol) {
                shuttleProtocol = new ShuttleProtocol();
                shuttleProtocol.setShuttleNo(slave.getId());
                shuttleProtocol.setShuttleNo(deviceConfig.getDeviceNo());
                shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
                InnerSuhttleExtend extend = new InnerSuhttleExtend();
@@ -259,11 +242,11 @@
                return;
            }
            NyShuttleHttpCommand readStatusCommand = getReadStatusCommand(slave.getId());
            //指令超过五条,不再下发任务状态请求
            TreeSet<String> deviceCommandMsgListKey = deviceMsgUtils.getDeviceCommandMsgListKey(SlaveType.Shuttle, slave.getId());
            if (deviceCommandMsgListKey.size() < 5) {
                requestCommandAsync(readStatusCommand);//请求状态
            NyShuttleHttpCommand readStatusCommand = getReadStatusCommand(deviceConfig.getDeviceNo());
            //指令超过2条,不再下发任务状态请求
            TreeSet<String> deviceCommandMsgListKey = deviceMsgUtils.getDeviceCommandMsgListKey(SlaveType.Shuttle, deviceConfig.getDeviceNo());
            if (deviceCommandMsgListKey.size() < 2) {
                requestCommand(readStatusCommand);//请求状态
            }
            if (this.socketReadResults.isEmpty()) {
@@ -339,10 +322,10 @@
            this.originDeviceData = data.getString("originDeviceData");
            OutputQueue.SHUTTLE.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId()));
            OutputQueue.SHUTTLE.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), deviceConfig.getDeviceNo()));
        } catch (Exception e) {
            e.printStackTrace();
            OutputQueue.SHUTTLE.offer(MessageFormat.format("【{0}】四向穿梭车Socket状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
            OutputQueue.SHUTTLE.offer(MessageFormat.format("【{0}】四向穿梭车Socket状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), deviceConfig.getIp(), deviceConfig.getPort()));
        }
    }
@@ -354,35 +337,38 @@
            // 获取服务器响应
            JSONObject result = null;
            int removeIdx = -1;
            JSONObject socketResult = null;
            for (int i = 0; i < socketResults.size(); i++) {
                JSONObject socketResult = socketResults.get(i);
                if (socketResult == null) {
                DeviceMsgModel deviceMsgModel = socketResults.get(i);
                if (!deviceMsgModel.getDeviceMsgType().equals("shuttleInit")) {
                    continue;
                }
                if (!socketResult.get("msgType").equals("requestMsg")) {//不是请求内容
                    continue;
                }
                removeIdx = i;
                socketResult = JSON.parseObject(JSON.toJSONString(deviceMsgModel.getDeviceMsg()));
                break;
            }
                JSONObject resultResponse = JSON.parseObject(socketResult.get("request").toString());
                JSONObject resultHeader = JSON.parseObject(resultResponse.get("header").toString());
                JSONObject resultBody = JSON.parseObject(resultResponse.get("body").toString());
                String requestType = resultBody.getString("requestType");
                Integer requestId = resultHeader.getInteger("requestId");
                if (requestType.equals("init")) {
                    removeIdx = i;//此数据已经处理,从结果集中剔除
                    socketResults.remove(removeIdx);
            if (socketResult == null) {
                return;
            }
                    Integer code = resultBody.getInteger("code");
                    //小车复位请求
                    ShuttleCommand initCommand = getInitCommand(requestId, code);
                    //发出请求
                    NyShuttleHttpCommand httpCommand = JSON.parseObject(initCommand.getBody(), NyShuttleHttpCommand.class);
                    JSONObject requestResult = requestCommand(httpCommand);
            JSONObject resultResponse = JSON.parseObject(socketResult.get("request").toString());
            JSONObject resultHeader = JSON.parseObject(resultResponse.get("header").toString());
            JSONObject resultBody = JSON.parseObject(resultResponse.get("body").toString());
            String requestType = resultBody.getString("requestType");
            Integer requestId = resultHeader.getInteger("requestId");
            if (requestType.equals("init")) {
                socketResults.remove(removeIdx);
                    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;
                }
                Integer code = resultBody.getInteger("code");
                //小车复位请求
                ShuttleCommand initCommand = getInitCommand(requestId, code);
                //发出请求
                NyShuttleHttpCommand httpCommand = JSON.parseObject(initCommand.getBody(), NyShuttleHttpCommand.class);
                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()));
            }
        } catch (Exception e) {
            e.printStackTrace();
@@ -408,58 +394,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
            String resultKey = requestCommand(httpCommand);
            //查询请求结果
            JSONObject result = queryCommandStatus(resultKey);
            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();
@@ -474,7 +483,9 @@
        try {
            //发出请求
            NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class);
            JSONObject result = requestCommand(httpCommand);
            String resultKey = requestCommand(httpCommand);
            //查询请求结果
            JSONObject result = queryCommandStatus(resultKey);
            if (result == null) {
                return response;//请求失败
            }
@@ -494,7 +505,9 @@
        try {
            //发出请求
            NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class);
            JSONObject result = requestCommand(httpCommand);
            String resultKey = requestCommand(httpCommand);
            //查询请求结果
            JSONObject result = queryCommandStatus(resultKey);
            if (result == null) {
                return response;//请求失败
            }
@@ -522,7 +535,9 @@
        try {
            //发出请求
            NyShuttleHttpCommand httpCommand = JSON.parseObject(command.getBody(), NyShuttleHttpCommand.class);
            JSONObject result = requestCommand(httpCommand);
            String resultKey = requestCommand(httpCommand);
            //查询请求结果
            JSONObject result = queryCommandStatus(resultKey);
            if (result == null) {
                return response;//请求失败
            }
@@ -638,7 +653,7 @@
                if (shuttleService == null) {
                    return false;
                }
                BasShuttle basShuttle = shuttleService.selectOne(new EntityWrapper<BasShuttle>().eq("shuttle_no", slave.getId()));
                BasShuttle basShuttle = shuttleService.selectOne(new EntityWrapper<BasShuttle>().eq("shuttle_no", deviceConfig.getDeviceNo()));
                if (basShuttle == null) {
                    return false;
                }
@@ -871,7 +886,7 @@
    @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);
        NyShuttleHttpCommand httpStandard = getHttpStandard(deviceConfig.getDeviceNo(), taskNo);
        NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest();
        ArrayList<HashMap<String, Object>> path = new ArrayList<>();
@@ -916,7 +931,7 @@
        }
        ShuttleCommand command = new ShuttleCommand();
        command.setShuttleNo(slave.getId());
        command.setShuttleNo(deviceConfig.getDeviceNo());
        command.setBody(JSON.toJSONString(httpStandard));
        command.setMode(ShuttleCommandModeType.MOVE.id);
        command.setTargetLocNo(locMast.getLocNo());
@@ -926,7 +941,7 @@
    @Override
    public ShuttleCommand getLiftCommand(Integer taskNo, Boolean lift) {
        NyShuttleHttpCommand httpStandard = getHttpStandard(slave.getId(), taskNo);
        NyShuttleHttpCommand httpStandard = getHttpStandard(deviceConfig.getDeviceNo(), taskNo);
        NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest();
        Integer taskId = getTaskId();//TaskID需要随机
@@ -938,7 +953,7 @@
        httpStandard.setRequest(request);
        ShuttleCommand command = new ShuttleCommand();
        command.setShuttleNo(slave.getId());
        command.setShuttleNo(deviceConfig.getDeviceNo());
        command.setBody(JSON.toJSONString(httpStandard));
        command.setMode(lift ? ShuttleCommandModeType.PALLET_LIFT.id : ShuttleCommandModeType.PALLET_DOWN.id);
        command.setTaskNo(taskId);
@@ -947,7 +962,7 @@
    @Override
    public ShuttleCommand getChargeCommand(Integer taskNo, Boolean charge) {
        NyShuttleHttpCommand httpStandard = getHttpStandard(slave.getId(), taskNo);
        NyShuttleHttpCommand httpStandard = getHttpStandard(deviceConfig.getDeviceNo(), taskNo);
        NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest();
        Integer taskId = getTaskId();//TaskID需要随机
@@ -959,7 +974,7 @@
        httpStandard.setRequest(request);
        ShuttleCommand command = new ShuttleCommand();
        command.setShuttleNo(slave.getId());
        command.setShuttleNo(deviceConfig.getDeviceNo());
        command.setBody(JSON.toJSONString(httpStandard));
        command.setMode(charge ? ShuttleCommandModeType.CHARGE_OPEN.id : ShuttleCommandModeType.CHARGE_CLOSE.id);
        command.setTaskNo(taskId);
@@ -968,7 +983,7 @@
    @Override
    public ShuttleCommand getUpdateLocationCommand(Integer taskNo, String locNo) {
        NyShuttleHttpCommand httpStandard = getHttpStandard(slave.getId(), taskNo);
        NyShuttleHttpCommand httpStandard = getHttpStandard(deviceConfig.getDeviceNo(), taskNo);
        NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest();
        HashMap<String, Object> body = new HashMap<>();
@@ -979,7 +994,7 @@
        httpStandard.setRequest(request);
        ShuttleCommand command = new ShuttleCommand();
        command.setShuttleNo(slave.getId());
        command.setShuttleNo(deviceConfig.getDeviceNo());
        command.setBody(JSON.toJSONString(httpStandard));
        command.setMode(ShuttleCommandModeType.UPDATE_LOCATION.id);
        command.setTaskNo(taskNo);
@@ -990,7 +1005,7 @@
    public ShuttleCommand getInitCommand(Integer taskNo, Integer code) {
        LocMastService locMastService = SpringUtils.getBean(LocMastService.class);
        NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class);
        NyShuttleHttpCommand httpStandard = getHttpStandard(slave.getId(), taskNo);
        NyShuttleHttpCommand httpStandard = getHttpStandard(deviceConfig.getDeviceNo(), taskNo);
        NyShuttleHttpCommand.NyRequest request = httpStandard.getRequest();
        //code -> {Integer@13781} 1101101
@@ -1031,7 +1046,7 @@
        httpStandard.setRequest(request);
        ShuttleCommand command = new ShuttleCommand();
        command.setShuttleNo(slave.getId());
        command.setShuttleNo(deviceConfig.getDeviceNo());
        command.setBody(JSON.toJSONString(httpStandard));
        command.setMode(ShuttleCommandModeType.RESET.id);
        command.setTaskNo(taskNo);
@@ -1092,8 +1107,8 @@
        return httpStandard;
    }
    //发出请求-同步
    private JSONObject requestCommand(NyShuttleHttpCommand httpCommand) throws IOException {
    //发出请求
    private String requestCommand(NyShuttleHttpCommand httpCommand) throws IOException {
        try {
            DeviceMsgUtils deviceMsgUtils = SpringUtils.getBean(DeviceMsgUtils.class);
            if (deviceMsgUtils == null) {
@@ -1105,73 +1120,34 @@
            data.remove("nodes");
            DeviceCommandMsgModel commandMsgModel = new DeviceCommandMsgModel();
            commandMsgModel.setDeviceId(slave.getId());
            commandMsgModel.setDeviceId(deviceConfig.getDeviceNo());
            commandMsgModel.setDeviceType(String.valueOf(SlaveType.Shuttle));
            commandMsgModel.setCommand(data);
            String key = deviceMsgUtils.sendDeviceCommand(SlaveType.Shuttle, slave.getId(), 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可能取空,不报错,正常情况
            }
            // 获取服务器响应
            // 尝试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结果集
            String key = deviceMsgUtils.sendDeviceCommand(SlaveType.Shuttle, deviceConfig.getDeviceNo(), commandMsgModel);
            return key;
        }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 resultKey) {
        // 获取服务器响应
        // 尝试50次
        JSONObject result = null;
        for (int i = 0; i < 50; i++) {
            result = getRequestBody(resultKey);
            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(slave.getId());
            commandMsgModel.setDeviceType(String.valueOf(SlaveType.Shuttle));
            commandMsgModel.setCommand(data);
            String key = deviceMsgUtils.sendDeviceCommand(SlaveType.Shuttle, slave.getId(), 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) {