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

---
 src/main/java/com/zy/asrs/utils/Utils.java |   85 ++++++++++++++++++++++++------------------
 1 files changed, 49 insertions(+), 36 deletions(-)

diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index a67ee58..6e13c42 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -152,7 +152,9 @@
      * 3. 鑻ュ綋鍓嶅簱鍖烘病鏈夋弧瓒虫潯浠剁殑绌哄簱浣嶏紝鍐嶈ˉ鍏呭叾浠栧簱鍖虹殑鍫嗗灈鏈恒��
      * 4. 褰� {@code locType1 = 1} 鏃讹紝鍏堣繑鍥炰綆搴撲綅鍫嗗灈鏈猴紝鍐嶆妸鍚屾壒鍫嗗灈鏈虹殑楂樺簱浣嶈拷鍔犲埌鍚庨潰銆�
      * 5. 瀵逛笉瀛樺湪銆佹晠闅溿�佷笉鍙叆浠ュ強鏃犵┖搴撲綅鐨勫爢鍨涙満鐩存帴鍓旈櫎銆�
-     * 6. 褰撶墿鏂欎负 {@code emptyPallet} 鏃讹紝鎸夌┖鏉垮叆搴撲紭鍏堣鍒欓噸鏂版帓搴忋��
+     *
+     * <p>杩欓噷鏄彧璇绘帓搴忓伐鍏凤紝涓嶅啀鍐欏洖 {@code asr_row_lastno.crn_qty}銆�
+     * {@code crn_qty} 鍦ㄤ富鏁版嵁閲岃〃绀衡�滃爢鍨涙満鏁伴噺鈥濓紝涓嶈兘鍐嶈鎷挎潵褰撹疆璇㈡父鏍囷紝鍚﹀垯浼氭妸鏁翠粨閰嶇疆鍐欏潖銆�
      *
      * <p>杩斿洖缁撴灉涓殑姣忎竴椤规牸寮忎负锛�
      * {@code {crnNo: 鍫嗗灈鏈哄彿, locType1: 搴撲綅楂樹綆绫诲瀷}}
@@ -321,21 +323,10 @@
         if (areaRowLastno == null) {
             return new ArrayList<>(crnNos);
         }
-        Integer startCrnNo = resolveAreaStartCrnNo(areaRowLastno, rowLastno);
-        Integer endCrnNo = resolveAreaEndCrnNo(areaRowLastno, rowLastno);
-        if (startCrnNo != null && endCrnNo != null && startCrnNo <= endCrnNo) {
-            for (int crnNo = startCrnNo; crnNo <= endCrnNo; crnNo++) {
-                addAreaCrnNo(crnNos, crnNo, 1, endCrnNo);
-            }
-            for (int crnNo = areaRowLastno.getsCrnNo(); crnNo <= startCrnNo; crnNo++) {
-                addAreaCrnNo(crnNos, crnNo, 1, endCrnNo);
-            }
-            Integer nextCrnQty = startCrnNo + 1;
-            if (areaRowLastno.geteCrnNo() != null && nextCrnQty > areaRowLastno.geteCrnNo()) {
-                nextCrnQty = areaRowLastno.getsCrnNo() == null ? 1 : areaRowLastno.getsCrnNo();
-            }
-            areaRowLastno.setCrnQty(nextCrnQty);
-            SpringUtils.getBean(RowLastnoService.class).updateById(areaRowLastno);
+        Integer startCrnNo = resolveAreaStartCrnNo(areaRowLastno);
+        List<Integer> orderedCrnNos = getOrderedCrnNos(areaRowLastno, startCrnNo);
+        if (!orderedCrnNos.isEmpty()) {
+            crnNos.addAll(orderedCrnNos);
         }
 
         if (crnNos.isEmpty()) {
@@ -362,34 +353,47 @@
         return defaultRowLastno;
     }
 
-    private static Integer resolveAreaStartCrnNo(RowLastno areaRowLastno, RowLastno defaultRowLastno) {
-        if (areaRowLastno != null && areaRowLastno.getCrnQty() != null && areaRowLastno.getCrnQty() > 0) {
-            return areaRowLastno.getCrnQty();
+    private static Integer resolveAreaStartCrnNo(RowLastno areaRowLastno) {
+        if (areaRowLastno == null) {
+            return null;
         }
-        if (areaRowLastno != null && areaRowLastno.getsCrnNo() != null && areaRowLastno.getsCrnNo() > 0) {
-            return areaRowLastno.getsCrnNo();
+        Integer startCrnNo = areaRowLastno.getsCrnNo();
+        Integer endCrnNo = areaRowLastno.geteCrnNo();
+        Integer currentRow = areaRowLastno.getCurrentRow();
+        Integer rowSpan = getCrnRowSpan(areaRowLastno.getTypeId());
+        if (startCrnNo == null || startCrnNo <= 0) {
+            return 1;
         }
-        if (defaultRowLastno != null && defaultRowLastno.getsCrnNo() != null && defaultRowLastno.getsCrnNo() > 0) {
-            return defaultRowLastno.getsCrnNo();
+        if (endCrnNo == null || endCrnNo < startCrnNo || currentRow == null || rowSpan == null || rowSpan <= 0) {
+            return startCrnNo;
         }
-        return 1;
+        int startRow = areaRowLastno.getsRow() == null ? 1 : areaRowLastno.getsRow();
+        int offset = Math.max(currentRow - startRow, 0) / rowSpan;
+        int resolvedCrnNo = startCrnNo + offset;
+        if (resolvedCrnNo < startCrnNo || resolvedCrnNo > endCrnNo) {
+            return startCrnNo;
+        }
+        return resolvedCrnNo;
     }
 
-    private static Integer resolveAreaEndCrnNo(RowLastno areaRowLastno, RowLastno defaultRowLastno) {
-        if (areaRowLastno != null && areaRowLastno.geteCrnNo() != null && areaRowLastno.geteCrnNo() > 0) {
-            return areaRowLastno.geteCrnNo();
+    private static List<Integer> getOrderedCrnNos(RowLastno rowLastno, Integer startCrnNo) {
+        List<Integer> orderedCrnNos = new ArrayList<>();
+        if (rowLastno == null) {
+            return orderedCrnNos;
         }
-        return null;
-    }
-
-    private static void addAreaCrnNo(LinkedHashSet<Integer> crnNos, Integer crnNo, Integer startCrnNo, Integer endCrnNo) {
-        if (crnNos == null || crnNo == null || startCrnNo == null || endCrnNo == null) {
-            return;
+        int start = rowLastno.getsCrnNo() == null ? 1 : rowLastno.getsCrnNo();
+        int end = rowLastno.geteCrnNo() == null ? start + ((rowLastno.getCrnQty() == null ? 1 : rowLastno.getCrnQty()) - 1) : rowLastno.geteCrnNo();
+        int first = startCrnNo == null ? start : startCrnNo;
+        if (first < start || first > end) {
+            first = start;
         }
-        if (crnNo < startCrnNo || crnNo > endCrnNo) {
-            return;
+        for (int crnNo = first; crnNo <= end; crnNo++) {
+            orderedCrnNos.add(crnNo);
         }
-        crnNos.add(crnNo);
+        for (int crnNo = start; crnNo < first; crnNo++) {
+            orderedCrnNos.add(crnNo);
+        }
+        return orderedCrnNos;
     }
 
     private static List<Integer> getAllCrnNos(RowLastno rowLastno) {
@@ -1183,6 +1187,14 @@
         }
         return result;
     }
+    //erp搴綅杞夋彌
+    public static String ERPLocToWMSLoc(String locNo) {
+        String WmsLoc = locNo.substring(1);
+        String[] split = locNo.split("-");
+        WmsLoc = split[0].substring(1)+split[1]+split[2];
+
+        return WmsLoc;
+    }
 
     //灏唚ms搴撲綅鍙疯浆鎹㈡垚wcs搴撲綅鍙�
     public static String WMSLocToWCSLoc(String locNo) {
@@ -1218,6 +1230,7 @@
         lev = lev.substring(k);
         return row + "-" + boy + "-" + lev;
     }
+    
 }
 
 

--
Gitblit v1.9.1