From 13e767fc0e39a13b0235e09f0dac301bb53ad885 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期三, 31 十二月 2025 17:14:18 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java |   22 +++++++++++++++++++---
 1 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
index 852ad39..ba83c4e 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -276,7 +276,7 @@
                             int backpackLev = 0;
                             int backpack = agvService.getBackpack(agvId);
                             List<Integer> usedBackpacks = segmentService.selectUsedBackpacks(currSeg.getTravelId(), agvId);
-                            if (usedBackpacks.size() == backpackLev) {
+                            if (usedBackpacks.size() >= backpack) {
                                 throw new CoolException("[Agv:" + agvNo + "] allocate inbound segment failed: no idle backpack to use");
                             }
                             for (int lev = 1; lev <= backpack; lev++) {
@@ -382,8 +382,24 @@
                                 throw new BusinessException("failed to locate new destination in sorted list");
                             }
 
-                            // 鍚庣户鐐�
-                            TaskPosDto afterTaskPos = ((idx + 1) < destPosList.size()) ? destPosList.get(idx + 1) : null;
+                            // 鍚庣户鐐� todo
+                            if (idx + 1 == destPosList.size()) {
+                                placeSegSerial = destSegList.get(destSegList.size() - 1).getSerial() + 1;
+                            } else {
+                                TaskPosDto afterTaskPos = destPosList.get(idx);
+                                Segment afterSeg = destSegList.stream()
+                                        .filter(destSeg -> Objects.equals(destSeg.getId(), afterTaskPos.getSegId()))
+                                        .findFirst()
+                                        .orElse(null);
+                                if (null == afterSeg) {
+                                    placeSegSerial = destSegList.get(destSegList.size() - 1).getSerial() + 1;
+                                } else {
+                                    placeSegSerial = afterSeg.getSerial();
+                                }
+                            }
+
+                            // todo
+                            TaskPosDto afterTaskPos = (idx + 1) <= destPosList.size() ? destPosList.get(idx) : null;
                             if (null == afterTaskPos) {
                                 // loadSeg is the last one
                                 placeSegSerial = destSegList.get(destSegList.size() - 1).getSerial() + 1;

--
Gitblit v1.9.1