From 343c122adb54e01d4cd05ea382819bf071330589 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 06 四月 2026 18:30:18 +0800
Subject: [PATCH] #入库请求优化,先检查异常
---
src/main/java/com/zy/core/network/ZyStationConnectDriver.java | 50 ++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 44 insertions(+), 6 deletions(-)
diff --git a/src/main/java/com/zy/core/network/ZyStationConnectDriver.java b/src/main/java/com/zy/core/network/ZyStationConnectDriver.java
index d986133..e2fac59 100644
--- a/src/main/java/com/zy/core/network/ZyStationConnectDriver.java
+++ b/src/main/java/com/zy/core/network/ZyStationConnectDriver.java
@@ -29,6 +29,8 @@
private static final ZyStationFakeSegConnect zyStationFakeSegConnect = new ZyStationFakeSegConnect();
private static final ZyStationV4FakeSegConnect zyStationV4FakeSegConnect = new ZyStationV4FakeSegConnect();
+ private static final long SEND_LOCK_WARN_MS = 3_000L;
+ private static final long SEND_COST_WARN_MS = 5_000L;
private volatile boolean connected = false;
private volatile boolean connecting = false;
@@ -69,7 +71,8 @@
if (deviceConfig.getFake() == 0) {
if ("ZyStationV3Thread".equals(deviceConfig.getThreadImpl())) {
connectApi = new ZyStationV3RealConnect(deviceConfig, redisUtil);
- } else if ("ZyStationV4Thread".equals(deviceConfig.getThreadImpl())) {
+ } else if ("ZyStationV4Thread".equals(deviceConfig.getThreadImpl())
+ || "ZyStationV5Thread".equals(deviceConfig.getThreadImpl())) {
connectApi = new ZyStationV4RealConnect(deviceConfig, redisUtil);
} else {
connectApi = new ZyStationRealConnect(deviceConfig, redisUtil);
@@ -78,13 +81,14 @@
if ("ZyStationV3Thread".equals(deviceConfig.getThreadImpl())) {
zyStationFakeSegConnect.addFakeConnect(deviceConfig, redisUtil);
connectApi = zyStationFakeSegConnect;
- } else if ("ZyStationV4Thread".equals(deviceConfig.getThreadImpl())) {
+ } else if ("ZyStationV4Thread".equals(deviceConfig.getThreadImpl())
+ || "ZyStationV5Thread".equals(deviceConfig.getThreadImpl())) {
zyStationV4FakeSegConnect.addFakeConnect(deviceConfig, redisUtil);
connectApi = zyStationV4FakeSegConnect;
} else {
fakeConfigUnsupported = true;
zyStationConnectApi = null;
- log.error("鏃х増杈撻�佺珯 fake 宸茬Щ闄わ紝deviceNo={}, threadImpl={}, 璇峰垏鎹㈠埌 ZyStationV3Thread 鎴� ZyStationV4Thread",
+ log.error("鏃х増杈撻�佺珯 fake 宸茬Щ闄わ紝deviceNo={}, threadImpl={}, 璇峰垏鎹㈠埌 ZyStationV3Thread銆乑yStationV4Thread 鎴� ZyStationV5Thread",
deviceConfig.getDeviceNo(), deviceConfig.getThreadImpl());
return false;
}
@@ -158,9 +162,12 @@
if (!connected || connecting || connectApi == null) {
return new CommandResponse(false, "璁惧鏈繛鎺ワ紝鍛戒护涓嬪彂澶辫触");
}
+ long lockWaitStart = System.currentTimeMillis();
+ int waitRounds = 0;
while (true) {
Object lock = redisUtil.get(RedisKeyType.STATION_EXECUTE_COMMAND_LOCK.key);
if(lock != null) {
+ waitRounds++;
try {
Thread.sleep(500);
}catch (Exception e) {
@@ -171,9 +178,31 @@
break;
}
}
- CommandResponse commandResponse = connectApi.sendCommand(deviceConfig.getDeviceNo(), command);
- redisUtil.del(RedisKeyType.STATION_EXECUTE_COMMAND_LOCK.key);
- return commandResponse;
+ long lockWaitCost = System.currentTimeMillis() - lockWaitStart;
+ if (lockWaitCost >= SEND_LOCK_WARN_MS) {
+ log.warn("杈撻�佸懡浠ょ瓑寰呭叏灞�鍙戦�侀攣瓒呮椂锛宒eviceNo={}, taskNo={}, stationId={}, targetStaNo={}, waitMs={}, waitRounds={}",
+ deviceConfig == null ? null : deviceConfig.getDeviceNo(),
+ command == null ? null : command.getTaskNo(),
+ command == null ? null : command.getStationId(),
+ command == null ? null : command.getTargetStaNo(),
+ lockWaitCost,
+ waitRounds);
+ }
+ long sendStart = System.currentTimeMillis();
+ try {
+ return connectApi.sendCommand(deviceConfig.getDeviceNo(), command);
+ } finally {
+ redisUtil.del(RedisKeyType.STATION_EXECUTE_COMMAND_LOCK.key);
+ long sendCostMs = System.currentTimeMillis() - sendStart;
+ if (sendCostMs >= SEND_COST_WARN_MS) {
+ log.warn("杈撻�佸懡浠ゅ簳灞傚彂閫佽�楁椂杩囬暱锛宒eviceNo={}, taskNo={}, stationId={}, targetStaNo={}, sendCostMs={}",
+ deviceConfig == null ? null : deviceConfig.getDeviceNo(),
+ command == null ? null : command.getTaskNo(),
+ command == null ? null : command.getStationId(),
+ command == null ? null : command.getTargetStaNo(),
+ sendCostMs);
+ }
+ }
}
public CommandResponse sendOriginCommand(String address, short[] data) {
@@ -184,6 +213,15 @@
return connectApi.sendOriginCommand(address, data);
}
+ public boolean clearTaskBufferSlot(Integer stationId, Integer slotIdx) {
+ ZyStationConnectApi connectApi = zyStationConnectApi;
+ if (!connected || connecting || connectApi == null) {
+ return false;
+ }
+ CommandResponse response = connectApi.clearTaskBufferSlot(deviceConfig.getDeviceNo(), stationId, slotIdx);
+ return response != null && Boolean.TRUE.equals(response.getResult());
+ }
+
public byte[] readOriginCommand(String address, int length) {
ZyStationConnectApi connectApi = zyStationConnectApi;
if (!connected || connecting || connectApi == null) {
--
Gitblit v1.9.1