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