From c99ff84eb3e0075aed3537b9ab82438217c3ff17 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期六, 14 二月 2026 10:00:57 +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 |   60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 54 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 48607ae..aeeed2d 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.ImmutableMap;
 import com.xiaopeng.api.dto.account.GetUserCouponDto;
+import com.xiaopeng.api.dto.account.UseUserCouponDto;
 import com.xiaopeng.api.dto.automaticPilot.PushOrderDto;
 import com.xiaopeng.api.dto.operation.LonLatDto;
 import com.xiaopeng.api.dto.order.GetOrderNumDto;
@@ -99,6 +100,7 @@
 import java.text.SimpleDateFormat;
 import java.time.*;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -1000,6 +1002,47 @@
         System.err.println("--------------------------");
         System.err.println("应付总额: " + totalAmount + " 元");
         BigDecimal startMoney = BigDecimal.ZERO;
+         // 默认费率1
+        double priceRate = 1;
+        if (pricing.getIsDynamicPrice() == 1) {
+            // 先判断是否已经调价过了
+            Object userDynamicPriceObj = redisService.getCacheObject("USER_DYNAMIC_PRICE_" + order.getCityId() + "_" + uid);
+            if (userDynamicPriceObj != null) {
+                // 是否调价过了
+                priceRate = Double.parseDouble(userDynamicPriceObj.toString());
+            } else {
+                // 没有调过
+                //是否触发动态调价 redis获取
+                Object dynamicPriceObj = redisService.getCacheObject("DYNAMIC_PRICE_" + order.getCityId());
+                if (dynamicPriceObj != null) {
+                    JSONObject jsonObject = JSONObject.parseObject(pricing.getDynamicPricingJson());
+                    // 触发动态调价
+                    // value=时间
+                    String timeStr = dynamicPriceObj.toString();
+                    // 判断当前距离这个时间范围的新增订单数(排除取消) / 上浮数量 算出应该增加的价格率
+                    Integer num = this.getOrderNum(new GetOrderNumDto(timeStr, order.getCityId()));
+                    // X单上升一次调价
+                    Integer orderNum = getOrderNum(jsonObject, 4);
+                    // 需要调价的次数
+                    int count = num / orderNum;
+                    if (count > 0) {
+                        // 计算每次上升的费率
+                        Integer upRate = getOrderNum(jsonObject, 5);
+                        BigDecimal divide = new BigDecimal(upRate).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
+                        for (int i = count; i > 0; i--) {
+                            // 当前费率+(费率*上升百分比)
+                            priceRate = new BigDecimal(priceRate).multiply(divide).add(new BigDecimal(priceRate)).setScale(2, RoundingMode.HALF_UP).doubleValue();
+                        }
+                        // 冷却时间
+                        Integer time = getOrderNum(jsonObject, 6);
+                        // 触发调价了
+                        redisService.setCacheObject("USER_DYNAMIC_PRICE_" + order.getCityId() + "_" + uid, priceRate, time.longValue(), TimeUnit.MINUTES);
+                    }
+
+                }
+            }
+
+        }
         // 封装费用明细数据
         for (Map.Entry<String, BigDecimal> stringBigDecimalEntry : bill.entrySet()) {
             // 封装起步价
@@ -1032,7 +1075,8 @@
                     BigDecimal distance = bill.get(key1);
                     BigDecimal money = bill.get(key2);
                     mileageDetail.setMileage(distance);
-                    mileageDetail.setMoney(money);
+                    order.setStartMoney(money.multiply(BigDecimal.valueOf(priceRate)));
+                    mileageDetail.setMoney(money.multiply(BigDecimal.valueOf(priceRate)));
                 } else if (key.contains("夜间行驶")) {
                     mileageDetail.setType(2);
                     String key1 = "distance夜间行驶" + key.split("\\|")[1];
@@ -1040,7 +1084,9 @@
                     BigDecimal distance = bill.get(key1);
                     BigDecimal money = bill.get(key2);
                     mileageDetail.setMileage(distance);
-                    mileageDetail.setMoney(money);
+                    order.setStartMoney(money.multiply(BigDecimal.valueOf(priceRate)));
+
+                    mileageDetail.setMoney(money.multiply(BigDecimal.valueOf(priceRate)));
                 } else if (key.contains("高峰期")) {
                     mileageDetail.setType(3);
                     String key1 = "distance高峰期" + key.split("\\|")[1];
@@ -1048,7 +1094,9 @@
                     BigDecimal distance = bill.get(key1);
                     BigDecimal money = bill.get(key2);
                     mileageDetail.setMileage(distance);
-                    mileageDetail.setMoney(money);
+                    order.setStartMoney(money.multiply(BigDecimal.valueOf(priceRate)));
+
+                    mileageDetail.setMoney(money.multiply(BigDecimal.valueOf(priceRate)));
                 } else if (key.contains("节假")) {
                     mileageDetail.setType(4);
                     String key1 = "distance节假日" + key.split("\\|")[1];
@@ -1056,10 +1104,10 @@
                     BigDecimal distance = bill.get(key1);
                     BigDecimal money = bill.get(key2);
                     mileageDetail.setMileage(distance);
-                    mileageDetail.setMoney(money);
+                    order.setStartMoney(money.multiply(BigDecimal.valueOf(priceRate)));
+                    mileageDetail.setMoney(money.multiply(BigDecimal.valueOf(priceRate)));
                 }
                 mileage.add(mileageDetail);
-
             }
             // 封装时长费
             FareBreakdownDetailVo timeDetail = new FareBreakdownDetailVo();
@@ -1116,7 +1164,7 @@
         order.setOrderMoney(orderMoney);
         baseMapper.updateById(order);
         if (order.getCouponId() != null) {
-            GetUserCouponDto useUserCouponDto = new GetUserCouponDto();
+            UseUserCouponDto useUserCouponDto = new UseUserCouponDto();
             useUserCouponDto.setUserId(Long.valueOf(uid));
             useUserCouponDto.setTotalAmount(order.getOrderMoney().doubleValue());
             useUserCouponDto.setOpenCityId(order.getCityId());

--
Gitblit v1.7.1