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/web/WcsController.java | 1
src/main/java/com/zy/common/service/CommonService.java | 123 ++++++++++++++++++++++++++++++----------
2 files changed, 93 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);
}
}
diff --git a/src/main/java/com/zy/common/web/WcsController.java b/src/main/java/com/zy/common/web/WcsController.java
index 480c99a..cc7fa7a 100644
--- a/src/main/java/com/zy/common/web/WcsController.java
+++ b/src/main/java/com/zy/common/web/WcsController.java
@@ -17,6 +17,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
+import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
--
Gitblit v1.9.1