From 4881f66b288c535c3b9da41ee07c9609bacb8481 Mon Sep 17 00:00:00 2001
From: 1 <1>
Date: 星期一, 22 十二月 2025 17:01:49 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/common/service/CommonService.java | 214 ++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 163 insertions(+), 51 deletions(-)
diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index 8bede90..a8e9e1c 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -26,6 +26,7 @@
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
/**
* 璐ф灦鏍稿績鍔熻兘
@@ -157,6 +158,39 @@
}
+ private Optional<CrnRowInfo> findAvailableCrnAndNearRow(RowLastno rowLastno, int curRow, int crnNumber, int times,
+ FindLocNoAttributeVo findLocNoAttributeVo, LocTypeDto locTypeDto,
+ RowLastnoType rowLastnoType) {
+ int attempt = times;
+ while (attempt < crnNumber * 4) {
+ int[] params = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber);
+ curRow = params[1];
+ int crnNo = params[2];
+// if (!basCrnpService.checkSiteError(crnNo, true)) {
+// attempt++;
+// continue;
+// }
+ int rowCount = params[0];
+ int nearRow = params[3];
+
+ // 鍙彇鏁伴噺鍒ゆ柇锛岄伩鍏嶆媺鏁� list
+ int availableLocCount = locMastService.selectCount(new EntityWrapper<LocMast>()
+ .eq("row1", nearRow)
+ .eq("loc_sts", "O")
+ .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
+ log.error("{}鍙峰爢鍨涙満娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿}", crnNo, JSON.toJSONString(locTypeDto), attempt);
+ attempt++;
+ continue;
+ }
+ return Optional.of(new CrnRowInfo(crnNo, nearRow, curRow, rowCount, attempt));
+ }
+ return Optional.empty();
+ }
+
+
/**
* 妫�绱㈠簱浣嶅彿
@@ -207,30 +241,17 @@
}
//姝ょ▼搴忕敤浜庝紭鍖栧爢鍨涙満寮傚父鏃剁殑杩愯鏃堕棿
- for (int i = times; i < crnNumber * 2; i++) {
- int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber);
- curRow = locNecessaryParameters[1];
- crnNo = locNecessaryParameters[2];
- if (basCrnpService.checkSiteError(crnNo, true)) {
- rowCount = locNecessaryParameters[0];
- nearRow = locNecessaryParameters[3];
- List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
- .eq("row1", nearRow).eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue()));
- int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).le("io_type", 100));
- if (locMasts.size() - crnCountO <= 2) {
- log.error(crnNo + "鍙峰爢鍨涙満娌℃湁绌哄簱浣嶏紒锛侊紒 灏哄瑙勬牸锛� {}锛� 杞娆℃暟锛歿}", JSON.toJSONString(locTypeDto), times);
- nearRow = 0;
- times++;
- continue;
- }
- break;
- } else {
- times++;
- }
- }
- if (nearRow == 0) {
+ Optional<CrnRowInfo> infoOpt = findAvailableCrnAndNearRow(rowLastno, curRow, crnNumber, times, findLocNoAttributeVo, locTypeDto, rowLastnoType);
+ 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();
+
boolean signRule1 = false;
boolean signRule2 = false;
@@ -354,7 +375,7 @@
List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
.eq("row1", nearRow)
.eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue())
- .orderBy("lev1", false).orderBy("bay1", true));
+ .orderBy("lev1", true).orderBy("bay1", false));
for (LocMast locMast1 : locMasts) {
if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
continue;
@@ -419,7 +440,7 @@
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", false));
for (LocMast locMast1 : locMasts) {
if (!VersionUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) {
continue;
@@ -986,7 +1007,7 @@
//姝ょ▼搴忕敤浜庝紭鍖栧爢鍨涙満寮傚父鏃剁殑杩愯鏃堕棿
int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber);
curRow = locNecessaryParameters[1];
- crnNo = locNecessaryParameters[2];
+ crnNo = 6;
rowCount = locNecessaryParameters[0];
nearRow = locNecessaryParameters[3];
@@ -994,27 +1015,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)) {
@@ -1024,27 +1046,117 @@
// 寮�濮嬫煡鎵惧簱浣� ==============================>>
- // 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 1:
+ startBay = 15;
+ endBay = 19;
+ break;
+ case 2:
+ startBay = 8;
+ endBay = 14;
+ break;
+ case 3:
+ 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 (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