From 007ee7bc1b63aa381b3a414952bbf41aeebed60e Mon Sep 17 00:00:00 2001
From: Administrator <XS@163.COM>
Date: 星期一, 27 四月 2026 16:32:19 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java |   75 ++++++++++++++++++++++++++++++++-----
 1 files changed, 64 insertions(+), 11 deletions(-)

diff --git a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
index 729790b..ca02361 100644
--- a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
@@ -61,7 +61,7 @@
     @Autowired
     private MainProcessTaskSubmitter mainProcessTaskSubmitter;
 
-    public synchronized void crnIoExecute() {
+    public void crnIoExecute() {
         Object systemConfigMapObj = redisUtil.get(RedisKeyType.SYSTEM_CONFIG_MAP.key);
         if (systemConfigMapObj != null) {
             HashMap<String, String> systemConfigMap = (HashMap<String, String>) systemConfigMapObj;
@@ -91,7 +91,7 @@
     }
 
     //鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
-    public synchronized void crnIoExecuteNormal() {
+    public void crnIoExecuteNormal() {
         List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
         for (BasCrnp basCrnp : basCrnps) {
             crnIoExecuteNormal(basCrnp);
@@ -173,7 +173,7 @@
         }
     }
 
-    private synchronized boolean crnExecuteIn(BasCrnp basCrnp, CrnThread crnThread) {
+    private boolean crnExecuteIn(BasCrnp basCrnp, CrnThread crnThread) {
         CrnProtocol crnProtocol = crnThread.getStatus();
         if(crnProtocol == null){
             return false;
@@ -218,6 +218,12 @@
 
             if (!stationProtocol.isInEnable()) {
                 News.taskInfo(stationProtocol.getTaskNo(), "鍙栬揣绔欑偣:{} 娌℃湁鍙叆淇″彿", stationObjModel.getStationId());
+                logTraceLimited("crn_in_wait_signal_" + crnNo + "_" + stationObjModel.getStationId(), 3,
+                        "[WCS Trace][鍫嗗灈鏈哄叆搴揮 鍙栬揣绔欑偣涓嶅彲鍏ャ�俢rnNo={}锛宻tationId={}锛宻tationTaskNo={}锛宎utoing={}锛宭oading={}锛宨nEnable={}锛宱utEnable={}锛宺unBlock={}锛宐arcode={}锛宼argetStaNo={}锛宑rnStatus={}锛宑rnTaskNo={}锛宑rnAlarm={}",
+                        crnNo, stationObjModel.getStationId(), stationProtocol.getTaskNo(),
+                        stationProtocol.isAutoing(), stationProtocol.isLoading(), stationProtocol.isInEnable(),
+                        stationProtocol.isOutEnable(), stationProtocol.isRunBlock(), stationProtocol.getBarcode(),
+                        stationProtocol.getTargetStaNo(), crnProtocol.getStatus(), crnProtocol.getTaskNo(), crnProtocol.getAlarm());
                 continue;
             }
 
@@ -254,6 +260,10 @@
             String sourceLocNo = Utils.getLocNo(stationObjModel.getDeviceRow(), stationObjModel.getDeviceBay(), stationObjModel.getDeviceLev());
 
             CrnCommand command = crnThread.getPickAndPutCommand(sourceLocNo, wrkMast.getLocNo(), wrkMast.getWrkNo(), crnNo);
+            logTraceLimited("crn_in_dispatch_" + wrkMast.getWrkNo(), 3,
+                    "[WCS Trace][鍫嗗灈鏈哄叆搴揮 鍑嗗涓嬪彂鍫嗗灈鏈哄叆搴撳懡浠ゃ�俢rnNo={}锛寃rkNo={}锛宻ourceStationId={}锛宻ourceLocNo={}锛宼argetLocNo={}锛宻tationTaskNo={}锛宑rnStatus={}锛宑rnTaskNo={}锛宑rnAlarm={}",
+                    crnNo, wrkMast.getWrkNo(), stationObjModel.getStationId(), sourceLocNo, wrkMast.getLocNo(),
+                    stationProtocol.getTaskNo(), crnProtocol.getStatus(), crnProtocol.getTaskNo(), crnProtocol.getAlarm());
 
             wrkMast.setWrkSts(WrkStsType.INBOUND_RUN.sts);
             wrkMast.setCrnNo(crnNo);
@@ -269,7 +279,7 @@
         return false;
     }
 
-    private synchronized boolean crnExecuteOut(BasCrnp basCrnp, CrnThread crnThread) {
+    private boolean crnExecuteOut(BasCrnp basCrnp, CrnThread crnThread) {
         CrnProtocol crnProtocol = crnThread.getStatus();
         if(crnProtocol == null){
             return false;
@@ -336,6 +346,12 @@
 
                 if (!stationProtocol.isOutEnable()) {
                     News.info("鏀捐揣绔欑偣:{} 娌℃湁鍙嚭淇″彿", stationObjModel.getStationId());
+                    logTraceLimited("crn_out_wait_signal_" + crnNo + "_" + stationObjModel.getStationId(), 3,
+                            "[WCS Trace][鍫嗗灈鏈哄嚭搴揮 鏀捐揣绔欑偣涓嶅彲鍑恒�俢rnNo={}锛宻tationId={}锛寃rkNo={}锛宎utoing={}锛宭oading={}锛宨nEnable={}锛宱utEnable={}锛宺unBlock={}锛宻tationTaskNo={}锛宼argetStaNo={}锛宑rnStatus={}锛宑rnTaskNo={}锛宑rnAlarm={}",
+                            crnNo, stationObjModel.getStationId(), wrkMast.getWrkNo(),
+                            stationProtocol.isAutoing(), stationProtocol.isLoading(), stationProtocol.isInEnable(),
+                            stationProtocol.isOutEnable(), stationProtocol.isRunBlock(), stationProtocol.getTaskNo(),
+                            stationProtocol.getTargetStaNo(), crnProtocol.getStatus(), crnProtocol.getTaskNo(), crnProtocol.getAlarm());
                     continue;
                 }
 
@@ -361,6 +377,11 @@
                 String targetLocNo = Utils.getLocNo(stationObjModel.getDeviceRow(), stationObjModel.getDeviceBay(), stationObjModel.getDeviceLev());
 
                 CrnCommand command = crnThread.getPickAndPutCommand(wrkMast.getSourceLocNo(), targetLocNo, wrkMast.getWrkNo(), crnNo);
+                logTraceLimited("crn_out_dispatch_" + wrkMast.getWrkNo(), 3,
+                        "[WCS Trace][鍫嗗灈鏈哄嚭搴揮 鍑嗗涓嬪彂鍫嗗灈鏈哄嚭搴撳懡浠ゃ�俢rnNo={}锛寃rkNo={}锛宼argetStationId={}锛宻ourceLocNo={}锛宼argetLocNo={}锛宑rnStatus={}锛宑rnTaskNo={}锛宑rnAlarm={}",
+                        crnNo, wrkMast.getWrkNo(), stationObjModel.getStationId(),
+                        wrkMast.getSourceLocNo(), targetLocNo, crnProtocol.getStatus(),
+                        crnProtocol.getTaskNo(), crnProtocol.getAlarm());
 
                 wrkMast.setWrkSts(WrkStsType.OUTBOUND_RUN.sts);
                 wrkMast.setCrnNo(crnNo);
@@ -377,7 +398,7 @@
         return false;
     }
 
-    private synchronized boolean crnExecuteInPlanner(BasCrnp basCrnp, CrnThread crnThread, WrkMast wrkMast) {
+    private boolean crnExecuteInPlanner(BasCrnp basCrnp, CrnThread crnThread, WrkMast wrkMast) {
         CrnProtocol crnProtocol = crnThread.getStatus();
         if (crnProtocol == null) {
             return false;
@@ -470,7 +491,7 @@
         return false;
     }
 
-    private synchronized boolean crnExecuteOutPlanner(BasCrnp basCrnp, CrnThread crnThread, WrkMast wrkMast) {
+    private boolean crnExecuteOutPlanner(BasCrnp basCrnp, CrnThread crnThread, WrkMast wrkMast) {
         CrnProtocol crnProtocol = crnThread.getStatus();
         if (crnProtocol == null) {
             return false;
@@ -555,7 +576,7 @@
         return false;
     }
 
-    private synchronized boolean crnExecuteLocTransfer(BasCrnp basCrnp, CrnThread crnThread) {
+    private boolean crnExecuteLocTransfer(BasCrnp basCrnp, CrnThread crnThread) {
         CrnProtocol crnProtocol = crnThread.getStatus();
         if(crnProtocol == null){
             return false;
@@ -610,7 +631,7 @@
     }
 
     //鍫嗗灈鏈轰换鍔℃墽琛屽畬鎴�
-    public synchronized void crnIoExecuteFinish() {
+    public void crnIoExecuteFinish() {
         List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
         for (BasCrnp basCrnp : basCrnps) {
             crnIoExecuteFinish(basCrnp);
@@ -691,7 +712,7 @@
         }
     }
 
-    public synchronized void plannerExecute() {
+    public void plannerExecute() {
         List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
         for (BasCrnp basCrnp : basCrnps) {
             plannerExecute(basCrnp);
@@ -796,7 +817,7 @@
         }
     }
 
-    private synchronized boolean crnExecuteMovePlanner(BasCrnp basCrnp, CrnThread crnThread, WrkMast wrkMast) {
+    private boolean crnExecuteMovePlanner(BasCrnp basCrnp, CrnThread crnThread, WrkMast wrkMast) {
         CrnProtocol crnProtocol = crnThread.getStatus();
         if (crnProtocol == null) {
             return false;
@@ -852,6 +873,15 @@
     }
 
     public void submitCrnIoTasks(MainProcessLane lane, long minIntervalMs) {
+        mainProcessTaskSubmitter.submitSerialTask(
+                MainProcessLane.CRN_SCAN,
+                "submitCrnIoTasks",
+                minIntervalMs,
+                () -> submitCrnIoTasksInternal(lane, minIntervalMs)
+        );
+    }
+
+    private void submitCrnIoTasksInternal(MainProcessLane lane, long minIntervalMs) {
         List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
         for (BasCrnp basCrnp : basCrnps) {
             if (basCrnp == null || basCrnp.getCrnNo() == null) {
@@ -873,6 +903,15 @@
     }
 
     public void submitCrnIoExecuteFinishTasks(MainProcessLane lane, long minIntervalMs) {
+        mainProcessTaskSubmitter.submitSerialTask(
+                MainProcessLane.CRN_SCAN,
+                "submitCrnIoExecuteFinishTasks",
+                minIntervalMs,
+                () -> submitCrnIoExecuteFinishTasksInternal(lane, minIntervalMs)
+        );
+    }
+
+    private void submitCrnIoExecuteFinishTasksInternal(MainProcessLane lane, long minIntervalMs) {
         List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>());
         for (BasCrnp basCrnp : basCrnps) {
             if (basCrnp == null || basCrnp.getCrnNo() == null) {
@@ -889,8 +928,22 @@
         }
     }
 
+    private void logTraceLimited(String lockKey, int seconds, String format, Object... arguments) {
+        String redisKey = RedisKeyType.LOG_LIMIT.key + "wcs_trace_" + lockKey;
+        try {
+            Object lock = redisUtil.get(redisKey);
+            if (lock != null) {
+                return;
+            }
+            redisUtil.set(redisKey, "lock", seconds);
+        } catch (Exception e) {
+            // 璇婃柇鏃ュ織涓嶈兘褰卞搷涓绘祦绋嬨��
+        }
+        News.info(format, arguments);
+    }
+
     //妫�娴嬫祬搴撲綅鐘舵��
-    public synchronized boolean checkShallowLocStatus(String locNo, Integer taskNo) {
+    public boolean checkShallowLocStatus(String locNo, Integer taskNo) {
         String checkDeepLocOutTaskBlockReport = "Y";
         Object systemConfigMapObj = redisUtil.get(RedisKeyType.SYSTEM_CONFIG_MAP.key);
         if (systemConfigMapObj != null) {

--
Gitblit v1.9.1