From 1699cafdfb76f354882ee5e6142e1b024de32c64 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 27 四月 2026 13:03:18 +0800
Subject: [PATCH] fix: stop labeling undirected topology as directional

---
 src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java |  307 ++++++++++++++++++++++-----------------------------
 1 files changed, 133 insertions(+), 174 deletions(-)

diff --git a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
index 889589e..79078ef 100644
--- a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
@@ -2,7 +2,6 @@
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
@@ -38,15 +37,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
 
 @Component
 public class CrnOperateProcessUtils {
@@ -76,15 +67,7 @@
 
     private static final String CRN_OUT_REQUIRE_STATION_OUT_ENABLE_CONFIG = "crnOutRequireStationOutEnable";
 
-    public synchronized void crnIoExecute() {
-        Set<Integer> crnMoveBlockedCrnNos = executeCrnMoveTask();
-        List<BasCrnp> basCrnps = basCrnpService.list(new QueryWrapper<>());
-        for (BasCrnp basCrnp : basCrnps) {
-            crnIoExecute(basCrnp, crnMoveBlockedCrnNos);
-        }
-    }
-
-    public void crnIoExecute(BasCrnp basCrnp, Set<Integer> crnMoveBlockedCrnNos) {
+    public void crnIoExecute(BasCrnp basCrnp) {
         if (basCrnp == null || basCrnp.getCrnNo() == null) {
             return;
         }
@@ -92,16 +75,16 @@
         if (systemConfigMapObj != null) {
             HashMap<String, String> systemConfigMap = (HashMap<String, String>) systemConfigMapObj;
             if (systemConfigMap.get("crnRunMethod").equals("solver")) {
-                plannerExecute(basCrnp, crnMoveBlockedCrnNos);
+                plannerExecute(basCrnp);
             }else {
-                crnIoExecuteNormal(basCrnp, crnMoveBlockedCrnNos);
+                crnIoExecuteNormal(basCrnp);
             }
         }
     }
 
     //鍏ュ嚭搴�  ===>>  鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
-    private void crnIoExecuteNormal(BasCrnp currentCrn, Set<Integer> crnMoveBlockedCrnNos) {
-        if (currentCrn == null || currentCrn.getCrnNo() == null || crnMoveBlockedCrnNos.contains(currentCrn.getCrnNo())) {
+    private void crnIoExecuteNormal(BasCrnp currentCrn) {
+        if (currentCrn == null || currentCrn.getCrnNo() == null) {
             return;
         }
 
@@ -118,7 +101,12 @@
 
         long runningCount = wrkMastService.count(new QueryWrapper<WrkMast>()
                 .eq("crn_no", crnNo)
-                .in("wrk_sts", WrkStsType.INBOUND_RUN.sts, WrkStsType.OUTBOUND_RUN.sts, WrkStsType.LOC_MOVE_RUN.sts, WrkStsType.CRN_MOVE_RUN.sts));
+                .in("wrk_sts",
+                        WrkStsType.INBOUND_RUN.sts
+                        , WrkStsType.OUTBOUND_RUN.sts
+                        , WrkStsType.LOC_MOVE_RUN.sts
+                        , WrkStsType.CRN_MOVE_RUN.sts
+                ));
         if (runningCount > 0) {
             return;
         }
@@ -135,6 +123,12 @@
 
         Object clearLock = redisUtil.get(RedisKeyType.CLEAR_CRN_TASK_LIMIT.key + crnNo);
         if (clearLock != null) {
+            return;
+        }
+
+        //鎵ц绉诲姩浠诲姟
+        boolean executed = executeCrnMoveTask(crnThread, crnProtocol);
+        if (executed) {
             return;
         }
 
@@ -161,7 +155,7 @@
             if (wrkMast.getWrkSts() != null && wrkMast.getWrkSts() == WrkStsType.INBOUND_STATION_RUN_COMPLETE.sts) {
                 boolean result = this.crnExecuteInPlanner(currentCrn, crnThread, wrkMast);
                 if (result) {
-                    crnProtocol.setLastIo("O");
+                    crnProtocol.setLastIo("I");
                     return;
                 }
                 continue;
@@ -170,7 +164,7 @@
             if (wrkMast.getWrkSts() != null && wrkMast.getWrkSts() == WrkStsType.NEW_OUTBOUND.sts) {
                 boolean result = this.crnExecuteOutPlanner(currentCrn, crnThread, wrkMast);
                 if (result) {
-                    crnProtocol.setLastIo("I");
+                    crnProtocol.setLastIo("O");
                     return;
                 }
                 continue;
@@ -375,7 +369,7 @@
             return false;
         }
 
-        if (isOutboundStationTaskLimitReached()) {
+        if (isConveyorStationTaskLimitReached()) {
             return false;
         }
 
@@ -386,6 +380,12 @@
         }
 
         if (!allowBatchOutboundExecute(wrkMast, true)) {
+            return false;
+        }
+
+        //妫�鏌ユ槸鍚︿负鍑哄簱妯″紡
+        if(!checkOutTargetStationIoMode(wrkMast)) {
+            News.taskInfo(wrkMast.getWrkNo(), "鍫嗗灈鏈�:{} 浠诲姟:{}绂佹鎵ц锛屽嚭搴撶珯:{} 涓嶅浜庡嚭搴撴ā寮�", basCrnp.getCrnNo(), wrkMast.getWrkNo(), wrkMast.getStaNo());
             return false;
         }
 
@@ -586,15 +586,17 @@
         return false;
     }
 
-    private boolean isOutboundStationTaskLimitReached() {
-        int stationMaxTaskCount = getSystemConfigInt("stationMaxTaskCountLimit", 30);
-        if (stationMaxTaskCount <= 0) {
+    private boolean isConveyorStationTaskLimitReached() {
+        int conveyorStationTaskLimit = getSystemConfigInt("conveyorStationTaskLimit", 30);
+        if (conveyorStationTaskLimit <= 0) {
             return false;
         }
 
         int currentStationTaskCount = stationOperateProcessUtils.getCurrentStationTaskCount();
-        if (currentStationTaskCount >= stationMaxTaskCount) {
-            News.warn("杈撻�佺珯鐐逛换鍔℃暟閲忚揪鍒颁笂闄愶紝宸插仠姝换鍔′笅鍙戙�傚綋鍓嶄换鍔℃暟={}锛屼笂闄�={}", currentStationTaskCount, stationMaxTaskCount);
+        if (currentStationTaskCount >= conveyorStationTaskLimit) {
+            News.warn("杈撻�佺珯鐐逛换鍔℃暟閲忚揪鍒颁笂闄愶紝宸插仠姝换鍔′笅鍙戙�傚綋鍓嶄换鍔℃暟={}锛屼笂闄�={}",
+                    currentStationTaskCount,
+                    conveyorStationTaskLimit);
             return true;
         }
         return false;
@@ -616,6 +618,36 @@
                     currentStationTaskCount,
                     basStation.getOutTaskLimit());
             return true;
+        }
+        return false;
+    }
+
+    //妫�鏌ユ槸鍚︿负鍑哄簱妯″紡
+    private boolean checkOutTargetStationIoMode(WrkMast wrkMast) {
+        if (wrkMast == null || wrkMast.getStaNo() == null) {
+            return false;
+        }
+        BasStation basStation = basStationService.getById(wrkMast.getStaNo());
+        if (basStation == null) {
+            return false;
+        }
+
+        StationThread targetStationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, basStation.getDeviceNo());
+        if (targetStationThread == null) {
+            return false;
+        }
+
+        StationProtocol targetStationProtocol = targetStationThread.getStatusMap().get(wrkMast.getStaNo());
+        if (targetStationProtocol == null) {
+            return false;
+        }
+
+        if (targetStationProtocol.getIoMode() == null) {
+            return false;
+        }
+
+        if (targetStationProtocol.getIoMode() == 2) {
+            return true;//鍑哄簱妯″紡
         }
         return false;
     }
@@ -659,14 +691,6 @@
         return defaultValue;
     }
 
-    //鍫嗗灈鏈轰换鍔℃墽琛屽畬鎴�
-    public synchronized void crnIoExecuteFinish() {
-        List<BasCrnp> basCrnps = basCrnpService.list(new QueryWrapper<>());
-        for (BasCrnp basCrnp : basCrnps) {
-            crnIoExecuteFinish(basCrnp);
-        }
-    }
-
     public void crnIoExecuteFinish(BasCrnp basCrnp) {
         if (basCrnp == null || basCrnp.getCrnNo() == null) {
             return;
@@ -696,65 +720,59 @@
                 return;
             }
 
-            Long updateWrkSts = null;
-            Date now = new Date();
-            if(wrkMast.getWrkSts() == WrkStsType.INBOUND_RUN.sts){
-                updateWrkSts = WrkStsType.COMPLETE_INBOUND.sts;
-                notifyUtils.notify(String.valueOf(SlaveType.Crn), crnProtocol.getCrnNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.CRN_IN_TASK_COMPLETE, null);
-            }else if(wrkMast.getWrkSts() == WrkStsType.OUTBOUND_RUN.sts){
-                updateWrkSts = WrkStsType.OUTBOUND_RUN_COMPLETE.sts;
-                notifyUtils.notify(String.valueOf(SlaveType.Crn), crnProtocol.getCrnNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.CRN_OUT_TASK_COMPLETE, null);
-
-                List<StationObjModel> outStationList = basCrnp.getOutStationList$();
-                if(outStationList.isEmpty()){
-                    News.info("鍫嗗灈鏈�:{} 鍑哄簱绔欑偣鏈缃�", basCrnp.getCrnNo());
+            String ownerLockKey = RedisKeyType.CRN_IO_EXECUTE_FINISH_OWNER_LOCK.key + wrkMast.getWrkNo();
+            String ownerLockToken = UUID.randomUUID().toString();
+            if (!redisUtil.trySetStringIfAbsent(ownerLockKey, ownerLockToken, 10)) {
+                return;
+            }
+            try {
+                wrkMast = wrkMastService.selectByWorkNo(crnProtocol.getTaskNo());
+                if (wrkMast == null) {
+                    News.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
                     return;
                 }
 
-                StationObjModel outStationObjModel = null;
-                for (StationObjModel stationObjModel : outStationList) {
-                    if (stationObjModel.getStationId().equals(wrkMast.getSourceStaNo())) {
-                        outStationObjModel = stationObjModel;
-                        break;
-                    }
+                Long currentWrkSts = wrkMast.getWrkSts();
+                Long updateWrkSts = null;
+                Date now = new Date();
+                if(currentWrkSts == WrkStsType.INBOUND_RUN.sts){
+                    updateWrkSts = WrkStsType.COMPLETE_INBOUND.sts;
+                    notifyUtils.notify(String.valueOf(SlaveType.Crn), crnProtocol.getCrnNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.CRN_IN_TASK_COMPLETE, null);
+                }else if(currentWrkSts == WrkStsType.OUTBOUND_RUN.sts){
+                    updateWrkSts = WrkStsType.OUTBOUND_RUN_COMPLETE.sts;
+                    notifyUtils.notify(String.valueOf(SlaveType.Crn), crnProtocol.getCrnNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.CRN_OUT_TASK_COMPLETE, null);
+                }else if(currentWrkSts == WrkStsType.LOC_MOVE_RUN.sts){
+                    updateWrkSts = WrkStsType.COMPLETE_LOC_MOVE.sts;
+                    notifyUtils.notify(String.valueOf(SlaveType.Crn), crnProtocol.getCrnNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.CRN_TRANSFER_TASK_COMPLETE, null);
+                }else if(currentWrkSts == WrkStsType.CRN_MOVE_RUN.sts){
+                    updateWrkSts = WrkStsType.COMPLETE_CRN_MOVE.sts;
+                }else{
+                    News.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗗伐浣滅姸鎬佸紓甯搞�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
+                    return;
                 }
-                redisUtil.set(RedisKeyType.CRN_OUT_TASK_COMPLETE_STATION_INFO.key + wrkMast.getWrkNo(), JSON.toJSONString(outStationObjModel, SerializerFeature.DisableCircularReferenceDetect), 60 * 60 * 24);
-            }else if(wrkMast.getWrkSts() == WrkStsType.LOC_MOVE_RUN.sts){
-                updateWrkSts = WrkStsType.COMPLETE_LOC_MOVE.sts;
-                notifyUtils.notify(String.valueOf(SlaveType.Crn), crnProtocol.getCrnNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.CRN_TRANSFER_TASK_COMPLETE, null);
-            }else if(wrkMast.getWrkSts() == WrkStsType.CRN_MOVE_RUN.sts){
-                updateWrkSts = WrkStsType.COMPLETE_CRN_MOVE.sts;
-            }else{
-                News.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗗伐浣滅姸鎬佸紓甯搞�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
-                return;
-            }
 
-            wrkMast.setWrkSts(updateWrkSts);
-            wrkMast.setSystemMsg("");
-            wrkMast.setIoTime(now);
-            wrkMast.setModiTime(now);
-            if (wrkMastService.updateById(wrkMast)) {
-                wrkAnalysisService.markCraneComplete(wrkMast, now, updateWrkSts);
-                CrnCommand resetCommand = crnThread.getResetCommand(crnProtocol.getTaskNo(), crnProtocol.getCrnNo());
-                MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, resetCommand));
-                News.info("鍫嗗灈鏈轰换鍔$姸鎬佹洿鏂版垚鍔燂紝鍫嗗灈鏈哄彿={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
+                if (wrkMastService.updateWrkStsByWrkNoAndCurrentWrkSts(wrkMast.getWrkNo(), updateWrkSts, currentWrkSts) > 0) {
+                    wrkMast.setWrkSts(updateWrkSts);
+                    wrkMast.setSystemMsg("");
+                    wrkMast.setIoTime(now);
+                    wrkMast.setModiTime(now);
+                    wrkAnalysisService.markCraneComplete(wrkMast, now, updateWrkSts);
+                    CrnCommand resetCommand = crnThread.getResetCommand(crnProtocol.getTaskNo(), crnProtocol.getCrnNo());
+                    MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, resetCommand));
+                    News.info("鍫嗗灈鏈轰换鍔$姸鎬佹洿鏂版垚鍔燂紝鍫嗗灈鏈哄彿={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
+                    redisUtil.set(RedisKeyType.CRN_IO_EXECUTE_FINISH_LIMIT.key + basCrnp.getCrnNo(), "lock",10);
+                } else {
+                    News.info("鍫嗗灈鏈哄畬鎴愮‘璁よ烦杩囷紝浠诲姟鐘舵�佸凡鍙樺寲銆傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", basCrnp.getCrnNo(), crnProtocol.getTaskNo());
+                }
+            } finally {
+                redisUtil.compareAndDelete(ownerLockKey, ownerLockToken);
             }
-
-            redisUtil.set(RedisKeyType.CRN_IO_EXECUTE_FINISH_LIMIT.key + basCrnp.getCrnNo(), "lock",10);
         }
     }
 
-    public synchronized void plannerExecute() {
-        Set<Integer> crnMoveBlockedCrnNos = executeCrnMoveTask();
-        List<BasCrnp> basCrnps = basCrnpService.list(new QueryWrapper<>());
-        for (BasCrnp basCrnp : basCrnps) {
-            plannerExecute(basCrnp, crnMoveBlockedCrnNos);
-        }
-    }
-
-    private void plannerExecute(BasCrnp basCrnp, Set<Integer> crnMoveBlockedCrnNos) {
+    private void plannerExecute(BasCrnp basCrnp) {
         int nowSec = (int) (System.currentTimeMillis() / 1000);
-        if (basCrnp == null || basCrnp.getCrnNo() == null || crnMoveBlockedCrnNos.contains(basCrnp.getCrnNo())) {
+        if (basCrnp == null || basCrnp.getCrnNo() == null) {
             return;
         }
             String key = RedisKeyType.PLANNER_SCHEDULE.key + "CRN-" + basCrnp.getCrnNo();
@@ -903,76 +921,20 @@
         return false;
     }
 
-    private Set<Integer> executeCrnMoveTask() {
-        List<WrkMast> pendingTaskQueue = wrkMastService.list(new QueryWrapper<WrkMast>()
-                .eq("io_type", WrkIoType.CRN_MOVE.id)
-                .eq("wrk_sts", WrkStsType.NEW_CRN_MOVE.sts)
-                .orderByAsc("appe_time")
-                .orderByAsc("wrk_no"));
-        Set<Integer> blockedCrnNoSet = new HashSet<>();
-        for (WrkMast wrkMast : pendingTaskQueue) {
-            if (wrkMast != null && wrkMast.getCrnNo() != null) {
-                blockedCrnNoSet.add(wrkMast.getCrnNo());
-            }
-        }
-        if (blockedCrnNoSet.isEmpty()) {
-            return blockedCrnNoSet;
-        }
-
-        List<BasCrnp> basCrnps = basCrnpService.list(new QueryWrapper<>());
-        Map<Integer, CrnThread> dispatchThreadMap = new HashMap<>();
-        Map<Integer, CrnProtocol> dispatchProtocolMap = new HashMap<>();
-        for (BasCrnp basCrnp : basCrnps) {
-            if (basCrnp == null || basCrnp.getCrnNo() == null) {
-                continue;
-            }
-
-            Integer crnNo = basCrnp.getCrnNo();
-            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnNo);
-            if (crnThread == null) {
-                continue;
-            }
-
-            CrnProtocol crnProtocol = crnThread.getStatus();
-            if (crnProtocol == null) {
-                continue;
-            }
-
-            long runningCount = wrkMastService.count(new QueryWrapper<WrkMast>()
-                    .eq("crn_no", crnNo)
-                    .in("wrk_sts",
-                            WrkStsType.INBOUND_RUN.sts,
-                            WrkStsType.OUTBOUND_RUN.sts,
-                            WrkStsType.LOC_MOVE_RUN.sts,
-                            WrkStsType.CRN_MOVE_RUN.sts));
-            if (runningCount > 0) {
-                continue;
-            }
-
-            if (!Objects.equals(crnProtocol.getMode(), CrnModeType.AUTO.id)
-                    || !Objects.equals(crnProtocol.getTaskNo(), 0)
-                    || !Objects.equals(crnProtocol.getStatus(), CrnStatusType.IDLE.id)
-                    || !Objects.equals(crnProtocol.getLoaded(), 0)
-                    || !Objects.equals(crnProtocol.getForkPos(), 0)
-                    || !Objects.equals(crnProtocol.getAlarm(), 0)) {
-                continue;
-            }
-
-            Object clearLock = redisUtil.get(RedisKeyType.CLEAR_CRN_TASK_LIMIT.key + crnNo);
-            if (clearLock != null) {
-                continue;
-            }
-
-            dispatchThreadMap.put(crnNo, crnThread);
-            dispatchProtocolMap.put(crnNo, crnProtocol);
-        }
-
-        if (dispatchThreadMap.isEmpty()) {
-            return blockedCrnNoSet;
+    private boolean executeCrnMoveTask(CrnThread crnThread, CrnProtocol crnProtocol) {
+        long runningCount = wrkMastService.count(new QueryWrapper<WrkMast>()
+                .eq("crn_no", crnProtocol.getCrnNo())
+                .in("wrk_sts",
+                        WrkStsType.INBOUND_RUN.sts,
+                        WrkStsType.OUTBOUND_RUN.sts,
+                        WrkStsType.LOC_MOVE_RUN.sts,
+                        WrkStsType.CRN_MOVE_RUN.sts));
+        if (runningCount > 0) {
+            return false;
         }
 
         List<WrkMast> taskQueue = wrkMastService.list(new QueryWrapper<WrkMast>()
-                .in("crn_no", new ArrayList<>(dispatchThreadMap.keySet()))
+                .eq("crn_no", crnProtocol.getCrnNo())
                 .eq("io_type", WrkIoType.CRN_MOVE.id)
                 .eq("wrk_sts", WrkStsType.NEW_CRN_MOVE.sts)
                 .orderByAsc("appe_time")
@@ -983,36 +945,38 @@
                 continue;
             }
 
-            Integer crnNo = wrkMast.getCrnNo();
-            CrnThread crnThread = dispatchThreadMap.get(crnNo);
-            if (crnThread == null || dispatchProtocolMap.get(crnNo) == null) {
+            if (crnProtocol.getBay() == Utils.getBay(wrkMast.getLocNo())) {
+                Date now = new Date();
+                wrkMast.setWrkSts(WrkStsType.COMPLETE_CRN_MOVE.sts);
+                wrkMast.setSystemMsg("鍫嗗灈鏈哄凡鍦ㄧ洰鏍囩偣锛屼换鍔$洿鎺ュ畬鎴�");
+                wrkMast.setIoTime(now);
+                wrkMast.setModiTime(now);
+                if (wrkMastService.updateById(wrkMast)) {
+                    wrkAnalysisService.markCraneStart(wrkMast, now);
+                }
                 continue;
             }
 
-            CrnCommand moveCommand = crnThread.getMoveCommand(wrkMast.getLocNo(), wrkMast.getWrkNo(), crnNo);
+            CrnCommand moveCommand = crnThread.getMoveCommand(wrkMast.getLocNo(), wrkMast.getWrkNo(), crnProtocol.getCrnNo());
             if (moveCommand == null) {
                 continue;
             }
 
             Date now = new Date();
             wrkMast.setWrkSts(WrkStsType.CRN_MOVE_RUN.sts);
-            wrkMast.setCrnNo(crnNo);
             wrkMast.setSystemMsg("");
             wrkMast.setIoTime(now);
             wrkMast.setModiTime(now);
             if (wrkMastService.updateById(wrkMast)) {
                 wrkAnalysisService.markCraneStart(wrkMast, now);
-                MessageQueue.offer(SlaveType.Crn, crnNo, new Task(2, moveCommand));
+                MessageQueue.offer(SlaveType.Crn, crnProtocol.getCrnNo(), new Task(2, moveCommand));
                 News.info("鍫嗗灈鏈虹Щ鍔ㄥ懡浠や笅鍙戞垚鍔燂紝鍫嗗灈鏈哄彿={}锛屽伐浣滃彿={}锛岀洰鏍囦綅={}锛屼换鍔℃暟鎹�={}",
-                        crnNo, wrkMast.getWrkNo(), wrkMast.getLocNo(), JSON.toJSON(moveCommand));
-                return blockedCrnNoSet;
+                        crnProtocol.getCrnNo(), wrkMast.getWrkNo(), wrkMast.getLocNo(), JSON.toJSON(moveCommand));
+                return true;
             }
         }
-        return blockedCrnNoSet;
-    }
 
-    public Set<Integer> executeCrnMoveTaskAndGetBlockedCrnNos() {
-        return executeCrnMoveTask();
+        return false;
     }
 
     public void submitCrnIoTasks(long minIntervalMs) {
@@ -1020,7 +984,6 @@
     }
 
     public void submitCrnIoTasks(MainProcessLane lane, long minIntervalMs) {
-        Set<Integer> blockedCrnNos = executeCrnMoveTaskAndGetBlockedCrnNos();
         List<BasCrnp> basCrnps = basCrnpService.list(new QueryWrapper<>());
         for (BasCrnp basCrnp : basCrnps) {
             Integer crnNo = basCrnp == null ? null : basCrnp.getCrnNo();
@@ -1032,7 +995,7 @@
                     crnNo,
                     "crnIoExecute",
                     minIntervalMs,
-                    () -> crnIoExecute(basCrnp, blockedCrnNos)
+                    () -> crnIoExecute(basCrnp)
             );
         }
     }
@@ -1153,10 +1116,6 @@
         }
 
         if (crnProtocol.getBay() == targetBay) {
-            return false;
-        }
-
-        if (crnProtocol.getLevel() == targetLev) {
             return false;
         }
 

--
Gitblit v1.9.1