From 406ae5451ecde0b4b40a9ecfee07f2171fda80bc Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期三, 15 四月 2026 15:04:07 +0800
Subject: [PATCH] Merge branch '1.0' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi into 1.0

---
 xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java |  366 ++++++++++++++++++++++++++++------------------------
 1 files changed, 196 insertions(+), 170 deletions(-)

diff --git a/xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java b/xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java
index cd6f7de..3c34563 100644
--- a/xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java
+++ b/xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java
@@ -202,7 +202,7 @@
 
 
     @Override
-    public RouteAndFareVo getRouteAndFare(RouteAndFareDto routeAndFareDto, String userId) {
+    public List<RouteAndFareVo> getRouteAndFare(RouteAndFareDto routeAndFareDto, String userId) {
 //        // 判断是否5分钟内进行了查询 相同站点的起始点  并且是同时段
 //        String key = "xp-map-query-" + routeAndFareDto.getOpenCityId()
 //                + "-" + routeAndFareDto.getOrigin().getLongitude() + "-" + routeAndFareDto.getOrigin().getLatitude()
@@ -213,6 +213,8 @@
 //            RouteAndFareVo RouteAndFareVo = JSONObject.parseObject(jsonStr, RouteAndFareVo.class);
 //            return (RouteAndFareVo);
 //        }
+
+        ArrayList<RouteAndFareVo> routeAndFareVos = new ArrayList<>(3);
 
         // 1. 基础数据查询
         Map<String, String> geocode = gdMapGeocodingUtil.geocode(routeAndFareDto.getOrigin().getLongitude().toString(), routeAndFareDto.getOrigin().getLatitude().toString());
@@ -226,95 +228,102 @@
         }
         XpOpenCity xpOpenCity = openCities;
         routeAndFareDto.setOpenCityId(xpOpenCity.getId());
-        XpRoutePlan xpRoutePlan = xpRoutePlanMapper.selectOne(new LambdaQueryWrapper<XpRoutePlan>().eq(XpRoutePlan::getAuditStatus, 2).eq(XpRoutePlan::getCityCode, cityCode));
-        if (xpRoutePlan != null) {
-            routeAndFareDto.setRoutePlanRule(xpRoutePlan.getRoutePlanRule());
-        }
-        Object userPref = redisService.getCacheObject(CacheConstants.USER_ROUTE_PREFERENCE + userId);
-        if (userPref != null) {
-            try {
-                routeAndFareDto.setRoutePlanRule(Integer.valueOf(userPref.toString()));
-            } catch (Exception ignored) {
-                // keep city default
+        List<XpRoutePlan> xpRoutePlan = xpRoutePlanMapper.selectList(new LambdaQueryWrapper<XpRoutePlan>().eq(XpRoutePlan::getAuditStatus, 2).eq(XpRoutePlan::getCityCode, cityCode));
+
+        // 找出用户偏好
+        Object cacheObject = redisService.getCacheObject(CacheConstants.USER_ROUTE_PREFERENCE + userId);
+        for (XpRoutePlan routePlan : xpRoutePlan) {
+
+
+            if (xpRoutePlan != null) {
+                routeAndFareDto.setRoutePlanRule(routePlan.getRoutePlanRule());
             }
-        }
-
-        XpPricing xpPricing = this.baseMapper.selectOne(new LambdaQueryWrapper<XpPricing>().eq(XpPricing::getCityId, routeAndFareDto.getOpenCityId()));
-        if (xpPricing == null) {
-            throw new ServiceException("当前区域未开通服务", I18nKeyConstant.NO_CURRENT_REGION);
-        }
-
-
-        // 算距离
-        R<RouteVo> distanceAndDuration = xpMapClient.getDistanceAndDuration(routeAndFareDto);
-        if (distanceAndDuration.getCode() != 200) {
-            throw new ServiceException("获取导肮信息失败", I18nKeyConstant.PATH_NOT_FOUND);
-        }
-
-
-        RouteVo routeVo = distanceAndDuration.getData();
-
-        // 2. 计算价格(需要在并行任务前完成,因为优惠券查询需要价格)
-        XpPricingCardVo xpPricingCardVo;
-        if (xpPricing.getPricingType() == 1) {
-            xpPricingCardVo = xpPricingUtil.calculationPrice(userId,
-                    JSON.parseObject(xpPricing.getBasicPricingJson()),
-                    JSON.parseArray(xpPricing.getStartingFareJson()),
-                    routeVo.getDistance(), routeVo.getDuration(), 0, 0.0, xpPricing.getIsDynamicPrice(), routeAndFareDto.getOpenCityId(), xpPricing.getDynamicPricingJson()
-            );
-        } else {
-            xpPricingCardVo = xpPricingUtil.calculationFixedPrice(userId,
-                    JSON.parseObject(xpPricing.getBasicPricingJson()),
-                    JSON.parseArray(xpPricing.getStartingFareJson()),
-                    routeVo.getDistance(), routeVo.getDuration(), 0, 0.0, xpPricing.getIsDynamicPrice(), routeAndFareDto.getOpenCityId(), xpPricing.getDynamicPricingJson()
-            );
-        }
-
-        // 优惠券:null=自动最佳;0=不使用;>0=指定券
-        XpPricingCardVo finalXpPricingCardVo = xpPricingCardVo;
-        R<UserCouponVo> coupon = null;
-        CompletableFuture<R<UserCouponVo>> couponFuture=null;
-        Long ucId = routeAndFareDto.getUserCouponId();
-        if (Long.valueOf(0L).equals(ucId)) {
-            coupon = R.ok(new UserCouponVo());
-        } else if (ucId != null && ucId > 0L) {
-            coupon = xpAppUserCouponClient.getUserCoupon(new GetUserCouponDto(Long.valueOf(userId), finalXpPricingCardVo.getTotalPrice(), routeAndFareDto.getOpenCityId(), ucId));
-            if(coupon.getCode()==200 && coupon.getData().getStatus()==2){
-                throw new ServiceException("优惠券不满足条件", I18nKeyConstant.COUPON_NOT_SATISFY);
+            Object userPref = redisService.getCacheObject(CacheConstants.USER_ROUTE_PREFERENCE + userId);
+            if (userPref != null) {
+                try {
+                    routeAndFareDto.setRoutePlanRule(Integer.valueOf(userPref.toString()));
+                } catch (Exception ignored) {
+                    // keep city default
+                }
             }
-        } else {
-            couponFuture= CompletableFuture.supplyAsync(
-                    () -> xpAppUserCouponClient.getUserCoupon(
-                            new GetUserCouponDto(Long.valueOf(userId), finalXpPricingCardVo.getTotalPrice(), routeAndFareDto.getOpenCityId(),null)
+
+            XpPricing xpPricing = this.baseMapper.selectOne(new LambdaQueryWrapper<XpPricing>().eq(XpPricing::getCityId, routeAndFareDto.getOpenCityId()));
+            if (xpPricing == null) {
+                throw new ServiceException("当前区域未开通服务", I18nKeyConstant.NO_CURRENT_REGION);
+            }
+
+
+            // 算距离
+            R<RouteVo> distanceAndDuration = xpMapClient.getDistanceAndDuration(routeAndFareDto);
+            if (distanceAndDuration.getCode() != 200) {
+//                throw new ServiceException("获取导肮信息失败", I18nKeyConstant.PATH_NOT_FOUND);
+                continue;
+            }
+
+
+            RouteVo routeVo = distanceAndDuration.getData();
+
+            // 2. 计算价格(需要在并行任务前完成,因为优惠券查询需要价格)
+            XpPricingCardVo xpPricingCardVo;
+            if (xpPricing.getPricingType() == 1) {
+                xpPricingCardVo = xpPricingUtil.calculationPrice(userId,
+                        JSON.parseObject(xpPricing.getBasicPricingJson()),
+                        JSON.parseArray(xpPricing.getStartingFareJson()),
+                        routeVo.getDistance(), routeVo.getDuration(), 0, 0.0, xpPricing.getIsDynamicPrice(), routeAndFareDto.getOpenCityId(), xpPricing.getDynamicPricingJson()
+                );
+            } else {
+                xpPricingCardVo = xpPricingUtil.calculationFixedPrice(userId,
+                        JSON.parseObject(xpPricing.getBasicPricingJson()),
+                        JSON.parseArray(xpPricing.getStartingFareJson()),
+                        routeVo.getDistance(), routeVo.getDuration(), 0, 0.0, xpPricing.getIsDynamicPrice(), routeAndFareDto.getOpenCityId(), xpPricing.getDynamicPricingJson()
+                );
+            }
+
+            // 优惠券:null=自动最佳;0=不使用;>0=指定券
+            XpPricingCardVo finalXpPricingCardVo = xpPricingCardVo;
+            R<UserCouponVo> coupon = null;
+            CompletableFuture<R<UserCouponVo>> couponFuture=null;
+            Long ucId = routeAndFareDto.getUserCouponId();
+            if (Long.valueOf(0L).equals(ucId)) {
+                coupon = R.ok(new UserCouponVo());
+            } else if (ucId != null && ucId > 0L) {
+                coupon = xpAppUserCouponClient.getUserCoupon(new GetUserCouponDto(Long.valueOf(userId), finalXpPricingCardVo.getTotalPrice(), routeAndFareDto.getOpenCityId(), ucId));
+                if(coupon.getCode()==200 && coupon.getData().getStatus()==2){
+                    throw new ServiceException("优惠券不满足条件", I18nKeyConstant.COUPON_NOT_SATISFY);
+                }
+            } else {
+                couponFuture= CompletableFuture.supplyAsync(
+                        () -> xpAppUserCouponClient.getUserCoupon(
+                                new GetUserCouponDto(Long.valueOf(userId), finalXpPricingCardVo.getTotalPrice(), routeAndFareDto.getOpenCityId(),null)
                         ),
+                        executorService
+                );
+            }
+
+
+
+            // 3. 并行执行远程服务调用 判断是否同一经营区域
+            CompletableFuture<R<Boolean>> diagnosisAreaFuture = CompletableFuture.supplyAsync(
+                    () -> xpMapClient.diagnosisArea(routeAndFareDto),
                     executorService
             );
-        }
 
+            // 4. 等待所有并行任务完成并获取结果
+            R<Boolean> diagnosisResult = diagnosisAreaFuture.join();
+            R<UserCouponVo> couponResult =null;
+            if (Long.valueOf(0L).equals(ucId) || (ucId != null && ucId > 0L)) {
+                couponResult = coupon;
+            } else {
+                couponResult = couponFuture.join();
+            }
 
-
-        // 3. 并行执行远程服务调用 判断是否同一经营区域
-        CompletableFuture<R<Boolean>> diagnosisAreaFuture = CompletableFuture.supplyAsync(
-                () -> xpMapClient.diagnosisArea(routeAndFareDto),
-                executorService
-        );
-
-        // 4. 等待所有并行任务完成并获取结果
-        R<Boolean> diagnosisResult = diagnosisAreaFuture.join();
-        R<UserCouponVo> couponResult =null;
-        if (Long.valueOf(0L).equals(ucId) || (ucId != null && ucId > 0L)) {
-            couponResult = coupon;
-        } else {
-            couponResult = couponFuture.join();
-        }
-
-        // 5. 处理诊断结果
-        if (diagnosisResult.getCode() != R.SUCCESS) {
-            throw new RuntimeException(diagnosisResult.getMsg());
-        }
-        if (!diagnosisResult.getData()) {
-            throw new ServiceException("当前区域未开通服务", I18nKeyConstant.NO_CURRENT_REGION);
-        }
+            // 5. 处理诊断结果
+            if (diagnosisResult.getCode() != R.SUCCESS) {
+                throw new RuntimeException(diagnosisResult.getMsg());
+            }
+            if (!diagnosisResult.getData()) {
+                throw new ServiceException("当前区域未开通服务", I18nKeyConstant.NO_CURRENT_REGION);
+            }
 
 //        // 6. 处理路线结果
 //        if (routeResult.getCode() != 200) {
@@ -322,102 +331,119 @@
 //        }
 //        RouteVo routeVo = routeResult.getData();
 
-        // 起终点最小距离 走缓存
-        Integer minOrderDistance;
-        Object minOrderDistanceObj = redisService.getCacheObject(CacheConstants.MIN_ORDER_DISTANCE);
-        if (minOrderDistanceObj != null) {
-            minOrderDistance = Integer.valueOf(minOrderDistanceObj.toString());
-        } else {
-            minOrderDistance = systemSettingMapper.selectOne(null).getMinOrderDistance();
-        }
-        if (routeVo.getDistance() < Integer.valueOf(minOrderDistance)) {
-            throw new ServiceException("当前上下车点距离过近,建议步行前往", I18nKeyConstant.TO_WORK);
-        }
-
-        // 7. 处理优惠券结果
-        if (couponResult.getCode() != R.SUCCESS) {
-            throw new RuntimeException(couponResult.getMsg());
-        }
-        UserCouponVo userCouponVo = couponResult.getData();
-        if (userCouponVo != null) {
-            Double money = userCouponVo.getMoney();
-            money = new BigDecimal(money).setScale(2, RoundingMode.HALF_UP).doubleValue();
-            xpPricingCardVo.setCoupon(String.valueOf(money));
-            if (xpPricingCardVo.getTotalPrice() > money) {
-                xpPricingCardVo.setSystemDiscount(xpPricingCardVo.getTotalPrice() - money);
+            // 起终点最小距离 走缓存
+            Integer minOrderDistance;
+            Object minOrderDistanceObj = redisService.getCacheObject(CacheConstants.MIN_ORDER_DISTANCE);
+            if (minOrderDistanceObj != null) {
+                minOrderDistance = Integer.valueOf(minOrderDistanceObj.toString());
+            } else {
+                minOrderDistance = systemSettingMapper.selectOne(null).getMinOrderDistance();
+            }
+            if (routeVo.getDistance() < Integer.valueOf(minOrderDistance)) {
+                throw new ServiceException("当前上下车点距离过近,建议步行前往", I18nKeyConstant.TO_WORK);
             }
 
-
-        }
-
-        // 8. 构建响应对象
-        RouteAndFareVo routeAndFareVo = new RouteAndFareVo();
-        routeAndFareVo.setRoute(routeVo);
-        // 转2位小数处理
-        xpPricingCardVo.setTotalPriceStr(new BigDecimal(xpPricingCardVo.getTotalPrice()).setScale(2, RoundingMode.HALF_UP).toString());
-        xpPricingCardVo.setStartPriceStr(new BigDecimal(xpPricingCardVo.getStartPrice()).setScale(2, RoundingMode.HALF_UP).toString());
-        xpPricingCardVo.setDistancePriceStr(new BigDecimal(xpPricingCardVo.getDistancePrice()).setScale(2, RoundingMode.HALF_UP).toString());
-        xpPricingCardVo.setDurationPriceStr(new BigDecimal(xpPricingCardVo.getDurationPrice()).setScale(2, RoundingMode.HALF_UP).toString());
-        xpPricingCardVo.setSystemDiscountStr(new BigDecimal(xpPricingCardVo.getSystemDiscount()).setScale(2, RoundingMode.HALF_UP).toString());
-
-
-        routeAndFareVo.setXpPricingCard(xpPricingCardVo);
-
-        FareVo fareVo = new FareVo();
-        fareVo.setEstimatedDistanceKm(routeVo.getDistance().doubleValue() / 1000);
-        fareVo.setEstimatedDurationMin(routeVo.getDuration() / 60);
-
-        // 9. 设置费用信息
-        fareVo.setOriginalFare(xpPricingCardVo.getTotalPrice());
-        fareVo.setOriginalFareStr(new BigDecimal(fareVo.getOriginalFare()).setScale(2, RoundingMode.HALF_UP).toString());
-        if (userCouponVo != null) {
-            if(userCouponVo.getMoney()>fareVo.getOriginalFare()){
-                fareVo.setDiscountAmount(fareVo.getOriginalFare());
-                fareVo.setFinalFare(0.00);
-            }else {
-                fareVo.setDiscountAmount(userCouponVo.getMoney());
-                fareVo.setFinalFare(fareVo.getOriginalFare() - fareVo.getDiscountAmount());
+            // 7. 处理优惠券结果
+            if (couponResult.getCode() != R.SUCCESS) {
+                throw new RuntimeException(couponResult.getMsg());
             }
-            if(fareVo.getFinalFare()>0){
+            UserCouponVo userCouponVo = couponResult.getData();
+            if (userCouponVo != null) {
+                Double money = userCouponVo.getMoney();
+                money = new BigDecimal(money).setScale(2, RoundingMode.HALF_UP).doubleValue();
+                xpPricingCardVo.setCoupon(String.valueOf(money));
+                if (xpPricingCardVo.getTotalPrice() > money) {
+                    xpPricingCardVo.setSystemDiscount(xpPricingCardVo.getTotalPrice() - money);
+                }
+
+
+            }
+
+            // 8. 构建响应对象
+            RouteAndFareVo routeAndFareVo = new RouteAndFareVo();
+            routeAndFareVo.setRoute(routeVo);
+            // 转2位小数处理
+            xpPricingCardVo.setTotalPriceStr(new BigDecimal(xpPricingCardVo.getTotalPrice()).setScale(2, RoundingMode.HALF_UP).toString());
+            xpPricingCardVo.setStartPriceStr(new BigDecimal(xpPricingCardVo.getStartPrice()).setScale(2, RoundingMode.HALF_UP).toString());
+            xpPricingCardVo.setDistancePriceStr(new BigDecimal(xpPricingCardVo.getDistancePrice()).setScale(2, RoundingMode.HALF_UP).toString());
+            xpPricingCardVo.setDurationPriceStr(new BigDecimal(xpPricingCardVo.getDurationPrice()).setScale(2, RoundingMode.HALF_UP).toString());
+            xpPricingCardVo.setSystemDiscountStr(new BigDecimal(xpPricingCardVo.getSystemDiscount()).setScale(2, RoundingMode.HALF_UP).toString());
+
+
+            routeAndFareVo.setXpPricingCard(xpPricingCardVo);
+
+            FareVo fareVo = new FareVo();
+            fareVo.setEstimatedDistanceKm(routeVo.getDistance().doubleValue() / 1000);
+            fareVo.setEstimatedDurationMin(routeVo.getDuration() / 60);
+
+            // 9. 设置费用信息
+            fareVo.setOriginalFare(xpPricingCardVo.getTotalPrice());
+            fareVo.setOriginalFareStr(new BigDecimal(fareVo.getOriginalFare()).setScale(2, RoundingMode.HALF_UP).toString());
+            if (userCouponVo != null) {
+                if(userCouponVo.getMoney()>fareVo.getOriginalFare()){
+                    fareVo.setDiscountAmount(fareVo.getOriginalFare());
+                    fareVo.setFinalFare(0.00);
+                }else {
+                    fareVo.setDiscountAmount(userCouponVo.getMoney());
+                    fareVo.setFinalFare(fareVo.getOriginalFare() - fareVo.getDiscountAmount());
+                }
+                if(fareVo.getFinalFare()>0){
+                    fareVo.setSystemDiscount(fareVo.getFinalFare());
+                    fareVo.setFinalFare(0.00);
+                }
+                fareVo.setCouponId(userCouponVo.getId());
+            } else {
+                fareVo.setDiscountAmount(0.00);
+                fareVo.setFinalFare(fareVo.getOriginalFare());
                 fareVo.setSystemDiscount(fareVo.getFinalFare());
                 fareVo.setFinalFare(0.00);
             }
-            fareVo.setCouponId(userCouponVo.getId());
-        } else {
-            fareVo.setDiscountAmount(0.00);
-            fareVo.setFinalFare(fareVo.getOriginalFare());
-            fareVo.setSystemDiscount(fareVo.getFinalFare());
-            fareVo.setFinalFare(0.00);
-        }
 
-        // 10. 检查等待时间
-        Integer waitTime = getWaitTime(routeAndFareDto.getOrigin().getLongitude(), routeAndFareDto.getOrigin().getLatitude());
+            // 10. 检查等待时间
+            Integer waitTime = getWaitTime(routeAndFareDto.getOrigin().getLongitude(), routeAndFareDto.getOrigin().getLatitude());
 //        if (waitTime > 3) {
 //            throw new ServiceException("当前区域正在等待中,请耐心等待", I18nKeyConstant.WAITING_TIME);
 //        }
-        fareVo.setWaitingTime(waitTime);
+            fareVo.setWaitingTime(waitTime);
 
 
-        // 11. 生成订单ID并缓存
-        String id = CacheConstants.ORD + System.currentTimeMillis() + "_" + UUID.randomUUID().toString().substring(0, 8);
-        redisService.setCacheObject(CacheConstants.ORD + id + userId, xpPricingCardVo, 1l, TimeUnit.DAYS);
-        fareVo.setId(id);
+            // 11. 生成订单ID并缓存
+            String id = CacheConstants.ORD + System.currentTimeMillis() + "_" + UUID.randomUUID().toString().substring(0, 8);
+            redisService.setCacheObject(CacheConstants.ORD + id + userId, xpPricingCardVo, 1l, TimeUnit.DAYS);
+            fareVo.setId(id);
 
-        // 12. 设置费用信息
-        fareVo.setFinalFareStr(new BigDecimal(fareVo.getFinalFare()).setScale(2, RoundingMode.HALF_UP).toString());
-        fareVo.setOriginalFare(new BigDecimal(fareVo.getOriginalFare()).setScale(2,RoundingMode.HALF_UP).doubleValue());
-        fareVo.setSystemDiscount(new BigDecimal(fareVo.getSystemDiscount() == null ? 0 : fareVo.getSystemDiscount()).setScale(2,RoundingMode.HALF_UP).doubleValue());
-        routeAndFareVo.setFareEstimate(fareVo);
+            // 12. 设置费用信息
+            fareVo.setFinalFareStr(new BigDecimal(fareVo.getFinalFare()).setScale(2, RoundingMode.HALF_UP).toString());
+            fareVo.setOriginalFare(new BigDecimal(fareVo.getOriginalFare()).setScale(2,RoundingMode.HALF_UP).doubleValue());
+            fareVo.setSystemDiscount(new BigDecimal(fareVo.getSystemDiscount() == null ? 0 : fareVo.getSystemDiscount()).setScale(2,RoundingMode.HALF_UP).doubleValue());
+            routeAndFareVo.setFareEstimate(fareVo);
 
-        routeAndFareVo.getXpPricingCard().setFinalFareStr(fareVo.getFinalFareStr());
+            routeAndFareVo.getXpPricingCard().setFinalFareStr(fareVo.getFinalFareStr());
 
 
 //        String voJsonStr = JSONObject.toJSONString(routeAndFareVo);
 //         进行缓存
 //        redisService.setCacheObject(key, voJsonStr, 5l, TimeUnit.MINUTES);
-        //缓存导航数据,用于下单后推送导航给车端和乘客端
-        redisService.setCacheObject("ORDER_NAVIGATION_END_DATA:" + userId, JSON.toJSONString(routeVo), 24L, TimeUnit.HOURS);
-        return routeAndFareVo;
+            //缓存导航数据,用于下单后推送导航给车端和乘客端
+            redisService.setCacheObject("ORDER_NAVIGATION_END_DATA:" + userId, JSON.toJSONString(routeVo), 24L, TimeUnit.HOURS);
+
+            if(cacheObject!=null){
+                if (cacheObject.toString().equals(routePlan.getRoutePlanRule().toString())) {
+                    routeAndFareVo.setPreference(1);
+                }
+            }
+            routeAndFareVo.setRoutePlanName(routePlan.getPlanName());
+
+            routeAndFareVos.add(routeAndFareVo);
+
+
+        }
+        if(routeAndFareVos.isEmpty()){
+            throw new ServiceException("获取导肮信息失败", I18nKeyConstant.PATH_NOT_FOUND);
+        }
+
+
+        return routeAndFareVos;
     }
 
 
@@ -1217,7 +1243,7 @@
     }
 
     private int compareRouteOptionByUserPreference(RouteOptionVo a, RouteOptionVo b, RouteStrategyKind pref,
-            Map<String, Set<RouteStrategyKind>> strategiesById) {
+                                                   Map<String, Set<RouteStrategyKind>> strategiesById) {
         Set<RouteStrategyKind> sa = strategiesById.getOrDefault(a.getPathFingerprint(), Collections.emptySet());
         Set<RouteStrategyKind> sb = strategiesById.getOrDefault(b.getPathFingerprint(), Collections.emptySet());
         boolean aHas = sa.contains(pref);
@@ -1238,17 +1264,17 @@
     @Override
     public QueueStatusVo getQueueStatus(String orderId, String uid) {
         QueueStatusVo queueStatusVo = new QueueStatusVo();
-        
+
         try {
             // 从订单服务获取订单信息,获取queueName
             R<XpOrder> orderR = xpOrderClient.queryOrderById(Long.valueOf(orderId));
             if (orderR.getCode() != R.SUCCESS || orderR.getData() == null) {
                 throw new ServiceException("订单不存在");
             }
-            
+
             XpOrder xpOrder = orderR.getData();
             String queueName = xpOrder.getQueueName();
-            
+
             if (StringUtils.isBlank(queueName)) {
                 // 订单不在排队中
                 queueStatusVo.setStatus(1);
@@ -1257,7 +1283,7 @@
                 queueStatusVo.setEstimatedWaitTime(0);
                 return queueStatusVo;
             }
-            
+
             // 从Redis获取队列数据
             List<String> queueItems = redisService.getCacheList(queueName);
             if (queueItems == null || queueItems.isEmpty()) {
@@ -1268,11 +1294,11 @@
                 queueStatusVo.setEstimatedWaitTime(0);
                 return queueStatusVo;
             }
-            
+
             // 遍历队列,找到当前订单的位置
             int currentPosition = 0;
             int totalCount = queueItems.size();
-            
+
             for (int i = 0; i < queueItems.size(); i++) {
                 String item = queueItems.get(i);
                 if (item.startsWith(orderId + "_")) {
@@ -1280,13 +1306,13 @@
                     break;
                 }
             }
-            
+
             Integer waitTimeTimeSlot = getWaitTimeTimeSlot(xpOrder.getStartLon(), xpOrder.getStartLat(), xpOrder.getTimeSlot());
             queueStatusVo.setStatus(0); // 0-排队中
             queueStatusVo.setCurrentPosition(currentPosition);
             queueStatusVo.setTotalCount(totalCount);
             queueStatusVo.setEstimatedWaitTime((waitTimeTimeSlot*currentPosition)/60);
-            
+
         } catch (Exception e) {
             log.error("查询排队状态失败: {}", e.getMessage(), e);
             // 异常情况下返回默认值
@@ -1295,7 +1321,7 @@
             queueStatusVo.setTotalCount(0);
             queueStatusVo.setEstimatedWaitTime(0);
         }
-        
+
         return queueStatusVo;
     }
 

--
Gitblit v1.7.1