|  |  | 
 |  |  |             while (true) { | 
 |  |  |                 try { | 
 |  |  |                     listenSocketMessage(); | 
 |  |  |                     listenInit();//监听初始化事件 | 
 |  |  |                 } catch (Exception e) { | 
 |  |  |                     e.printStackTrace(); | 
 |  |  |                 } | 
 |  |  | 
 |  |  |         Thread otherThread = new Thread(() -> { | 
 |  |  |             while (true) { | 
 |  |  |                 try { | 
 |  |  |                     listenInit();//监听初始化事件 | 
 |  |  |                     saveLog();//保存数据 | 
 |  |  |                 } catch (Exception e) { | 
 |  |  |                     e.printStackTrace(); | 
 |  |  | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         if (System.currentTimeMillis() - shuttleProtocol.getDeviceDataLog() > 1000 * 5) { | 
 |  |  |         if (System.currentTimeMillis() - shuttleProtocol.getDeviceDataLog() > 1000 * 1) { | 
 |  |  |             if (this.originDeviceData != null) { | 
 |  |  |                 //采集时间超过5s,保存一次数据记录 | 
 |  |  |                 //保存数据记录 | 
 |  |  | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             JSONObject result = JSON.parseObject(sb.toString());//得到响应结果集 | 
 |  |  |             if (result.containsKey("workingMode")) { | 
 |  |  |                 //read | 
 |  |  |                 socketReadResults.add(result); | 
 |  |  |             }else { | 
 |  |  |                 if (!socketResults.isEmpty() && socketResults.size() >= 20) { | 
 |  |  |                     socketResults.remove(0);//清理头节点 | 
 |  |  |  | 
 |  |  |             String msgType = result.getString("msgType"); | 
 |  |  |             if ("responseMsg".equals(msgType)) { | 
 |  |  |                 JSONObject response = result.getJSONObject("response"); | 
 |  |  |                 JSONObject body = response.getJSONObject("body"); | 
 |  |  |                 if (body.containsKey("workingMode")) { | 
 |  |  |                     //read | 
 |  |  |                     socketReadResults.add(body); | 
 |  |  |                     return; | 
 |  |  |                 } | 
 |  |  |                 socketResults.add(result);//添加数据 | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             if (!socketResults.isEmpty() && socketResults.size() >= 20) { | 
 |  |  |                 socketResults.remove(0);//清理头节点 | 
 |  |  |             } | 
 |  |  |             socketResults.add(result);//添加数据 | 
 |  |  |         } catch (Exception e) { | 
 |  |  | //            e.printStackTrace(); | 
 |  |  |         } | 
 |  |  | 
 |  |  |             requestCommandAsync(readStatusCommand);//请求状态 | 
 |  |  |  | 
 |  |  |             if (this.socketReadResults.isEmpty()) { | 
 |  |  |                 if (System.currentTimeMillis() - shuttleProtocol.getLastOnlineTime() > 1000 * 60) { | 
 |  |  |                     //最后一次上线时间超过60s,认定离线 | 
 |  |  |                     this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE); | 
 |  |  |                     OutputQueue.SHUTTLE.offer(MessageFormat.format("【{0}】四向穿梭车离线了1 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); | 
 |  |  |                 } | 
 |  |  |                 return; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  | 
 |  |  |             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}】四向穿梭车离线了2 ===>> [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()), slave.getId(), slave.getIp(), slave.getPort())); | 
 |  |  |             }else { | 
 |  |  | 
 |  |  |                     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; | 
 |  |  | 
 |  |  |                 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); | 
 |  |  | 
 |  |  |                     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(); | 
 |  |  | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         if (this.shuttleProtocol.getMode() == 0) { | 
 |  |  |             return true; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         if (!this.shuttleProtocol.getErrorCode().equals("0")) { | 
 |  |  |             return true; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         InnerSuhttleExtend extend = (InnerSuhttleExtend) this.shuttleProtocol.getExtend(); | 
 |  |  |         boolean res = this.shuttleProtocol.getMode() == 0 | 
 |  |  |                 && !this.shuttleProtocol.getErrorCode().equals("0") | 
 |  |  |                 && extend.getSuspendState() == 1 | 
 |  |  |                 ; | 
 |  |  |         return res; | 
 |  |  |  | 
 |  |  |         if (extend.getSuspendState() == 1) { | 
 |  |  |             return true; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return false; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  | 
 |  |  |             data.put("xp", xp); | 
 |  |  |             data.put("yp", yp); | 
 |  |  |             data.put("z", z); | 
 |  |  |             data.put("x", mapNode.getXBase()); | 
 |  |  |             data.put("y", mapNode.getYBase()); | 
 |  |  |             data.put("x", mapNode.getYBase()); | 
 |  |  |             data.put("y", mapNode.getXBase()); | 
 |  |  |             path.add(data); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | 
 |  |  |         location.put("xp", row); | 
 |  |  |         location.put("yp", bay); | 
 |  |  |         location.put("z", lev); | 
 |  |  |         location.put("x", mapNode.getXBase()); | 
 |  |  |         location.put("y", mapNode.getYBase()); | 
 |  |  |         location.put("x", mapNode.getYBase()); | 
 |  |  |         location.put("y", mapNode.getXBase()); | 
 |  |  |  | 
 |  |  |         HashMap<String, Object> body = new HashMap<>(); | 
 |  |  |         body.put("responseType", "init");//复位 |