From ac88fa85ea2b39f9c94f080a95406739e64fd7f2 Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期六, 21 三月 2026 18:01:18 +0800
Subject: [PATCH] 优化找库位规则

---
 src/main/java/com/zy/common/service/CommonService.java |  107 ++++++++++-------------------------------------------
 1 files changed, 21 insertions(+), 86 deletions(-)

diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 68548cb..5627380 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -749,34 +749,6 @@
     }
 
     /**
-     * 鏅�� run2 鐨勬帹鑽愭帓浼樺厛闃舵銆�
-     *
-     * 鎺ㄨ崘鎺掑彧瀵规櫘閫氱墿鏂欑敓鏁堬紝绌烘墭鐩樺凡缁忓垏鎹㈡垚鈥滄寜搴撳尯杞鍫嗗灈鏈衡�濈殑瑙勫垯锛�
-     * 鍥犳杩欓噷浼氱洿鎺ヨ烦杩囩┖鎵樼洏璇锋眰锛岄伩鍏� row 鍙傛暟鎶婄┖鎵樼洏閲嶆柊甯﹀洖鏃ч�昏緫銆�
-     *
-     * 鍙﹀锛屽崟鎺掓帹鑽愪笉鍐嶄綔涓衡�滃己缁戝畾鍗曞彴鍫嗗灈鏈衡�濆鐞嗐��
-     * 鐜板満涓婃父缁忓父鍙紶涓�涓帹鑽愭帓锛屼緥濡� row=[1]锛屽鏋滆繖閲岀洿鎺ョ煭璺懡涓紝
-     * 婊℃澘浠诲姟灏变細闀挎湡鍘嬪湪鍚屼竴鍙板爢鍨涙満涓娿�傜幇鍦ㄥ彧鏈夊綋鎺ㄨ崘鎺掕兘瑕嗙洊澶氬彴鍫嗗灈鏈烘椂锛�
-     * 鎵嶆妸瀹冨綋浣滅湡姝g殑浼樺厛鍊欓�夐泦鍚堛��
-     */
-    private LocMast findRun2RecommendLoc(RowLastno rowLastno, RowLastnoType rowLastnoType, boolean emptyPalletRequest,
-                                         List<Integer> recommendRows, LocTypeDto locTypeDto, Integer staDescId,
-                                         Integer sourceStaNo, StartupDto startupDto, Integer preferredArea,
-                                         List<Integer> triedCrnNos) {
-        if (emptyPalletRequest) {
-            return null;
-        }
-        List<Integer> recommendCrnNos = mapRowsToCrnNos(rowLastno, recommendRows);
-        if (Cools.isEmpty(recommendCrnNos) || recommendCrnNos.size() <= 1) {
-            return null;
-        }
-        LocMast locMast = findRun2EmptyLocByCrnNos(rowLastno, rowLastnoType, recommendCrnNos, locTypeDto,
-                staDescId, sourceStaNo, startupDto, preferredArea, "recommend");
-        triedCrnNos.addAll(recommendCrnNos);
-        return locMast;
-    }
-
-    /**
      * 鏅�氱墿鏂� run2 鎵句綅涓绘祦绋嬨��
      *
      * 鎵ц椤哄簭锛�
@@ -793,8 +765,13 @@
                 locTypeDto == null || locTypeDto.getLocType1() == null ? null : locTypeDto.getLocType1().intValue(),
                 findLocNoAttributeVo == null ? null : findLocNoAttributeVo.getMatnr());
         if (!Cools.isEmpty(stationCrnLocTypes)) {
-            return findRun2EmptyLocByCrnLocTypeEntries(rowLastno, rowLastnoType, stationCrnLocTypes,
+            // 绔欑偣浼樺厛绾у彧鏄�滀紭鍏堝皾璇曗�濓紝娌℃湁鍛戒腑鏃跺繀椤荤户缁蛋榛樿/搴撳尯鍥為��锛�
+            // 鍚﹀垯浼氭妸鈥滀紭鍏堝�欓�夋棤浣嶁�濊鍒ゆ垚鈥滄暣浠撴棤浣嶁�濄��
+            LocMast locMast = findRun2EmptyLocByCrnLocTypeEntries(rowLastno, rowLastnoType, stationCrnLocTypes,
                     locTypeDto, staDescId, sourceStaNo, startupDto, preferredArea, "station-priority");
+            if (!Cools.isEmpty(locMast)) {
+                return locMast;
+            }
         }
         if (preferredArea == null) {
             List<Integer> defaultCrnNos = new ArrayList<>(orderedCrnNos);
@@ -869,33 +846,6 @@
                 }
             }
         }
-        return result;
-    }
-
-    private List<Integer> mapRowsToCrnNos(RowLastno rowLastno, List<Integer> rows) {
-        List<Integer> result = new ArrayList<>();
-        if (rowLastno == null || Cools.isEmpty(rows)) {
-            return result;
-        }
-        LinkedHashSet<Integer> orderedCrnNos = new LinkedHashSet<>();
-        Integer rowSpan = getCrnRowSpan(rowLastno.getTypeId());
-        if (rowSpan == null || rowSpan <= 0) {
-            rowSpan = 2;
-        }
-        int startCrnNo = rowLastno.getsCrnNo() == null ? 1 : rowLastno.getsCrnNo();
-        int endCrnNo = rowLastno.geteCrnNo() == null ? startCrnNo + rowLastno.getCrnQty() - 1 : rowLastno.geteCrnNo();
-        int startRow = rowLastno.getsRow() == null ? 1 : rowLastno.getsRow();
-        int endRow = rowLastno.geteRow() == null ? Integer.MAX_VALUE : rowLastno.geteRow();
-        for (Integer row : rows) {
-            if (row == null || row < startRow || row > endRow) {
-                continue;
-            }
-            int crnNo = startCrnNo + (row - startRow) / rowSpan;
-            if (crnNo >= startCrnNo && crnNo <= endCrnNo) {
-                orderedCrnNos.add(crnNo);
-            }
-        }
-        result.addAll(orderedCrnNos);
         return result;
     }
 
@@ -1712,9 +1662,11 @@
      * run2 鍏ュ簱鎵句綅涓绘祦绋嬨��
      *
      * 褰撳墠鏂规硶鍙繚鐣欌�滅粍缁囨祦绋嬧�濆拰鈥滅粺涓�鏀跺彛鈥濈殑鑱岃矗锛屽叿浣撶瓥鐣ユ媶鎴愮嫭绔嬫柟娉曪細
-     * 1. 鏅�氱墿鏂欙細鎺ㄨ崘鎺掍紭鍏� -> 绔欑偣浼樺厛搴撳尯/鍫嗗灈鏈� -> 鍏跺畠搴撳尯銆�
+     * 1. 鏅�氱墿鏂欙細鎸� row_lastno 鑷韩杞椤哄簭 -> 绔欑偣浼樺厛搴撳尯/鍫嗗灈鏈� -> 鍏跺畠搴撳尯銆�
      * 2. 绌烘墭鐩橈細浼樺厛搴撳尯 loc_type2=1 -> 鍏跺畠搴撳尯 loc_type2=1 -> loc_type1=2 鍏煎銆�
      * 3. 鍛戒腑搴撲綅鍚庡垎鍒洖鍐欐櫘閫氱墿鏂欐父鏍囨垨绌烘墭鐩樺簱鍖烘父鏍囥��
+     *
+     * WCS 浼犲叆鐨勬帹鑽愭帓涓嶅啀鍙備笌 run2 閫変綅锛岄伩鍏嶄笂娓� row 鍙傛暟鎶婁换鍔¢噸鏂扮粦鍥炲浐瀹氬爢鍨涙満銆�
      */
     public StartupDto getLocNoRun2(Integer whsType, Integer staDescId, Integer sourceStaNo, FindLocNoAttributeVo findLocNoAttributeVo, Integer moveCrnNo, LocTypeDto locTypeDto, List<Integer> recommendRows, int times) {
 
@@ -1746,22 +1698,18 @@
         List<Integer> orderedCrnNos = getOrderedCrnNos(rowLastno, crnNo);
         List<Integer> orderedRunnableCrnNos = getOrderedRunnableRun2CrnNos(rowLastno, staDescId, sourceStaNo, orderedCrnNos);
         List<Integer> triedCrnNos = new ArrayList<>();
-        locMast = findRun2RecommendLoc(rowLastno, rowLastnoType, emptyPalletRequest, recommendRows, locTypeDto,
-                staDescId, sourceStaNo, startupDto, preferredArea, triedCrnNos);
-        if (Cools.isEmpty(locMast)) {
-            if (emptyPalletRequest) {
-                // 绌烘墭鐩樺崟鐙寜搴撳尯杞锛�
-                // 1. 褰撳墠搴撳尯鍏堟壘 loc_type2=1
-                // 2. 褰撳墠搴撳尯娌℃湁锛屽啀鎵惧叾浠栧簱鍖� loc_type2=1
-                // 3. 鍏ㄩ儴 narrow 閮芥病鏈夋椂锛屽啀閫�鍒� loc_type1=2
-                emptyPalletAreaSearchResult = findEmptyPalletRun2AreaLoc(rowLastno, staDescId, sourceStaNo, startupDto, preferredArea, locTypeDto);
-                if (!Cools.isEmpty(emptyPalletAreaSearchResult)) {
-                    locMast = emptyPalletAreaSearchResult.locMast;
-                }
-            } else {
-                locMast = findNormalRun2Loc(rowLastno, rowLastnoType, sourceStaNo, staDescId, findLocNoAttributeVo,
-                        locTypeDto, startupDto, preferredArea, orderedCrnNos, triedCrnNos);
+        if (emptyPalletRequest) {
+            // 绌烘墭鐩樺崟鐙寜搴撳尯杞锛�
+            // 1. 褰撳墠搴撳尯鍏堟壘 loc_type2=1
+            // 2. 褰撳墠搴撳尯娌℃湁锛屽啀鎵惧叾浠栧簱鍖� loc_type2=1
+            // 3. 鍏ㄩ儴 narrow 閮芥病鏈夋椂锛屽啀閫�鍒� loc_type1=2
+            emptyPalletAreaSearchResult = findEmptyPalletRun2AreaLoc(rowLastno, staDescId, sourceStaNo, startupDto, preferredArea, locTypeDto);
+            if (!Cools.isEmpty(emptyPalletAreaSearchResult)) {
+                locMast = emptyPalletAreaSearchResult.locMast;
             }
+        } else {
+            locMast = findNormalRun2Loc(rowLastno, rowLastnoType, sourceStaNo, staDescId, findLocNoAttributeVo,
+                    locTypeDto, startupDto, preferredArea, orderedCrnNos, triedCrnNos);
         }
 
         if (!Cools.isEmpty(locMast)) {
@@ -2264,6 +2212,7 @@
     }
 
     public StartupDto getLocNoRun5(Integer whsType, Integer staDescId, Integer sourceStaNo, FindLocNoAttributeVo findLocNoAttributeVo, Integer moveCrnNo, LocTypeDto locTypeDto, List<Integer> recommendRows, int times) {
+        // WCS 浼犲叆鐨勬帹鑽愭帓涓嶅啀鍙備笌 AGV/骞冲簱閫変綅锛岀粺涓�鎸夊簱浣嶆帓鍙疯嚜韬疆璇㈤�昏緫鎵句綅銆�
 
         // 鍒濆鍖栧弬鏁�
         int crnNo = 0;      //鍫嗗灈鏈哄彿
@@ -2333,20 +2282,6 @@
         }
 
         // 寮�濮嬫煡鎵惧簱浣� ==============================>>
-
-        if (Cools.isEmpty(locMast) && !Cools.isEmpty(recommendRows)) {
-            for (Integer recommendRow : recommendRows) {
-                if (Cools.isEmpty(recommendRow)) {
-                    continue;
-                }
-                LocMast recommendLoc = locMastService.queryFreeLocMast(recommendRow, locTypeDto.getLocType1(), rowLastnoType.getType().longValue());
-                if (!Cools.isEmpty(recommendLoc) && VersionUtils.locMoveCheckLocTypeComplete(recommendLoc, locTypeDto)) {
-                    locMast = recommendLoc;
-                    crnNo = recommendLoc.getCrnNo();
-                    break;
-                }
-            }
-        }
 
         Integer preferredArea = findLocNoAttributeVo.getOutArea();
 

--
Gitblit v1.9.1