From 5dcd40b2afb66e82b5e9f0b94fb0816d1d468fc4 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 06 九月 2023 10:26:39 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/thread/NyShuttleThread.java | 151 +++++++++++++++++++++++++++++--------------------
1 files changed, 89 insertions(+), 62 deletions(-)
diff --git a/src/main/java/com/zy/core/thread/NyShuttleThread.java b/src/main/java/com/zy/core/thread/NyShuttleThread.java
index 687766c..2baf4d6 100644
--- a/src/main/java/com/zy/core/thread/NyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/NyShuttleThread.java
@@ -87,6 +87,10 @@
private void read() {
try {
+ if (this.socket == null || this.socket.isClosed()) {
+ //閾炬帴鏂紑閲嶆柊閾炬帴
+ this.connect();
+ }
readStatus();
//鍥涘悜绌挎杞︾┖闂层�佹湁浠诲姟銆佹爣璁颁负true銆佸瓨鍦ㄤ换鍔℃寚浠わ紝闇�瑕佹墽琛屼换鍔$殑涓嬩竴鏉℃寚浠�
if (shuttleProtocol.getFree() == ShuttleStatusType.IDLE.id
@@ -111,11 +115,10 @@
//----------璇诲彇鍥涘悜绌挎杞︾姸鎬�-----------
NyShuttleHttpCommand readStatusCommand = NyHttpUtils.getReadStatusCommand(slave.getId());
- JSONObject result = NyHttpUtils.requestCommand(socket, readStatusCommand);
- if (result == null) {
- OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ JSONObject jsonObject = NyHttpUtils.requestCommand(socket, readStatusCommand);
+ if (jsonObject == null) {
+ OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
}else {
- JSONObject jsonObject = NyHttpUtils.filterData(result);
//鎵嬪姩鐘舵��/鑷姩鐘舵��
shuttleProtocol.setWorkingMode(jsonObject.getInteger("workingMode"));
//鍏佽鐘舵�� 0:杩愯涓�1锛氱┖闂�
@@ -240,7 +243,15 @@
}
} catch (Exception e) {
e.printStackTrace();
- OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅plc鐘舵�佷俊鎭け璐� ===>> [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()));
+ try {
+ this.socket.close();
+ this.socket = null;
+ Thread.sleep(1000);
+ this.connect();
+ } catch (IOException | InterruptedException exception) {
+ e.printStackTrace();
+ }
}
}
@@ -249,7 +260,9 @@
try {
Socket socket = new Socket(slave.getIp(),slave.getPort());
socket.setSoTimeout(60000);
+ socket.setKeepAlive(true);
this.socket = socket;
+ log.info(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket閾炬帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
} catch (IOException e) {
OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket閾炬帴澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
}
@@ -279,7 +292,21 @@
}
//鍙戝嚭璇锋眰
- JSONObject result = NyHttpUtils.requestCommand(socket, command);
+ JSONObject result = null;
+ try {
+ result = NyHttpUtils.requestCommand(socket, command);
+ } catch (IOException e) {
+ try {
+ this.socket.close();
+ this.socket = null;
+ Thread.sleep(1000);
+ this.connect();
+ } catch (IOException exception) {
+ exception.printStackTrace();
+ } catch (InterruptedException ex) {
+ throw new RuntimeException(ex);
+ }
+ }
if (result == null) {
return false;//璇锋眰澶辫触
}
@@ -329,62 +356,62 @@
NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(shuttleProtocol.getCurrentLocNo()));
//鍙栧嚭鍛戒护
NyShuttleHttpCommand command = commands.get(commandStep);//褰撳墠鍛戒护
-// if (commandStep != 0) {
-// //鍒ゆ柇涓婁竴鏉℃寚浠ゆ槸鍚﹀畬鎴�
-// NyShuttleHttpCommand lastCommand = commands.get(commandStep - 1);
-// String requestType = lastCommand.getRequest().getBody().get("requestType").toString();
-// if (requestType.equals("move") || requestType.equals("intoLift") || requestType.equals("outLift")) {
-// //绉诲姩鍛戒护銆佸嚭鍏ユ彁鍗囨満鍛戒护
-// NyShuttleProtocol.NyShuttlePointClass target = JSON.parseObject(lastCommand.getRequest().getBody().get("target").toString(), NyShuttleProtocol.NyShuttlePointClass.class);
-// if (shuttleProtocol.getPoint().equals(target)) {
-// //涓婁竴鏉℃寚浠ょ殑鐩爣浣嶇疆鍜屽綋鍓嶅皬杞︿綅缃浉鍚岋紝鍒欒瀹氫笂涓�鏉′换鍔″畬鎴�
-// lastCommand.setComplete(true);
-// //瑙i攣閿佸畾璺緞锛屼笂涓�鏉¤矾寰勫拰褰撳墠璺緞
-// List<NavigateNode> nodes = lastCommand.getNodes();
-// nodes.addAll(command.getNodes());
-// navigateMapData.writeNavigateNodeToRedisMap(nodes, false);//瑙i攣璺緞
-// }
-// }else {
-// lastCommand.setComplete(true);//鍏朵粬鍛戒护榛樿璁や负瀹屾垚
-// }
-// //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-// redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
-//
-// if (!lastCommand.getComplete()) {
-// //涓婁竴鏉′换鍔℃湭瀹屾垚锛岀姝笅鍙戝懡浠�
-// return false;
-// }
-// }
-//
-// List<NavigateNode> nextNodes = null;//涓嬩竴姝ュ懡浠よ璧拌矾寰�
-// if (commandStep + 1 < commands.size()) {
-// NyShuttleHttpCommand nextCommand = commands.get(commandStep + 1);//涓嬩竴姝ュ懡浠�
-// nextNodes = nextCommand.getNodes();//涓嬩竴姝ュ懡浠よ璧拌矾寰�
-// }
-//
-// if (shuttleProtocol.getFree() == ShuttleStatusType.BUSY.id) {
-// return false;//灏忚溅鐘舵�佸繖锛岀姝㈡墽琛屽懡浠�
-// }
-//
-// //妫�娴嬪皬杞︽槸鍚﹁杩涙彁鍗囨満锛屽闇�瑕佽繘鎻愬崌鏈哄垯璋冨害鎻愬崌鏈�
-// if (!checkLiftStation(wrkNo)) {
-// return false;
-// }
-//
-// //妫�娴嬬┛姊溅鏄惁鍦ㄦ彁鍗囨満鍐�
-// if (!checkShuttleInTheLift(wrkNo)) {
-// return false;
-// }
-//
-// //妫�娴嬭矾寰勬槸鍚﹀彲琛岃蛋
-// if (!checkPath(command.getNodes(), nextNodes, redisCommand)) {
-// return false;
-// }
-//
-// //閿佸畾璺緞锛岄攣瀹氬綋鍓嶈矾寰勫拰涓嬩竴姝ヨ矾寰�
-// List<NavigateNode> nodes = command.getNodes();
-// nodes.addAll(nextNodes);
-// navigateMapData.writeNavigateNodeToRedisMap(nodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+ if (commandStep != 0) {
+ //鍒ゆ柇涓婁竴鏉℃寚浠ゆ槸鍚﹀畬鎴�
+ NyShuttleHttpCommand lastCommand = commands.get(commandStep - 1);
+ String requestType = lastCommand.getRequest().getBody().get("requestType").toString();
+ if (requestType.equals("move") || requestType.equals("intoLift") || requestType.equals("outLift")) {
+ //绉诲姩鍛戒护銆佸嚭鍏ユ彁鍗囨満鍛戒护
+ NyShuttleProtocol.NyShuttlePointClass target = JSON.parseObject(lastCommand.getRequest().getBody().get("target").toString(), NyShuttleProtocol.NyShuttlePointClass.class);
+ if (shuttleProtocol.getPoint().equals(target)) {
+ //涓婁竴鏉℃寚浠ょ殑鐩爣浣嶇疆鍜屽綋鍓嶅皬杞︿綅缃浉鍚岋紝鍒欒瀹氫笂涓�鏉′换鍔″畬鎴�
+ lastCommand.setComplete(true);
+ //瑙i攣閿佸畾璺緞锛屼笂涓�鏉¤矾寰勫拰褰撳墠璺緞
+ List<NavigateNode> nodes = lastCommand.getNodes();
+ nodes.addAll(command.getNodes());
+ navigateMapData.writeNavigateNodeToRedisMap(nodes, false);//瑙i攣璺緞
+ }
+ }else {
+ lastCommand.setComplete(true);//鍏朵粬鍛戒护榛樿璁や负瀹屾垚
+ }
+ //浠诲姟鏁版嵁淇濆瓨鍒皉edis
+ redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
+
+ if (!lastCommand.getComplete()) {
+ //涓婁竴鏉′换鍔℃湭瀹屾垚锛岀姝笅鍙戝懡浠�
+ return false;
+ }
+ }
+
+ List<NavigateNode> nextNodes = null;//涓嬩竴姝ュ懡浠よ璧拌矾寰�
+ if (commandStep + 1 < commands.size()) {
+ NyShuttleHttpCommand nextCommand = commands.get(commandStep + 1);//涓嬩竴姝ュ懡浠�
+ nextNodes = nextCommand.getNodes();//涓嬩竴姝ュ懡浠よ璧拌矾寰�
+ }
+
+ if (shuttleProtocol.getFree() == ShuttleStatusType.BUSY.id) {
+ return false;//灏忚溅鐘舵�佸繖锛岀姝㈡墽琛屽懡浠�
+ }
+
+ //妫�娴嬪皬杞︽槸鍚﹁杩涙彁鍗囨満锛屽闇�瑕佽繘鎻愬崌鏈哄垯璋冨害鎻愬崌鏈�
+ if (!checkLiftStation(wrkNo)) {
+ return false;
+ }
+
+ //妫�娴嬬┛姊溅鏄惁鍦ㄦ彁鍗囨満鍐�
+ if (!checkShuttleInTheLift(wrkNo)) {
+ return false;
+ }
+
+ //妫�娴嬭矾寰勬槸鍚﹀彲琛岃蛋
+ if (!checkPath(command.getNodes(), nextNodes, redisCommand)) {
+ return false;
+ }
+
+ //閿佸畾璺緞锛岄攣瀹氬綋鍓嶈矾寰勫拰涓嬩竴姝ヨ矾寰�
+ List<NavigateNode> nodes = command.getNodes();
+ nodes.addAll(nextNodes);
+ navigateMapData.writeNavigateNodeToRedisMap(nodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
//鍙墽琛屽懡浠�
if (!write(command)) {
--
Gitblit v1.9.1