From e61e32a2aa002ba15170e28cff9510711fb64d56 Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期四, 17 十月 2024 13:00:43 +0800
Subject: [PATCH] #优化找库位逻辑

---
 src/main/java/com/zy/common/service/CommonService.java |  123 ++++++++++++++++++++++++++++++----------
 1 files changed, 92 insertions(+), 31 deletions(-)

diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 003f292..7e3c52b 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -110,15 +110,18 @@
         return workNo;
     }
 
-    /**
-     * 妫�绱㈠簱浣嶅彿
-     * @param whsType     绫诲瀷 1:鍙屾繁寮忚揣鏋�
-     * @param staDescId   璺緞ID
-     * @param sourceStaNo 婧愮珯
-     * @param matNos      鐗╂枡鍙烽泦鍚�
-     * @return locNo 妫�绱㈠埌鐨勫簱浣嶅彿
-     */
     public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto, Integer matTypeIn) {
+        return getLocNo(whsType,staDescId,sourceStaNo,matNos,locTypeDto,matTypeIn,new ArrayList<>());
+    }
+        /**
+         * 妫�绱㈠簱浣嶅彿
+         * @param whsType     绫诲瀷 1:鍙屾繁寮忚揣鏋�
+         * @param staDescId   璺緞ID
+         * @param sourceStaNo 婧愮珯
+         * @param matNos      鐗╂枡鍙烽泦鍚�
+         * @return locNo 妫�绱㈠埌鐨勫簱浣嶅彿
+         */
+    public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto, Integer matTypeIn,List<LocMast> locMastList) {
         int start;
         int end;
         Integer matType = null;//鐗╂枡绫诲瀷
@@ -206,31 +209,67 @@
 
         if (!sign && matType != null) {
             if (matType == 1) {//鍗曞搧绫诲瀷鍏ュ簱
-                locMast = getLocNoStep2(locTypeDto, matNos, rows, crnNos);
+                locMast = getLocNoStep2(locTypeDto, matNos, rows, crnNos,locMastList);
                 if (locMast != null) {
+                    locMastList.add(locMast);
+                    Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+                            .eq("type_no", staDescId)
+                            .eq("stn_no", sourceStaNo)
+                            .eq("crn_no", locMast.getCrnNo());
+                    StaDesc staDesc = staDescService.selectOne(wrapper);
+                    if (Cools.isEmpty(staDesc)) {
+                        return getLocNo(whsType,staDescId,sourceStaNo,matNos,locTypeDto,matTypeIn,locMastList);
+                    }
                     //鎵惧埌搴撲綅锛岃繑鍥瀌to
                     sign=true;
                 } else {
                     //鍗曞搧娌℃湁鎵惧埌搴撲綅锛屾壘楂橀娣锋斁鍖哄煙搴撲綅
-                    locMast = getLocNoStep3(locTypeDto, crnNos);
+                    locMast = getLocNoStep3(locTypeDto, crnNos,locMastList);
                     if (locMast != null) {
+                        locMastList.add(locMast);
+                        Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+                                .eq("type_no", staDescId)
+                                .eq("stn_no", sourceStaNo)
+                                .eq("crn_no", locMast.getCrnNo());
+                        StaDesc staDesc = staDescService.selectOne(wrapper);
+                        if (Cools.isEmpty(staDesc)) {
+                            return getLocNo(whsType,staDescId,sourceStaNo,matNos,locTypeDto,matTypeIn,locMastList);
+                        }
                         //鎵惧埌搴撲綅锛岃繑鍥瀌to
                         sign=true;
                     }
                 }
             } else if (matType == 2) {//楂橀绫诲瀷鍏ユ渶澶栦晶搴撲綅
-                locMast = getLocNoStep3(locTypeDto, crnNos);
+                locMast = getLocNoStep3(locTypeDto, crnNos,locMastList);
                 if (locMast == null) {
                     //楂橀娌℃湁鎵惧埌搴撲綅锛屾壘浣庨娣锋斁鍖哄煙搴撲綅
-                    locMast = getLocNoStep4(locTypeDto, crnNos);
+                    locMast = getLocNoStep4(locTypeDto, crnNos,locMastList);
                 }
                 if (locMast != null) {
+                    locMastList.add(locMast);
+                    Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+                            .eq("type_no", staDescId)
+                            .eq("stn_no", sourceStaNo)
+                            .eq("crn_no", locMast.getCrnNo());
+                    StaDesc staDesc = staDescService.selectOne(wrapper);
+                    if (Cools.isEmpty(staDesc)) {
+                        return getLocNo(whsType,staDescId,sourceStaNo,matNos,locTypeDto,matTypeIn,locMastList);
+                    }
                     //鎵惧埌搴撲綅锛岃繑鍥瀌to
                     sign=true;
                 }
             } else if (matType == 3) {//浣庨娣锋斁绫诲瀷
-                locMast = getLocNoStep4(locTypeDto, crnNos);
+                locMast = getLocNoStep4(locTypeDto, crnNos,locMastList);
                 if (locMast != null) {
+                    locMastList.add(locMast);
+                    Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+                            .eq("type_no", staDescId)
+                            .eq("stn_no", sourceStaNo)
+                            .eq("crn_no", locMast.getCrnNo());
+                    StaDesc staDesc = staDescService.selectOne(wrapper);
+                    if (Cools.isEmpty(staDesc)) {
+                        return getLocNo(whsType,staDescId,sourceStaNo,matNos,locTypeDto,matTypeIn,locMastList);
+                    }
                     //鎵惧埌搴撲綅锛岃繑鍥瀌to
                     sign=true;
                 }
@@ -264,6 +303,9 @@
 
         if (sign){
             return getLocNoFinalStep(staDescId, sourceStaNo, locMast);//杩斿洖dto
+        }
+        if (!locMastList.isEmpty()){
+            return getLocNoFinalStep(staDescId, sourceStaNo, locMastList.get(0));//杩斿洖dto
         }
         //----------------2023.06.02鍏煎浠g爜end---------------------
 
@@ -301,7 +343,7 @@
     }
 
     //鍗曞搧绫诲瀷鍏ュ簱
-    private LocMast getLocNoStep2(LocTypeDto locTypeDto, List<String> matNos, List<Integer> rows, List<Integer> crnNos) {
+    private LocMast getLocNoStep2(LocTypeDto locTypeDto, List<String> matNos, List<Integer> rows, List<Integer> crnNos,List<LocMast> locMastList) {
         LocMast locMast = null;
         //鍏堟壘宸ヤ綔妗�
 
@@ -311,6 +353,7 @@
             //闅忔満鍙敤鍫嗗灈鏈哄彿
             Integer randomCrnNo = Utils.getRandomCrnNo(crnNos, locTypeDto.getLocType1());
             Collections.shuffle(crnNos);
+            loc:
             for (Integer crnNo : crnNos) {
                 List<LocMast> locMasts = locMastService.findEmptyLocMastByLocNos(locTypeDto.getLocType1(), groupLoc, crnNo);
                 for (LocMast locMast0 : locMasts) {
@@ -326,8 +369,10 @@
                         if (basCrnpService.checkSiteError(locMast0.getCrnNo(), true)) {
                             // 鍥犲簱浣嶇Щ杞�侀渶棰勭暀绌哄簱浣�
                             if (locMastService.checkEmptyCount(locMast0, 5)) {
-                                locMast = locMast0;
-                                break;
+                                if (!locMastList.contains(locMast0)){
+                                    locMast = locMast0;
+                                    break loc;
+                                }
                             }
                         }
                     }
@@ -339,6 +384,7 @@
         //鎵惧唴渚х┖搴撲綅(闈炴渶澶栦晶搴撲綅)
         if (locMast == null) {
             List<String> locNos = locDetlService.getSameDetl(matNos.get(0));
+            loc:
             for (String locNo : locNos) {
                 List<String> groupLoc = Utils.getGroupLoc(locNo);
                 List<LocMast> locMasts = locMastService.findEmptyLocMastByLocNos(locTypeDto.getLocType1(), groupLoc, null);
@@ -355,8 +401,10 @@
                         if (basCrnpService.checkSiteError(locMast0.getCrnNo(), true)) {
                             // 鍥犲簱浣嶇Щ杞�侀渶棰勭暀绌哄簱浣�
                             if (locMastService.checkEmptyCount(locMast0, 5)) {
-                                locMast = locMast0;
-                                break;
+                                if (!locMastList.contains(locMast0)){
+                                    locMast = locMast0;
+                                    break loc;
+                                }
                             }
                         }
                     }
@@ -390,9 +438,11 @@
                         if (basCrnpService.checkSiteError(locMast0.getCrnNo(), true)) {
                             // 鍥犲簱浣嶇Щ杞�侀渶棰勭暀绌哄簱浣�
                             if (locMastService.checkEmptyCount(locMast0, 5)) {
-                                locMast = locMast0;
-                                flag = true;
-                                break;
+                                if (!locMastList.contains(locMast0)){
+                                    locMast = locMast0;
+                                    flag = true;
+                                    break;
+                                }
                             }
                         }
                     }
@@ -407,9 +457,11 @@
                             if (basCrnpService.checkSiteError(locMast0.getCrnNo(), true)) {
                                 // 鍥犲簱浣嶇Щ杞�侀渶棰勭暀绌哄簱浣�
                                 if (locMastService.checkEmptyCount(locMast0, 5)) {
-                                    locMast = locMast0;
-                                    flag = true;
-                                    break;
+                                    if (!locMastList.contains(locMast0)){
+                                        locMast = locMast0;
+                                        flag = true;
+                                        break;
+                                    }
                                 }
                             }
                         }
@@ -425,7 +477,7 @@
     }
 
     //楂橀绫诲瀷鍏ユ渶澶栦晶搴撲綅
-    private LocMast getLocNoStep3(LocTypeDto locTypeDto, List<Integer> crnNos) {
+    private LocMast getLocNoStep3(LocTypeDto locTypeDto, List<Integer> crnNos,List<LocMast> locMastList) {
         LocMast locMast = null;
 
         //闅忔満鍙敤鍫嗗灈鏈哄彿
@@ -451,7 +503,10 @@
                 if (basCrnpService.checkSiteError(locMast0.getCrnNo(), true)) {
                     // 鍥犲簱浣嶇Щ杞�侀渶棰勭暀绌哄簱浣�
                     if (locMastService.checkEmptyCount(locMast0, 5)) {
-                        locMast = locMast0;
+                        if (!locMastList.contains(locMast0)){
+                            locMast = locMast0;
+                            break;
+                        }
                     }
                 }
             }
@@ -467,7 +522,7 @@
                 crns.add(crnNo);
             }
             if (!crns.isEmpty()) {
-                return getLocNoStep3(locTypeDto, crns);
+                return getLocNoStep3(locTypeDto, crns,locMastList);
             }
         }
 
@@ -475,7 +530,7 @@
     }
 
     //浣庨绫诲瀷锛岀洿鎺ユ壘娣锋斁鍖哄煙
-    private LocMast getLocNoStep4(LocTypeDto locTypeDto, List<Integer> crnNos) {
+    private LocMast getLocNoStep4(LocTypeDto locTypeDto, List<Integer> crnNos,List<LocMast> locMastList) {
         LocMast locMast = null;
 
         //闅忔満鍙敤鍫嗗灈鏈哄彿
@@ -515,10 +570,16 @@
                     if (!locMast1.getLocSts().equals("O") && !locMast0.getRow1().equals(outermostRow)){
                         // 鍥犲簱浣嶇Щ杞�侀渶棰勭暀绌哄簱浣�
                         if (locMastService.checkEmptyCount0(locMast0, 5)) {
-                            locMast = locMast0;
+                            if (!locMastList.contains(locMast0)){
+                                locMast = locMast0;
+                                break;
+                            }
                         }
                     }else {
-                        locMast = locMast0;
+                        if (!locMastList.contains(locMast0)){
+                            locMast = locMast0;
+                            break;
+                        }
                     }
 
                 }
@@ -535,7 +596,7 @@
                 crns.add(crnNo);
             }
             if (!crns.isEmpty()) {
-                return getLocNoStep4(locTypeDto, crns);
+                return getLocNoStep4(locTypeDto, crns,locMastList);
             }
         }
 

--
Gitblit v1.9.1