From 818cca1634b4cdee73b91ee65f9aa03407102cee Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期二, 20 一月 2026 10:35:27 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java |  136 ++++++++++----------------------------------
 1 files changed, 32 insertions(+), 104 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index d3b8244..a3e7df0 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -210,8 +210,10 @@
     /**
      * 妫�鏌ユ甯稿簱浣嶅墠鏂规槸鍚﹀牭濉烇紙娣卞簱浣嶈鍒欙細鍓嶆柟鎺掓槸鍚︽湁璐ф垨鍏ュ簱浠诲姟锛�
      *
-     * 鍙灞炰簬鍑哄簱鍒嗙粍瑙勫垯鍐呯殑搴撲綅杩涜妫�鏌�
-     * 濡傛灉搴撲綅涓嶅湪鍒嗙粍瑙勫垯鍐咃紝鍒欒涓轰笉闇�瑕佷弗鏍兼鏌ワ紙杩斿洖 false锛屼笉瑙﹀彂琛ラ綈锛�
+     * 鍒ゆ柇渚濇嵁锛�
+     * 1. 鍙鏌ュ睘浜庡嚭搴撳垎缁勮鍒欏唴鐨勫簱浣嶏紙閫氳繃鍒嗙粍鐨� rowList 纭畾鑼冨洿锛�
+     * 2. 鍓嶆柟 = 鍒嗙粍涓储寮曞ぇ浜庡綋鍓嶅簱浣嶇殑鎺掞紙鍋囪鍒嗙粍 rowList 宸叉寜鍑哄簱椤哄簭鎺掑垪锛屽ぇ绱㈠紩 = 鍓嶆柟鏇存繁锛�
+     * 3. 鍫靛鏉′欢锛氬墠鏂规湁璐э紙F鐘舵�侊級鎴栨湁鍏ュ簱浠诲姟
      *
      * @param normalMasts 闇�瑕佹鏌ョ殑姝e父搴撲綅鍒楄〃锛堝凡閫氳繃 isInNormalRule 杩囨护锛�
      * @return true = 鍓嶆柟鏈夊牭濉烇紙闇�瑕佽ˉ榻愶級锛宖alse = 鍓嶆柟娓呯┖鎴栨棤闇�妫�鏌�
@@ -220,11 +222,25 @@
         if (normalMasts == null || normalMasts.isEmpty()) {
             return false;
         }
-        // 鑾峰彇鍑哄簱鍒嗙粍閰嶇疆锛堢敤浜庣‘璁よ鍒欒寖鍥达級
+
+        // 鑾峰彇鍑哄簱鍒嗙粍閰嶇疆
         List<LocGroupOrder> locGroupAscOrder = slaveProperties.getLocGroupAscOrder();
         if (locGroupAscOrder == null || locGroupAscOrder.isEmpty()) {
             return false; // 鏃犻厤缃椂榛樿涓嶆鏌�
         }
+
+        // 鍋囪鎵�鏈� normalMasts 鍦ㄥ悓涓�涓垎缁勶紙甯歌鎯呭喌锛岃嫢澶氬垎缁勫彲寰幆澶勭悊锛�
+        LocMast representative = normalMasts.get(0);
+        LocGroupOrder group = locGroupAscOrder.stream()
+                .filter(g -> g.getRowList() != null && g.getRowList().contains(representative.getRow1()))
+                .findFirst()
+                .orElse(null);
+
+        if (group == null || group.getRowList() == null || group.getRowList().isEmpty()) {
+            return false; // 涓嶅湪浠讳綍鍒嗙粍锛屼笉妫�鏌�
+        }
+
+        List<Integer> fullRows = group.getRowList(); // 鍒嗙粍鍐呮墍鏈夋帓鍙峰垪琛紙鎸夊嚭搴撻『搴忔帓鍒楋級
 
         // 閬嶅巻姣忎釜姝e父搴撲綅
         for (LocMast lm : normalMasts) {
@@ -236,10 +252,17 @@
                 continue;
             }
 
-            // 娣卞簱浣嶆鏌ユ柟鍚戯細鍋囪 row 瓒婂ぇ瓒婃繁锛堝墠鏂规槸鏇村ぇ row 鐨勪綅缃級
-            // 浣犲彲浠ユ牴鎹疄闄呭嚭搴撴柟鍚戣皟鏁村惊鐜潯浠讹紙渚嬪浠庡皬 row 鍒板ぇ row 鎴栧弽涔嬶級
-            for (int row = currentRow + 1; row <= 5; row++) { // 鍋囪娣卞簱浣嶈寖鍥村埌 5 鎺掞紝鍙皟鏁�
-                LocMast front = getLocMastByRow(row, bay1, lev1);
+            // 鍦ㄥ垎缁� rowList 涓壘鍒板綋鍓嶆帓鐨勭储寮�
+            int currentIndex = fullRows.indexOf(currentRow);
+            if (currentIndex < 0) {
+                continue; // 褰撳墠鎺掍笉鍦ㄥ垎缁勫唴锛岃烦杩�
+            }
+
+            // 鍓嶆柟 = 鍒嗙粍涓储寮曟洿澶х殑浣嶇疆锛堝亣璁惧垎缁� rowList 浠庡墠鍒板悗鎺掑垪锛屽ぇ绱㈠紩 = 鏇存繁锛�
+            // 濡傛灉浣犵殑鍒嗙粍鍒楄〃鏄�掑簭鐨勶紙浠庡悗鍒板墠锛夛紝鍒欓渶鏀逛负 currentIndex - 1 鍒� 0
+            for (int i = currentIndex + 1; i < fullRows.size(); i++) {
+                Integer frontRow = fullRows.get(i);
+                LocMast front = getLocMastByRow(frontRow, bay1, lev1);
                 if (front == null) {
                     continue;
                 }
@@ -249,12 +272,12 @@
                     return true;
                 }
 
-                // 鏈夊叆搴撲换鍔� 鈫� 鍫靛
                 WrkMast frontTask = wrkMastService.selectOne(
                         new EntityWrapper<WrkMast>()
                                 .eq("source_loc_no", front.getLocNo())
-                                .eq("io_type", 100) // 鍋囪 100 涓哄叆搴撶被鍨嬶紝鍙皟鏁�
+                                .in("loc_sts", Arrays.asList("S", "Q")) // 鏀寔 loc_sts 涓� S 鎴� Q
                 );
+
                 if (frontTask != null) {
                     return true;
                 }
@@ -501,101 +524,6 @@
                 }
             } else {
                 throw new CoolException(locNo + " 搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
-            }
-        }
-    }
-
-    private void supplementBothSidesBlocked(
-            List<LocMast> normalMasts,
-            List<LocMast> supplementMasts,
-            AtomicReference<Boolean> isLeftSideSupplement) {
-
-        if (normalMasts.isEmpty()) {
-            isLeftSideSupplement.set(true); // 榛樿宸︿晶
-            return;
-        }
-
-        // 鍋囪鎵�鏈� normalMasts 鍦ㄥ悓涓� bay/lev锛堝缁勬儏鍐靛彲寰幆澶勭悊锛�
-        LocMast rep = normalMasts.get(0);
-        Integer bay1 = rep.getBay1();
-        Integer lev1 = rep.getLev1();
-
-        if (bay1 == null || lev1 == null) {
-            throw new CoolException("搴撲綅 bay1 鎴� lev1 涓虹┖锛屾棤娉曡ˉ榻愬墠鏂�");
-        }
-
-        // 鎵惧嚭閫変腑娈电殑鏈�灏�/鏈�澶ф帓鍙�
-        int minRow = normalMasts.stream()
-                .mapToInt(LocMast::getRow1)
-                .min()
-                .orElseThrow(() -> new CoolException("姝e父搴撲綅鍒楄〃涓虹┖锛屾棤娉曡幏鍙栨渶灏忔帓鍙�"));
-
-        int maxRow = normalMasts.stream()
-                .mapToInt(LocMast::getRow1)
-                .max()
-                .orElseThrow(() -> new CoolException("姝e父搴撲綅鍒楄〃涓虹┖锛屾棤娉曡幏鍙栨渶澶ф帓鍙�"));
-
-        // 鍋囪娣卞簱浣嶈寖鍥达細1~5 鎺掞紙鍙牴鎹疄闄呰皟鏁达級
-        final int MIN_ROW = 1;
-        final int MAX_ROW = 5;
-
-        // ---------------- 璁$畻宸︿晶锛堝皬鎺掑彿鏂瑰悜锛岃緝娴呬綅缃級闇�瑕佽ˉ澶氬皯 ----------------
-        int leftCount = 0;
-        List<LocMast> leftToAdd = new ArrayList<>();
-        for (int r = minRow - 1; r >= MIN_ROW; r--) {
-            LocMast loc = getLocMastByRow(r, bay1, lev1);
-            if (loc == null) continue;
-
-            // 鍙ˉ绌烘澘锛圖鐘舵�侊級
-            if ("D".equals(loc.getLocSts())) {
-                leftCount++;
-                leftToAdd.add(loc);
-            }
-            // 鍙�夛細閬囧埌鍏朵粬闃诲鐘舵�佸彲鍋滄锛堣涓氬姟闇�姹傦級
-            // else if ("F".equals(loc.getLocSts()) || "鍏朵粬闃诲".equals(...)) break;
-        }
-
-        // ---------------- 璁$畻鍙充晶锛堝ぇ鎺掑彿鏂瑰悜锛屾洿娣变綅缃級闇�瑕佽ˉ澶氬皯 ----------------
-        int rightCount = 0;
-        List<LocMast> rightToAdd = new ArrayList<>();
-        for (int r = maxRow + 1; r <= MAX_ROW; r++) {
-            LocMast loc = getLocMastByRow(r, bay1, lev1);
-            if (loc == null) continue;
-
-            if ("D".equals(loc.getLocSts())) {
-                rightCount++;
-                rightToAdd.add(loc);
-            }
-            // else if (闃诲鐘舵��) break;
-        }
-
-        // ---------------- 閫夋嫨琛ュ摢涓�杈� ----------------
-        List<LocMast> chosen;
-        boolean chooseLeft;
-
-        if (leftCount == 0 && rightCount == 0) {
-            // 涓や晶閮芥病绌烘澘鍙ˉ 鈫� 鏃犳硶鎵撻��
-            throw new CoolException("鍓嶆柟涓や晶鍧囨棤绌烘澘鍙ˉ鍏咃紝鏃犳硶鎵撻�氬嚭搴撹矾寰�");
-        }
-
-        if (leftCount <= rightCount) {
-            // 宸︿晶琛ユ洿灏戯紙鎴栫浉绛夐粯璁ゅ乏渚э級
-            chosen = leftToAdd;
-            chooseLeft = true;
-            log.info("閫夋嫨琛ュ厖宸︿晶锛堝皬鎺掓柟鍚戯級锛屽叡 {} 涓┖鏉垮簱浣�", leftCount);
-        } else {
-            chosen = rightToAdd;
-            chooseLeft = false;
-            log.info("閫夋嫨琛ュ厖鍙充晶锛堝ぇ鎺掓柟鍚戯級锛屽叡 {} 涓┖鏉垮簱浣�", rightCount);
-        }
-
-        // 璁剧疆鏍囪锛堢敤浜庡悗缁紭鍏堢骇璋冩暣锛�
-        isLeftSideSupplement.set(chooseLeft);
-
-        // 鍔犲叆琛ュ厖鍒楄〃锛堝幓閲嶏級
-        for (LocMast supp : chosen) {
-            if (!supplementMasts.contains(supp) && !normalMasts.contains(supp)) {
-                supplementMasts.add(supp);
             }
         }
     }

--
Gitblit v1.9.1