From cc4e0bd14edeeb43268216f18c70be62e482b8f0 Mon Sep 17 00:00:00 2001
From: dubin <bindu_bean@163.com>
Date: 星期四, 05 二月 2026 14:31:17 +0800
Subject: [PATCH] 初始化未完成

---
 src/main/java/com/zy/common/service/CommonService.java |  211 ++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 163 insertions(+), 48 deletions(-)

diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 29ce278..f53be7b 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -166,12 +166,17 @@
             int[] params = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber);
             curRow = params[1];
             int crnNo = params[2];
-            if (!basCrnpService.checkSiteError(crnNo, true)) {
-                attempt++;
-                continue;
-            }
+//            if (!basCrnpService.checkSiteError(crnNo, true)) {
+//                attempt++;
+//                continue;
+//            }
             int rowCount = params[0];
             int nearRow = params[3];
+            int MIN_SPARE_SLOTS = 0;
+
+            if (rowLastno.getTypeId() == 1){
+                MIN_SPARE_SLOTS = 2;
+            }
 
             // 鍙彇鏁伴噺鍒ゆ柇锛岄伩鍏嶆媺鏁� list
             int availableLocCount = locMastService.selectCount(new EntityWrapper<LocMast>()
@@ -180,7 +185,7 @@
                     .eq("whs_type", rowLastnoType.getType().longValue()));
             int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>()
                     .eq("crn_no", crnNo).le("io_type", 100));
-            if (availableLocCount - crnCountO <= 2) { // 鍙互鎻愭垚甯搁噺锛屾瘮濡� MIN_SPARE_SLOTS = 2
+            if (availableLocCount - crnCountO <= MIN_SPARE_SLOTS) { // 鍙互鎻愭垚甯搁噺锛屾瘮濡� MIN_SPARE_SLOTS = 2
                 log.error("{}鍙峰爢鍨涙満娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿}", crnNo, JSON.toJSONString(locTypeDto), attempt);
                 attempt++;
                 continue;
@@ -242,15 +247,21 @@
 
         //姝ょ▼搴忕敤浜庝紭鍖栧爢鍨涙満寮傚父鏃剁殑杩愯鏃堕棿
         Optional<CrnRowInfo> infoOpt = findAvailableCrnAndNearRow(rowLastno, curRow, crnNumber, times, findLocNoAttributeVo, locTypeDto, rowLastnoType);
-        if (!infoOpt.isPresent()) {
-            throw new CoolException("鏃犲彲鐢ㄥ爢鍨涙満");
+        if (infoOpt.isPresent()) {
+//            throw new CoolException("鏃犲彲鐢ㄥ爢鍨涙満");
+            CrnRowInfo info = infoOpt.get();
+            crnNo = info.getCrnNo();
+            nearRow = info.getNearRow();
+            curRow = info.getCurRow();
+            rowCount = info.getRowCount();
+            times = info.getTimes();
         }
-        CrnRowInfo info = infoOpt.get();
-        crnNo = info.getCrnNo();
-        nearRow = info.getNearRow();
-        curRow = info.getCurRow();
-        rowCount = info.getRowCount();
-        times = info.getTimes();
+//        CrnRowInfo info = infoOpt.get();
+//        crnNo = info.getCrnNo();
+//        nearRow = info.getNearRow();
+//        curRow = info.getCurRow();
+//        rowCount = info.getRowCount();
+//        times = info.getTimes();
 
 
         boolean signRule1 = false;
@@ -440,19 +451,26 @@
             List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                     .eq("row1", nearRow)
                     .eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue())
-                    .orderBy("lev1", true).orderBy("bay1", false));
+                    .orderBy("lev1", true).orderBy("bay1", true));
             for (LocMast locMast1 : locMasts) {
                 if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
                     continue;
                 }
                 if (Utils.BooleanWhsTypeStaIoType(rowLastno)) {
-                    String shallowLoc = Utils.getDeepLoc(slaveProperties, locMast1.getLocNo());
-                    LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
-                            .eq("loc_no", shallowLoc).eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue()));
-                    if (!Cools.isEmpty(locMast2)) {
-                        locMast = locMast2;
+
+                    if (locMast1.getCrnNo() == 2) {
+                        String shallowLoc = Utils.getDeepLoc(slaveProperties, locMast1.getLocNo());
+                        LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>()
+                                .eq("loc_no", shallowLoc).eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue()));
+                        if (!Cools.isEmpty(locMast2)) {
+                            locMast = locMast2;
+                            break;
+                        }
+                    } else if (locMast1.getCrnNo() == 1) {
+                        locMast = locMast1;
                         break;
                     }
+
                 } else {
                     if (!Cools.isEmpty(locMast1)) {
                         locMast = locMast1;
@@ -505,9 +523,10 @@
         // 閫掑綊鏌ヨ
         if (Cools.isEmpty(locMast) || !locMast.getLocSts().equals("O")) {
             // 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊
-            if (times < rowCount * 2) {
+            if (times <= rowCount * 2) {
                 times = times + 1;
-                return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, moveCrnNo, locTypeDto, times);
+//                return getLocNoRun(whsType, staDescId, sourceStaNo, findLocNoAttributeVo, moveCrnNo, locTypeDto, times);
+                return getLocNoRun(5, staDescId, sourceStaNo, findLocNoAttributeVo, moveCrnNo, locTypeDto, times);
             }
 //            // 2.搴撲綅褰撳墠鎵�灞炲昂瀵告棤绌哄簱浣嶆椂锛岃皟鏁村昂瀵稿弬鏁帮紝鍚戜笂鍏煎妫�绱㈠簱浣�
 //            if (locTypeDto.getLocType1() < 2) {
@@ -1007,7 +1026,7 @@
         //姝ょ▼搴忕敤浜庝紭鍖栧爢鍨涙満寮傚父鏃剁殑杩愯鏃堕棿
         int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber);
         curRow = locNecessaryParameters[1];
-        crnNo = locNecessaryParameters[2];
+        crnNo = 6;
         rowCount = locNecessaryParameters[0];
         nearRow = locNecessaryParameters[3];
 
@@ -1015,27 +1034,28 @@
         StaDesc staDesc = null;
         BasDevp staNo = null;
 
-        if (Utils.BooleanWhsTypeSta(rowLastno, staDescId)) {
+//        if (Utils.BooleanWhsTypeSta(rowLastno, staDescId)) {
             // 鑾峰彇鐩爣绔�
-            wrapper = new EntityWrapper<StaDesc>()
-                    .eq("type_no", staDescId)
-                    .eq("stn_no", sourceStaNo)
-                    .eq("crn_no", crnNo);
-            staDesc = staDescService.selectOne(wrapper);
-            if (Cools.isEmpty(staDesc)) {
-                log.error("type_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo);
-//                throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
-                crnNo = 0;
-            } else {
-                staNo = basDevpService.selectById(staDesc.getCrnStn());
-                if (!staNo.getAutoing().equals("Y")) {
-                    log.error("鐩爣绔�" + staDesc.getCrnStn() + "涓嶅彲鐢�");
-//                throw new CoolException("鐩爣绔�"+staDesc.getCrnStn()+"涓嶅彲鐢�");
-                    crnNo = 0;
-                }
-                startupDto.setStaNo(staNo.getDevNo());
-            }
-        }
+//            wrapper = new EntityWrapper<StaDesc>()
+//                    .eq("type_no", staDescId)
+//                    .eq("stn_no", sourceStaNo)
+//                    .eq("crn_no", crnNo);
+//            staDesc = staDescService.selectOne(wrapper);
+//            if (Cools.isEmpty(staDesc)) {
+//                log.error("type_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo);
+////                throw new CoolException("鍏ュ簱璺緞涓嶅瓨鍦�");
+//                crnNo = 0;
+//            }
+//            else {
+//                staNo = basDevpService.selectById(staDesc.getCrnStn());
+//                if (!staNo.getAutoing().equals("Y")) {
+//                    log.error("鐩爣绔�" + staDesc.getCrnStn() + "涓嶅彲鐢�");
+////                throw new CoolException("鐩爣绔�"+staDesc.getCrnStn()+"涓嶅彲鐢�");
+//                    crnNo = 0;
+//                }
+//                startupDto.setStaNo(staNo.getDevNo());
+//            }
+//        }
 
         // 鏇存柊搴撲綅鎺掑彿
         if (Utils.BooleanWhsTypeSta(rowLastno, staDescId) && Cools.isEmpty(locMast)) {
@@ -1045,27 +1065,122 @@
 
         // 寮�濮嬫煡鎵惧簱浣� ==============================>>
 
-        // 1.鎸夎鍒欐煡鎵惧簱浣�
-        if (Cools.isEmpty(locMast) && crnNo != 0) {
-            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+        if (Cools.isEmpty(locMast) && sourceStaNo != 4006) {//si'lou'p鍥涙ゼ鐩樼偣閫夋嫨鍖哄煙
+                 List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                     .eq("row1", nearRow)
                     .eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue())
-                    .orderBy("lev1", true).orderBy("bay1", true));//鏈�娴呭簱浣�
+                    .orderBy("lev1", true).orderBy("bay1", true)); // 鏈�娴呭簱浣�
             for (LocMast locMast1 : locMasts) {
                 if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
                     continue;
                 }
                 if (Utils.BooleanWhsTypeStaIoType(rowLastno)) {
-                    //鑾峰彇鐩爣搴撲綅鎵�鍦ㄥ贩閬撴渶娣辩┖搴撲綅
+                    // 鑾峰彇鐩爣搴撲綅鎵�鍦ㄥ贩閬撴渶娣辩┖搴撲綅
                     LocMast locMast2 = locMastService.selectLocByLocStsPakInO(curRow, nearRow, locMast1, rowLastnoType.getType().longValue());
-                    if (!Cools.isEmpty(locMast2) && locMast2.getBay1() == curRow) {
+                    if (!Cools.isEmpty(locMast2) && locMast2.getRow1() == curRow) {
                         locMast = locMast2;
                         break;
                     }
                 }
             }
+        } else {
+            // 鏍规嵁 findLocNoAttributeVo.getOutArea() 璁剧疆鍒楄寖鍥�
+            int startBay = 1;
+            int endBay = 19;
+
+            switch (findLocNoAttributeVo.getOutArea()) {
+                case 3:
+                    startBay = 15;
+                    endBay = 19;
+                    break;
+                case 2:
+                    startBay = 8;
+                    endBay = 14;
+                    break;
+                case 1:
+                    startBay = 1;
+                    endBay = 8;
+                    break;
+                default:
+                    break;
+            }
+
+            // 浼樺厛浠庢寚瀹氬垪鑼冨洿鏌ユ壘
+            boolean found = false;
+
+            // 鎸夌収鎺掑彿浠�38鍒�32閫掑噺鏌ユ壘锛屼紭鍏堟煡鎵炬寚瀹氬垪鑼冨洿锛堝1-8銆�8-14銆�15-19锛�
+            for (int row = 38; row >= 32; row--) {
+                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+                        .eq("row1", row)
+                        .ge("bay1", startBay)
+                        .le("bay1", endBay)
+                        .eq("loc_sts", "O")
+                        .eq("whs_type", rowLastnoType.getType().longValue())
+                        .orderBy("lev1", true)
+                        .orderBy("bay1", true)); // 鏈�娴呭簱浣�
+
+                for (LocMast locMast1 : locMasts) {
+                    if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
+                        continue;
+                    }
+                    if(locMast1!= null){
+                        locMast = locMast1;
+                        found = true;
+                        break;
+                    }
+//                    if (Utils.BooleanWhsTypeStaIoType(rowLastno)) {
+//                        // 鑾峰彇鐩爣搴撲綅鎵�鍦ㄥ贩閬撴渶娣辩┖搴撲綅
+//                        LocMast locMast2 = locMastService.selectLocByLocStsPakInO(curRow, nearRow, locMast1, rowLastnoType.getType().longValue());
+//                        if (!Cools.isEmpty(locMast2) && locMast2.getRow1() == curRow) {
+//                            locMast = locMast2;
+//                            found = true;
+//                            break;
+//                        }
+//                    }
+                }
+
+                if (found) {
+                    break; // 鎵惧埌鐩爣搴撲綅鍚庤烦鍑哄惊鐜�
+                }
+            }
+
+            // 濡傛灉娌℃湁鍦ㄤ紭鍏堣寖鍥村唴鎵惧埌鍚堥�傚簱浣嶏紝缁х画杩涜鍏ㄥ眬鏌ユ壘锛�1-19鍒楋級
+            if (!found) {
+                // 浠庢帓鍙�38鍒�32鏌ユ壘鎵�鏈夊垪锛�1-19锛�
+                for (int row = 38; row >= 32; row--) {
+                    List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
+                            .eq("row1", row)
+                            .ge("bay1", 1)  // 鏌ユ壘1鍒�19鍒�
+                            .le("bay1", 19)
+                            .eq("loc_sts", "O")
+                            .eq("whs_type", rowLastnoType.getType().longValue())
+                            .orderBy("lev1", true)
+                            .orderBy("bay1", true)); // 鏈�娴呭簱浣�
+
+                    for (LocMast locMast1 : locMasts) {
+                        if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
+                            continue;
+                        }
+                        if (Utils.BooleanWhsTypeStaIoType(rowLastno)) {
+                            // 鑾峰彇鐩爣搴撲綅鎵�鍦ㄥ贩閬撴渶娣辩┖搴撲綅
+                            LocMast locMast2 = locMastService.selectLocByLocStsPakInO(curRow, nearRow, locMast1, rowLastnoType.getType().longValue());
+                            if (!Cools.isEmpty(locMast2) && locMast2.getRow1() == curRow) {
+                                locMast = locMast2;
+                                found = true;
+                                break;
+                            }
+                        }
+                    }
+
+                    if (found) {
+                        break; // 鎵惧埌鐩爣搴撲綅鍚庤烦鍑哄惊鐜�
+                    }
+                }
+            }
         }
 
+
+
         // 閫掑綊鏌ヨ
         if (Cools.isEmpty(locMast) || !locMast.getLocSts().equals("O")) {
             // 褰撳墠宸烽亾鏃犵┖搴撲綅鏃讹紝閫掑綊璋冩暣鑷充笅涓�宸烽亾锛屾绱㈠叏閮ㄥ贩閬撴棤鏋滃悗锛岃烦鍑洪�掑綊

--
Gitblit v1.9.1