liujie
2026-02-13 8e90f0fd095c943814ecffdc27c9551830f8b367
fix(order): 修复手动结束订单接口异常处理

- 修正了endTrip接口参数名从order_id改为orderId保持一致性
- 在endTrip方法中添加异常捕获机制,防止服务调用失败时返回错误
- 为fare-breakdown接口路径参数名也统一改为orderId
- 优化车辆位置查询服务中的地理查询逻辑,使用NearQuery替代原有方式
- 添加明确的集合名称指定,避免MongoDB查询映射错误
- 使用
2个文件已修改
45 ■■■■■ 已修改文件
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/mango/VehiclePositionService.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/utils/mango/VehiclePositionService.java
@@ -2,15 +2,19 @@
import com.xiaopeng.api.vo.automaticPilot.VehiclePosition;
import org.springframework.data.domain.Sort;
import org.springframework.data.geo.GeoResults;
import org.springframework.data.geo.Point;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.Metrics;
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.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class VehiclePositionService {
@@ -29,25 +33,31 @@
                                                             double latitude,
                                                             double distanceInMeters,int num) {
        try {
            // 创建查询点
            // 1. 创建查询点
            Point referencePoint = new Point(longitude, latitude);
            // 构建查询条件
            Query query = new Query();
            // 2. 构建 NearQuery - 完全使用 NearQuery 的 API
            NearQuery nearQuery = NearQuery.near(referencePoint, Metrics.KILOMETERS)
                    .maxDistance(distanceInMeters / 1000)  // 转成公里
                    .spherical(true);
            // 地理位置查询
            query.addCriteria(Criteria.where("point")
                    .near(referencePoint)
                    .maxDistance(distanceInMeters));
            query.with(Sort.by(Sort.Direction.ASC, "point"));
            // 4. 执行查询 - 明确指定集合名
            GeoResults<VehiclePosition> geoResults = mongoTemplate.geoNear(
                    nearQuery,
                    VehiclePosition.class,
                    "vehicle_position"  // 明确指定集合名,避免映射错误
            );
            return mongoTemplate.find(query, VehiclePosition.class);
        }catch (Exception e){
            // 5. 提取结果
            return geoResults.getContent().stream()
                    .map(geoResult -> geoResult.getContent())
                    .collect(Collectors.toList());
        } catch (Exception e) {
            e.printStackTrace();
            return new ArrayList<>();
        }
        return null;
    }
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -335,20 +335,25 @@
     * 手动结束订单
     */
    @PutMapping("/api/v1/mini-program/order/endTrip/{order_id}")
    @PutMapping("/api/v1/mini-program/order/endTrip/{orderId}")
    @ApiOperation(value = "结束行程", tags = {"小程序-结束行程"})
    @XpClientCheck(checkToken = false, checkOtpToken = true)
    public R endTrip(@PathVariable("orderId") Long orderId,HttpServletRequest request) {
        // uid已通过拦截器otp校验,可以直接使用
        String uid = request.getHeader("XP-Uid");
        xpOrderService.endTrip(orderId,uid);
        try {
            xpOrderService.endTrip(orderId,uid);
        }catch (Exception e){
            return R.ok();
        }
        return R.ok();
    }
    /**+
     * 获取行程费用明细
     */
    @PutMapping("/api/v1/mini-program/order/fare-breakdown/{order_id}")
    @PutMapping("/api/v1/mini-program/order/fare-breakdown/{orderId}")
    @ApiOperation(value = "获取行程费用明细", tags = {"小程序-获取行程费用明细"})
    @XpClientCheck(checkToken = false, checkOtpToken = true)
    public R<FareBreakdownVo> fareBreakdown(@PathVariable("orderId") Long orderId, HttpServletRequest request) {