From d9b0b37cb2ff5b0066c5a6550da34bb78adddc97 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期日, 19 四月 2026 11:43:07 +0800
Subject: [PATCH] #仿真系统出库修复V3.0.0.5

---
 src/main/java/com/zy/core/plugin/FakeProcess.java |   58 +++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 45 insertions(+), 13 deletions(-)

diff --git a/src/main/java/com/zy/core/plugin/FakeProcess.java b/src/main/java/com/zy/core/plugin/FakeProcess.java
index adbe6f4..e9c1996 100644
--- a/src/main/java/com/zy/core/plugin/FakeProcess.java
+++ b/src/main/java/com/zy/core/plugin/FakeProcess.java
@@ -1,6 +1,5 @@
 package com.zy.core.plugin;
 
-import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.service.*;
@@ -8,6 +7,7 @@
 import com.zy.core.News;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.SlaveConnection;
+import com.zy.core.dispatch.StationCommandDispatchResult;
 import com.zy.core.dispatch.StationCommandDispatcher;
 import com.zy.core.enums.*;
 import com.zy.core.model.StationObjModel;
@@ -21,7 +21,6 @@
 import com.zy.core.plugin.station.FakeStationMonitor;
 import com.zy.core.plugin.station.FakeTaskGenerator;
 import com.zy.core.plugin.store.StoreInTaskContext;
-import com.zy.core.plugin.store.StoreInTaskGenerationService;
 import com.zy.core.plugin.store.StoreInTaskPolicy;
 import com.zy.core.task.MainProcessLane;
 import com.zy.core.task.MainProcessTaskSubmitter;
@@ -59,50 +58,83 @@
     private static volatile String fakeGenerateInTask = "Y";
     private static volatile String fakeGenerateOutTask = "Y";
 
-    private static final Map<String, Long> OUT_STATION_STAY_MARKER = new HashMap<String, Long>();
+    private static final Map<Integer, Long> OUT_STATION_STAY_MARKER = new HashMap<Integer, Long>();
 
     private final Object outStationStayLock = new Object();
 
-    private boolean shouldDispatchOutStationWriteInfo(String taskNo) {
+    private boolean shouldDispatchOutStationWriteInfo(Integer wrkNo) {
         long now = System.currentTimeMillis();
         long timeoutMs = getOutStationStayTimeoutMs();
         synchronized (outStationStayLock) {
-            Long lastTime = OUT_STATION_STAY_MARKER.get(taskNo);
+            Long lastTime = OUT_STATION_STAY_MARKER.get(wrkNo);
             if (lastTime == null || now - lastTime >= timeoutMs) {
-                OUT_STATION_STAY_MARKER.put(taskNo, now);
+                OUT_STATION_STAY_MARKER.put(wrkNo, now);
                 return true;
             }
             return false;
         }
     }
 
-    private void clearOutStationStayMarker(String taskNo) {
+    private void clearOutStationStayMarker(Integer wrkNo) {
         synchronized (outStationStayLock) {
-            OUT_STATION_STAY_MARKER.remove(taskNo);
+            OUT_STATION_STAY_MARKER.remove(wrkNo);
         }
     }
 
     private void dispatchOutStationWriteInfoIfReady(WrkMast wrkMast, BasCrnp basCrnp) {
-        String taskNo = wrkMast == null ? null : wrkMast.getWmsWrkNo();
-        if (taskNo == null || !shouldDispatchOutStationWriteInfo(taskNo)) {
+        Integer wrkNo = wrkMast == null ? null : wrkMast.getWrkNo();
+        if (wrkNo == null) {
+            News.error("浠跨湡鍑哄簱绔欑偣鍐欏叆璺宠繃锛學CS浠诲姟鍙蜂负绌恒�俿ourceStaNo={}锛宑rnNo={}",
+                    wrkMast == null ? null : wrkMast.getSourceStaNo(),
+                    basCrnp == null ? null : basCrnp.getCrnNo());
             return;
         }
+        if (!shouldDispatchOutStationWriteInfo(wrkNo)) {
+            News.error("浠跨湡鍑哄簱绔欑偣鍐欏叆璺宠繃锛屽懡涓妭娴侀檺鍒躲�倃rkNo={}锛宻ourceStaNo={}锛宑rnNo={}",
+                    wrkNo,
+                    wrkMast == null ? null : wrkMast.getSourceStaNo(),
+                    basCrnp == null ? null : basCrnp.getCrnNo());
+            return;
+        }
+        String taskNo = String.valueOf(wrkNo);
         List<StationObjModel> outStationList = basCrnp.getOutStationList$();
         if (outStationList.isEmpty()) {
-            News.info("鍫嗗灈鏈�:{} 鍑哄簱绔欑偣鏈缃�", basCrnp.getCrnNo());
+            News.error("浠跨湡鍑哄簱绔欑偣鍐欏叆澶辫触锛屽爢鍨涙満鏈厤缃嚭搴撶珯鐐广�俢rnNo={}锛寃rkNo={}锛宼askNo={}",
+                    basCrnp.getCrnNo(), wrkMast == null ? null : wrkMast.getWrkNo(), taskNo);
             return;
         }
+        boolean matched = false;
         for (StationObjModel stationObjModel : outStationList) {
             if (!stationObjModel.getStationId().equals(wrkMast.getSourceStaNo())) {
                 continue;
             }
+            matched = true;
             StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
             if (stationThread == null) {
+                News.error("浠跨湡鍑哄簱绔欑偣鍐欏叆澶辫触锛岀珯鐐圭嚎绋嬩笉瀛樺湪銆倀askNo={}锛寃rkNo={}锛宻tationId={}锛宒eviceNo={}",
+                        taskNo, wrkMast.getWrkNo(), stationObjModel.getStationId(), stationObjModel.getDeviceNo());
                 continue;
             }
             StationCommand command = stationThread.getCommand(StationCommandType.WRITE_INFO, 9998,
                     wrkMast.getSourceStaNo(), 0, 0);
-            stationCommandDispatcher.dispatch(stationObjModel.getDeviceNo(), command, "fake-process", "crn-out-complete-write-info");
+            StationCommandDispatchResult dispatchResult = stationCommandDispatcher.dispatch(
+                    stationObjModel.getDeviceNo(), command, "fake-process", "crn-out-complete-write-info");
+            News.info("浠跨湡鍑哄簱绔欑偣鍐欏叆鍛戒护鍒嗗彂缁撴灉銆倀askNo={}锛寃rkNo={}锛宑rnNo={}锛宻tationId={}锛宒eviceNo={}锛宎ccepted={}锛宺eason={}锛宷ueueDepth={}",
+                    taskNo,
+                    wrkMast.getWrkNo(),
+                    basCrnp.getCrnNo(),
+                    stationObjModel.getStationId(),
+                    stationObjModel.getDeviceNo(),
+                    dispatchResult != null && dispatchResult.isAccepted(),
+                    dispatchResult == null ? null : dispatchResult.getReason(),
+                    dispatchResult == null ? null : dispatchResult.getQueueDepth());
+        }
+        if (!matched) {
+            News.error("浠跨湡鍑哄簱绔欑偣鍐欏叆澶辫触锛屾湭鍖归厤鍒皊ourceStaNo瀵瑰簲鍑哄簱绔欑偣銆倀askNo={}锛寃rkNo={}锛宻ourceStaNo={}锛宑rnNo={}",
+                    taskNo,
+                    wrkMast == null ? null : wrkMast.getWrkNo(),
+                    wrkMast == null ? null : wrkMast.getSourceStaNo(),
+                    basCrnp == null ? null : basCrnp.getCrnNo());
         }
     }
 
@@ -295,7 +327,7 @@
         wrkMast.setIoTime(now);
         wrkMast.setModiTime(now);
         if (wrkMastService.updateById(wrkMast)) {
-            clearOutStationStayMarker(wrkMast.getWmsWrkNo());
+            clearOutStationStayMarker(wrkMast.getWrkNo());
             wrkAnalysisService.markCraneComplete(wrkMast, now, updateWrkSts);
             CrnCommand resetCommand = crnThread.getResetCommand(crnProtocol.getTaskNo(), crnProtocol.getCrnNo());
             MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, resetCommand));

--
Gitblit v1.9.1