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