From 7ce12b33107fb33941df7e1589bf1a6716539377 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期五, 13 三月 2026 13:39:48 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java |   75 +++++++++++++++++++++----------------
 1 files changed, 42 insertions(+), 33 deletions(-)

diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java
index a10ea6c..dbf3a7b 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java
@@ -9,6 +9,7 @@
 import com.zy.acs.manager.common.utils.MapDataUtils;
 import com.zy.acs.manager.core.constant.MapDataConstant;
 import com.zy.acs.manager.core.domain.BlockVehicleDto;
+import com.zy.acs.manager.core.domain.PathDto;
 import com.zy.acs.manager.core.domain.TaskPosDto;
 import com.zy.acs.manager.core.domain.type.BlockSeverityType;
 import com.zy.acs.manager.core.service.astart.MapDataDispatcher;
@@ -201,7 +202,7 @@
             //        ArrayList<List<TaskPosDto>> list = JSON.parseObject(travel.getTaskContent(), new TypeReference<ArrayList<List<TaskPosDto>>>() {});
 
             // * sync wave scope
-            if (!avoidWaveCalculator.calcWaveScope()) {
+            if (!avoidWaveCalculator.calcWaveScope(agvModelService.getByAgvId(agv.getId()))) {
                 log.error("failed to calculate avoid wave matrix ...");
                 return;
             }
@@ -277,16 +278,17 @@
                 }
             }
 
-            mapService.lockPath(null, pathList, agv.getUuid());
-
 //            startTime = System.currentTimeMillis();
-            mainService.generateAction(segment.getAgvId(), segmentList, pathList, now);
+            List<PathDto> pathDtoList = mainService.generateAction(segment.getAgvId(), segmentList, pathList, now);
 //            System.out.println("generateAction: " + (System.currentTimeMillis() - startTime));
+
+            mapService.lockPath(null, pathDtoList, agv.getUuid());
 
         } catch (Exception e) {
             log.error("TrafficService.trigger", e);
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
 
+            throw new RuntimeException("trigger method caught an exception", e);
         }
     }
 
@@ -298,7 +300,7 @@
         BlockSeverityType blockSeverity = BlockSeverityType.query(null == jam ? null : jam.getDuration());
         // judge avoid of jam 濡傛灉宸茬粡鍦ㄩ伩璁╃偣锛堝洜涓哄綋鍓嶈溅鎵ц浜嗛伩璁╀换鍔★級锛岄偅涔堝垯涓嶈兘鍐嶅幓妫�绱箣鍓嶇殑闃诲璺緞
         List<Jam> unfinishedOriginJamByCurrAgv = jamService.getUnfinishedOriginJamByAvo(agv.getId(), startCode.getId(), segment.getId());
-        List<String> blackPath = this.getBlackPathList(unfinishedOriginJamByCurrAgv);
+        List<String> blackPath = this.getBlackPathList(agvNo, unfinishedOriginJamByCurrAgv);
 
         // 缁撴灉闆�
         List<String> pathList = new ArrayList<>();
@@ -650,43 +652,47 @@
         }
     }
 
-    private List<String> getBlackPathList(List<Jam> unfinishedOriginJamByCurrAgv) {
+    private List<String> getBlackPathList(String agvNo, List<Jam> unfinishedOriginJamByCurrAgv) {
         List<String> blackPathList = new ArrayList<>();
         Integer lev = MapDataDispatcher.MAP_DEFAULT_LEV;
-        if (!Cools.isEmpty(unfinishedOriginJamByCurrAgv)) {
-            for (Jam jam : unfinishedOriginJamByCurrAgv) {
-                if (!Cools.isEmpty(jam.getJamPath())) {
+        if (Cools.isEmpty(unfinishedOriginJamByCurrAgv)) {
+            return blackPathList;
+        }
 
-                    List<String> list = GsonUtils.fromJsonToList(jam.getJamPath(), String.class);
+        AgvModel agvModel = agvModelService.getByAgvNo(agvNo);
+        double bufferRadius = MapDataUtils.buildFootprint(agvModel).maxExtent();
 
-                    Agv jamAgv = agvService.getById(jam.getJamAgv());
-                    List<String> jamDynamicNodes = mapService.queryCodeListFromDynamicNode(lev, jamAgv.getUuid());
-                    // jamDynamicNodes has sorted
-                    String firstCodeNode = jamDynamicNodes.stream().findFirst().orElse(null);
+        for (Jam jam : unfinishedOriginJamByCurrAgv) {
+            if (!Cools.isEmpty(jam.getJamPath())) {
 
-                    if (!Cools.isEmpty(firstCodeNode)) {
-                        int idx = list.indexOf(firstCodeNode);
-                        if (idx != -1) {
-                            list = new ArrayList<>(list.subList(idx, list.size()));
+                List<String> list = GsonUtils.fromJsonToList(jam.getJamPath(), String.class);
 
-                            // the wave of first node
-                            Double avoidDistance = MapDataUtils.getVehicleWaveSafeDistance(
-                                    agvModelService.getById(jamAgv.getAgvModel()).getDiameter(),
-                                    MapDataConstant.MAX_DISTANCE_BETWEEN_ADJACENT_AGV_FACTOR
-                            );
-                            List<String> waveCodeList = mapService.getWaveScopeByCode(lev, firstCodeNode, avoidDistance)
-                                    .stream().map(NavigateNode::getCodeData).distinct().collect(Collectors.toList());
-                            list.addAll(waveCodeList);
-                        } else {
-                            // 濡傛灉琚樆濉炶溅杈嗗凡缁忎笉鍦ㄥ師鏉ョ殑闃诲璺緞涓紝鑰冭檻閬胯杞﹁蛋琛屾椂涓嶉渶瑕佹妸涔嬪墠鐨勯樆濉炶矾寰勫姞鍏ラ粦鍚嶅崟
-                            list = new ArrayList<>();
-                        }
+                String jamAgvNo = agvService.getAgvNo(jam.getJamAgv());
+                List<String> jamDynamicNodes = mapService.queryCodeListFromDynamicNode(lev, jamAgvNo);
+                // jamDynamicNodes has sorted
+                String firstCodeNode = jamDynamicNodes.stream().findFirst().orElse(null);
+
+                if (!Cools.isEmpty(firstCodeNode)) {
+                    int idx = list.indexOf(firstCodeNode);
+                    if (idx != -1) {
+                        list = new ArrayList<>(list.subList(idx, list.size()));
+
+                        // the wave of first node
+                        AgvModel jamAgvModel = agvModelService.getByAgvNo(jamAgvNo);
+                        Double avoidDistance = MapDataUtils.buildFootprint(jamAgvModel).maxExtent() + bufferRadius;
+                        List<String> waveCodeList = mapService.getWaveScopeByCode(lev, firstCodeNode, avoidDistance)
+                                .stream().map(NavigateNode::getCodeData).distinct().collect(Collectors.toList());
+                        list.addAll(waveCodeList);
+                    } else {
+                        // 濡傛灉琚樆濉炶溅杈嗗凡缁忎笉鍦ㄥ師鏉ョ殑闃诲璺緞涓紝鑰冭檻閬胯杞﹁蛋琛屾椂涓嶉渶瑕佹妸涔嬪墠鐨勯樆濉炶矾寰勫姞鍏ラ粦鍚嶅崟
+                        list = new ArrayList<>();
                     }
-
-                    blackPathList.addAll(list);
                 }
+
+                blackPathList.addAll(list);
             }
         }
+
         return blackPathList.stream().distinct().collect(Collectors.toList());
     }
 
@@ -702,9 +708,12 @@
                 continue;
             }
             // 褰撳墠vehicle姝e湪杩涜婊氱瓛杈撻�佺嚎绛夊緟
-            if (segmentService.isRollerWaiting(agvId)) {
+            if (travelService.hasRollerWaiting(agvId)) {
                 continue;
             }
+//            if (segmentService.isRollerWaiting(agvId)) {
+//                continue;
+//            }
             return blockVehicleDto.getVehicle();
         }
         return null;

--
Gitblit v1.9.1