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