From 44e258e4f5370a14e92e3c15bccd32e1e4d7280c Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 02 四月 2026 23:17:25 +0800
Subject: [PATCH] #路径清理

---
 src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java |  187 ++++++++++++++++++++++++++++++++--------------
 1 files changed, 129 insertions(+), 58 deletions(-)

diff --git a/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java b/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
index e4ee5c4..1d415b0 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;
@@ -31,6 +33,8 @@
 import com.zy.core.model.param.SendDualCrnCommandParam;
 import com.zy.core.model.protocol.DualCrnProtocol;
 import com.zy.core.model.protocol.StationProtocol;
+import com.zy.core.task.MainProcessLane;
+import com.zy.core.task.MainProcessTaskSubmitter;
 import com.zy.core.thread.DualCrnThread;
 import com.zy.core.thread.StationThread;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -66,6 +70,12 @@
     private NotifyUtils notifyUtils;
     @Autowired
     private StationOperateProcessUtils stationOperateProcessUtils;
+    @Autowired
+    private WrkAnalysisService wrkAnalysisService;
+    @Autowired
+    private StationCommandDispatcher stationCommandDispatcher;
+    @Autowired
+    private MainProcessTaskSubmitter mainProcessTaskSubmitter;
 
     private static final String CRN_OUT_REQUIRE_STATION_OUT_ENABLE_CONFIG = "crnOutRequireStationOutEnable";
 
@@ -73,38 +83,42 @@
     public synchronized void dualCrnIoExecute() {
         List<BasDualCrnp> basDualCrnps = basDualCrnpService.list(new QueryWrapper<>());
         for (BasDualCrnp basDualCrnp : basDualCrnps) {
-            DualCrnThread dualCrnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, basDualCrnp.getCrnNo());
-            if(dualCrnThread == null){
-                continue;
-            }
-
-            DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus();
-            if(dualCrnProtocol == null){
-                continue;
-            }
-
-            List<WrkMast> wrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>()
-                    .eq("dual_crn_no", basDualCrnp.getCrnNo())
-                    .in("wrk_sts", WrkStsType.INBOUND_RUN.sts, WrkStsType.OUTBOUND_RUN.sts, WrkStsType.LOC_MOVE_RUN.sts)
-            );
-            if(wrkMasts.size() >= 2){
-                continue;
-            }
-
-            if(dualCrnProtocol.getMode() != DualCrnModeType.AUTO.id) {
-                continue;
-            }
-
-            if(dualCrnProtocol.getAlarm() != 0) {
-                continue;
-            }
-
-            if(dualCrnProtocol.getTaskSend() != 0 || dualCrnProtocol.getTaskSendTwo() != 0) {
-                continue;
-            }
-
-            this.crnExecute(basDualCrnp, dualCrnThread);
+            dualCrnIoExecute(basDualCrnp);
         }
+    }
+
+    public void dualCrnIoExecute(BasDualCrnp basDualCrnp) {
+        DualCrnThread dualCrnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, basDualCrnp.getCrnNo());
+        if(dualCrnThread == null){
+            return;
+        }
+
+        DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus();
+        if(dualCrnProtocol == null){
+            return;
+        }
+
+        List<WrkMast> wrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>()
+                .eq("dual_crn_no", basDualCrnp.getCrnNo())
+                .in("wrk_sts", WrkStsType.INBOUND_RUN.sts, WrkStsType.OUTBOUND_RUN.sts, WrkStsType.LOC_MOVE_RUN.sts)
+        );
+        if(wrkMasts.size() >= 2){
+            return;
+        }
+
+        if(dualCrnProtocol.getMode() != DualCrnModeType.AUTO.id) {
+            return;
+        }
+
+        if(dualCrnProtocol.getAlarm() != 0) {
+            return;
+        }
+
+        if(dualCrnProtocol.getTaskSend() != 0 || dualCrnProtocol.getTaskSendTwo() != 0) {
+            return;
+        }
+
+        this.crnExecute(basDualCrnp, dualCrnThread);
     }
 
     private synchronized void crnExecute(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) {
@@ -354,7 +368,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);
@@ -412,7 +426,7 @@
 
         Integer crnNo = basDualCrnp.getCrnNo();
 
-        if (wrkMast.getWrkSts() != WrkStsType.INBOUND_DEVICE_RUN.sts) {
+        if (wrkMast.getWrkSts() != WrkStsType.INBOUND_STATION_RUN_COMPLETE.sts) {
             return null;
         }
 
@@ -509,11 +523,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);
@@ -621,11 +638,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();
@@ -706,11 +726,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);
@@ -727,33 +750,78 @@
     public synchronized void dualCrnIoExecuteFinish() {
         List<BasDualCrnp> basDualCrnps = basDualCrnpService.list(new QueryWrapper<>());
         for (BasDualCrnp basDualCrnp : basDualCrnps) {
-            DualCrnThread dualCrnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, basDualCrnp.getCrnNo());
-            if(dualCrnThread == null){
-                continue;
-            }
+            dualCrnIoExecuteFinish(basDualCrnp);
+        }
+    }
 
-            DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus();
-            if(dualCrnProtocol == null){
-                continue;
-            }
+    public void dualCrnIoExecuteFinish(BasDualCrnp basDualCrnp) {
+        DualCrnThread dualCrnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, basDualCrnp.getCrnNo());
+        if(dualCrnThread == null){
+            return;
+        }
 
-            if(dualCrnProtocol.getMode() != DualCrnModeType.AUTO.id) {
-                continue;
-            }
+        DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus();
+        if(dualCrnProtocol == null){
+            return;
+        }
 
-            if(dualCrnProtocol.getAlarm() != 0) {
-                continue;
-            }
+        if(dualCrnProtocol.getMode() != DualCrnModeType.AUTO.id) {
+            return;
+        }
 
-            if((dualCrnProtocol.getTaskNo() > 0 && dualCrnProtocol.getDeviceTaskNo() > 0) && dualCrnProtocol.getTaskSend() == 0 && dualCrnProtocol.getStatus().equals(DualCrnStatusType.WAITING.id)) {
-                executeFinish(basDualCrnp, dualCrnThread, dualCrnProtocol, dualCrnProtocol.getTaskNo(), 1);
-                continue;
-            }
+        if(dualCrnProtocol.getAlarm() != 0) {
+            return;
+        }
 
-            if((dualCrnProtocol.getTaskNoTwo() > 0 && dualCrnProtocol.getDeviceTaskNoTwo() > 0) && dualCrnProtocol.getTaskSendTwo() == 0 && dualCrnProtocol.getStatusTwo().equals(DualCrnStatusType.WAITING.id)) {
-                executeFinish(basDualCrnp, dualCrnThread, dualCrnProtocol, dualCrnProtocol.getTaskNoTwo(), 2);
+        if((dualCrnProtocol.getTaskNo() > 0 && dualCrnProtocol.getDeviceTaskNo() > 0) && dualCrnProtocol.getTaskSend() == 0 && dualCrnProtocol.getStatus().equals(DualCrnStatusType.WAITING.id)) {
+            executeFinish(basDualCrnp, dualCrnThread, dualCrnProtocol, dualCrnProtocol.getTaskNo(), 1);
+            return;
+        }
+
+        if((dualCrnProtocol.getTaskNoTwo() > 0 && dualCrnProtocol.getDeviceTaskNoTwo() > 0) && dualCrnProtocol.getTaskSendTwo() == 0 && dualCrnProtocol.getStatusTwo().equals(DualCrnStatusType.WAITING.id)) {
+            executeFinish(basDualCrnp, dualCrnThread, dualCrnProtocol, dualCrnProtocol.getTaskNoTwo(), 2);
+        }
+    }
+
+    public void submitDualCrnIoTasks(long minIntervalMs) {
+        submitDualCrnIoTasks(MainProcessLane.DUAL_CRN_IO, minIntervalMs);
+    }
+
+    public void submitDualCrnIoTasks(MainProcessLane lane, long minIntervalMs) {
+        List<BasDualCrnp> basDualCrnps = basDualCrnpService.list(new QueryWrapper<>());
+        for (BasDualCrnp basDualCrnp : basDualCrnps) {
+            Integer crnNo = basDualCrnp == null ? null : basDualCrnp.getCrnNo();
+            if (crnNo == null) {
                 continue;
             }
+            mainProcessTaskSubmitter.submitKeyedSerialTask(
+                    lane,
+                    crnNo,
+                    "dualCrnIoExecute",
+                    minIntervalMs,
+                    () -> dualCrnIoExecute(basDualCrnp)
+            );
+        }
+    }
+
+    public void submitDualCrnIoExecuteFinishTasks(long minIntervalMs) {
+        submitDualCrnIoExecuteFinishTasks(MainProcessLane.DUAL_CRN_IO_FINISH, minIntervalMs);
+    }
+
+    public void submitDualCrnIoExecuteFinishTasks(MainProcessLane lane, long minIntervalMs) {
+        List<BasDualCrnp> basDualCrnps = basDualCrnpService.list(new QueryWrapper<>());
+        for (BasDualCrnp basDualCrnp : basDualCrnps) {
+            Integer crnNo = basDualCrnp == null ? null : basDualCrnp.getCrnNo();
+            if (crnNo == null) {
+                continue;
+            }
+            mainProcessTaskSubmitter.submitKeyedSerialTask(
+                    lane,
+                    crnNo,
+                    "dualCrnIoExecuteFinish",
+                    minIntervalMs,
+                    () -> dualCrnIoExecuteFinish(basDualCrnp)
+            );
         }
     }
 
@@ -778,6 +846,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);
@@ -804,7 +873,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");
                     }
                 }
 
@@ -827,8 +896,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);

--
Gitblit v1.9.1