From f0d97dc44df544cb810a820dee7cc83de01588db Mon Sep 17 00:00:00 2001
From: kong <sunuping1@sina.com>
Date: 星期日, 12 四月 2026 17:37:54 +0800
Subject: [PATCH] add 排队信息
---
xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java | 71 +++++++++++++++++++++++++++++++++++
1 files changed, 71 insertions(+), 0 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 35c1dbe..a3e77a0 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
@@ -43,11 +43,13 @@
import com.xiaopeng.itinerary.service.IXpGeoQueryEntityService;
import com.xiaopeng.itinerary.service.XpPointService;
import com.xiaopeng.itinerary.service.XpPricingService;
+import com.xiaopeng.itinerary.vo.QueueStatusVo;
import com.xiaopeng.itinerary.utils.XpPricingUtil;
import com.xiaopeng.itinerary.utils.holiday.HolidayUtil;
import com.xiaopeng.itinerary.utils.map.FastDistanceCalculator;
import com.xiaopeng.itinerary.utils.map.GDMapGeocodingUtil;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
@@ -1142,4 +1144,73 @@
return Integer.compare(da, db);
}
+ @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);
+ queueStatusVo.setCurrentPosition(0);
+ queueStatusVo.setTotalCount(0);
+ queueStatusVo.setEstimatedWaitTime(0);
+ return queueStatusVo;
+ }
+
+ // 从Redis获取队列数据
+ List<String> queueItems = redisService.getCacheList(queueName);
+ if (queueItems == null || queueItems.isEmpty()) {
+ // 队列为空,说明已分配车辆
+ queueStatusVo.setStatus(1);
+ queueStatusVo.setCurrentPosition(0);
+ queueStatusVo.setTotalCount(0);
+ 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 + "_")) {
+ currentPosition = i + 1; // 位置从1开始
+ break;
+ }
+ }
+
+ // 计算预计等待时间(假设每辆车平均需要3分钟)
+ int estimatedWaitTime = (currentPosition - 1) * 3;
+ if (estimatedWaitTime < 0) {
+ estimatedWaitTime = 0;
+ }
+
+ queueStatusVo.setStatus(0); // 0-排队中
+ queueStatusVo.setCurrentPosition(currentPosition);
+ queueStatusVo.setTotalCount(totalCount);
+ queueStatusVo.setEstimatedWaitTime(estimatedWaitTime);
+
+ } catch (Exception e) {
+ log.error("查询排队状态失败: {}", e.getMessage(), e);
+ // 异常情况下返回默认值
+ queueStatusVo.setStatus(0);
+ queueStatusVo.setCurrentPosition(0);
+ queueStatusVo.setTotalCount(0);
+ queueStatusVo.setEstimatedWaitTime(0);
+ }
+
+ return queueStatusVo;
+ }
+
}
--
Gitblit v1.7.1