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