From d2dbfe9ac555029ac6332703912ac7b753304aaf Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期五, 06 三月 2026 15:52:01 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java | 28 ++++++---
src/main/java/com/zy/core/network/ZyStationConnectDriver.java | 100 +++++++++++++++++++++++----------
src/main/java/com/zy/core/thread/impl/ZyStationV4Thread.java | 10 ++-
src/main/java/com/zy/common/service/CommonService.java | 4
src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java | 1
src/main/resources/application.yml | 2
6 files changed, 98 insertions(+), 47 deletions(-)
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 43408b8..54be1d4 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -446,7 +446,7 @@
for (StationObjModel stationObjModel : stationList) {
try {
List<NavigateNode> navigateNodes = navigateUtils.calcByStationId(sourceStationId, stationObjModel.getStationId());
- if(navigateNodes != null) {
+ if(!navigateNodes.isEmpty()) {
targetStationId = stationObjModel.getStationId();
break;
}
@@ -478,7 +478,7 @@
for (StationObjModel stationObjModel : stationList) {
try {
List<NavigateNode> navigateNodes = navigateUtils.calcByStationId(stationObjModel.getStationId(), targetStationId);
- if(navigateNodes != null) {
+ if(!navigateNodes.isEmpty()) {
finalSourceStationId = stationObjModel.getStationId();
break;
}
diff --git a/src/main/java/com/zy/core/network/ZyStationConnectDriver.java b/src/main/java/com/zy/core/network/ZyStationConnectDriver.java
index 62b1b93..2bc600c 100644
--- a/src/main/java/com/zy/core/network/ZyStationConnectDriver.java
+++ b/src/main/java/com/zy/core/network/ZyStationConnectDriver.java
@@ -16,6 +16,7 @@
import com.zy.core.network.real.ZyStationV3RealConnect;
import com.zy.core.network.real.ZyStationV4RealConnect;
import lombok.extern.slf4j.Slf4j;
+import java.util.Collections;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ThreadFactory;
@@ -31,12 +32,14 @@
private static final ZyStationFakeSegConnect zyStationFakeSegConnect = new ZyStationFakeSegConnect();
private static final ZyStationV4FakeSegConnect zyStationV4FakeSegConnect = new ZyStationV4FakeSegConnect();
- private boolean connected = false;
+ private volatile boolean connected = false;
+ private volatile boolean connecting = false;
private DeviceConfig deviceConfig;
private RedisUtil redisUtil;
- private ZyStationConnectApi zyStationConnectApi;
+ private volatile ZyStationConnectApi zyStationConnectApi;
private volatile boolean closed = false;
private ScheduledExecutorService executor;
+ private final Object connectLock = new Object();
public ZyStationConnectDriver(DeviceConfig deviceConfig, RedisUtil redisUtil) {
this.deviceConfig = deviceConfig;
@@ -50,30 +53,50 @@
@Override
public boolean connect() {
- if (deviceConfig.getFake() == 0) {
- if ("ZyStationV3Thread".equals(deviceConfig.getThreadImpl())) {
- zyStationConnectApi = new ZyStationV3RealConnect(deviceConfig, redisUtil);
- } else if ("ZyStationV4Thread".equals(deviceConfig.getThreadImpl())) {
- zyStationConnectApi = new ZyStationV4RealConnect(deviceConfig, redisUtil);
- } else {
- zyStationConnectApi = new ZyStationRealConnect(deviceConfig, redisUtil);
+ synchronized (connectLock) {
+ if (closed) {
+ return false;
}
- } else {
- if ("ZyStationV3Thread".equals(deviceConfig.getThreadImpl())) {
- zyStationFakeSegConnect.addFakeConnect(deviceConfig, redisUtil);
- zyStationConnectApi = zyStationFakeSegConnect;
- } else if ("ZyStationV4Thread".equals(deviceConfig.getThreadImpl())) {
- zyStationV4FakeSegConnect.addFakeConnect(deviceConfig, redisUtil);
- zyStationConnectApi = zyStationV4FakeSegConnect;
- } else {
- zyStationFakeConnect.addFakeConnect(deviceConfig, redisUtil);
- zyStationConnectApi = zyStationFakeConnect;
+ if (connected && zyStationConnectApi != null) {
+ return true;
+ }
+
+ connecting = true;
+ try {
+ ZyStationConnectApi connectApi;
+ if (deviceConfig.getFake() == 0) {
+ if ("ZyStationV3Thread".equals(deviceConfig.getThreadImpl())) {
+ connectApi = new ZyStationV3RealConnect(deviceConfig, redisUtil);
+ } else if ("ZyStationV4Thread".equals(deviceConfig.getThreadImpl())) {
+ connectApi = new ZyStationV4RealConnect(deviceConfig, redisUtil);
+ } else {
+ connectApi = new ZyStationRealConnect(deviceConfig, redisUtil);
+ }
+ } else {
+ if ("ZyStationV3Thread".equals(deviceConfig.getThreadImpl())) {
+ zyStationFakeSegConnect.addFakeConnect(deviceConfig, redisUtil);
+ connectApi = zyStationFakeSegConnect;
+ } else if ("ZyStationV4Thread".equals(deviceConfig.getThreadImpl())) {
+ zyStationV4FakeSegConnect.addFakeConnect(deviceConfig, redisUtil);
+ connectApi = zyStationV4FakeSegConnect;
+ } else {
+ zyStationFakeConnect.addFakeConnect(deviceConfig, redisUtil);
+ connectApi = zyStationFakeConnect;
+ }
+ }
+
+ boolean connect = connectApi.connect();
+ connected = connect;
+ if (connect) {
+ zyStationConnectApi = connectApi;
+ } else {
+ zyStationConnectApi = null;
+ }
+ return connect;
+ } finally {
+ connecting = false;
}
}
-
- boolean connect = zyStationConnectApi.connect();
- connected = connect;
- return connect;
}
@Override
@@ -83,11 +106,13 @@
if (ex != null) {
try { ex.shutdownNow(); } catch (Exception ignore) {}
}
- if (zyStationConnectApi != null) {
- zyStationConnectApi.disconnect();
+ ZyStationConnectApi connectApi = zyStationConnectApi;
+ if (connectApi != null) {
+ connectApi.disconnect();
zyStationConnectApi = null;
}
connected = false;
+ connecting = false;
}
public void start() {
@@ -116,13 +141,18 @@
}
public List<ZyStationStatusEntity> getStatus() {
- if (zyStationConnectApi == null) {
- return null;
+ ZyStationConnectApi connectApi = zyStationConnectApi;
+ if (!connected || connecting || connectApi == null) {
+ return Collections.emptyList();
}
- return zyStationConnectApi.getStatus(deviceConfig.getDeviceNo());
+ return connectApi.getStatus(deviceConfig.getDeviceNo());
}
public CommandResponse sendCommand(StationCommand command) {
+ ZyStationConnectApi connectApi = zyStationConnectApi;
+ if (!connected || connecting || connectApi == null) {
+ return new CommandResponse(false, "璁惧鏈繛鎺ワ紝鍛戒护涓嬪彂澶辫触");
+ }
while (true) {
Object lock = redisUtil.get(RedisKeyType.STATION_EXECUTE_COMMAND_LOCK.key);
if(lock != null) {
@@ -136,16 +166,24 @@
break;
}
}
- CommandResponse commandResponse = zyStationConnectApi.sendCommand(deviceConfig.getDeviceNo(), command);
+ CommandResponse commandResponse = connectApi.sendCommand(deviceConfig.getDeviceNo(), command);
redisUtil.del(RedisKeyType.STATION_EXECUTE_COMMAND_LOCK.key);
return commandResponse;
}
public CommandResponse sendOriginCommand(String address, short[] data) {
- return zyStationConnectApi.sendOriginCommand(address, data);
+ ZyStationConnectApi connectApi = zyStationConnectApi;
+ if (!connected || connecting || connectApi == null) {
+ return new CommandResponse(false, "璁惧鏈繛鎺ワ紝鍘熷鍛戒护涓嬪彂澶辫触");
+ }
+ return connectApi.sendOriginCommand(address, data);
}
public byte[] readOriginCommand(String address, int length) {
- return zyStationConnectApi.readOriginCommand(address, length);
+ ZyStationConnectApi connectApi = zyStationConnectApi;
+ if (!connected || connecting || connectApi == null) {
+ return new byte[0];
+ }
+ return connectApi.readOriginCommand(address, length);
}
}
diff --git a/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java b/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java
index c5ac97e..6233e0c 100644
--- a/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java
+++ b/src/main/java/com/zy/core/network/fake/ZyStationFakeConnect.java
@@ -230,14 +230,14 @@
Integer stationId = command.getStationId();
Integer targetStationId = command.getTargetStaNo();
- List<NavigateNode> navigateNodes = null;
+ List<NavigateNode> navigateNodes = new ArrayList<>();
try {
navigateNodes = navigateUtils.calcByStationId(stationId, targetStationId);
} catch (Exception e) {
e.printStackTrace();
}
- if (navigateNodes == null) {
+ if (navigateNodes.isEmpty()) {
return;
}
@@ -258,8 +258,8 @@
Integer stationId = command.getStationId();
Integer targetStationId = command.getTargetStaNo();
- List<NavigateNode> navigateNodes = null;
- List<NavigateNode> targetNavigateNodes = null;
+ List<NavigateNode> navigateNodes = new ArrayList<>();
+ List<NavigateNode> targetNavigateNodes = new ArrayList<>();
try {
BasStation startStation = basStationService.selectById(stationId);
@@ -308,14 +308,22 @@
continue;
}
- navigateNodes = navigateUtils.calcByStationId(stationId, liftStationId);
- if(navigateNodes == null){
+ try {
+ navigateNodes = navigateUtils.calcByStationId(stationId, liftStationId);
+ } catch (Exception e) {
+
+ }
+ if(navigateNodes.isEmpty()){
continue;
}
- //璁$畻鎻愬崌鏈哄埌鐩爣绔欑殑璺緞
- targetNavigateNodes = navigateUtils.calcByStationId(targetLiftStationId, targetStationId);
- if(targetNavigateNodes == null) {
+ try {
+ //璁$畻鎻愬崌鏈哄埌鐩爣绔欑殑璺緞
+ targetNavigateNodes = navigateUtils.calcByStationId(targetLiftStationId, targetStationId);
+ } catch (Exception e) {
+
+ }
+ if(targetNavigateNodes.isEmpty()) {
continue;
}
}
@@ -323,7 +331,7 @@
e.printStackTrace();
}
- if (navigateNodes == null || targetNavigateNodes == null) {
+ if (navigateNodes.isEmpty() || targetNavigateNodes.isEmpty()) {
return;
}
diff --git a/src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java b/src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java
index 971f8e6..d65f7e4 100644
--- a/src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java
+++ b/src/main/java/com/zy/core/network/real/ZyStationV4RealConnect.java
@@ -116,6 +116,7 @@
boolean[] status2 = siemensNet.getByteTransform().TransBool(result.Content, i * 10 + 7, 1);
statusEntity.setEnableIn(status2[1]);//鍚姩鍏ュ簱
+ statusEntity.setRunBlock(status2[2]);//閲嶆柊瑙勫垝璺嚎
Integer palletHeight = null;
if (status[7]) {
diff --git a/src/main/java/com/zy/core/thread/impl/ZyStationV4Thread.java b/src/main/java/com/zy/core/thread/impl/ZyStationV4Thread.java
index 245446b..f833e51 100644
--- a/src/main/java/com/zy/core/thread/impl/ZyStationV4Thread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZyStationV4Thread.java
@@ -47,6 +47,7 @@
private RedisUtil redisUtil;
private ZyStationConnectDriver zyStationConnectDriver;
private int deviceLogCollectTime = 200;
+ private boolean initStatus = false;
private long deviceDataLogTime = System.currentTimeMillis();
private ExecutorService executor = Executors.newFixedThreadPool(9999);
@@ -64,14 +65,16 @@
Thread readThread = new Thread(() -> {
while (true) {
try {
- deviceLogCollectTime = Utils.getDeviceLogCollectTime();
+ if (initStatus) {
+ deviceLogCollectTime = Utils.getDeviceLogCollectTime();
+ }
readStatus();
Thread.sleep(100);
} catch (Exception e) {
log.error("StationV4Thread Fail", e);
}
}
- });
+ }, "DevpRead-" + deviceConfig.getDeviceNo());
readThread.start();
Thread processThread = new Thread(() -> {
@@ -91,7 +94,7 @@
log.error("StationV4Process Fail", e);
}
}
- });
+ }, "DevpProcess-" + deviceConfig.getDeviceNo());
processThread.start();
}
@@ -122,6 +125,7 @@
stationProtocol.setStationId(entity.getStationId());
statusList.add(stationProtocol);
}
+ initStatus = true;
}
List<ZyStationStatusEntity> zyStationStatusEntities = zyStationConnectDriver.getStatus();
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 1c25968..6e76f8b 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,6 +1,6 @@
# 绯荤粺鐗堟湰淇℃伅
app:
- version: 1.0.4.6
+ version: 1.0.4.7
version-type: dev # prd 鎴� dev
server:
--
Gitblit v1.9.1