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