From aa710969e00e9d7e56a276066a239f74d5c49310 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 31 三月 2026 21:47:07 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java |   64 +++++++++++++++++++++++++++----
 1 files changed, 55 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java b/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
index db09977..834800b 100644
--- a/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
@@ -14,6 +14,7 @@
 import com.zy.asrs.service.BasDualCrnpService;
 import com.zy.asrs.service.BasStationService;
 import com.zy.asrs.service.LocMastService;
+import com.zy.asrs.service.WrkAnalysisService;
 import com.zy.asrs.service.WrkMastService;
 import com.zy.asrs.utils.NotifyUtils;
 import com.zy.asrs.utils.Utils;
@@ -23,6 +24,7 @@
 import com.zy.core.News;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.SlaveConnection;
+import com.zy.core.dispatch.StationCommandDispatcher;
 import com.zy.core.enums.*;
 import com.zy.core.model.StationObjModel;
 import com.zy.core.model.Task;
@@ -66,6 +68,12 @@
     private NotifyUtils notifyUtils;
     @Autowired
     private StationOperateProcessUtils stationOperateProcessUtils;
+    @Autowired
+    private WrkAnalysisService wrkAnalysisService;
+    @Autowired
+    private StationCommandDispatcher stationCommandDispatcher;
+
+    private static final String CRN_OUT_REQUIRE_STATION_OUT_ENABLE_CONFIG = "crnOutRequireStationOutEnable";
 
     //鍏ュ嚭搴�  ===>>  鍙屽伐浣嶅爢鍨涙満鍏ュ嚭搴撲綔涓氫笅鍙�
     public synchronized void dualCrnIoExecute() {
@@ -352,7 +360,7 @@
                 .in("wrk_no", taskList)
         );
         for (WrkMast wrkMast : wrkMasts) {
-            if(wrkMast.getWrkSts() != WrkStsType.INBOUND_DEVICE_RUN.sts){
+            if(wrkMast.getWrkSts() != WrkStsType.INBOUND_STATION_RUN_COMPLETE.sts){
                 continue;
             }
             list.add(wrkMast);
@@ -410,7 +418,7 @@
 
         Integer crnNo = basDualCrnp.getCrnNo();
 
-        if (wrkMast.getWrkSts() != WrkStsType.INBOUND_DEVICE_RUN.sts) {
+        if (wrkMast.getWrkSts() != WrkStsType.INBOUND_STATION_RUN_COMPLETE.sts) {
             return null;
         }
 
@@ -507,11 +515,14 @@
         commandList.add(pickCommand);
         commandList.add(putCommand);
 
+        Date now = new Date();
         wrkMast.setWrkSts(WrkStsType.INBOUND_RUN.sts);
         wrkMast.setDualCrnNo(crnNo);
         wrkMast.setSystemMsg("");
-        wrkMast.setIoTime(new Date());
+        wrkMast.setIoTime(now);
+        wrkMast.setModiTime(now);
         if (wrkMastService.updateById(wrkMast)) {
+            wrkAnalysisService.markCraneStart(wrkMast, now);
             SendDualCrnCommandParam sendDualCrnCommandParam = new SendDualCrnCommandParam();
             sendDualCrnCommandParam.setCrnNo(crnNo);
             sendDualCrnCommandParam.setStation(station);
@@ -587,8 +598,8 @@
                 continue;
             }
 
-            if (!stationProtocol.isOutEnable()) {
-                News.info("鏀捐揣绔欑偣:{} 娌℃湁鍙嚭淇″彿", stationObjModel.getStationId());
+            if (isRequireOutboundStationOutEnable() && !stationProtocol.isOutEnable()) {
+                News.taskInfo(wrkMast.getWrkNo(), "鏀捐揣绔欑偣:{} 娌℃湁鍙嚭淇″彿", stationObjModel.getStationId());
                 continue;
             }
 
@@ -619,11 +630,14 @@
             commandList.add(pickCommand);
             commandList.add(putCommand);
 
+            Date now = new Date();
             wrkMast.setWrkSts(WrkStsType.OUTBOUND_RUN.sts);
             wrkMast.setDualCrnNo(crnNo);
             wrkMast.setSystemMsg("");
-            wrkMast.setIoTime(new Date());
+            wrkMast.setIoTime(now);
+            wrkMast.setModiTime(now);
             if (wrkMastService.updateById(wrkMast)) {
+                wrkAnalysisService.markCraneStart(wrkMast, now);
                 redisUtil.set(RedisKeyType.DUAL_CRN_OUT_TASK_STATION_INFO.key + wrkMast.getWrkNo(), JSON.toJSONString(stationObjModel, SerializerFeature.DisableCircularReferenceDetect), 60 * 60 * 24);
 
                 SendDualCrnCommandParam sendDualCrnCommandParam = new SendDualCrnCommandParam();
@@ -704,11 +718,14 @@
         commandList.add(pickCommand);
         commandList.add(putCommand);
 
+        Date now = new Date();
         wrkMast.setWrkSts(WrkStsType.LOC_MOVE_RUN.sts);
         wrkMast.setDualCrnNo(crnNo);
         wrkMast.setSystemMsg("");
-        wrkMast.setIoTime(new Date());
+        wrkMast.setIoTime(now);
+        wrkMast.setModiTime(now);
         if (wrkMastService.updateById(wrkMast)) {
+            wrkAnalysisService.markCraneStart(wrkMast, now);
             SendDualCrnCommandParam sendDualCrnCommandParam = new SendDualCrnCommandParam();
             sendDualCrnCommandParam.setCrnNo(crnNo);
             sendDualCrnCommandParam.setStation(station);
@@ -776,6 +793,7 @@
 
         if (idx >= 2) {
             Long updateWrkSts = null;
+            Date now = new Date();
             if (wrkMast.getWrkSts() == WrkStsType.INBOUND_RUN.sts) {
                 updateWrkSts = WrkStsType.COMPLETE_INBOUND.sts;
                 notifyUtils.notify(String.valueOf(SlaveType.DualCrn), basDualCrnp.getCrnNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.DUAL_CRN_IN_TASK_COMPLETE, null);
@@ -802,7 +820,7 @@
                         }
                         //鐢熸垚浠跨湡绔欑偣鏁版嵁
                         StationCommand command = stationThread.getCommand(StationCommandType.WRITE_INFO, 9998, wrkMast.getSourceStaNo(), 0, 0);
-                        MessageQueue.offer(SlaveType.Devp, stationObjModel.getDeviceNo(), new Task(2, command));
+                        stationCommandDispatcher.dispatch(stationObjModel.getDeviceNo(), command, "dual-crn-operate-process", "fake-out-complete-write-info");
                     }
                 }
 
@@ -825,8 +843,10 @@
 
                 wrkMast.setWrkSts(updateWrkSts);
                 wrkMast.setSystemMsg("");
-                wrkMast.setIoTime(new Date());
+                wrkMast.setIoTime(now);
+                wrkMast.setModiTime(now);
                 if (wrkMastService.updateById(wrkMast)) {
+                    wrkAnalysisService.markCraneComplete(wrkMast, now, updateWrkSts);
                     News.info("鍙屽伐浣嶅爢鍨涙満浠诲姟鐘舵�佹洿鏂版垚鍔燂紝鍫嗗灈鏈哄彿={}锛屽伐浣滃彿={}", basDualCrnp.getCrnNo(), taskNo);
                 }
                 redisUtil.set(RedisKeyType.DUAL_CRN_IO_EXECUTE_FINISH_LIMIT.key + basDualCrnp.getCrnNo() + "_" + taskNo, "lock", 10);
@@ -901,6 +921,32 @@
         return false;
     }
 
+    private boolean isRequireOutboundStationOutEnable() {
+        return getSystemConfigBoolean(CRN_OUT_REQUIRE_STATION_OUT_ENABLE_CONFIG, true);
+    }
+
+    private boolean getSystemConfigBoolean(String code, boolean defaultValue) {
+        Object systemConfigMapObj = redisUtil.get(RedisKeyType.SYSTEM_CONFIG_MAP.key);
+        if (!(systemConfigMapObj instanceof Map)) {
+            return defaultValue;
+        }
+        try {
+            Object value = ((Map<?, ?>) systemConfigMapObj).get(code);
+            if (value == null) {
+                return defaultValue;
+            }
+            String text = String.valueOf(value).trim();
+            if ("Y".equalsIgnoreCase(text) || "true".equalsIgnoreCase(text) || "1".equals(text)) {
+                return true;
+            }
+            if ("N".equalsIgnoreCase(text) || "false".equalsIgnoreCase(text) || "0".equals(text)) {
+                return false;
+            }
+        } catch (Exception ignore) {
+        }
+        return defaultValue;
+    }
+
     private boolean reassignTaskLocNo(WrkMast wrkMast, StationObjModel stationObjModel) {
         StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
         if (stationThread == null) {

--
Gitblit v1.9.1