From 818cca1634b4cdee73b91ee65f9aa03407102cee Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期二, 20 一月 2026 10:35:27 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java | 136 ++++++++++----------------------------------
1 files changed, 32 insertions(+), 104 deletions(-)
diff --git a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
index d3b8244..a3e7df0 100644
--- a/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -210,8 +210,10 @@
/**
* 妫�鏌ユ甯稿簱浣嶅墠鏂规槸鍚﹀牭濉烇紙娣卞簱浣嶈鍒欙細鍓嶆柟鎺掓槸鍚︽湁璐ф垨鍏ュ簱浠诲姟锛�
*
- * 鍙灞炰簬鍑哄簱鍒嗙粍瑙勫垯鍐呯殑搴撲綅杩涜妫�鏌�
- * 濡傛灉搴撲綅涓嶅湪鍒嗙粍瑙勫垯鍐咃紝鍒欒涓轰笉闇�瑕佷弗鏍兼鏌ワ紙杩斿洖 false锛屼笉瑙﹀彂琛ラ綈锛�
+ * 鍒ゆ柇渚濇嵁锛�
+ * 1. 鍙鏌ュ睘浜庡嚭搴撳垎缁勮鍒欏唴鐨勫簱浣嶏紙閫氳繃鍒嗙粍鐨� rowList 纭畾鑼冨洿锛�
+ * 2. 鍓嶆柟 = 鍒嗙粍涓储寮曞ぇ浜庡綋鍓嶅簱浣嶇殑鎺掞紙鍋囪鍒嗙粍 rowList 宸叉寜鍑哄簱椤哄簭鎺掑垪锛屽ぇ绱㈠紩 = 鍓嶆柟鏇存繁锛�
+ * 3. 鍫靛鏉′欢锛氬墠鏂规湁璐э紙F鐘舵�侊級鎴栨湁鍏ュ簱浠诲姟
*
* @param normalMasts 闇�瑕佹鏌ョ殑姝e父搴撲綅鍒楄〃锛堝凡閫氳繃 isInNormalRule 杩囨护锛�
* @return true = 鍓嶆柟鏈夊牭濉烇紙闇�瑕佽ˉ榻愶級锛宖alse = 鍓嶆柟娓呯┖鎴栨棤闇�妫�鏌�
@@ -220,11 +222,25 @@
if (normalMasts == null || normalMasts.isEmpty()) {
return false;
}
- // 鑾峰彇鍑哄簱鍒嗙粍閰嶇疆锛堢敤浜庣‘璁よ鍒欒寖鍥达級
+
+ // 鑾峰彇鍑哄簱鍒嗙粍閰嶇疆
List<LocGroupOrder> locGroupAscOrder = slaveProperties.getLocGroupAscOrder();
if (locGroupAscOrder == null || locGroupAscOrder.isEmpty()) {
return false; // 鏃犻厤缃椂榛樿涓嶆鏌�
}
+
+ // 鍋囪鎵�鏈� normalMasts 鍦ㄥ悓涓�涓垎缁勶紙甯歌鎯呭喌锛岃嫢澶氬垎缁勫彲寰幆澶勭悊锛�
+ LocMast representative = normalMasts.get(0);
+ LocGroupOrder group = locGroupAscOrder.stream()
+ .filter(g -> g.getRowList() != null && g.getRowList().contains(representative.getRow1()))
+ .findFirst()
+ .orElse(null);
+
+ if (group == null || group.getRowList() == null || group.getRowList().isEmpty()) {
+ return false; // 涓嶅湪浠讳綍鍒嗙粍锛屼笉妫�鏌�
+ }
+
+ List<Integer> fullRows = group.getRowList(); // 鍒嗙粍鍐呮墍鏈夋帓鍙峰垪琛紙鎸夊嚭搴撻『搴忔帓鍒楋級
// 閬嶅巻姣忎釜姝e父搴撲綅
for (LocMast lm : normalMasts) {
@@ -236,10 +252,17 @@
continue;
}
- // 娣卞簱浣嶆鏌ユ柟鍚戯細鍋囪 row 瓒婂ぇ瓒婃繁锛堝墠鏂规槸鏇村ぇ row 鐨勪綅缃級
- // 浣犲彲浠ユ牴鎹疄闄呭嚭搴撴柟鍚戣皟鏁村惊鐜潯浠讹紙渚嬪浠庡皬 row 鍒板ぇ row 鎴栧弽涔嬶級
- for (int row = currentRow + 1; row <= 5; row++) { // 鍋囪娣卞簱浣嶈寖鍥村埌 5 鎺掞紝鍙皟鏁�
- LocMast front = getLocMastByRow(row, bay1, lev1);
+ // 鍦ㄥ垎缁� rowList 涓壘鍒板綋鍓嶆帓鐨勭储寮�
+ int currentIndex = fullRows.indexOf(currentRow);
+ if (currentIndex < 0) {
+ continue; // 褰撳墠鎺掍笉鍦ㄥ垎缁勫唴锛岃烦杩�
+ }
+
+ // 鍓嶆柟 = 鍒嗙粍涓储寮曟洿澶х殑浣嶇疆锛堝亣璁惧垎缁� rowList 浠庡墠鍒板悗鎺掑垪锛屽ぇ绱㈠紩 = 鏇存繁锛�
+ // 濡傛灉浣犵殑鍒嗙粍鍒楄〃鏄�掑簭鐨勶紙浠庡悗鍒板墠锛夛紝鍒欓渶鏀逛负 currentIndex - 1 鍒� 0
+ for (int i = currentIndex + 1; i < fullRows.size(); i++) {
+ Integer frontRow = fullRows.get(i);
+ LocMast front = getLocMastByRow(frontRow, bay1, lev1);
if (front == null) {
continue;
}
@@ -249,12 +272,12 @@
return true;
}
- // 鏈夊叆搴撲换鍔� 鈫� 鍫靛
WrkMast frontTask = wrkMastService.selectOne(
new EntityWrapper<WrkMast>()
.eq("source_loc_no", front.getLocNo())
- .eq("io_type", 100) // 鍋囪 100 涓哄叆搴撶被鍨嬶紝鍙皟鏁�
+ .in("loc_sts", Arrays.asList("S", "Q")) // 鏀寔 loc_sts 涓� S 鎴� Q
);
+
if (frontTask != null) {
return true;
}
@@ -501,101 +524,6 @@
}
} else {
throw new CoolException(locNo + " 搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
- }
- }
- }
-
- private void supplementBothSidesBlocked(
- List<LocMast> normalMasts,
- List<LocMast> supplementMasts,
- AtomicReference<Boolean> isLeftSideSupplement) {
-
- if (normalMasts.isEmpty()) {
- isLeftSideSupplement.set(true); // 榛樿宸︿晶
- return;
- }
-
- // 鍋囪鎵�鏈� normalMasts 鍦ㄥ悓涓� bay/lev锛堝缁勬儏鍐靛彲寰幆澶勭悊锛�
- LocMast rep = normalMasts.get(0);
- Integer bay1 = rep.getBay1();
- Integer lev1 = rep.getLev1();
-
- if (bay1 == null || lev1 == null) {
- throw new CoolException("搴撲綅 bay1 鎴� lev1 涓虹┖锛屾棤娉曡ˉ榻愬墠鏂�");
- }
-
- // 鎵惧嚭閫変腑娈电殑鏈�灏�/鏈�澶ф帓鍙�
- int minRow = normalMasts.stream()
- .mapToInt(LocMast::getRow1)
- .min()
- .orElseThrow(() -> new CoolException("姝e父搴撲綅鍒楄〃涓虹┖锛屾棤娉曡幏鍙栨渶灏忔帓鍙�"));
-
- int maxRow = normalMasts.stream()
- .mapToInt(LocMast::getRow1)
- .max()
- .orElseThrow(() -> new CoolException("姝e父搴撲綅鍒楄〃涓虹┖锛屾棤娉曡幏鍙栨渶澶ф帓鍙�"));
-
- // 鍋囪娣卞簱浣嶈寖鍥达細1~5 鎺掞紙鍙牴鎹疄闄呰皟鏁达級
- final int MIN_ROW = 1;
- final int MAX_ROW = 5;
-
- // ---------------- 璁$畻宸︿晶锛堝皬鎺掑彿鏂瑰悜锛岃緝娴呬綅缃級闇�瑕佽ˉ澶氬皯 ----------------
- int leftCount = 0;
- List<LocMast> leftToAdd = new ArrayList<>();
- for (int r = minRow - 1; r >= MIN_ROW; r--) {
- LocMast loc = getLocMastByRow(r, bay1, lev1);
- if (loc == null) continue;
-
- // 鍙ˉ绌烘澘锛圖鐘舵�侊級
- if ("D".equals(loc.getLocSts())) {
- leftCount++;
- leftToAdd.add(loc);
- }
- // 鍙�夛細閬囧埌鍏朵粬闃诲鐘舵�佸彲鍋滄锛堣涓氬姟闇�姹傦級
- // else if ("F".equals(loc.getLocSts()) || "鍏朵粬闃诲".equals(...)) break;
- }
-
- // ---------------- 璁$畻鍙充晶锛堝ぇ鎺掑彿鏂瑰悜锛屾洿娣变綅缃級闇�瑕佽ˉ澶氬皯 ----------------
- int rightCount = 0;
- List<LocMast> rightToAdd = new ArrayList<>();
- for (int r = maxRow + 1; r <= MAX_ROW; r++) {
- LocMast loc = getLocMastByRow(r, bay1, lev1);
- if (loc == null) continue;
-
- if ("D".equals(loc.getLocSts())) {
- rightCount++;
- rightToAdd.add(loc);
- }
- // else if (闃诲鐘舵��) break;
- }
-
- // ---------------- 閫夋嫨琛ュ摢涓�杈� ----------------
- List<LocMast> chosen;
- boolean chooseLeft;
-
- if (leftCount == 0 && rightCount == 0) {
- // 涓や晶閮芥病绌烘澘鍙ˉ 鈫� 鏃犳硶鎵撻��
- throw new CoolException("鍓嶆柟涓や晶鍧囨棤绌烘澘鍙ˉ鍏咃紝鏃犳硶鎵撻�氬嚭搴撹矾寰�");
- }
-
- if (leftCount <= rightCount) {
- // 宸︿晶琛ユ洿灏戯紙鎴栫浉绛夐粯璁ゅ乏渚э級
- chosen = leftToAdd;
- chooseLeft = true;
- log.info("閫夋嫨琛ュ厖宸︿晶锛堝皬鎺掓柟鍚戯級锛屽叡 {} 涓┖鏉垮簱浣�", leftCount);
- } else {
- chosen = rightToAdd;
- chooseLeft = false;
- log.info("閫夋嫨琛ュ厖鍙充晶锛堝ぇ鎺掓柟鍚戯級锛屽叡 {} 涓┖鏉垮簱浣�", rightCount);
- }
-
- // 璁剧疆鏍囪锛堢敤浜庡悗缁紭鍏堢骇璋冩暣锛�
- isLeftSideSupplement.set(chooseLeft);
-
- // 鍔犲叆琛ュ厖鍒楄〃锛堝幓閲嶏級
- for (LocMast supp : chosen) {
- if (!supplementMasts.contains(supp) && !normalMasts.contains(supp)) {
- supplementMasts.add(supp);
}
}
}
--
Gitblit v1.9.1