From d808837cd368c3772962be591aa6532bcc0cf3e4 Mon Sep 17 00:00:00 2001
From: jianghaiyue <jianghaiyue@zkyt.com>
Date: 星期一, 22 九月 2025 12:11:37 +0800
Subject: [PATCH] 更新版本

---
 algo-zkd/src/main/java/com/algo/service/CollisionResolver.java |   74 ++++++++++++++++++++++++++++++++++++
 1 files changed, 73 insertions(+), 1 deletions(-)

diff --git a/algo-zkd/src/main/java/com/algo/service/CollisionResolver.java b/algo-zkd/src/main/java/com/algo/service/CollisionResolver.java
index cdf70d7..1c70c81 100644
--- a/algo-zkd/src/main/java/com/algo/service/CollisionResolver.java
+++ b/algo-zkd/src/main/java/com/algo/service/CollisionResolver.java
@@ -4,6 +4,8 @@
 import com.algo.model.ExecutingTask;
 import com.algo.model.PathCode;
 import com.algo.model.PlannedPath;
+import com.algo.model.CTUPhysicalConfig;
+import com.algo.util.PathTimeCalculator;
 
 import java.util.*;
 
@@ -17,6 +19,11 @@
      * 纰版挒妫�娴嬪櫒
      */
     private final CollisionDetector collisionDetector;
+    
+    /**
+     * 璺緞鏃堕棿璁$畻鍣�
+     */
+    private PathTimeCalculator timeCalculator;
 
     /**
      * 鏋勯�犲嚱鏁�
@@ -25,6 +32,13 @@
      */
     public CollisionResolver(CollisionDetector collisionDetector) {
         this.collisionDetector = collisionDetector;
+    }
+    
+    /**
+     * 璁剧疆鏃堕棿璁$畻鍣�
+     */
+    public void setTimeCalculator(PathTimeCalculator timeCalculator) {
+        this.timeCalculator = timeCalculator;
     }
 
     /**
@@ -243,7 +257,7 @@
     }
 
     /**
-     * 涓鸿矾寰勬坊鍔犲欢杩�
+     * 涓鸿矾寰勬坊鍔犲欢杩燂紙澧炲己鐗堬紝姝g‘閲嶈绠楁椂闂寸獥锛�
      *
      * @param path       璺緞
      * @param timeStep   寤惰繜寮�濮嬬殑鏃堕棿姝�
@@ -263,6 +277,9 @@
 
         // 鑾峰彇寤惰繜浣嶇疆鐨勮矾寰勪唬鐮�
         PathCode delayCode = codeList.get(timeStep);
+        
+        // 璁$畻寤惰繜鏃堕棿锛堟瘡涓欢杩熸楠�1绉掞級
+        long delayDuration = delaySteps * 1000L;
 
         // 鍒涘缓寤惰繜姝ラ
         List<PathCode> delaySteps_list = new ArrayList<>();
@@ -273,14 +290,69 @@
             waitCode.setPosType(delayCode.getPosType());
             waitCode.setLev(delayCode.getLev());
             waitCode.setTargetPoint(false); // 绛夊緟姝ラ涓嶆槸鐩爣鐐�
+            
+            // 璁剧疆绛夊緟姝ラ鐨勬椂闂翠俊鎭�
+            if (delayCode.getArrivalTime() != null) {
+                long waitStartTime = delayCode.getArrivalTime() + (i * 1000L);
+                waitCode.setArrivalTime(waitStartTime);
+                waitCode.setDepartureTime(waitStartTime + 1000L);
+            }
+            
             delaySteps_list.add(waitCode);
         }
 
         // 鎻掑叆寤惰繜姝ラ
         codeList.addAll(timeStep, delaySteps_list);
 
+        // 鏇存柊鍘熻矾寰勭偣鐨勬椂闂达紙鍚戝悗鎺ㄨ繜锛�
+        if (delayCode.getArrivalTime() != null) {
+            delayCode.setArrivalTime(delayCode.getArrivalTime() + delayDuration);
+            if (delayCode.getDepartureTime() != null) {
+                delayCode.setDepartureTime(delayCode.getDepartureTime() + delayDuration);
+            }
+        }
+
         // 鏇存柊璺緞
         path.setCodeList(codeList);
+        
+        // 馃敡 鍏抽敭淇锛氶噸鏂拌绠楀悗缁矾寰勭偣鐨勬椂闂寸獥
+        if (timeCalculator != null) {
+            CTUPhysicalConfig defaultConfig = createDefaultPhysicalConfig();
+            timeCalculator.recalculatePathTimingFromIndex(path, timeStep + delaySteps, defaultConfig);
+        } else {
+            // 澶囩敤鏂规锛氭墜鍔ㄦ洿鏂板悗缁椂闂�
+            updateSubsequentPathTiming(path, timeStep + delaySteps, delayDuration);
+        }
+    }
+    
+    /**
+     * 澶囩敤鏂规锛氭墜鍔ㄦ洿鏂板悗缁矾寰勭偣鐨勬椂闂�
+     */
+    private void updateSubsequentPathTiming(PlannedPath path, int fromIndex, long timeOffset) {
+        List<PathCode> codeList = path.getCodeList();
+        
+        for (int i = fromIndex; i < codeList.size(); i++) {
+            PathCode pathCode = codeList.get(i);
+            
+            if (pathCode.getArrivalTime() != null) {
+                pathCode.setArrivalTime(pathCode.getArrivalTime() + timeOffset);
+            }
+            
+            if (pathCode.getDepartureTime() != null) {
+                pathCode.setDepartureTime(pathCode.getDepartureTime() + timeOffset);
+            }
+            
+            if (pathCode.getCumulativeTime() != null) {
+                pathCode.setCumulativeTime(pathCode.getCumulativeTime() + timeOffset);
+            }
+        }
+    }
+    
+    /**
+     * 鍒涘缓榛樿鐗╃悊閰嶇疆
+     */
+    private CTUPhysicalConfig createDefaultPhysicalConfig() {
+        return new CTUPhysicalConfig(); // 浣跨敤榛樿鏋勯�犲嚱鏁�
     }
 
     /**

--
Gitblit v1.9.1