From 9b89d6842bdad135cd50fb5bc57c93e5ae306318 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期一, 13 四月 2026 21:54:37 +0800
Subject: [PATCH] 修改bug

---
 xp-robotaxi-api/src/main/java/com/xiaopeng/api/enums/RouteStrategyKind.java |   89 +++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 79 insertions(+), 10 deletions(-)

diff --git a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/enums/RouteStrategyKind.java b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/enums/RouteStrategyKind.java
index d913d0c..8da2600 100644
--- a/xp-robotaxi-api/src/main/java/com/xiaopeng/api/enums/RouteStrategyKind.java
+++ b/xp-robotaxi-api/src/main/java/com/xiaopeng/api/enums/RouteStrategyKind.java
@@ -2,6 +2,16 @@
 
 import lombok.Getter;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
 /**
  * 路线策略(与高德 strategy 参数对应,见 xp_route_plan 注释)
  */
@@ -12,7 +22,54 @@
     /** 时间优先 → 速度最快 */
     TIME(38, "时间优先", 2),
     /** 低价优先 → 少收费 */
-    PRICE(36, "低价优先", 3);
+    PRICE(36, "低价优先", 3),
+    /** 躲避拥堵 */
+    AVOID_CONGESTION(33, "躲避拥堵", 4),
+    /** 高速优先 */
+    HIGHWAY_PRIORITY(34, "高速优先", 5),
+    /** 不走高速 */
+    NO_HIGHWAY(35, "不走高速", 6),
+    /** 大路优先 */
+    MAIN_ROAD(37, "大路优先", 7),
+    /** 躲避拥堵 + 高速优先 */
+    AVOID_CONGESTION_HIGHWAY_PRIORITY(39, "躲避拥堵+高速优先", 8),
+    /** 躲避拥堵 + 不走高速 */
+    AVOID_CONGESTION_NO_HIGHWAY(40, "躲避拥堵+不走高速", 9),
+    /** 躲避拥堵 + 少收费 */
+    AVOID_CONGESTION_PRICE(41, "躲避拥堵+低价优先", 10),
+    /** 少收费 + 不走高速 */
+    PRICE_NO_HIGHWAY(42, "低价优先+不走高速", 11),
+    /** 躲避拥堵 + 少收费 + 不走高速 */
+    AVOID_CONGESTION_PRICE_NO_HIGHWAY(43, "躲避拥堵+低价优先+不走高速", 12),
+    /** 躲避拥堵 + 大路优先 */
+    AVOID_CONGESTION_MAIN_ROAD(44, "躲避拥堵+大路优先", 13),
+    /** 躲避拥堵 + 速度最快 */
+    AVOID_CONGESTION_TIME(45, "躲避拥堵+时间优先", 14),
+    /** 速度优先,只返回一条路线 */
+    SPEED_PRIORITY(0, "速度优先", 15),
+    /** 费用优先,只返回一条路线 */
+    FEE_PRIORITY(1, "费用优先", 16),
+    /** 常规最快,只返回一条路线 */
+    REGULAR_FASTEST(2, "常规最快", 17);
+
+    private static final Comparator<RouteStrategyKind> BY_PRIORITY = Comparator.comparingInt(RouteStrategyKind::getPriority);
+    private static final Map<Integer, RouteStrategyKind> AMAP_STRATEGY_INDEX;
+    private static final List<RouteStrategyKind> ORDERED_VALUES;
+    private static final List<RouteStrategyKind> DEFAULT_PREFERENCE_KINDS;
+
+    static {
+        Map<Integer, RouteStrategyKind> strategyIndex = new LinkedHashMap<>();
+        for (RouteStrategyKind kind : values()) {
+            strategyIndex.put(kind.amapStrategy, kind);
+        }
+        AMAP_STRATEGY_INDEX = Collections.unmodifiableMap(strategyIndex);
+
+        List<RouteStrategyKind> orderedValues = new ArrayList<>(Arrays.asList(values()));
+        orderedValues.sort(BY_PRIORITY);
+        ORDERED_VALUES = Collections.unmodifiableList(orderedValues);
+
+        DEFAULT_PREFERENCE_KINDS = Collections.unmodifiableList(Arrays.asList(SMART, TIME, PRICE));
+    }
 
     private final int amapStrategy;
     private final String displayName;
@@ -25,21 +82,33 @@
     }
 
     /**
-     * 主标签优先级:数值越小越优先(智能 &gt; 时间 &gt; 低价)
+     * 主标签优先级:数值越小越优先(默认保留智能 &gt; 时间 &gt; 低价,再补充其余全量策略)
      */
-    public static RouteStrategyKind primaryOf(java.util.Collection<RouteStrategyKind> kinds) {
+    public static RouteStrategyKind primaryOf(Collection<RouteStrategyKind> kinds) {
         if (kinds == null || kinds.isEmpty()) {
             return SMART;
         }
-        return kinds.stream().min((a, b) -> Integer.compare(a.priority, b.priority)).orElse(SMART);
+        return kinds.stream().min(BY_PRIORITY).orElse(SMART);
     }
 
-    public static java.util.Optional<RouteStrategyKind> fromAmapStrategy(int strategy) {
-        for (RouteStrategyKind k : values()) {
-            if (k.amapStrategy == strategy) {
-                return java.util.Optional.of(k);
-            }
+    public static Optional<RouteStrategyKind> fromAmapStrategy(int strategy) {
+        return Optional.ofNullable(AMAP_STRATEGY_INDEX.get(strategy));
+    }
+
+    public static List<RouteStrategyKind> orderedValues() {
+        return ORDERED_VALUES;
+    }
+
+    public static List<RouteStrategyKind> defaultPreferenceKinds() {
+        return DEFAULT_PREFERENCE_KINDS;
+    }
+
+    public static List<RouteStrategyKind> orderedOf(Collection<RouteStrategyKind> kinds) {
+        if (kinds == null || kinds.isEmpty()) {
+            return Collections.emptyList();
         }
-        return java.util.Optional.empty();
+        List<RouteStrategyKind> ordered = new ArrayList<>(kinds);
+        ordered.sort(BY_PRIORITY);
+        return ordered;
     }
 }

--
Gitblit v1.7.1