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/asrs/service/impl/WorkServiceImpl.java |    2 
 src/main/java/com/zy/common/web/WcsController.java          |    7 ++-
 src/main/java/com/zy/common/service/CommonService.java      |  100 +++++++------------------------------------------
 3 files changed, 20 insertions(+), 89 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 2029fd8..c08ff0b 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -1685,7 +1685,7 @@
         }
         LocTypeDto locTypeDto = new LocTypeDto();
         locTypeDto.setLocType1((short) 1);
-        return wcsController.startupFullPutStore(301, list.get(0).getZpallet(), locTypeDto, list, null);
+        return wcsController.startupFullPutStore(301, list.get(0).getZpallet(), locTypeDto, list);
     }
 
     @Override
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 95363ed..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 鎵句綅涓绘祦绋嬨��
      *
      * 鎵ц椤哄簭锛�
@@ -874,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;
     }
 
@@ -1717,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) {
 
@@ -1751,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)) {
@@ -2269,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;      //鍫嗗灈鏈哄彿
@@ -2338,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();
 
diff --git a/src/main/java/com/zy/common/web/WcsController.java b/src/main/java/com/zy/common/web/WcsController.java
index 77f6dc8..a458757 100644
--- a/src/main/java/com/zy/common/web/WcsController.java
+++ b/src/main/java/com/zy/common/web/WcsController.java
@@ -127,7 +127,7 @@
         sourceStaNo.setLocType1(param.getLocType1());
         LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
 
-        StartupDto dto = startupFullPutStore(param.getSourceStaNo(), param.getBarcode(), locTypeDto, waitPakins, param.getRow());
+        StartupDto dto = startupFullPutStore(param.getSourceStaNo(), param.getBarcode(), locTypeDto, waitPakins);
         log.info("WCS鍏ュ簱鎺ュ彛杩斿弬:{},鎵樼洏鐮�:{}", dto, param.getBarcode());
         return R.ok().add(dto);
     }
@@ -433,7 +433,7 @@
      * 鍏ㄦ澘鍏ュ簱
      */
     @Transactional
-    public StartupDto startupFullPutStore(Integer devpNo, String barcode, LocTypeDto locTypeDto, List<WaitPakin> waitPakins, List<Integer> recommendRows) {
+    public StartupDto startupFullPutStore(Integer devpNo, String barcode, LocTypeDto locTypeDto, List<WaitPakin> waitPakins) {
         // 婧愮珯鐐圭姸鎬佹娴�
         BasDevp sourceStaNo = basDevpService.checkSiteStatus(devpNo, true);
         // 妫�绱㈠簱浣�
@@ -441,7 +441,8 @@
         List<String> batchs = waitPakins.stream().map(WaitPakin::getBatch).distinct().collect(Collectors.toList());
         FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(matnrs.get(0), batchs.get(0));
 //        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(waitPakins.get(0));
-        StartupDto dto = commonService.getLocNo(1, devpNo, findLocNoAttributeVo, locTypeDto, recommendRows);
+        // 婊℃澘鍏ュ簱缁熶竴鎸夊簱浣嶆帓鍙�(row_lastno)鐨� currentRow/crn_qty 杞锛屼笉鍙傝�� WCS 閫忎紶鐨勬帹鑽愭帓銆�
+        StartupDto dto = commonService.getLocNo(1, devpNo, findLocNoAttributeVo, locTypeDto);
         int workNo = dto.getWorkNo();
         Date now = new Date();
         // 鐢熸垚宸ヤ綔妗�

--
Gitblit v1.9.1