From 7e391c99b4d13f915b06fd9838c563e17181636b Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期五, 20 三月 2026 19:08:08 +0800
Subject: [PATCH] #

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

diff --git a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
index ab54c17..4c25c66 100644
--- a/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
+++ b/src/main/java/com/zy/core/utils/CrnOperateProcessUtils.java
@@ -4,6 +4,7 @@
 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;
 import com.zy.asrs.domain.enums.NotifyMsgType;
 import com.zy.asrs.domain.param.CreateLocMoveTaskParam;
@@ -284,10 +285,13 @@
         List<WrkMast> wrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>()
                 .eq("crn_no", crnNo)
                 .eq("wrk_sts", WrkStsType.NEW_OUTBOUND.sts)
-                .orderBy(true, false, "batch_seq")
+                .orderBy(true, true, "batch_seq")
         );
 
         for (WrkMast wrkMast : wrkMasts) {
+            if (!allowBatchOutboundExecute(wrkMast)) {
+                continue;
+            }
             for (StationObjModel stationObjModel : outStationList) {
                 StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
                 if (stationThread == null) {
@@ -467,6 +471,10 @@
 
         Integer crnNo = basCrnp.getCrnNo();
 
+        if (!allowBatchOutboundExecute(wrkMast)) {
+            return false;
+        }
+
         for (StationObjModel stationObjModel : outStationList) {
             StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, stationObjModel.getDeviceNo());
             if (stationThread == null) {
@@ -533,6 +541,72 @@
         return false;
     }
 
+    private boolean allowBatchOutboundExecute(WrkMast wrkMast) {
+        if (wrkMast == null || Cools.isEmpty(wrkMast.getBatch())) {
+            return true;
+        }
+
+        if (Cools.isEmpty(wrkMast.getBatchSeq())) {
+            News.taskInfo(wrkMast.getWrkNo(), "鎵规:{} 缂哄皯鎵规搴忓彿锛屾殏涓嶅厑璁稿爢鍨涙満鍑哄簱", wrkMast.getBatch());
+            return false;
+        }
+
+        WrkMast firstBatchWrkMast = wrkMastService.getOne(new QueryWrapper<WrkMast>()
+                .eq("io_type", WrkIoType.OUT.id)
+                .eq("batch", wrkMast.getBatch())
+                .orderByAsc("batch_seq")
+                .orderByAsc("wrk_no")
+                .last("limit 1"));
+        if (firstBatchWrkMast == null) {
+            return true;
+        }
+
+        if (Cools.isEmpty(firstBatchWrkMast.getBatchSeq())) {
+            News.taskInfo(wrkMast.getWrkNo(), "鎵规:{} 瀛樺湪鏈厤缃壒娆″簭鍙风殑浠诲姟锛屾殏涓嶅厑璁稿爢鍨涙満鍑哄簱", wrkMast.getBatch());
+            return false;
+        }
+
+        boolean currentIsFirstBatchTask = wrkMast.getWrkNo().equals(firstBatchWrkMast.getWrkNo());
+        boolean firstBatchTaskExecuted = firstBatchWrkMast.getWrkSts() != null
+                && !firstBatchWrkMast.getWrkSts().equals(WrkStsType.NEW_OUTBOUND.sts);
+        if (!currentIsFirstBatchTask && !firstBatchTaskExecuted) {
+            News.taskInfo(wrkMast.getWrkNo(), "鎵规:{} 棣栦釜搴忓彿浠诲姟:{} 灏氭湭鎵ц锛屽綋鍓嶄换鍔℃殏涓嶅厑璁稿嚭搴�", wrkMast.getBatch(), firstBatchWrkMast.getWrkNo());
+            return false;
+        }
+
+        int batchRunningLimit = getSystemConfigInt("crnOutBatchRunningLimit", 5);
+        if (batchRunningLimit <= 0) {
+            return true;
+        }
+
+        long batchRunningCount = wrkMastService.count(new QueryWrapper<WrkMast>()
+                .eq("io_type", WrkIoType.OUT.id)
+                .eq("batch", wrkMast.getBatch())
+                .notIn("wrk_sts",
+                        WrkStsType.NEW_OUTBOUND.sts,
+                        WrkStsType.COMPLETE_OUTBOUND.sts,
+                        WrkStsType.SETTLE_OUTBOUND.sts));
+        if (batchRunningCount >= batchRunningLimit) {
+            News.taskInfo(wrkMast.getWrkNo(), "鎵规:{} 鎵ц涓换鍔℃暟杈惧埌涓婇檺锛屽綋鍓�={}锛屼笂闄�={}", wrkMast.getBatch(), batchRunningCount, batchRunningLimit);
+            return false;
+        }
+
+        return true;
+    }
+
+    private int getSystemConfigInt(String code, int defaultValue) {
+        Object systemConfigMapObj = redisUtil.get(RedisKeyType.SYSTEM_CONFIG_MAP.key);
+        if (systemConfigMapObj == null) {
+            return defaultValue;
+        }
+        try {
+            HashMap<String, String> systemConfigMap = (HashMap<String, String>) systemConfigMapObj;
+            return Integer.parseInt(systemConfigMap.getOrDefault(code, String.valueOf(defaultValue)));
+        } catch (Exception ignore) {
+            return defaultValue;
+        }
+    }
+
     private synchronized boolean crnExecuteLocTransfer(BasCrnp basCrnp, CrnThread crnThread) {
         CrnProtocol crnProtocol = crnThread.getStatus();
         if(crnProtocol == null){

--
Gitblit v1.9.1