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