From 9b8ff50b66361c4b56074b7586b2d5951ecf2091 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 02 四月 2026 15:02:14 +0800
Subject: [PATCH] #优化运行速度

---
 src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java |  155 ++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 104 insertions(+), 51 deletions(-)

diff --git a/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java b/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
index 834800b..1d415b0 100644
--- a/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
@@ -33,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;
@@ -72,6 +74,8 @@
     private WrkAnalysisService wrkAnalysisService;
     @Autowired
     private StationCommandDispatcher stationCommandDispatcher;
+    @Autowired
+    private MainProcessTaskSubmitter mainProcessTaskSubmitter;
 
     private static final String CRN_OUT_REQUIRE_STATION_OUT_ENABLE_CONFIG = "crnOutRequireStationOutEnable";
 
@@ -79,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) {
@@ -742,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)
+            );
         }
     }
 

--
Gitblit v1.9.1