From 1417e16294b7939cf57f25f16d8f6a0d252b149e Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 13 二月 2026 11:38:28 +0800
Subject: [PATCH] 费用计算
---
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/utils/XpPricingUtil.java | 296 -----------------------------------------------------------
1 files changed, 1 insertions(+), 295 deletions(-)
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/utils/XpPricingUtil.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/utils/XpPricingUtil.java
index 8d4ff9d..fc09f3f 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/utils/XpPricingUtil.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/utils/XpPricingUtil.java
@@ -207,7 +207,6 @@
//
// // 时长
// xpPricingCardVo.setDuration(realTime);
-//
// // 时长费
// xpPricingCardVo.setDurationPrice((exceedTime * rule.getDouble("num31")));
//
@@ -357,300 +356,7 @@
//
// return xpPricingCardVo;
// }
-// /**
-// * 行程结束后计算费用
-// * @param rule 基础规则
-// * @param distance 里程
-// * @param duration 时间
-// * @param wait 时间
-// * @param waitMoney 等待费
-// * @param openCityId 开通城市id
-// * @param isDynamicPriceStatus 是否开启动态调价
-// * @return
-// * @throws Exception
-// */
-//// public XpPricingCardVo calculationFinalPrice(String uid,JSONObject rule, JSONArray startingFareJson, double distance, long duration, long wait, Double waitMoney,Integer isDynamicPriceStatus,Long openCityId,String dynamicPricingJson) {
-////
-////
-//// // 默认费率1
-//// double priceRate=1;
-//// if(isDynamicPriceStatus==1){
-//// // 先判断是否已经调价过了
-//// Object userDynamicPriceObj = redisService.getCacheObject("USER_DYNAMIC_PRICE_" + openCityId + "_" + uid);
-//// if(userDynamicPriceObj!=null){
-//// // 是否调价过了
-//// priceRate = Double.parseDouble(userDynamicPriceObj.toString());
-//// }else {
-//// // 没有调过
-//// //是否触发动态调价 redis获取
-//// Object dynamicPriceObj = redisService.getCacheObject("DYNAMIC_PRICE_" + openCityId);
-//// if(dynamicPriceObj!=null){
-//// JSONObject jsonObject = JSONObject.parseObject(dynamicPricingJson);
-//// // 触发动态调价
-//// // value=时间
-//// String timeStr = dynamicPriceObj.toString();
-//// // 判断当前距离这个时间范围的新增订单数(排除取消) / 上浮数量 算出应该增加的价格率
-//// R<Integer> r = xpOrderClient.getOrderNum(timeStr);
-//// if(r.getData()==200){
-//// int num = r.getData();
-//// // 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_" + openCityId + "_" + uid, priceRate,time.longValue(), TimeUnit.MINUTES);
-//// }
-//// }
-////
-//// }
-//// }
-////
-//// }
-////
-////
-////
-//// XpPricingCardVo xpPricingCardVo = new XpPricingCardVo();
-//// double amount = 0;
-//// //等待费
-//// Date date = new Date();
-//// // 计算出是在那个时间段内
-//// for (Object o : startingFareJson) {
-//// JSONObject startingFare = (JSONObject) o;
-//// Calendar calendarStart = Calendar.getInstance();
-//// calendarStart.setTime(date);
-//// calendarStart.set(Calendar.HOUR_OF_DAY, Integer.valueOf(startingFare.getString("num1").split(":")[0]));
-//// calendarStart.set(Calendar.MINUTE, Integer.valueOf(startingFare.getString("num1").split(":")[1]));
-////
-//// Calendar calendarEnd = Calendar.getInstance();
-//// calendarEnd.setTime(date);
-//// calendarEnd.set(Calendar.HOUR_OF_DAY, Integer.valueOf(startingFare.getString("num2").split(":")[0]));
-//// calendarEnd.set(Calendar.MINUTE, Integer.valueOf(startingFare.getString("num2").split(":")[1]));
-//// // 找到符合条件的直接跳出循环
-//// if (date.getTime() > calendarStart.getTimeInMillis() && date.getTime() < calendarEnd.getTimeInMillis()) {
-//// rule.put("num1", startingFare.get("num3"));
-//// rule.put("num2", startingFare.get("num4"));
-//// rule.put("num3", startingFare.get("num5"));
-//// rule.put("num4", startingFare.get("num6"));
-//// rule.put("num5", startingFare.get("num7"));
-////
-//// rule.put("startTime", startingFare.getString("num1"));
-//// rule.put("endTime", startingFare.getString("num2"));
-//// break;
-//// }
-//// }
-////
-////
-//// double realDistance = distance / 1000;//实际公里
-//// double realTime = duration / 60;//实际时间
-//// double exceedDistance = (realDistance - rule.getDouble("num2")) < 0 ? 0 : realDistance - rule.getDouble("num2");//超出起步里程的公里
-//// double exceedTime = (realTime - rule.getDouble("num3")) < 0 ? 0 : realTime - rule.getDouble("num3");//超过起步分钟数的时间
-//// double longDistanceOne = 0;//远途1段
-//// double longDistanceTwo = 0;//远途2段
-//// double longDistanceThree = 0;//远途3段
-////
-////
-//// //夜间服务处理逻辑
-//// Calendar calendarNight = Calendar.getInstance();
-//// calendarNight.setTime(date);
-//// calendarNight.set(Calendar.HOUR_OF_DAY, Integer.valueOf(rule.getString("num14").split(" - ")[0].split(":")[0]));
-//// calendarNight.set(Calendar.MINUTE, Integer.valueOf(rule.getString("num14").split(" - ")[0].split(":")[1]));
-////
-//// Calendar calendar = Calendar.getInstance();
-//// calendar.setTime(date);
-//// calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(rule.getString("num14").split(" - ")[1].split(":")[0]));
-//// calendar.set(Calendar.MINUTE, Integer.valueOf(rule.getString("num14").split(" - ")[1].split(":")[1]));
-////
-//// // 先判断今日是否节假日
-//// boolean holiday = holidayUtil.isHoliday();
-//// if (holiday) {
-//// if (realDistance > rule.getDouble("num6")) {
-//// longDistanceOne = rule.getDouble("num32") * (realDistance - rule.getDouble("num6"));
-//// }
-//// if (realDistance > rule.getDouble("num9")) {
-//// longDistanceTwo = rule.getDouble("num33") * (realDistance - rule.getDouble("num9"));
-//// }
-//// if (realDistance > rule.getDouble("num12")) {
-//// longDistanceThree = rule.getDouble("num34") * (realDistance - rule.getDouble("num12"));
-//// }
-//// amount = rule.getDouble("num29") + (exceedDistance * rule.getDouble("num30")) + (exceedTime * rule.getDouble("num31")) + (wait * waitMoney) + longDistanceOne + longDistanceTwo + longDistanceThree;
-////
-////
-//// // 起步价
-//// xpPricingCardVo.setStartPrice(rule.getDouble("num29"));
-//// // 时间段
-//// xpPricingCardVo.setTime("节假日");
-////
-////
-//// // 里程
-//// xpPricingCardVo.setDistance(realDistance);
-////
-//// // 里程费
-//// double distancePrice = (exceedDistance * rule.getDouble("num30")) + longDistanceOne + longDistanceTwo + longDistanceThree;
-//// xpPricingCardVo.setDistancePrice(distancePrice);
-////
-//// // 时长
-//// xpPricingCardVo.setDuration(realTime);
-////
-//// // 时长费
-//// xpPricingCardVo.setDurationPrice((exceedTime * rule.getDouble("num31")));
-////
-////
-//// } else {
-//// if (date.getTime() > calendarNight.getTimeInMillis() && date.getTime() < calendar.getTimeInMillis()) {
-//// if (realDistance > rule.getDouble("num6")) {
-//// longDistanceOne = rule.getDouble("num18") * (realDistance - rule.getDouble("num6"));
-//// }
-//// if (realDistance > rule.getDouble("num9")) {
-//// longDistanceTwo = rule.getDouble("num19") * (realDistance - rule.getDouble("num9"));
-//// }
-//// if (realDistance > rule.getDouble("num12")) {
-//// longDistanceThree = rule.getDouble("num20") * (realDistance - rule.getDouble("num12"));
-//// }
-//// amount = rule.getDouble("num15") + (exceedDistance * rule.getDouble("num16")) + (exceedTime * rule.getDouble("num17")) + (wait * waitMoney) + longDistanceOne + longDistanceTwo + longDistanceThree;
-////
-////
-//// // 起步价
-//// xpPricingCardVo.setStartPrice(rule.getDouble("num15"));
-//// // 时间段
-//// xpPricingCardVo.setTime(rule.getString("num14"));
-////
-//// // 里程
-//// xpPricingCardVo.setDistance(realDistance);
-////
-//// // 里程费
-//// double distancePrice = (exceedDistance * rule.getDouble("num16")) + longDistanceOne + longDistanceTwo + longDistanceThree;
-//// xpPricingCardVo.setDistancePrice(distancePrice);
-////
-//// // 时长
-//// xpPricingCardVo.setDuration(realTime);
-////
-//// // 时长费
-//// xpPricingCardVo.setDurationPrice((exceedTime * rule.getDouble("num17")));
-////
-////
-//// } else {
-////
-//// // 高峰处理
-//// Calendar calendarStart = Calendar.getInstance();
-//// calendarStart.setTime(date);
-//// calendarStart.set(Calendar.HOUR_OF_DAY, Integer.valueOf(rule.getString("num21").split(" - ")[0].split(":")[0]));
-//// calendarStart.set(Calendar.MINUTE, Integer.valueOf(rule.getString("num21").split(" - ")[0].split(":")[1]));
-////
-//// Calendar calendarEnd = Calendar.getInstance();
-//// calendarEnd.setTime(date);
-//// calendarEnd.set(Calendar.HOUR_OF_DAY, Integer.valueOf(rule.getString("num21").split(" - ")[1].split(":")[0]));
-//// calendarEnd.set(Calendar.MINUTE, Integer.valueOf(rule.getString("num21").split(" - ")[1].split(":")[1]));
-////
-//// Calendar s2 = Calendar.getInstance();
-//// s2.setTime(date);
-//// s2.set(Calendar.HOUR_OF_DAY, Integer.valueOf(rule.getString("num22").split(" - ")[0].split(":")[0]));
-//// s2.set(Calendar.MINUTE, Integer.valueOf(rule.getString("num22").split(" - ")[0].split(":")[1]));
-////
-//// Calendar e2 = Calendar.getInstance();
-//// e2.setTime(date);
-//// e2.set(Calendar.HOUR_OF_DAY, Integer.valueOf(rule.getString("num22").split(" - ")[1].split(":")[0]));
-//// e2.set(Calendar.MINUTE, Integer.valueOf(rule.getString("num22").split(" - ")[1].split(":")[1]));
-//// //高峰时段处理逻辑
-//// if ((date.getTime() > calendarStart.getTimeInMillis() && date.getTime() < calendarEnd.getTimeInMillis()) || (date.getTime() > s2.getTimeInMillis() && date.getTime() < e2.getTimeInMillis())) {
-//// if (realDistance > rule.getDouble("num6")) {
-//// longDistanceOne = rule.getDouble("num26") * (realDistance - rule.getDouble("num6"));
-//// }
-//// if (realDistance > rule.getDouble("num9")) {
-//// longDistanceTwo = rule.getDouble("num27") * (realDistance - rule.getDouble("num9"));
-//// }
-//// if (realDistance > rule.getDouble("num12")) {
-//// longDistanceThree = rule.getDouble("num28") * (realDistance - rule.getDouble("num12"));
-//// }
-//// amount = rule.getDouble("num23") + (exceedDistance * rule.getDouble("num24")) + (exceedTime * rule.getDouble("num25")) + (wait * waitMoney) + longDistanceOne + longDistanceTwo + longDistanceThree;
-////
-////
-//// // 起步价
-//// xpPricingCardVo.setStartPrice(rule.getDouble("num23"));
-//// // 时间段
-//// if (date.getTime() > calendarStart.getTimeInMillis() && date.getTime() < calendarEnd.getTimeInMillis()) {
-//// xpPricingCardVo.setTime(rule.getString("num21"));
-//// } else {
-//// xpPricingCardVo.setTime(rule.getString("num22"));
-//// }
-////
-////
-//// // 里程
-//// xpPricingCardVo.setDistance(realDistance);
-////
-//// // 里程费
-//// double distancePrice = (exceedDistance * rule.getDouble("num24")) + longDistanceOne + longDistanceTwo + longDistanceThree;
-//// xpPricingCardVo.setDistancePrice(distancePrice);
-////
-//// // 时长
-//// xpPricingCardVo.setDuration(realTime);
-////
-//// // 时长费
-//// xpPricingCardVo.setDurationPrice((exceedTime * rule.getDouble("num25")));
-////
-//// } else {
-//// //其他时间段的计算
-//// if (realDistance > rule.getDouble("num6")) {
-//// longDistanceOne = rule.getDouble("num8") * (realDistance - rule.getDouble("num6"));
-//// }
-//// if (realDistance > rule.getDouble("num9")) {
-//// longDistanceTwo = rule.getDouble("num11") * (realDistance - rule.getDouble("num9"));
-//// }
-//// if (realDistance > rule.getDouble("num12")) {
-//// longDistanceThree = rule.getDouble("num13") * (realDistance - rule.getDouble("num12"));
-//// }
-//// amount = rule.getDouble("num1") + (exceedDistance * rule.getDouble("num4")) + (exceedTime * rule.getDouble("num5")) + (wait * waitMoney) + longDistanceOne + longDistanceTwo + longDistanceThree;
-////
-////
-//// // 起步价
-//// xpPricingCardVo.setStartPrice(rule.getDouble("num1"));
-//// // 时间段
-//// xpPricingCardVo.setTime(rule.getString("startTime") + " - " + rule.getString("endTime"));
-////
-//// xpPricingCardVo.setDistancePriceNormal(rule.getDouble("num2"));
-////
-//// xpPricingCardVo.setDurationPriceNormal(rule.getDouble("num3"));
-////
-////
-//// // 里程
-//// xpPricingCardVo.setDistance(realDistance);
-////
-//// // 里程费
-//// double distancePrice = (exceedDistance * rule.getDouble("num4")) + longDistanceOne + longDistanceTwo + longDistanceThree;
-//// xpPricingCardVo.setDistancePrice(distancePrice);
-////
-//// // 时长
-//// xpPricingCardVo.setDuration(realTime);
-////
-//// // 时长费
-//// xpPricingCardVo.setDurationPrice((exceedTime * rule.getDouble("num5")));
-////
-//// }
-//// }
-//// }
-////
-//// // 订单总额
-//// Double startPrice = xpPricingCardVo.getStartPrice();
-//// // 先减去起步价重新计算
-//// amount = amount - startPrice;
-//// // 动态计算费用
-//// startPrice= new BigDecimal(startPrice).multiply(new BigDecimal(priceRate)).setScale(2, RoundingMode.HALF_UP).doubleValue();
-//// amount = amount+startPrice;
-//// xpPricingCardVo.setTotalPrice(amount);
-////
-////
-//// return xpPricingCardVo;
-//// }
+//
//
//
// /**
--
Gitblit v1.7.1