From de13ff96cb19aa0fd2e63ea2d7188734215a2107 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 23 三月 2026 23:10:45 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/utils/StationOperateProcessUtils.java | 53 ++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 46 insertions(+), 7 deletions(-)
diff --git a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
index 550ad32..a6f36f0 100644
--- a/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/StationOperateProcessUtils.java
@@ -27,6 +27,7 @@
import com.zy.core.model.Task;
import com.zy.core.model.command.StationCommand;
import com.zy.core.model.protocol.StationProtocol;
+import com.zy.core.model.protocol.StationTaskBufferItem;
import com.zy.core.service.StationTaskLoopService;
import com.zy.core.thread.StationThread;
import org.springframework.beans.factory.annotation.Autowired;
@@ -39,7 +40,7 @@
private static final int LOOP_LOAD_RESERVE_EXPIRE_SECONDS = 120;
private static final int OUT_ORDER_DISPATCH_LIMIT_SECONDS = 2;
private static final int STATION_IDLE_RECOVER_SECONDS = 10;
- private static final int STATION_IDLE_RECOVER_LIMIT_SECONDS = 10;
+ private static final int STATION_IDLE_RECOVER_LIMIT_SECONDS = 30;
private static final int STATION_IDLE_TRACK_EXPIRE_SECONDS = 60 * 60;
private static final long STATION_MOVE_RESET_WAIT_MS = 1000L;
private static final String IDLE_RECOVER_CLEARED_MEMO = "idleRecoverRerouteCleared";
@@ -70,6 +71,8 @@
private BasStationOptService basStationOptService;
@Autowired
private StationTaskLoopService stationTaskLoopService;
+ @Autowired
+ private WrkAnalysisService wrkAnalysisService;
//鎵ц杈撻�佺珯鐐瑰叆搴撲换鍔�
public synchronized void stationInExecute() {
@@ -115,7 +118,7 @@
continue;
}
- if (wrkMast.getWrkSts() == WrkStsType.INBOUND_DEVICE_RUN.sts) {
+ if (!Objects.equals(wrkMast.getWrkSts(), WrkStsType.NEW_INBOUND.sts)) {
continue;
}
@@ -145,12 +148,15 @@
continue;
}
- wrkMast.setWrkSts(WrkStsType.INBOUND_DEVICE_RUN.sts);
+ Date now = new Date();
+ wrkMast.setWrkSts(WrkStsType.INBOUND_STATION_RUN.sts);
wrkMast.setSourceStaNo(stationProtocol.getStationId());
wrkMast.setStaNo(targetStationId);
wrkMast.setSystemMsg("");
- wrkMast.setIoTime(new Date());
+ wrkMast.setIoTime(now);
+ wrkMast.setModiTime(now);
if (wrkMastService.updateById(wrkMast)) {
+ wrkAnalysisService.markInboundStationStart(wrkMast, now);
MessageQueue.offer(SlaveType.Devp, basDevp.getDevpNo(), new Task(2, command));
News.info("杈撻�佺珯鐐瑰叆搴撳懡浠や笅鍙戞垚鍔燂紝绔欑偣鍙�={}锛屽伐浣滃彿={}锛屽懡浠ゆ暟鎹�={}", stationId, wrkMast.getWrkNo(), JSON.toJSONString(command));
redisUtil.set(RedisKeyType.STATION_IN_EXECUTE_LIMIT.key + stationId, "lock", 5);
@@ -238,10 +244,13 @@
continue;
}
+ Date now = new Date();
wrkMast.setWrkSts(WrkStsType.STATION_RUN.sts);
wrkMast.setSystemMsg("");
- wrkMast.setIoTime(new Date());
+ wrkMast.setIoTime(now);
+ wrkMast.setModiTime(now);
if (wrkMastService.updateById(wrkMast)) {
+ wrkAnalysisService.markOutboundStationStart(wrkMast, now);
MessageQueue.offer(SlaveType.Devp, stationObjModel.getDeviceNo(), new Task(2, command));
News.info("杈撻�佺珯鐐瑰嚭搴撳懡浠や笅鍙戞垚鍔燂紝绔欑偣鍙�={}锛屽伐浣滃彿={}锛屽懡浠ゆ暟鎹�={}", stationProtocol.getStationId(), wrkMast.getWrkNo(), JSON.toJSONString(command));
redisUtil.set(RedisKeyType.STATION_OUT_EXECUTE_LIMIT.key + stationProtocol.getStationId(), "lock", 5);
@@ -362,9 +371,12 @@
if (wrkMast == null || wrkMast.getWrkNo() == null) {
return;
}
+ Date now = new Date();
wrkMast.setWrkSts(WrkStsType.STATION_RUN_COMPLETE.sts);
- wrkMast.setIoTime(new Date());
+ wrkMast.setIoTime(now);
+ wrkMast.setModiTime(now);
wrkMastService.updateById(wrkMast);
+ wrkAnalysisService.markOutboundStationComplete(wrkMast, now);
if (deviceNo != null) {
notifyUtils.notify(String.valueOf(SlaveType.Devp), deviceNo, String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.STATION_OUT_TASK_RUN_COMPLETE, null);
}
@@ -1301,6 +1313,17 @@
if (lock != null) {
return;
}
+ int currentTaskBufferCommandCount = countCurrentTaskBufferCommands(
+ stationProtocol.getTaskBufferItems(),
+ stationProtocol.getTaskNo()
+ );
+ if (currentTaskBufferCommandCount > 0) {
+ News.info("杈撻�佺珯鐐逛换鍔″仠鐣欒秴鏃讹紝浣嗙紦瀛樺尯浠嶅瓨鍦ㄥ綋鍓嶄换鍔″懡浠わ紝宸茶烦杩囬噸绠椼�傜珯鐐瑰彿={}锛屽伐浣滃彿={}锛屽綋鍓嶄换鍔″懡浠ゆ暟={}",
+ stationProtocol.getStationId(),
+ stationProtocol.getTaskNo(),
+ currentTaskBufferCommandCount);
+ return;
+ }
Double pathLenFactor = resolveOutboundPathLenFactor(wrkMast);
OutOrderDispatchDecision dispatchDecision = null;
@@ -1345,7 +1368,7 @@
if (Objects.equals(currentStationId, wrkMast.getStaNo())) {
return false;
}
- return Objects.equals(wrkMast.getWrkSts(), WrkStsType.INBOUND_DEVICE_RUN.sts)
+ return Objects.equals(wrkMast.getWrkSts(), WrkStsType.INBOUND_STATION_RUN.sts)
|| Objects.equals(wrkMast.getWrkSts(), WrkStsType.STATION_RUN.sts);
}
@@ -1364,6 +1387,22 @@
redisUtil.del(key);
}
+ private int countCurrentTaskBufferCommands(List<StationTaskBufferItem> taskBufferItems, Integer currentTaskNo) {
+ if (taskBufferItems == null || taskBufferItems.isEmpty() || currentTaskNo == null || currentTaskNo <= 0) {
+ return 0;
+ }
+ int count = 0;
+ for (StationTaskBufferItem item : taskBufferItems) {
+ if (item == null || item.getTaskNo() == null) {
+ continue;
+ }
+ if (currentTaskNo.equals(item.getTaskNo())) {
+ count++;
+ }
+ }
+ return count;
+ }
+
private int clearIssuedMoveCommandsDuringIdleStay(StationTaskIdleTrack idleTrack,
Integer taskNo,
Integer stationId) {
--
Gitblit v1.9.1