From 5b6c7216dc82a3667cffa34c53c14d8aa33a36c4 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期四, 12 二月 2026 18:47:02 +0800
Subject: [PATCH] 查询订单轨迹规划并存储

---
 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java |   40 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 40 insertions(+), 0 deletions(-)

diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
index 0b23609..41378b1 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -39,9 +39,11 @@
 import com.xiaopeng.api.vo.order.XpHistoryStartPointsVo;
 import com.xiaopeng.api.vo.order.XpPointInfoVo;
 import com.xiaopeng.api.vo.vehicleConvoy.CancelTaxiPassengerVo;
+import com.xiaopeng.common.core.constant.CacheConstants;
 import com.xiaopeng.common.core.domain.R;
 import com.xiaopeng.common.core.exception.ServiceException;
 import com.xiaopeng.common.core.utils.DateUtils;
+import com.xiaopeng.common.core.utils.GeodesyUtil;
 import com.xiaopeng.common.core.utils.StringUtils;
 import com.xiaopeng.common.core.web.domain.BaseModel;
 import com.xiaopeng.common.core.web.page.PageInfo;
@@ -49,6 +51,8 @@
 import com.xiaopeng.common.security.utils.SecurityUtils;
 import com.xiaopeng.order.constant.I18nKeyConstant;
 import com.xiaopeng.order.job.jobs.EndTripJob;
+import com.xiaopeng.order.mangodb.model.OrderTrajectory;
+import com.xiaopeng.order.mangodb.service.OrderTrajectoryService;
 import com.xiaopeng.order.mapper.XpOrderMapper;
 import com.xiaopeng.order.model.dto.XpOrderCommentDto;
 import com.xiaopeng.order.model.dto.XpOrderPayDto;
@@ -107,6 +111,7 @@
     private final RedisService redisService;
     private final XpPricingClient xpPricingClient;
     private final XpSystemSettingClient xpSystemSettingClient;
+    private final OrderTrajectoryService orderTrajectoryService;
 
 
     @Override
@@ -982,6 +987,41 @@
         return num.intValue();
     }
 
+    @Override
+    public void saveVehicleLocation(OrderTrajectory orderTrajectory) {
+        // 查询订单信息
+        XpOrder xpOrder = this.getById(orderTrajectory.getOrderId());
+
+        // 计算距离
+        // 获取上一次定位
+        String oldLocation = redisService.getCacheObject(CacheConstants.ORDER_OLD_LOCATION + orderTrajectory.getOrderId());
+        if(StringUtils.isEmpty(oldLocation)){
+            // 首次定位
+            xpOrder.setMileageKilometers(0D);
+            this.updateById(xpOrder);
+            orderTrajectory.setDistance(0D);
+            // 存储mongo数据
+            orderTrajectoryService.create(orderTrajectory);
+            // 存储首次定位
+            redisService.setCacheObject(CacheConstants.ORDER_OLD_LOCATION + orderTrajectory.getOrderId(), orderTrajectory.getLocation());
+        }else {
+            Map<String, Double> distance = GeodesyUtil.getDistance(orderTrajectory.getLocation(), oldLocation);
+            if(null != distance){
+                Double distance1 = distance.get("WGS84");
+                if(distance1 > 50 && xpOrder.getStatus() == 6){//大于50米表示在移动,且在服务中的时候记录里程
+                    xpOrder.setMileageKilometers(BigDecimal.valueOf(xpOrder.getMileageKilometers()).add(new BigDecimal(distance1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
+                    this.updateById(xpOrder);
+                    // 存储本次距离
+                    orderTrajectory.setDistance(distance1);
+                    // 存储mongo数据
+                    orderTrajectoryService.create(orderTrajectory);
+                }
+            }else{
+                log.error("调用高德计算距离出错");
+            }
+        }
+    }
+
 
     /**
      * 获取当前用户正在执行的订单

--
Gitblit v1.7.1