From 0a68de6a5606869d6422a34742d8bc3cb7bdab21 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期四, 12 二月 2026 19:11:02 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi
---
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java | 103 ++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 97 insertions(+), 6 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..26bd344 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
@@ -34,14 +34,13 @@
import com.xiaopeng.api.model.order.XpOrderEvaluate;
import com.xiaopeng.api.model.order.XpOrderReassign;
import com.xiaopeng.api.vo.account.UserCouponVo;
-import com.xiaopeng.api.vo.order.FareBreakdownVo;
-import com.xiaopeng.api.vo.order.XpHistoryEndPointsVo;
-import com.xiaopeng.api.vo.order.XpHistoryStartPointsVo;
-import com.xiaopeng.api.vo.order.XpPointInfoVo;
+import com.xiaopeng.api.vo.order.*;
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 +48,9 @@
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.mangodb.model.OrderTrajectory;
import com.xiaopeng.order.mapper.XpOrderMapper;
import com.xiaopeng.order.model.dto.XpOrderCommentDto;
import com.xiaopeng.order.model.dto.XpOrderPayDto;
@@ -66,7 +68,12 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -107,7 +114,12 @@
private final RedisService redisService;
private final XpPricingClient xpPricingClient;
private final XpSystemSettingClient xpSystemSettingClient;
+ private final OrderTrajectoryService orderTrajectoryService;
+ @Autowired
+ private MongoTemplate mongoTemplate;
+// @Autowired
+// private XpPricingUtil xpPricingUtil;
@Override
public OrderStatisticsDTO getOrderStatistics(StatisticsQueryDTO query) {
@@ -851,6 +863,36 @@
if (pricing == null) {
throw new ServiceException("当前城市未配置定价规则", I18nKeyConstant.ORDER_PRICING_NOT_EXISTS);
}
+ // 查询订单轨迹
+ List<OrderTrajectory> trajectories = mongoTemplate.find(
+ new Query(Criteria.where("orderId").is(orderId))
+ .with(Sort.by(Sort.Direction.ASC, "locatetime")),
+ OrderTrajectory.class
+ );
+ // 计算等待时间
+ LocalDateTime boardingTime = order.getBoardingTime();// 上车时间
+ LocalDateTime arrivalTime = order.getArrivalTime();// 车辆到达上车点时间
+ // 行程开始时间
+ Integer waitTime =Math.abs( (int) Duration.between(boardingTime, arrivalTime).getSeconds());
+ // 计算订单总行驶距离,单位米
+ Double totalDistance = 0.00D;
+ // 行程总时间 秒
+ LocalDateTime tripBegin = order.getTripBegin();
+ LocalDateTime tripEnd = order.getTripEnd();
+ long seconds = Duration.between(tripBegin, tripEnd).getSeconds();
+ for (OrderTrajectory trajectory : trajectories) {
+
+ }
+// XpPricingCardVo xpPricingCardVo = xpPricingUtil.calculationPrice(
+// order.getAppUserId().toString(),JSON.parseObject(pricing.getBasicPricingJson()),
+// JSON.parseArray(pricing.getStartingFareJson()),
+// pricing.getDynamicPricingJson(),
+// pricing.getIsDynamicPrice(),
+// totalDistance,
+// seconds,
+// order.getCityId()
+// );
+
// Long id = pricing.getId();
// Integer pricingType = pricing.getPricingType();
// String basicPricingJson = pricing.getBasicPricingJson();
@@ -883,8 +925,8 @@
//
// }
- // 计算完价格后 挑选优惠券
- GetUserCouponDto getUserCouponDto = new GetUserCouponDto();
+ // 计算完价格后 挑选优惠券
+ GetUserCouponDto getUserCouponDto = new GetUserCouponDto();
getUserCouponDto.setUserId(Long.valueOf(uid));
getUserCouponDto.setTotalAmount(order.getOrderMoney().doubleValue());
R<UserCouponVo> userCouponVoR = xpAppUserCouponClient.getUserCoupon(getUserCouponDto);
@@ -912,6 +954,18 @@
@Override
public R<FareBreakdownVo> fareBreakdown(Long orderId, String uid) {
XpOrder order = this.getById(orderId);
+ // 查询订单轨迹
+ List<OrderTrajectory> trajectories = mongoTemplate.find(
+ new Query(Criteria.where("orderId").is(orderId))
+ .with(Sort.by(Sort.Direction.ASC, "locatetime")),
+ OrderTrajectory.class
+ );
+ // 计算订单总行驶距离,单位米
+ Double totalDistance = 0.00D;
+ for (OrderTrajectory trajectory : trajectories) {
+
+
+ }
FareBreakdownVo fareBreakdownVo = new FareBreakdownVo();
// fareBreakdownVo.setStart();
// fareBreakdownVo.setMileage();
@@ -951,6 +1005,7 @@
/**
* 添加订单
+ *
* @param xpOrder
* @return
*/
@@ -973,6 +1028,7 @@
/**
* 获取订单数量
+ *
* @param dto
* @return
*/
@@ -982,6 +1038,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