From b376fc91290633b6ff5c51aba95e8b70d30a992c Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期日, 22 三月 2026 12:49:23 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java |   62 ++++++++++++++++++++++++++++++-
 1 files changed, 60 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java b/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
index d697601..e4ee5c4 100644
--- a/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/DualCrnOperateProcessUtils.java
@@ -7,10 +7,12 @@
 import com.core.exception.CoolException;
 import com.zy.asrs.domain.enums.NotifyMsgType;
 import com.zy.asrs.domain.param.CreateLocMoveTaskParam;
+import com.zy.asrs.entity.BasStation;
 import com.zy.asrs.entity.BasDualCrnp;
 import com.zy.asrs.entity.LocMast;
 import com.zy.asrs.entity.WrkMast;
 import com.zy.asrs.service.BasDualCrnpService;
+import com.zy.asrs.service.BasStationService;
 import com.zy.asrs.service.LocMastService;
 import com.zy.asrs.service.WrkMastService;
 import com.zy.asrs.utils.NotifyUtils;
@@ -53,6 +55,8 @@
     @Autowired
     private LocMastService locMastService;
     @Autowired
+    private BasStationService basStationService;
+    @Autowired
     private RedisUtil redisUtil;
     @Autowired
     private WmsOperateUtils wmsOperateUtils;
@@ -60,6 +64,10 @@
     private CommonService commonService;
     @Autowired
     private NotifyUtils notifyUtils;
+    @Autowired
+    private StationOperateProcessUtils stationOperateProcessUtils;
+
+    private static final String CRN_OUT_REQUIRE_STATION_OUT_ENABLE_CONFIG = "crnOutRequireStationOutEnable";
 
     //鍏ュ嚭搴�  ===>>  鍙屽伐浣嶅爢鍨涙満鍏ュ嚭搴撲綔涓氫笅鍙�
     public synchronized void dualCrnIoExecute() {
@@ -549,6 +557,10 @@
 
         Integer crnNo = basDualCrnp.getCrnNo();
 
+        if (isOutboundTargetStationTaskLimitReached(wrkMast)) {
+            return null;
+        }
+
         for (StationObjModel stationObjModel : outStationList) {
             StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
             if (stationThread == null) {
@@ -577,8 +589,8 @@
                 continue;
             }
 
-            if (!stationProtocol.isOutEnable()) {
-                News.info("鏀捐揣绔欑偣:{} 娌℃湁鍙嚭淇″彿", stationObjModel.getStationId());
+            if (isRequireOutboundStationOutEnable() && !stationProtocol.isOutEnable()) {
+                News.taskInfo(wrkMast.getWrkNo(), "鏀捐揣绔欑偣:{} 娌℃湁鍙嚭淇″彿", stationObjModel.getStationId());
                 continue;
             }
 
@@ -627,6 +639,26 @@
             }
         }
         return null;
+    }
+
+    private boolean isOutboundTargetStationTaskLimitReached(WrkMast wrkMast) {
+        if (wrkMast == null || wrkMast.getStaNo() == null) {
+            return false;
+        }
+        BasStation basStation = basStationService.getById(wrkMast.getStaNo());
+        if (basStation == null || basStation.getOutTaskLimit() == null || basStation.getOutTaskLimit() < 0) {
+            return false;
+        }
+        int currentStationTaskCount = stationOperateProcessUtils.getCurrentOutboundTaskCountByTargetStation(wrkMast.getStaNo());
+        if (currentStationTaskCount >= basStation.getOutTaskLimit()) {
+            News.taskInfo(wrkMast.getWrkNo(),
+                    "鐩爣鍑哄簱绔�:{} 宸茶揪鍑哄簱浠诲姟涓婇檺锛屽綋鍓�={}锛屼笂闄�={}",
+                    wrkMast.getStaNo(),
+                    currentStationTaskCount,
+                    basStation.getOutTaskLimit());
+            return true;
+        }
+        return false;
     }
 
     private synchronized SendDualCrnCommandParam crnExecuteLocMove(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread, WrkMast wrkMast, int station) {
@@ -871,6 +903,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