From 71f29001d7ec27a72b33143dc104abd34822268a Mon Sep 17 00:00:00 2001
From: jianghaiyue <jianghaiyue@zkyt.com>
Date: 星期二, 21 十月 2025 09:47:35 +0800
Subject: [PATCH] 更新了null值处理

---
 algo-zkd/src/main/java/com/algo/service/PathPlanningService.java |   62 ++++++++++++++++++++++++++----
 1 files changed, 53 insertions(+), 9 deletions(-)

diff --git a/algo-zkd/src/main/java/com/algo/service/PathPlanningService.java b/algo-zkd/src/main/java/com/algo/service/PathPlanningService.java
index 833510e..705d554 100644
--- a/algo-zkd/src/main/java/com/algo/service/PathPlanningService.java
+++ b/algo-zkd/src/main/java/com/algo/service/PathPlanningService.java
@@ -3,6 +3,7 @@
 import com.algo.config.EnvDataConfig;
 import com.algo.model.*;
 import com.algo.util.JsonUtils;
+import com.algo.util.PathTimeCalculator;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -43,6 +44,11 @@
      * 鍓╀綑璺緞澶勭悊
      */
     private RemainingPathProcessor remainingPathProcessor;
+    
+    /**
+     * 璺緞鏃堕棿璁$畻鍣�
+     */
+    private PathTimeCalculator timeCalculator;
 
 
     /**
@@ -73,6 +79,13 @@
 
         // 鍒濆鍖栧墿浣欒矾寰勫鐞嗗櫒
         this.remainingPathProcessor = new RemainingPathProcessor(envDataConfig.getPathMapping());
+        
+        // 鍒濆鍖栨椂闂磋绠楀櫒
+        Map<String, double[]> realCoordinateMapping = JsonUtils.loadRealCoordinateMapping("man_code.json");
+        this.timeCalculator = new PathTimeCalculator(envDataConfig.getPathMapping(), realCoordinateMapping);
+        
+        // 涓虹鎾炶В鍐冲櫒璁剧疆鏃堕棿璁$畻鍣�
+        this.collisionResolver.setTimeCalculator(timeCalculator);
     }
 
     /**
@@ -256,17 +269,45 @@
         PlannedPath remainingPath = agv.getRemainingPath();
         List<PathCode> remainingCodes = new ArrayList<>();
 
-        // 浠庡綋鍓嶄綅缃紑濮嬶紝鑾峰彇鍓╀綑璺緞
+        // 鑾峰彇鍓╀綑璺緞
         List<PathCode> originalCodes = remainingPath.getCodeList();
         for (int i = agv.getCurrentPathIndex(); i < originalCodes.size(); i++) {
-            remainingCodes.add(originalCodes.get(i));
+            PathCode originalCode = originalCodes.get(i);
+            PathCode newCode = new PathCode(originalCode.getCode(), originalCode.getDirection());
+            newCode.setActionType(originalCode.getActionType());
+            newCode.setTaskId(originalCode.getTaskId());
+            newCode.setPosType(originalCode.getPosType());
+            newCode.setLev(originalCode.getLev());
+            newCode.setTargetPoint(originalCode.isTargetPoint());
+            remainingCodes.add(newCode);
         }
 
-        // 鍒涘缓鏂扮殑璺緞瀵硅薄
         PlannedPath processedPath = new PlannedPath();
         processedPath.setAgvId(agv.getAgvId());
         processedPath.setCodeList(remainingCodes);
         processedPath.setSegId(agv.getAgvId() + "_REMAINING_" + System.currentTimeMillis());
+
+        if (timeCalculator != null && !remainingCodes.isEmpty()) {
+            // 鑾峰彇AGV鐨勪笅涓�涓矾寰勭偣鍒拌揪鏃堕棿浣滀负璧峰鏃堕棿
+            long startTime = agv.getNextPointArrivalTime();
+            
+            CTUPhysicalConfig config = agv.getPhysicalConfig();
+            
+            // 浼扮畻褰撳墠閫熷害锛圓GV绉诲姩涓负姝e父閫熷害锛涢潤姝负0锛�
+            double initialSpeed = agv.hasRemainingPath() && agv.getRemainingPathLength() > 0 
+                                ? config.getNormalSpeed() : 0.0;
+            
+            // 璁$畻鏃堕棿淇℃伅
+            // arrivalTime, departureTime, cumulativeTime
+            timeCalculator.calculatePathTiming(
+                processedPath, 
+                startTime, 
+                config, 
+                initialSpeed
+            ); 
+        } else {
+            System.out.println("  鏈兘涓哄墿浣欒矾寰勮缃椂闂翠俊鎭� - AGV: " + agv.getAgvId());
+        }
 
         return processedPath;
     }
@@ -320,7 +361,7 @@
                                                          List<double[]> constraints,
                                                          Map<String, String> occupancyMap,
                                                          AGVStatus agvStatus) {
-        // 棣栧厛灏濊瘯鍩烘湰璺緞瑙勫垝
+        // 灏濊瘯鍩烘湰璺緞瑙勫垝
         PlannedPath basicPath = pathPlanner.planPath(startPos, endPos, constraints);
         if (basicPath == null) {
             return null;
@@ -331,8 +372,8 @@
                 basicPath, occupancyMap, agvStatus.getPhysicalConfig()
         );
 
-        // 璁剧疆璺緞鐨勬椂闂翠俊鎭�
-        enhancePathWithTimeInfo(basicPath, safeStartTime, agvStatus.getPhysicalConfig());
+        // 浣跨敤缁熶竴鐨勬椂闂磋绠楀櫒璁剧疆绮剧‘鐨勬椂闂翠俊鎭�
+        timeCalculator.calculatePathTiming(basicPath, safeStartTime, agvStatus.getPhysicalConfig(), 0.0);
 
         return basicPath;
     }
@@ -364,9 +405,12 @@
 
                 // 濡傛灉鏈夋柟鍚戝彉鍖栵紝澧炲姞杞悜鏃堕棿
                 PathCode nextCode = codeList.get(i + 1);
-                if (!pathCode.getDirection().equals(nextCode.getDirection())) {
-                    double turnTime = config.getTurnTime(pathCode.getDirection(), nextCode.getDirection());
-                    currentTime += (long) (turnTime * 1000);
+                // 娣诲姞null妫�鏌�
+                if (pathCode.getDirection() != null && nextCode.getDirection() != null) {
+                    if (!pathCode.getDirection().equals(nextCode.getDirection())) {
+                        double turnTime = config.getTurnTime(pathCode.getDirection(), nextCode.getDirection());
+                        currentTime += (long) (turnTime * 1000);
+                    }
                 }
             }
         }

--
Gitblit v1.9.1