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/CollisionDetector.java      |    9 +++-
 algo-zkd/src/main/java/com/algo/service/PathPlanningService.java    |   45 ++++++++++++++++++----
 algo-zkd/src/main/java/com/algo/service/RemainingPathProcessor.java |   14 +++++-
 3 files changed, 54 insertions(+), 14 deletions(-)

diff --git a/algo-zkd/src/main/java/com/algo/service/CollisionDetector.java b/algo-zkd/src/main/java/com/algo/service/CollisionDetector.java
index 2e378c5..2398831 100644
--- a/algo-zkd/src/main/java/com/algo/service/CollisionDetector.java
+++ b/algo-zkd/src/main/java/com/algo/service/CollisionDetector.java
@@ -198,9 +198,12 @@
             travelTime += (long) ((distance / speed) * 1000); // 杞崲涓烘绉�
 
             // 濡傛灉鏈夋柟鍚戝彉鍖栵紝澧炲姞杞悜鏃堕棿
-            if (!currentCode.getDirection().equals(previousCode.getDirection())) {
-                double turnTime = calculateTurnTime(previousCode.getDirection(), currentCode.getDirection(), config);
-                travelTime += (long) (turnTime * 1000);
+            // 娣诲姞null妫�鏌�
+            if (currentCode.getDirection() != null && previousCode.getDirection() != null) {
+                if (!currentCode.getDirection().equals(previousCode.getDirection())) {
+                    double turnTime = calculateTurnTime(previousCode.getDirection(), currentCode.getDirection(), config);
+                    travelTime += (long) (turnTime * 1000);
+                }
             }
 
             // 鑰冭檻鍔犻�熷拰鍑忛�熸椂闂�
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 026b64b..705d554 100644
--- a/algo-zkd/src/main/java/com/algo/service/PathPlanningService.java
+++ b/algo-zkd/src/main/java/com/algo/service/PathPlanningService.java
@@ -4,7 +4,6 @@
 import com.algo.model.*;
 import com.algo.util.JsonUtils;
 import com.algo.util.PathTimeCalculator;
-import lombok.Data;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -270,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;
     }
@@ -378,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);
+                    }
                 }
             }
         }
@@ -613,7 +643,6 @@
     /**
      * 璺緞瑙勫垝缁撴灉绫�
      */
-    @Data
     public static class PathPlanningResult {
         private int totalAgvs;
         private int executingTasksCount;
diff --git a/algo-zkd/src/main/java/com/algo/service/RemainingPathProcessor.java b/algo-zkd/src/main/java/com/algo/service/RemainingPathProcessor.java
index 0c411d6..a9e0085 100644
--- a/algo-zkd/src/main/java/com/algo/service/RemainingPathProcessor.java
+++ b/algo-zkd/src/main/java/com/algo/service/RemainingPathProcessor.java
@@ -193,8 +193,16 @@
             String currentDirection = currentCode.getDirection();
             String nextDirection = nextCode.getDirection();
 
-            if (!currentDirection.equals(nextDirection)) {
-                stayTime += config.getTurnTime(currentDirection, nextDirection);
+            if (currentDirection != null && nextDirection != null) {
+                if (!currentDirection.equals(nextDirection)) {
+                    stayTime += config.getTurnTime(currentDirection, nextDirection);
+                }
+            } else {
+                if (pathIndex == agv.getCurrentPathIndex()) {
+                    System.out.println("AGV " + agv.getAgvId() + 
+                                     " 鐨勫墿浣欒矾寰勪腑direction瀛楁涓簄ull");
+                }
+                stayTime += 0.5; 
             }
         }
 
@@ -208,7 +216,7 @@
                     stayTime += 2.0; // 鏀捐揣闇�瑕�2绉�
                     break;
                 case "3": // 鍏呯數
-                    stayTime += 10.0; // 鍏呯數鍋滈潬闇�瑕�10绉�
+                    stayTime += 100.0; // 鍏呯數鍋滈潬
                     break;
                 default:
                     stayTime += 1.0; // 鍏朵粬鍔ㄤ綔闇�瑕�1绉�

--
Gitblit v1.9.1