From 1e139141c1ca4124f40383f9c426da9c2c23342b Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期四, 12 二月 2026 16:16:38 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java | 103 ++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 96 insertions(+), 7 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 4050cc7..beba603 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
@@ -9,6 +9,7 @@
import com.google.common.collect.ImmutableMap;
import com.xiaopeng.api.dto.account.GetUserCouponDto;
import com.xiaopeng.api.dto.operation.LonLatDto;
+import com.xiaopeng.api.dto.order.GetOrderNumDto;
import com.xiaopeng.api.dto.order.HistoryEndPointsDto;
import com.xiaopeng.api.dto.order.HistoryStartPointsDto;
import com.xiaopeng.api.dto.statistics.DailyCountDTO;
@@ -17,6 +18,7 @@
import com.xiaopeng.api.dto.vehicleConvoy.BaseVehicleUserDto;
import com.xiaopeng.api.feignClient.account.XpAppUserClient;
import com.xiaopeng.api.feignClient.account.XpAppUserCouponClient;
+import com.xiaopeng.api.feignClient.operation.XpSystemSettingClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.UserVehicleClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetVehicleClient;
@@ -46,6 +48,7 @@
import com.xiaopeng.common.redis.service.RedisService;
import com.xiaopeng.common.security.utils.SecurityUtils;
import com.xiaopeng.order.constant.I18nKeyConstant;
+import com.xiaopeng.order.job.jobs.EndTripJob;
import com.xiaopeng.order.mapper.XpOrderMapper;
import com.xiaopeng.order.model.dto.XpOrderCommentDto;
import com.xiaopeng.order.model.dto.XpOrderPayDto;
@@ -59,6 +62,7 @@
import com.xiaopeng.order.job.base.QuartzManager;
import com.xiaopeng.order.job.base.TimeJobType;
import com.xiaopeng.order.job.jobs.OrderCancelJob;
+import io.swagger.annotations.ApiModelProperty;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
@@ -68,6 +72,8 @@
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
@@ -100,6 +106,7 @@
private final IXpOrderReassignService xpOrderReassignService;
private final RedisService redisService;
private final XpPricingClient xpPricingClient;
+ private final XpSystemSettingClient xpSystemSettingClient;
@Override
public OrderStatisticsDTO getOrderStatistics(StatisticsQueryDTO query) {
@@ -778,8 +785,8 @@
xpOrder.setStatus(status);
switch (status) {
case 4:
- // 添加定时任务job
- Map<String, ? extends Object> maps =
+ // 添加取消订单定时任务job
+ Map<String, ? extends Object> cancelJobMaps =
new ImmutableMap.Builder<String, Long>().
put("id", xpOrder.getId())
.build();
@@ -788,12 +795,28 @@
(OrderCancelJob.name + xpOrder.getId()).toUpperCase(),
TimeJobType.ORDER_CANCEL,
DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(5)),
- maps
+ cancelJobMaps
);
break;
case 5:
// 删除定时任务job
QuartzManager.removeJob((OrderCancelJob.name + xpOrder.getId()).toUpperCase(), TimeJobType.ORDER_CANCEL);
+ break;
+ case 7:
+ // 查询自动结束行程时间
+ Integer arriveTime = xpSystemSettingClient.getOrderFinishTime().getData();
+ // 添加自动结束行程定时任务job
+ Map<String, ? extends Object> endTripJobMaps =
+ new ImmutableMap.Builder<String, Long>().
+ put("id", xpOrder.getId())
+ .build();
+ QuartzManager.addJob(
+ EndTripJob.class,
+ (EndTripJob.name + xpOrder.getId()).toUpperCase(),
+ TimeJobType.END_TRIP,
+ DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(arriveTime)),
+ endTripJobMaps
+ );
break;
}
baseMapper.updateById(xpOrder);
@@ -815,17 +838,40 @@
// 根据订单所属开通城市id 查询定价
R<XpPricing> pricingByCityId = xpPricingClient.getPricingByCityId(order.getCityId());
XpPricing pricing = pricingByCityId.getData();
-
+ if (pricing == null) {
+ throw new ServiceException("当前城市未配置定价规则", I18nKeyConstant.ORDER_PRICING_NOT_EXISTS);
+ }
Long id = pricing.getId();
Integer pricingType = pricing.getPricingType();
String basicPricingJson = pricing.getBasicPricingJson();
String startingFareJson = pricing.getStartingFareJson();
String dynamicPricingJson = pricing.getDynamicPricingJson();
String priceRule = pricing.getPriceRule();
- if (pricing == null) {
- throw new ServiceException("当前城市未配置定价规则", I18nKeyConstant.ORDER_PRICING_NOT_EXISTS);
- }
// 根据计价规则计算费用
+ BigDecimal startMoney = BigDecimal.ZERO;// 起步价
+ BigDecimal mileageMoney = BigDecimal.ZERO;// 里程费
+ BigDecimal durationMoney = BigDecimal.ZERO;// 时长费
+ BigDecimal waitMoney = BigDecimal.ZERO;// 等待费
+ BigDecimal longDistancemoney = BigDecimal.ZERO;// 远途费
+ BigDecimal redPacketMoney = BigDecimal.ZERO;// 红包抵扣金额
+ BigDecimal couponMoney = BigDecimal.ZERO;// 优惠券抵扣金额
+ if (pricingType == 1) {
+
+ } else {
+
+ }
+ if (org.springframework.util.StringUtils.hasLength(basicPricingJson)) {
+
+ }
+ if (org.springframework.util.StringUtils.hasLength(startingFareJson)) {
+
+ }
+ if (org.springframework.util.StringUtils.hasLength(dynamicPricingJson)) {
+
+ }
+ if (org.springframework.util.StringUtils.hasLength(priceRule)) {
+
+ }
// 计算完价格后 挑选优惠券
GetUserCouponDto getUserCouponDto = new GetUserCouponDto();
getUserCouponDto.setUserId(Long.valueOf(uid));
@@ -836,6 +882,7 @@
order.setCouponId(userCouponVo.getId());
order.setCouponMoney(BigDecimal.valueOf(userCouponVo.getMoney()));
}
+ order.setTripEnd(LocalDateTime.now());
baseMapper.updateById(order);
// 解绑用户与车辆关系
CancelTaxiPassengerVo cancelTaxiPassengerVo = new CancelTaxiPassengerVo();
@@ -856,6 +903,21 @@
XpOrder order = this.getById(orderId);
FareBreakdownVo fareBreakdownVo = new FareBreakdownVo();
BeanUtils.copyProperties(order, fareBreakdownVo);
+ fareBreakdownVo.setTotalKilometers(
+ BigDecimal.valueOf(order.getStartMileage() + order.getMileageKilometers() + order.getLongDistance())
+ );
+ LocalDateTime createTime = order.getCreateTime();
+ LocalDateTime tripEnd = order.getTripEnd();
+ // 计算行程时间 单位分钟
+
+ // 计算时间差
+ Duration duration = Duration.between(createTime, tripEnd);
+
+ // 转换为分钟并保留一位小数
+ BigDecimal minutes = BigDecimal.valueOf(duration.getSeconds())
+ .divide(BigDecimal.valueOf(60), 1, RoundingMode.HALF_UP);
+
+ fareBreakdownVo.setTotalTime(minutes);
return R.ok(fareBreakdownVo);
}
@@ -868,13 +930,40 @@
return R.ok();
}
+ /**
+ * 添加订单
+ * @param xpOrder
+ * @return
+ */
@Override
public boolean addOrder(XpOrder xpOrder) {
int insert = this.baseMapper.insert(xpOrder);
+ if (insert <= 0) {
+ return false;
+ }
return true;
}
+ @Override
+ public XpVehicle queryVehicleByOrderId(Long orderId, String uid) {
+ XpOrder xpOrder = this.getById(orderId);
+ XpVehicle xpVehicle = xpVehicleClient.queryById(xpOrder.getVehicleId()).getData();
+ return xpVehicle;
+ }
+
+ /**
+ * 获取订单数量
+ * @param dto
+ * @return
+ */
+ @Override
+ public Integer getOrderNum(GetOrderNumDto dto) {
+ Long num = this.baseMapper.selectCount(new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getCityId, dto.getOpenCityId()).between(BaseModel::getCreateTime, dto.getTimeStr(), new Date()));
+ return num.intValue();
+ }
+
+
/**
* 获取当前用户正在执行的订单
*
--
Gitblit v1.7.1