From f531a7a3ee28d76316ea8803a5be48168c520823 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 20 九月 2023 09:46:18 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/thread/NyShuttleThread.java | 125 +++++++++++++++++++++++++++++++++--------
1 files changed, 100 insertions(+), 25 deletions(-)
diff --git a/src/main/java/com/zy/core/thread/NyShuttleThread.java b/src/main/java/com/zy/core/thread/NyShuttleThread.java
index 1ab039c..ab325f7 100644
--- a/src/main/java/com/zy/core/thread/NyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/NyShuttleThread.java
@@ -28,6 +28,8 @@
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
+import java.io.IOException;
+import java.net.Socket;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Date;
@@ -43,6 +45,7 @@
private ShuttleSlave slave;
private NyShuttleProtocol shuttleProtocol;
private RedisUtil redisUtil;
+ private Socket socket;
public NyShuttleThread(ShuttleSlave slave,RedisUtil redisUtil) {
this.slave = slave;
@@ -84,6 +87,10 @@
private void read() {
try {
+ if (this.socket == null || this.socket.isClosed()) {
+ //閾炬帴鏂紑閲嶆柊閾炬帴
+ this.connect();
+ }
readStatus();
//鍥涘悜绌挎杞︾┖闂层�佹湁浠诲姟銆佹爣璁颁负true銆佸瓨鍦ㄤ换鍔℃寚浠わ紝闇�瑕佹墽琛屼换鍔$殑涓嬩竴鏉℃寚浠�
if (shuttleProtocol.getFree() == ShuttleStatusType.IDLE.id
@@ -108,9 +115,10 @@
//----------璇诲彇鍥涘悜绌挎杞︾姸鎬�-----------
NyShuttleHttpCommand readStatusCommand = NyHttpUtils.getReadStatusCommand(slave.getId());
- JSONObject jsonObject = NyHttpUtils.requestCommand(readStatusCommand);
+ JSONObject jsonObject = NyHttpUtils.requestCommand(socket, readStatusCommand);
if (jsonObject == null) {
- OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ 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 {
//鎵嬪姩鐘舵��/鑷姩鐘舵��
shuttleProtocol.setWorkingMode(jsonObject.getInteger("workingMode"));
@@ -159,7 +167,7 @@
errCode.add(Integer.parseInt(o.toString()));
}
//鏁呴殰鐮�
- shuttleProtocol.setErrCode(errCode);
+ shuttleProtocol.setErrCode(errCode.get(0));
//鎬婚噷绋嬫暟
shuttleProtocol.setStatusSum(jsonObject.getObject("statusSum", NyShuttleProtocol.StatusSumClass.class));
//闈炶嚜鍔ㄧ姸鎬佹椂闂磋鏃�
@@ -236,12 +244,29 @@
}
} 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();
+ }
}
}
@Override
public boolean connect() {
+ 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()));
+ }
return true;
}
@@ -268,7 +293,21 @@
}
//鍙戝嚭璇锋眰
- JSONObject result = NyHttpUtils.requestCommand(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;//璇锋眰澶辫触
}
@@ -343,6 +382,23 @@
//涓婁竴鏉′换鍔℃湭瀹屾垚锛岀姝笅鍙戝懡浠�
return false;
}
+
+ //鍒ゆ柇鏄惁涓烘渶鍚庝竴鏉″懡浠や笖鍛戒护鎵ц瀹屾垚锛屾姏鍑虹瓑寰呯‘璁ょ姸鎬�
+ NyShuttleHttpCommand endCommand = commands.get(commands.size() - 1);
+ if (endCommand.getComplete()) {
+ //鍒犻櫎redis
+ redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo());
+
+ if (!assignCommand.getCharge()) {
+ //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting
+ shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING);
+ }else {
+ shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING);
+ }
+ News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屼笅鍙戝畬鎴愮瓑寰呮墽琛岀粨鏉燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
+
+ return false;//绂佹鍐嶄笅鍙戝懡浠�
+ }
}
List<NavigateNode> nextNodes = null;//涓嬩竴姝ュ懡浠よ璧拌矾寰�
@@ -355,10 +411,10 @@
return false;//灏忚溅鐘舵�佸繖锛岀姝㈡墽琛屽懡浠�
}
- //妫�娴嬪皬杞︽槸鍚﹁杩涙彁鍗囨満锛屽闇�瑕佽繘鎻愬崌鏈哄垯璋冨害鎻愬崌鏈�
- if (!checkLiftStation(wrkNo)) {
- return false;
- }
+// //妫�娴嬪皬杞︽槸鍚﹁杩涙彁鍗囨満锛屽闇�瑕佽繘鎻愬崌鏈哄垯璋冨害鎻愬崌鏈�
+// if (!checkLiftStation(wrkNo)) {
+// return false;
+// }
//妫�娴嬬┛姊溅鏄惁鍦ㄦ彁鍗囨満鍐�
if (!checkShuttleInTheLift(wrkNo)) {
@@ -372,7 +428,9 @@
//閿佸畾璺緞锛岄攣瀹氬綋鍓嶈矾寰勫拰涓嬩竴姝ヨ矾寰�
List<NavigateNode> nodes = command.getNodes();
- nodes.addAll(nextNodes);
+ if (nextNodes != null) {
+ nodes.addAll(nextNodes);
+ }
navigateMapData.writeNavigateNodeToRedisMap(nodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
//鍙墽琛屽懡浠�
@@ -399,7 +457,8 @@
null,
null,
JSON.toJSONString(command),
- null
+ null,
+ JSON.toJSONString(shuttleProtocol)
);
shuttleOptService.insert(opt);
}
@@ -415,16 +474,21 @@
}else {
//宸叉墽琛屽畬鎴�
- //鍒犻櫎redis
- redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo());
-
- if (!assignCommand.getCharge()) {
- //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting
- shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING);
- }else {
- shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING);
- }
- News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屼笅鍙戝畬鎴愮瓑寰呮墽琛岀粨鏉燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
+ commandStep++;
+// //鏈�鍚庝竴娈靛懡浠や负绉诲姩鍛戒护锛屽垯鏆傜紦鍒犻櫎redis绛夊緟娓呴櫎璺緞鏃朵竴娆℃�у垹闄�
+// //鏈�鍚庝竴娈靛懡浠や负涓嶆槸绉诲姩鍛戒护锛屽垯鍒犻櫎redis
+// if (!command.getRequest().getBody().get("requestType").equals("move")) {
+// //鍒犻櫎redis
+// redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo());
+// }
+//
+// if (!assignCommand.getCharge()) {
+// //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting
+// shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING);
+// }else {
+// shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING);
+// }
+// News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屼笅鍙戝畬鎴愮瓑寰呮墽琛岀粨鏉燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
}
return true;
@@ -533,7 +597,9 @@
if (basLift == null) {
continue;
}
- if (basLift.getPoint().equals(shuttleProtocol.getPoint())) {
+ Integer liftX = basLift.getPoint$().getX();
+ Integer liftY = basLift.getPoint$().getY();
+ if (liftX.equals(shuttleProtocol.getPoint().getX()) && liftY.equals(shuttleProtocol.getPoint().getY())) {
//灏忚溅鍦ㄦ彁鍗囨満鍐�
//鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
@@ -548,6 +614,8 @@
//鎻愬崌鏈哄浜庣┖闂诧紝鏀捐
return true;
}
+ }else {
+ return true;//涓嶅湪鎻愬崌鏈哄唴锛屾斁琛�
}
}
return false;//榛樿涓嶆斁琛�
@@ -561,9 +629,16 @@
//妫�娴嬭矾寰勬槸鍚﹀彲琛岃蛋(妫�鏌ヨ矾寰勯攣瀹氱姸鎬侊紝妫�娴嬭矾寰勬槸鍚︽湁鍏朵粬灏忚溅)
//妫�娴嬪綋鍓嶈璧拌矾寰勶紝鍜屼笅涓�姝ヨ矾寰�
boolean checkPathIsAvailable = NavigateUtils.checkPathIsAvailable(currentNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(shuttleProtocol.getCurrentLocNo()));
- boolean checkPathIsAvailable2 = NavigateUtils.checkPathIsAvailable(nextNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(shuttleProtocol.getCurrentLocNo()));
- if (checkPathIsAvailable && checkPathIsAvailable2) {
- return true;//鍙璧�
+ if (nextNodes == null) {
+ if (checkPathIsAvailable) {
+ return true;//鍙璧�
+ }
+ return false;
+ }else {
+ boolean checkPathIsAvailable2 = NavigateUtils.checkPathIsAvailable(nextNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(shuttleProtocol.getCurrentLocNo()));
+ if (checkPathIsAvailable && checkPathIsAvailable2) {
+ return true;//鍙璧�
+ }
}
ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand();
--
Gitblit v1.9.1