From c6b34f2e65bb31e7dfe42657ccb1717324e5249b Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期一, 13 四月 2026 20:43:32 +0800
Subject: [PATCH] 1.0小程序功能  个人中心

---
 xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java |   40 +++++++++++++++++++++++++++++++++-------
 1 files changed, 33 insertions(+), 7 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 a3e77a0..d9164a9 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
@@ -470,6 +470,37 @@
         }
     }
 
+    /**
+     * 获取等待时间
+     * @param lon
+     * @param lat
+     * @return
+     */
+    @Override
+    public Integer getWaitTimeTimeSlot(double lon, double lat,String timeSlot) {
+        List<XpGeoQueryEntity> entities = geoQueryEntityService.findByLocationWithin500MetersAndLastWeekAndStatusGreater(
+                lon,
+                lat,
+                timeSlot
+        );
+
+
+        if (entities.isEmpty()) {
+            return 1;
+        } else {
+            // 已完成接单的数据
+            List<XpGeoQueryEntity> validEntities = entities.stream().filter(e -> e.getStatus() == 1).collect(Collectors.toList());
+            // 计算平均等待时间
+            OptionalDouble averageOptional = validEntities.stream().mapToDouble(XpGeoQueryEntity::getSeconds).average();
+            if (averageOptional.isPresent()) {
+                double average = averageOptional.getAsDouble();
+                return (int) average;
+            } else {
+                return 1;
+            }
+        }
+    }
+
 
     @Override
     public String saveOrder(XpOrderDto dto, String uid) {
@@ -1190,16 +1221,11 @@
                 }
             }
             
-            // 计算预计等待时间(假设每辆车平均需要3分钟)
-            int estimatedWaitTime = (currentPosition - 1) * 3;
-            if (estimatedWaitTime < 0) {
-                estimatedWaitTime = 0;
-            }
-            
+            Integer waitTimeTimeSlot = getWaitTimeTimeSlot(xpOrder.getStartLon(), xpOrder.getStartLat(), xpOrder.getTimeSlot());
             queueStatusVo.setStatus(0); // 0-排队中
             queueStatusVo.setCurrentPosition(currentPosition);
             queueStatusVo.setTotalCount(totalCount);
-            queueStatusVo.setEstimatedWaitTime(estimatedWaitTime);
+            queueStatusVo.setEstimatedWaitTime((waitTimeTimeSlot*currentPosition)/60);
             
         } catch (Exception e) {
             log.error("查询排队状态失败: {}", e.getMessage(), e);

--
Gitblit v1.7.1