From a37eb3393b65933105a6f23a1713a2b14b835d16 Mon Sep 17 00:00:00 2001 From: Junjie <xjj@123> Date: 星期五, 23 五月 2025 12:53:27 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/thread/impl/NyShuttleThread.java | 166 ++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 104 insertions(+), 62 deletions(-) diff --git a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java index 7389d1d..126281a 100644 --- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java +++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java @@ -78,6 +78,7 @@ while (true) { try { listenSocketMessage(); + listenInit();//鐩戝惉鍒濆鍖栦簨浠� } catch (Exception e) { e.printStackTrace(); } @@ -136,7 +137,6 @@ Thread otherThread = new Thread(() -> { while (true) { try { - listenInit();//鐩戝惉鍒濆鍖栦簨浠� saveLog();//淇濆瓨鏁版嵁 } catch (Exception e) { e.printStackTrace(); @@ -195,16 +195,22 @@ } JSONObject result = JSON.parseObject(sb.toString());//寰楀埌鍝嶅簲缁撴灉闆� + + 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; + } + } + if (!socketResults.isEmpty() && socketResults.size() >= 20) { socketResults.remove(0);//娓呯悊澶磋妭鐐� } - - if (result.containsKey("workingMode")) { - //read - socketReadResults.add(result); - }else { - socketResults.add(result);//娣诲姞鏁版嵁 - } + socketResults.add(result);//娣诲姞鏁版嵁 } catch (Exception e) { // e.printStackTrace(); } @@ -286,6 +292,10 @@ requestCommandAsync(readStatusCommand);//璇锋眰鐘舵�� if (this.socketReadResults.isEmpty()) { + if (System.currentTimeMillis() - shuttleProtocol.getLastOnlineTime() > 1000 * 60) { + //鏈�鍚庝竴娆′笂绾挎椂闂磋秴杩�60s锛岃瀹氱绾� + this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE); + } return; } @@ -294,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 { @@ -351,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; @@ -397,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); @@ -404,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(); @@ -710,6 +721,19 @@ } } + //***************鍒ゆ柇鏄惁婊″厖鏍″噯*************** + Config shuttleMaxPowerVerifyConfig = configService.selectOne(new EntityWrapper<Config>() + .eq("code", "shuttleMaxPowerVerify") + .eq("status", 1)); + if (shuttleMaxPowerVerifyConfig != null) { + if (shuttleMaxPowerVerifyConfig.getValue().equals("true")) { + if (this.shuttleProtocol.getBatteryVoltage() < 5630) { + return false;//鐢靛帇涓嶅缁х画鍏呯數 + } + } + } + //***************鍒ゆ柇鏄惁婊″厖鏍″噯*************** + if (this.shuttleProtocol.getHasCharge() == null) { return false; } @@ -737,12 +761,21 @@ 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 @@ -1098,46 +1131,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 { @@ -1145,15 +1183,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) { -- Gitblit v1.9.1