From 7270218a6c55de1a0e8431afe4119793ef518d50 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期六, 05 七月 2025 09:02:50 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/thread/impl/NyShuttleThread.java | 193 ++++++++++++++++++++++++------------------------
src/main/java/com/zy/core/utils/DeviceMsgUtils.java | 18 +--
src/main/java/com/zy/core/thread/ShuttleThread.java | 3
src/main/java/com/zy/core/model/DeviceCommandMsgModel.java | 14 +++
src/main/java/com/zy/core/model/DeviceMsgModel.java | 4 +
src/main/java/com/zy/core/thread/impl/NyShuttleThread2.java | 5 +
src/main/java/com/zy/asrs/controller/DeviceMsgController.java | 2
7 files changed, 130 insertions(+), 109 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/DeviceMsgController.java b/src/main/java/com/zy/asrs/controller/DeviceMsgController.java
index 443dd78..63114c9 100644
--- a/src/main/java/com/zy/asrs/controller/DeviceMsgController.java
+++ b/src/main/java/com/zy/asrs/controller/DeviceMsgController.java
@@ -2,7 +2,7 @@
import com.core.common.R;
import com.zy.asrs.domain.param.DeviceMsgPutParam;
-import com.zy.core.Utils.DeviceMsgUtils;
+import com.zy.core.utils.DeviceMsgUtils;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.DeviceMsgModel;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/src/main/java/com/zy/core/model/DeviceCommandMsgModel.java b/src/main/java/com/zy/core/model/DeviceCommandMsgModel.java
new file mode 100644
index 0000000..0e44755
--- /dev/null
+++ b/src/main/java/com/zy/core/model/DeviceCommandMsgModel.java
@@ -0,0 +1,14 @@
+package com.zy.core.model;
+
+import lombok.Data;
+
+@Data
+public class DeviceCommandMsgModel {
+
+ private Integer deviceId;
+
+ private String deviceType;
+
+ private Object command;
+
+}
diff --git a/src/main/java/com/zy/core/model/DeviceMsgModel.java b/src/main/java/com/zy/core/model/DeviceMsgModel.java
index 4895346..ecabe4f 100644
--- a/src/main/java/com/zy/core/model/DeviceMsgModel.java
+++ b/src/main/java/com/zy/core/model/DeviceMsgModel.java
@@ -7,6 +7,10 @@
private Integer deviceId;
+ private String deviceMsgType;
+
private Object deviceMsg;
+ private String deviceOriginMsg;
+
}
diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java
index 993d0d1..34776f0 100644
--- a/src/main/java/com/zy/core/thread/ShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/ShuttleThread.java
@@ -1,6 +1,7 @@
package com.zy.core.thread;
+import com.alibaba.fastjson.JSONObject;
import com.zy.common.ExecuteSupport;
import com.zy.common.model.NavigateNode;
import com.zy.core.ThreadHandler;
@@ -67,6 +68,8 @@
boolean offerSystemMsg(String format, Object... arguments);
+ JSONObject parseStatusToMsg(ShuttleProtocol shuttleProtocol);
+
//***************鑾峰彇鍛戒护*****************
ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes);//鑾峰彇绉诲姩鍛戒护
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 12d4ac3..9d139e2 100644
--- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
@@ -22,7 +22,8 @@
import com.zy.common.utils.NavigatePositionConvert;
import com.zy.common.utils.RedisUtil;
import com.zy.core.News;
-import com.zy.core.Utils.DeviceMsgUtils;
+import com.zy.core.model.DeviceCommandMsgModel;
+import com.zy.core.utils.DeviceMsgUtils;
import com.zy.core.action.ShuttleAction;
import com.zy.core.cache.OutputQueue;
import com.zy.core.enums.*;
@@ -75,7 +76,7 @@
try {
listenMessageFromRedis();
listenInit();//鐩戝惉鍒濆鍖栦簨浠�
- read();
+ readStatus();
Thread.sleep(100);
} catch (Exception e) {
log.error("ShuttleThread Fail", e);
@@ -175,25 +176,17 @@
if(deviceMsg == null){
return;
}
- JSONObject result = JSON.parseObject(deviceMsg.getDeviceMsg().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;
- }
- }
+ JSONObject data = JSON.parseObject(JSON.toJSONString(deviceMsg.getDeviceMsg()));
- if (!socketResults.isEmpty() && socketResults.size() >= 20) {
- socketResults.remove(0);//娓呯悊澶磋妭鐐�
+ if (deviceMsg.getDeviceMsgType().equals("status")) {
+ data.put("originDeviceData", deviceMsg.getDeviceOriginMsg());
+ socketReadResults.add(data);
+ } else {
+ socketResults.add(data);//娣诲姞鏁版嵁
}
- socketResults.add(result);//娣诲姞鏁版嵁
} catch (Exception e) {
-// e.printStackTrace();
+ e.printStackTrace();
}
}
@@ -244,15 +237,6 @@
}
}
- private void read() {
- try {
- readStatus();
- } catch (Exception e) {
- e.printStackTrace();
- OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戣鍙栧洓鍚戠┛姊溅鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
- }
- }
-
private void readStatus() {
try {
if (null == shuttleProtocol) {
@@ -292,79 +276,70 @@
JSONObject data = this.socketReadResults.get(0);
this.socketReadResults.remove(0);
- if (data == null) {
- if (System.currentTimeMillis() - shuttleProtocol.getLastOnlineTime() > 1000 * 60) {
- //鏈�鍚庝竴娆′笂绾挎椂闂磋秴杩�60s锛岃瀹氱绾�
- 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 {
+ //----------璇诲彇鍥涘悜绌挎杞︾姸鎬�-----------
+ //灏忚溅璁惧鐘舵��
+ shuttleProtocol.setDeviceStatus(data.getInteger("deviceStatus"));
+ //灏忚溅妯″紡
+ shuttleProtocol.setMode(data.getInteger("mode"));
+ //褰撳墠浜岀淮鐮�
+ shuttleProtocol.setCurrentCode(data.getString("currentCode"));
+ //鐢垫睜鐢甸噺
+ shuttleProtocol.setBatteryPower(data.getString("batteryPower"));
+ //鐢垫睜鐢靛帇
+ shuttleProtocol.setBatteryVoltage(data.getInteger("batteryVoltage"));
+ //鏁呴殰
+ shuttleProtocol.setErrorCode(data.getString("errorCode"));
+ //鏄惁椤跺崌
+ shuttleProtocol.setHasLift(data.getBoolean("hasLift"));
+ //鏄惁鏈夋墭鐩�
+ shuttleProtocol.setHasPallet(data.getBoolean("hasPallet"));
+ //琛岄┒鏂瑰悜
+ shuttleProtocol.setRunDirection(data.getString("runDirection"));
+ //鏄惁涓哄厖鐢电姸鎬�
+ shuttleProtocol.setHasCharge(data.getBoolean("hasCharge"));
+ //杩愯閫熷害
+ shuttleProtocol.setSpeed(data.getInteger("speed"));
- //----------璇诲彇鍥涘悜绌挎杞︾姸鎬�-----------
- //灏忚溅璁惧鐘舵��
- shuttleProtocol.setDeviceStatus(data.getInteger("free"));
- //灏忚溅妯″紡
- shuttleProtocol.setMode(data.getInteger("workingMode"));
- //褰撳墠浜岀淮鐮�
- shuttleProtocol.setCurrentCode(data.getString("point"));
- //鐢垫睜鐢甸噺
- shuttleProtocol.setBatteryPower(data.getString("powerPercent"));
- //鐢垫睜鐢靛帇
- shuttleProtocol.setBatteryVoltage(data.getInteger("voltage"));
- //鏁呴殰
- shuttleProtocol.setErrorCode(data.getJSONArray("errCode").getString(0));
+ //*********璇诲彇鎵╁睍瀛楁**********
+ JSONObject extendData = data.getJSONObject("extend");
+ InnerSuhttleExtend extend = (InnerSuhttleExtend) shuttleProtocol.getExtend();
+ //绠″埗鐘舵��
+ extend.setSuspendState(extendData.getInteger("suspendState"));
+ //鏈�楂樼數鑺數鍘�(mV)
+ extend.setMaxCellVoltage(extendData.getInteger("maxCellVoltage"));
+ //鏈�浣庣數鑺數鍘�(mV)
+ extend.setMinCellVoltage(extendData.getInteger("minCellVoltage"));
+ //鐢垫睜鐢靛帇
+ extend.setVoltage(extendData.getInteger("voltage"));
+ //鍏呮斁鐢靛惊鐜鏁�
+ extend.setChargeCycleTimes(extendData.getInteger("chargeCycleTimes"));
+ //鍓╀綑鐢甸噺
+ extend.setSurplusQuantity(extendData.getInteger("surplusQuantity"));
+ //鎬荤數閲�
+ extend.setCountQuantity(extendData.getInteger("countQuantity"));
+ shuttleProtocol.setExtend(extend);//鎵╁睍瀛楁
- //鏄惁椤跺崌
- shuttleProtocol.setHasLift(data.getInteger("liftPosition") == 2 ? true : false);
- //鏄惁鏈夋墭鐩�
- shuttleProtocol.setHasPallet(data.getInteger("loadState") == 1 ? true : false);
- //琛岄┒鏂瑰悜
- shuttleProtocol.setRunDirection(data.getString("runDir") == null ? "none" : data.getString("runDir"));
- //鏄惁涓哄厖鐢电姸鎬�
- shuttleProtocol.setHasCharge(data.getInteger("chargState") == 1 ? true : false);
- //杩愯閫熷害
- shuttleProtocol.setSpeed(data.getInteger("speed"));
+ //鏈�杩戜竴娆″湪绾挎椂闂�
+ shuttleProtocol.setLastOnlineTime(System.currentTimeMillis());
+ //璇诲彇鍥涘悜绌挎杞︾姸鎬�-end
- //*********璇诲彇鎵╁睍瀛楁**********
- InnerSuhttleExtend extend = (InnerSuhttleExtend) shuttleProtocol.getExtend();
- //绠″埗鐘舵��
- extend.setSuspendState(data.getInteger("suspendState"));
- //鏈�楂樼數鑺數鍘�(mV)
- extend.setMaxCellVoltage(data.getInteger("maxCellVoltage"));
- //鏈�浣庣數鑺數鍘�(mV)
- extend.setMinCellVoltage(data.getInteger("minCellVoltage"));
- //鐢垫睜鐢靛帇
- extend.setVoltage(data.getInteger("voltage"));
- //鍏呮斁鐢靛惊鐜鏁�
- extend.setChargeCycleTimes(data.getInteger("chargeCycleTimes"));
- //鍓╀綑鐢甸噺
- extend.setSurplusQuantity(data.getInteger("surplusQuantity"));
- //鎬荤數閲�
- extend.setCountQuantity(data.getInteger("countQuantity"));
- shuttleProtocol.setExtend(extend);//鎵╁睍瀛楁
-
- //鏈�杩戜竴娆″湪绾挎椂闂�
- shuttleProtocol.setLastOnlineTime(System.currentTimeMillis());
- ///璇诲彇鍥涘悜绌挎杞︾姸鎬�-end
-
- //灏忚溅澶勪簬杩愯涓紝灏嗘爣璁扮疆涓簍rue
- if (shuttleProtocol.getDeviceStatus() == 0) {
- shuttleProtocol.setPakMk(true);
- }
-
- if (shuttleProtocol.getProtocolStatusType() == null && shuttleProtocol.getDeviceStatus().intValue() == 1) {
- //灏忚溅绌洪棽鐘舵�併�佸皬杞︿换鍔$姸鎬佷负鏈煡锛岃瀹氭浘绂荤嚎杩囷紝闇�瑕佸浣嶆垚绌洪棽
- this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
- }
-
- if (shuttleProtocol.getProtocolStatusType().equals(ShuttleProtocolStatusType.OFFLINE) && shuttleProtocol.getDeviceStatus().intValue() == 1) {
- this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
- }
-
- this.originDeviceData = data;
-
- OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
+ //灏忚溅澶勪簬杩愯涓紝灏嗘爣璁扮疆涓簍rue
+ if (shuttleProtocol.getDeviceStatus() == 0) {
+ shuttleProtocol.setPakMk(true);
}
+
+ if (shuttleProtocol.getProtocolStatusType() == null && shuttleProtocol.getDeviceStatus().intValue() == 1) {
+ //灏忚溅绌洪棽鐘舵�併�佸皬杞︿换鍔$姸鎬佷负鏈煡锛岃瀹氭浘绂荤嚎杩囷紝闇�瑕佸浣嶆垚绌洪棽
+ this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
+ }
+
+ if (shuttleProtocol.getProtocolStatusType().equals(ShuttleProtocolStatusType.OFFLINE) && shuttleProtocol.getDeviceStatus().intValue() == 1) {
+ this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
+ }
+
+ this.originDeviceData = data.getString("originDeviceData");
+
+ OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
} 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()));
@@ -878,6 +853,22 @@
}
@Override
+ public JSONObject parseStatusToMsg(ShuttleProtocol shuttleProtocol) {
+ JSONObject result = new JSONObject();
+ result.put("msgType", "responseMsg");
+ result.put("robotId", 5002);
+
+ JSONObject header = new JSONObject();
+ header.put("responseId", 5005631);
+ header.put("version", "RGV-APP-F427-N24036-1112");
+
+ JSONObject body = new JSONObject();
+ body.put("responseType", "state");
+
+ return null;
+ }
+
+ @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);
@@ -1113,7 +1104,11 @@
JSONObject data = JSON.parseObject(JSON.toJSONString(httpCommand));
data.remove("nodes");
- String key = deviceMsgUtils.sendDeviceCommand(SlaveType.Shuttle, slave.getId(), data);
+ 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;
@@ -1159,7 +1154,11 @@
JSONObject data = JSON.parseObject(JSON.toJSONString(httpCommand));
data.remove("nodes");
- String key = deviceMsgUtils.sendDeviceCommand(SlaveType.Shuttle, slave.getId(), data);
+ 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;
diff --git a/src/main/java/com/zy/core/thread/impl/NyShuttleThread2.java b/src/main/java/com/zy/core/thread/impl/NyShuttleThread2.java
index 8d00c3a..6c97534 100644
--- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread2.java
+++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread2.java
@@ -896,6 +896,11 @@
}
@Override
+ public JSONObject parseStatusToMsg(ShuttleProtocol shuttleProtocol) {
+ return null;
+ }
+
+ @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);
diff --git a/src/main/java/com/zy/core/Utils/DeviceMsgUtils.java b/src/main/java/com/zy/core/utils/DeviceMsgUtils.java
similarity index 91%
rename from src/main/java/com/zy/core/Utils/DeviceMsgUtils.java
rename to src/main/java/com/zy/core/utils/DeviceMsgUtils.java
index 97399f9..5a1fb51 100644
--- a/src/main/java/com/zy/core/Utils/DeviceMsgUtils.java
+++ b/src/main/java/com/zy/core/utils/DeviceMsgUtils.java
@@ -1,9 +1,10 @@
-package com.zy.core.Utils;
+package com.zy.core.utils;
import com.core.exception.CoolException;
import com.zy.common.utils.RedisUtil;
import com.zy.core.enums.RedisKeyType;
import com.zy.core.enums.SlaveType;
+import com.zy.core.model.DeviceCommandMsgModel;
import com.zy.core.model.DeviceMsgModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -23,19 +24,18 @@
@Autowired
private RedisUtil redisUtil;
-
- public Object getDeviceCommandMsg(SlaveType deviceType, Integer deviceId) {
+ public DeviceCommandMsgModel getDeviceCommandMsg(SlaveType deviceType, Integer deviceId) {
TreeSet<String> listKey = getDeviceCommandMsgListKey(deviceType, deviceId);
if (listKey.isEmpty()) {
return null;
}
String firstKey = listKey.first();
- Object data = redisUtil.get(firstKey);
+ DeviceCommandMsgModel commandMsgModel = (DeviceCommandMsgModel) redisUtil.get(firstKey);
if (destroyAfterReading) {
redisUtil.del(firstKey);
}
- return data;
+ return commandMsgModel;
}
public DeviceMsgModel getDeviceMsg(SlaveType deviceType, Integer deviceId) {
@@ -68,17 +68,13 @@
redisUtil.set(key, msgModel, 60 * 60);
}
- public String sendDeviceMsg(SlaveType deviceType, Integer deviceId, Object command) {
+ public String sendDeviceMsg(SlaveType deviceType, Integer deviceId, DeviceMsgModel deviceMsgModel) {
String key = parseDeviceMsgKey(deviceType, deviceId) + System.currentTimeMillis();
-
- DeviceMsgModel deviceMsgModel = new DeviceMsgModel();
- deviceMsgModel.setDeviceId(deviceId);
- deviceMsgModel.setDeviceMsg(command);
redisUtil.set(key, deviceMsgModel, 60 * 60 * 24);
return key;
}
- public String sendDeviceCommand(SlaveType deviceType, Integer deviceId, Object command) {
+ public String sendDeviceCommand(SlaveType deviceType, Integer deviceId, DeviceCommandMsgModel command) {
String key = parseDeviceCommandMsgKey(deviceType, deviceId) + System.currentTimeMillis();
redisUtil.set(key, command, 60 * 60 * 24);
return key;
--
Gitblit v1.9.1