From 912a4cfecbc4f0783e2045fb2287c5110ec64767 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 13 二月 2026 22:01:45 +0800
Subject: [PATCH] bug修改,计算费用工具类

---
 xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpGeoQueryEntityServiceImpl.java |   77 +++++++++++++++++++++++++++++++-------
 1 files changed, 62 insertions(+), 15 deletions(-)

diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpGeoQueryEntityServiceImpl.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpGeoQueryEntityServiceImpl.java
index e38688c..3740056 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpGeoQueryEntityServiceImpl.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpGeoQueryEntityServiceImpl.java
@@ -1,17 +1,25 @@
 package com.xiaopeng.operation.service.impl;
 
 import com.xiaopeng.api.model.operation.XpGeoQueryEntity;
+import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
 import com.xiaopeng.operation.repository.XpGeoQueryEntityRepository;
 import com.xiaopeng.operation.service.IXpGeoQueryEntityService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.geo.Distance;
+import org.springframework.data.geo.GeoResults;
 import org.springframework.data.geo.Metrics;
 import org.springframework.data.geo.Point;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.NearQuery;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
 import org.springframework.stereotype.Service;
 
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * MongoDB 地理查询服务实现类
@@ -21,6 +29,9 @@
 
     @Autowired
     private XpGeoQueryEntityRepository repository;
+
+    @Autowired
+    private MongoTemplate mongoTemplate;
 
     /**
      * 通过经纬度查询固定范围500米内、一周内、指定时段的数据
@@ -35,26 +46,43 @@
             double latitude,
             String time
     ) {
-        // 创建中心点坐标
-        Point point = new Point(longitude, latitude);
-        
-        // 设置距离范围为500米
-        Distance distance = new Distance(0.5, Metrics.KILOMETERS); // 0.5公里 = 500米
-        
-        // 计算一周前的时间
+//        // 计算一周前的时间
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(new Date());
         calendar.add(Calendar.DAY_OF_YEAR, -7);
-        Date startTime = calendar.getTime();
+        Long startTime = calendar.getTime().getTime();
 
-        // 执行查询 - 使用新的方法,包含时段过滤
-        return repository.findByLocationNearAndTimestampAfterAndTimeAndStatusGreaterThan(
-                point, 
-                500,
-                startTime, 
-                time, // 时段过滤
-                1 // 状态大于1
+        // 1. 创建查询点
+        Point referencePoint = new Point(longitude, latitude);
+
+        // 2. 构建 NearQuery - 完全使用 NearQuery 的 API
+        NearQuery nearQuery = NearQuery.near(referencePoint, Metrics.KILOMETERS)
+                .maxDistance(0.5)  // 转成公里
+                .spherical(true);
+
+
+        // 3.时间>startTime time = time参数
+        // 3. 创建额外的查询条件
+        Query query = new Query();
+        query.addCriteria(Criteria.where("timestamp").gte(startTime));
+        query.addCriteria(Criteria.where("time").is(time));
+
+        // 将 NearQuery 和额外的查询条件合并
+        nearQuery.query(query);
+
+
+        // 4. 执行查询 - 明确指定集合名
+        GeoResults<XpGeoQueryEntity> geoResults = mongoTemplate.geoNear(
+                nearQuery,
+                XpGeoQueryEntity.class,
+                "xp_geo_query_entity"  // 明确指定集合名,避免映射错误
         );
+
+        // 5. 提取结果
+        return geoResults.getContent().stream()
+                .map(geoResult -> geoResult.getContent())
+                .collect(Collectors.toList());
+
     }
 
     /**
@@ -67,6 +95,25 @@
         return repository.save(entity);
     }
 
+
+
+    @Override
+    public XpGeoQueryEntity updateByOrderId(String orderId) {
+        Query query = new Query(Criteria.where("orderId").is(orderId));
+
+        XpGeoQueryEntity xpGeoQueryEntity = mongoTemplate.findOne(query, XpGeoQueryEntity.class);
+        Long timestamp = xpGeoQueryEntity.getTimestamp();
+        long time = new Date().getTime();
+        // 计算2个时间的秒数差
+        long seconds = (time- timestamp) / 1000;
+        Update update = new Update().set("seconds", seconds).set("status", 1);
+        if(xpGeoQueryEntity.getStatus()==0){
+            mongoTemplate.findAndModify(query, update, XpGeoQueryEntity.class);
+        }
+        return null;
+
+    }
+
     /**
      * 根据ID查询实体
      * @param id 实体ID

--
Gitblit v1.7.1