From f9a2a3435ff836a855eb54f7d1268d8bbc391a53 Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期二, 21 四月 2026 22:15:47 +0800
Subject: [PATCH] 1.空托盘悬挑库位没有空库位时,找第八层库位

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

diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 1b816e1..87d3536 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -168,7 +168,10 @@
     }
 
     /**
-     * 妫�绱㈠簱浣嶅彿
+     * 鍏ュ簱鎵惧簱浣嶇粺涓�鍏ュ彛銆�
+     *
+     * 绌烘墭鐩樺叆搴撲篃浠庤繖閲岃繘鍏ワ紝鍏堢敱 {@link #normalizeLocTypeDto(Integer, FindLocNoAttributeVo, LocTypeDto)}
+     * 缁熶竴璇嗗埆绌烘墭鐩樺拰鏁寸悊搴撲綅瑙勬牸锛屽啀鎸� row_lastno_type 鍒嗘祦鍒颁笉鍚屽簱鍨嬬殑鎵句綅瀹炵幇銆�
      *
      * @param staDescId            璺緞ID
      * @param sourceStaNo          婧愮珯
@@ -281,8 +284,8 @@
      * 缁熶竴鏁寸悊鍏ュ簱瑙勬牸锛岄伩鍏嶄笉鍚屽叆鍙d紶鍏ョ殑 locType 涓嶄竴鑷淬��
      *
      * 绌烘墭鐩樼殑搴撲綅绛栫暐鏈変袱娈碉細
-     * 1. 棣栬疆鍙檺鍒� loc_type2=1锛岃〃绀轰紭鍏堟壘绐勫簱浣嶃��
-     * 2. loc_type1 楂樺害淇℃伅蹇呴』淇濈暀锛屽悗缁啀鎸変綆浣嶅悜楂樹綅鍏煎銆�
+     * 1. 鍏堥檺鍒� loc_type2=1锛岃〃绀轰紭鍏堟壘绐勫簱浣嶏紝骞朵繚鐣� loc_type1 楂樺害鍏煎銆�
+     * 2. 绐勫簱浣嶆病鏈夌粨鏋滃悗锛屾妸 loc_type1 鏀逛负 3 鍐嶆壘搴撲綅銆�
      *
      * 闈炵┖鎵樼洏鍙繚鐣� loc_type1锛屾弧鎵樻壘浣嶄笉鍐嶄娇鐢� loc_type2/loc_type3 杩囨护銆�
      */
@@ -313,11 +316,10 @@
     }
 
     /**
-     * 绌烘墭鐩樺浐瀹氭寜 4 娈靛紡鎵句綅锛�
+     * 绌烘墭鐩樺浐瀹氭寜绐勫簱浣嶄紭鍏堟壘浣嶏細
      * 1. 涓ユ牸楂樺害 + narrow
      * 2. 鍚戜笂鍏煎楂樺害 + narrow
-     * 3. 涓ユ牸楂樺害 + open
-     * 4. 鍚戜笂鍏煎楂樺害 + open
+     * 3. loc_type1=3 + open
      */
     private List<LocTypeDto> buildEmptyPalletSearchLocTypes(LocTypeDto locTypeDto) {
         List<LocTypeDto> searchLocTypes = new ArrayList<LocTypeDto>();
@@ -336,19 +338,23 @@
             searchLocTypes.add(narrowCompatibleLocType);
         }
 
-        LocTypeDto openStrictLocType = copyLocTypeDto(baseLocTypeDto);
-        openStrictLocType.setLocType2((short) 0);
-        searchLocTypes.add(openStrictLocType);
-
-        LocTypeDto openCompatibleLocType = buildUpwardCompatibleLocTypeDto(openStrictLocType);
-        if (openCompatibleLocType != null) {
-            openCompatibleLocType.setLocType2((short) 0);
-            searchLocTypes.add(openCompatibleLocType);
-        }
+        LocTypeDto emptyPalletFallbackLocType = copyLocTypeDto(baseLocTypeDto);
+        emptyPalletFallbackLocType.setLocType1((short) 3);
+        emptyPalletFallbackLocType.setLocType2((short) 0);
+        searchLocTypes.add(emptyPalletFallbackLocType);
         return searchLocTypes;
     }
 
+    /**
+     * 缁欑┖鎵樼洏鎵句綅闃舵鐢熸垚鏃ュ織鏍囪瘑锛屼究浜庢帓鏌ュ埌搴曞崱鍦ㄧ獎搴撲綅銆侀珮搴﹀吋瀹硅繕鏄� loc_type1=3 鍏滃簳闃舵銆�
+     */
     private String buildEmptyPalletStageCode(LocTypeDto baseLocTypeDto, LocTypeDto stageLocTypeDto) {
+        boolean emptyPalletType3Fallback = stageLocTypeDto != null
+                && stageLocTypeDto.getLocType1() != null
+                && stageLocTypeDto.getLocType1() == 3;
+        if (emptyPalletType3Fallback) {
+            return "empty-pallet-locType1-3";
+        }
         boolean compatibleHeight = baseLocTypeDto != null
                 && baseLocTypeDto.getLocType1() != null
                 && stageLocTypeDto != null
@@ -373,6 +379,9 @@
 
     /**
      * 鎶� locType 鏉′欢杩藉姞鍒板簱浣嶆煡璇㈡潯浠堕噷銆�
+     *
+     * 绌烘墭鐩樹細鏄惧紡浼� loc_type2锛氱涓�杞� loc_type2=1 浼樺厛绐勫簱浣嶏紝鍏滃簳闃舵 loc_type2=0 琛ㄧず涓嶅啀闄愬埗瀹界獎銆�
+     * 婊℃墭鐩樻暣鐞嗗悗娌℃湁 loc_type2/loc_type3锛屾澶勪細鎺掗櫎 loc_type2=1锛岄伩鍏嶆弧鎵樺崰鐢ㄧ┖鎵樼洏绐勫簱浣嶃��
      */
     private Wrapper<LocMast> applyLocTypeFilters(Wrapper<LocMast> wrapper, LocTypeDto locTypeDto, boolean includeLocType1) {
         if (wrapper == null || locTypeDto == null) {
@@ -993,7 +1002,12 @@
     }
 
     /**
-     * 鎸夌涓�浼樺厛姹� -> 绗簩浼樺厛姹犵殑椤哄簭鏌ユ壘鍙敤搴撲綅銆�
+     * run2 绔欑偣浼樺厛姹犳壘浣嶅叆鍙c��
+     *
+     * 绌烘墭鐩樿鍒欙細
+     * 1. 鍏堟壘绔欑偣绗竴浼樺厛姹狅紝鍐嶆壘绗簩浼樺厛姹狅紱绗簩姹犱細鎺掗櫎绗竴姹犲凡閰嶇疆鐨勫爢鍨涙満銆�
+     * 2. 姣忎釜浼樺厛姹犲唴鍏堟壘绐勫簱浣嶏紝鍐嶅仛楂樺害鍚戜笂鍏煎锛屾渶鍚庢妸 loc_type1 鏀逛负 3 鍏滃簳銆�
+     * 3. 鍙湁鍛戒腑搴撲綅鐨勬睜浼氭帹杩涜嚜宸辩殑 currentNo 娓告爣锛屾湭鍛戒腑鐨勬睜涓嶆敼鍙樿疆璇㈢姸鎬併��
      */
     private LocMast findRun2PriorityLocInPools(BasDevp station, RowLastno rowLastno, RowLastnoType rowLastnoType,
                                                 Integer staDescId, Integer sourceStaNo, FindLocNoAttributeVo findLocNoAttributeVo,
@@ -1033,6 +1047,13 @@
 
     /**
      * 鍦ㄥ崟涓紭鍏堟睜鍐呮寜杞浆椤哄簭鎵句綅銆�
+     *
+     * 姹犲唴瑙勫垯锛�
+     * 1. 浠� currentNo 鐨勪笅涓�鍙板爢鍨涙満寮�濮嬭疆杞紝淇濊瘉鍚屼竴浼樺厛姹犲唴鍧囧垎銆�
+     * 2. 璺宠繃涓嶅彲鍏ャ�佹晠闅滄垨婧愮珯鍒扮洰鏍囧爢鍨涙満鏃犲叆搴撹矾寰勭殑鍫嗗灈鏈恒��
+     * 3. 姣忓彴鍫嗗灈鏈哄唴閮ㄤ氦缁� {@link #findConfiguredEmptyLocForCrn(RowLastno, RowLastnoType, Integer, Integer, LocTypeDto, FindLocNoAttributeVo, boolean)}
+     *    鎸夋繁娴呮帓鐢诲儚閫夋嫨绗竴涓彲鍒嗛厤搴撲綅銆�
+     * 4. 鍛戒腑鍚庡洖鍐欒浼樺厛姹犳父鏍囷紝骞舵妸鐩爣绔欏啓鍏� startupDto銆�
      */
     private LocMast findRun2PriorityLocInPool(RowLastno rowLastno, RowLastnoType rowLastnoType, BasDevp station,
                                               List<Integer> crnNos, Integer currentCrnNo, int poolNo, LocTypeDto locTypeDto,
@@ -1079,7 +1100,10 @@
     }
 
     /**
-     * 鍦ㄥ崟涓紭鍏堟睜鍐呭厛鎸夊綋鍓嶈鏍兼壘浣嶏紝澶辫触鍚庡啀鍋氫竴娆� locType1 鍚戜笂鍏煎銆�
+     * 鏅�氭墭鐩樼殑浼樺厛姹犺鏍煎吋瀹瑰叆鍙c��
+     *
+     * 绌烘墭鐩樹笉璧拌繖涓柟娉曪紝鍥犱负绌烘墭鐩樺凡缁忓湪 {@link #buildEmptyPalletSearchLocTypes(LocTypeDto)}
+     * 涓浐瀹氬睍寮�浜嗏�滅獎搴撲綅浼樺厛 + 楂樺害鍚戜笂鍏煎 + loc_type1=3 鍏滃簳鈥濈殑椤哄簭銆�
      */
     private LocMast findRun2PriorityLocInPoolWithCompatibility(RowLastno rowLastno, RowLastnoType rowLastnoType,
                                                                 BasDevp station, List<Integer> crnNos, Integer currentCrnNo,
@@ -1323,10 +1347,13 @@
     }
 
     /**
-     * 绌烘墭鐩� run2 涓撶敤鎼滅储閾捐矾銆�
+     * 淇濈暀鐨勭┖鎵樼洏 run2 鎸夊簱鍖鸿疆璇㈡悳绱㈤摼璺��
+     *
+     * 褰撳墠 getLocNoRun2 鐨勭┖鎵樼洏瀹為檯鍏ュ彛璧� {@link #findRun2PriorityLocInPools(BasDevp, RowLastno, RowLastnoType, Integer, Integer, FindLocNoAttributeVo, LocTypeDto, StartupDto, boolean)}
+     * 鐨勭珯鐐逛紭鍏堟睜瑙勫垯锛涘鏋滃悗缁渶瑕佹仮澶嶁�滃綋鍓嶅簱鍖� -> 鍏跺畠搴撳尯鈥濈殑鍏滃簳锛屽彲浠ヤ粠杩欓噷鎺ュ洖銆�
      *
      * 鎵ц椤哄簭锛�
-     * 1. 鍏堟寜鍥哄畾瑙勬牸闃舵鏋勯�� 4 娈靛紡 locType 鍥為��椤哄簭銆�
+     * 1. 鍏堟寜鍥哄畾瑙勬牸闃舵鏋勯�犫�滅獎搴撲綅浼樺厛 + loc_type1=3 鍏滃簳鈥濈殑 locType 鍥為��椤哄簭銆�
      * 2. 姣忎釜瑙勬牸闃舵閮芥寜鈥滃綋鍓嶅簱鍖� -> 鍏跺畠搴撳尯鈥濈殑椤哄簭鎼滅储銆�
      * 3. 姣忎釜搴撳尯鍐呴儴閮芥寜璇ュ簱鍖鸿嚜宸辩殑 rowLastno/currentRow 鍋氳疆璇㈠潎鍒嗐��
      *
@@ -1347,6 +1374,12 @@
         return null;
     }
 
+    /**
+     * 淇濈暀閾捐矾锛氬湪鏌愪釜绌烘墭鐩樿鏍奸樁娈靛唴鎸夊簱鍖洪『搴忔悳绱€��
+     *
+     * 搴撳尯椤哄簭鐢� {@link #buildAreaSearchOrder(List, Integer)} 鐢熸垚锛氱珯鐐圭粦瀹氬簱鍖轰紭鍏堬紝鍏舵鎺ュ彛璇锋眰搴撳尯锛�
+     * 鏈�鍚庤ˉ榻� 1/2/3 鍏ㄥ簱鍖恒�傛瘡涓簱鍖轰娇鐢ㄨ嚜宸辩殑 row_lastno 娓告爣锛屽苟涓旇法搴撳尯鏃朵笉寮哄埗 sta_desc 璺緞鏍¢獙銆�
+     */
     private Run2AreaSearchResult findEmptyPalletRun2AreaLoc(RowLastno defaultRowLastno, Integer staDescId, Integer sourceStaNo,
                                                             StartupDto startupDto, FindLocNoAttributeVo findLocNoAttributeVo, LocTypeDto locTypeDto,
                                                             String stageCode) {
@@ -2096,6 +2129,11 @@
 
     /**
      * 鍦ㄤ竴瀵规祬鎺�/娣辨帓涔嬮棿閫夋嫨鐪熸鍙姇鏀剧殑鐩爣搴撲綅銆�
+     *
+     * 鍙屼几浣嶈鍒欙細
+     * 1. 娴呬綅鍜屾繁浣嶅悓鍒楀悓灞傞兘涓虹┖鏃讹紝浼樺厛杩斿洖娣变綅锛岄伩鍏嶆祬浣嶅厛鍗犱綇鍚庢尅浣忔繁浣嶃��
+     * 2. 娣变綅宸叉湁璐ф椂锛屽厑璁歌繑鍥炲搴旀祬浣嶃��
+     * 3. 娣变綅涓虹┖浣嗚鏍间笉鍖归厤鏃讹紝涓嶆妸娴呬綅浣滀负鍙姇鏀剧粨鏋滐紝缁х画鎵句笅涓�缁勫悓鍒楀悓灞備綅缃��
      */
     private LocMast findPairAssignableLoc(RowLastno rowLastno, RowLastnoType rowLastnoType, Integer crnNo,
                                           Integer shallowRow, Integer deepRow, LocTypeDto locTypeDto) {
@@ -2129,6 +2167,12 @@
 
     /**
      * 鎸夋煇鍙板爢鍨涙満鐨勬繁娴呮帓鐢诲儚鎼滅储绗竴涓彲鍒嗛厤绌哄簱浣嶃��
+     *
+     * 杩欐槸绌烘墭鐩樻渶缁堣惤搴撲綅鐨勬牳蹇冮�夋嫨鏂规硶锛�
+     * 1. 鍏堣鍙栧爢鍨涙満娣辨祬搴撲綅瑙勫垯鐢诲儚锛屽緱鍒拌鍫嗗灈鏈烘湰娆″簲鎵弿鐨勬帓椤哄簭銆�
+     * 2. 鍙屼几鍫嗗灈鏈哄厛灏濊瘯鍚岃揣浼樺厛瑙勫垯锛屽啀鎸夋祬鎺�/娣辨帓鎴愬鍒ゆ柇鍙姇鏀句綅缃��
+     * 3. 鍗曚几鍫嗗灈鏈虹洿鎺ユ寜鎺掑唴鎺掑簭鍚庣殑绌哄簱浣嶈繑鍥炵涓�涓尮閰嶉」銆�
+     * 4. 鎺掑唴鎺掑簭浼氱户缁彈棰戞銆佸墠鍑犲垪绛栫暐鍜� locType 杩囨护褰卞搷銆�
      */
     private LocMast findConfiguredEmptyLocForCrn(RowLastno rowLastno, RowLastnoType rowLastnoType, Integer crnNo,
                                                   Integer preferredNearRow, LocTypeDto locTypeDto) {
@@ -2653,8 +2697,8 @@
      * 褰撳墠鏂规硶鍙繚鐣欌�滅粍缁囨祦绋嬧�濆拰鈥滅粺涓�鏀跺彛鈥濈殑鑱岃矗锛屽叿浣撶瓥鐣ユ媶鎴愮嫭绔嬫柟娉曪細
      * 1. 鍏堟寜绔欑偣绗竴浼樺厛姹犳壘浣嶏紝鍐嶆壘绗簩浼樺厛姹犮��
      * 2. 姹犲唴鎸� current_no 杞浆锛屼粠涓嬩竴鍙板爢鍨涙満寮�濮嬪钩鍧囧垎閰嶃��
-     * 3. 绌烘墭鐩樺厛鎸� loc_type2=1 鎼滅储锛屽悓姹犳棤缁撴灉鍐嶅厑璁稿叾瀹冨簱浣嶃��
-     * 4. 浣庡簱浣嶅彲鍚戜笂鍏煎锛屽吋瀹归噸璇曚粛淇濇寔涓ゅ眰浼樺厛姹犻『搴忋��
+     * 3. 绌烘墭鐩樼敱 matnr=emptyPallet 鎴� staDescId=10 璇嗗埆锛屽厛鎵剧獎搴撲綅锛屽け璐ュ悗鐢� loc_type1=3 鍏滃簳銆�
+     * 4. 鏅�氭墭鐩樺彧鍋� loc_type1 鍚戜笂鍏煎锛屽苟鎺掗櫎绌烘墭鐩樹笓鐢ㄧ獎搴撲綅銆�
      */
     @Transactional
     public StartupDto getLocNoRun2(Integer whsType, Integer staDescId, Integer sourceStaNo, FindLocNoAttributeVo findLocNoAttributeVo, Integer moveCrnNo, LocTypeDto locTypeDto, List<Integer> recommendRows, int times) {

--
Gitblit v1.9.1