From 5ebf967d3438669d6cd66fd8b07dc9c0bd48e678 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期二, 14 十月 2025 16:13:41 +0800
Subject: [PATCH] 1
---
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