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