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