From e4e8a1a96de8dc5efb965bea8e98581e2b41ac82 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 13 二月 2026 21:23:32 +0800
Subject: [PATCH] bug修改,计算费用工具类

---
 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/utils/TaxiPricingDemoService.java |   26 ++++++++++++++++++++++++--
 1 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/utils/TaxiPricingDemoService.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/utils/TaxiPricingDemoService.java
index 2741f3b..a6dc382 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/utils/TaxiPricingDemoService.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/utils/TaxiPricingDemoService.java
@@ -128,12 +128,14 @@
                         exceedValue = BigDecimal.ZERO;
                     }
                     BigDecimal exceedRate = activeRuleNameRate.get(ruleName);
-                    result.put("时长费"+split[0], result.getOrDefault(split[0], BigDecimal.ZERO).add(exceedValue.multiply(exceedRate)));
+                    result.put("时长费"+split[0]+"&"+exceedValue, result.getOrDefault(split[0], BigDecimal.ZERO).add(exceedValue.multiply(exceedRate)));
                 }
             }
             // 2. 远途加价计算 (基于区间判定)
             BigDecimal longExtra = calculateLongDistExtra(BigDecimal.valueOf(totalMileageKm), config.longSteps);
-            result.put("远途费|", longExtra);
+            // 计算远途里程
+            BigDecimal longExtraValue = calculateLongDistExtra(BigDecimal.valueOf(totalMileageKm), config.longSteps);
+            result.put("远途费&"+longExtraValue, longExtra);
             return formatMap(result);
         }
 
@@ -157,6 +159,26 @@
             }
             return billM.subtract(extraStart).multiply(extraRate);
         }
+        /**
+         * 计算远途费的里程
+         */
+        private BigDecimal calculateLongDistExtraValue(BigDecimal billM, List<LongRangeStep> steps) {
+            if (billM.compareTo(BigDecimal.ZERO) <= 0) return BigDecimal.ZERO;
+
+            // 当前点所在的公里数
+            BigDecimal extraStart = BigDecimal.ZERO;
+            BigDecimal extraRate = BigDecimal.ZERO;
+
+            // 匹配区间规则
+            for (LongRangeStep step : steps) {
+                if (step.isMatch(billM)) {
+                    extraRate = step.addPrice;
+                    extraStart = step.numStart;
+                    break;
+                }
+            }
+            return billM.subtract(extraStart);
+        }
 
         private Map<String, BigDecimal> formatMap(Map<String, BigDecimal> map) {
             return map.entrySet().stream().collect(Collectors.toMap(

--
Gitblit v1.7.1