From 33c7c61e0319b240e72f7ae0471630a12bd45c91 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 13 二月 2026 17:03:08 +0800
Subject: [PATCH] bug修改,计算费用工具类
---
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java | 62 ++++++++++++++++++++++++-------
1 files changed, 48 insertions(+), 14 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 9fd1e5f..4971207 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
@@ -71,6 +71,7 @@
import com.xiaopeng.order.service.IXpOrderEvaluateService;
import com.xiaopeng.order.service.IXpOrderReassignService;
import com.xiaopeng.order.service.IXpOrderService;
+import com.xiaopeng.order.utils.TaxiPricingDemoService;
import com.xiaopeng.order.utils.holiday.HolidayUtil;
import com.xiaopeng.order.vo.OrderDetailVo;
import io.swagger.annotations.ApiModelProperty;
@@ -771,11 +772,11 @@
// 消息推送
Map<String, Object> params = new HashMap<>();
Map<String, Object> content = new HashMap<>();
- content.put("orderId",order.getId());
+ content.put("orderId", order.getId());
content.put("status", OrderStatusEnum.CANCELED.getCode());
params.put("type", PushMessageTypeEnum.ORDER_STATUS.getDesc());
params.put("content", com.alibaba.fastjson2.JSONObject.toJSONString(content));
- params.put("timestamp", new Date().getTime()+"");
+ params.put("timestamp", new Date().getTime() + "");
String message = JSONObject.toJSONString(params);
SendMessageDTO sendMessageDTO = new SendMessageDTO();
sendMessageDTO.setMessage(message);
@@ -920,8 +921,41 @@
userVehicleClient.cancelTaxiPassenger(cancelTaxiPassengerVo);
}
- // 计算起步价
+ // 费用
+ // 查询订单轨迹
+ List<OrderTrajectory> trajectories = mongoTemplate.find(
+ new Query(Criteria.where("orderId").is(orderId))
+ .with(Sort.by(Sort.Direction.ASC, "locatetime")),
+ OrderTrajectory.class
+ );
+ List<TaxiPricingDemoService.GpsPoint> gpsPoints = new ArrayList<>();
+ for (OrderTrajectory trajectory : trajectories) {
+ TaxiPricingDemoService.GpsPoint point = new TaxiPricingDemoService.GpsPoint(trajectory.getDistance(),trajectory.getLocatetime() );
+ gpsPoints.add(point);
+ }
+ TaxiPricingDemoService.PricingConfig config = new TaxiPricingDemoService.PricingConfig();
+ config.peak = new TaxiPricingDemoService.PricingRule("高峰期", "14:40", "14:46", 15.0, 3.0, 5.0, 3.0, 0.8);
+ config.night = new TaxiPricingDemoService.PricingRule("夜间行驶", "14:47", "14:48", 18.0, 3.0, 5.0, 3.5, 1.0);
+ config.holiday = new TaxiPricingDemoService.PricingRule("节假日", "18:47", "18:48", 18.0, 3.0, 5.0, 4, 2.0);
+ config.normals.add(new TaxiPricingDemoService.PricingRule("普通时段", "14:46", "14:47", 10.0, 3.0, 5.0, 2.4, 0.5));
+ config.normals.add(new TaxiPricingDemoService.PricingRule("普通时段", "14:48", "17:59", 10.0, 3.0, 5.0, 2.4, 0.5));
+ // --- 远途加价区间配置 (关键修改) ---
+ // 1. 超过 num1(12) 不足 num2(20), 加收 num3(1.2)
+ config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(5.0, 6.0, 1.2));
+ // 2. 超过 num4(20) 不足 num5(35), 加收 num6(2.0)
+ config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(6.0, 7.0, 2.0));
+ // 3. 超过 num7(35) 以后, 加收 num8(3.5) -> numEnd 传个极大值
+ config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(7.0, 8.0, 3.5));
+
+ TaxiPricingDemoService.TaxiPricingService service = new TaxiPricingDemoService.TaxiPricingService();
+ Map<String, BigDecimal> bill = service.calculateOrderPrice(DateUtils.toDate(order.getCreateTime()), order.getMileageKilometers(), gpsPoints, config);
+ System.err.println("======= 订单计费账单 =======");
+ bill.forEach((detail, price) -> System.err.println(detail + ": " + price + " 元"));
+
+ BigDecimal totalAmount = bill.values().stream().reduce(BigDecimal.ZERO, BigDecimal::add);
+ System.err.println("--------------------------");
+ System.err.println("应付总额: " + totalAmount + " 元");
// // 计算实际价格
// // 根据订单所属开通城市id 查询定价
@@ -1277,11 +1311,10 @@
//// );
-
}
- private MileageDto mileageType(MileageDto param,JSONArray startingFareJsonArray, Date mileageDate, LocalDateTime begin, String num14, String num16, String num17, String num21, String num22, String num24, String num25, String num30, String num31) {
+ private MileageDto mileageType(MileageDto param, JSONArray startingFareJsonArray, Date mileageDate, LocalDateTime begin, String num14, String num16, String num17, String num21, String num22, String num24, String num25, String num30, String num31) {
// 计算出是在哪个普通时间段内
for (Object o : startingFareJsonArray) {
JSONObject startingFare = (JSONObject) o;
@@ -1296,7 +1329,7 @@
calendarEnd.set(Calendar.MINUTE, Integer.valueOf(startingFare.getString("num2").split(":")[1]));
// 找到符合条件的直接跳出循环
if (mileageDate.getTime() > calendarStart.getTimeInMillis() && mileageDate.getTime() < calendarEnd.getTimeInMillis()) {
- param.setMileage(startingFare.getString("num6")) ;
+ param.setMileage(startingFare.getString("num6"));
param.setTime(startingFare.getString("num7"));
param.setMileageTypeTemp(1);
break;
@@ -1318,7 +1351,7 @@
if (date.getTime() > calendarStart.getTimeInMillis() && date.getTime() < calendarEnd.getTimeInMillis()
) {
- param.setMileage(num16) ;
+ param.setMileage(num16);
param.setTime(num17);
param.setMileageTypeTemp(2);
}
@@ -1345,7 +1378,7 @@
if ((date.getTime() > calendar1Start.getTimeInMillis() && date.getTime() < calendar1End.getTimeInMillis())
|| (date.getTime() > calendar2Start.getTimeInMillis() && date.getTime() < calendar2End.getTimeInMillis())) {
- param.setMileage(num24) ;
+ param.setMileage(num24);
param.setTime(num25);
param.setMileageTypeTemp(3);
}
@@ -1353,7 +1386,7 @@
boolean holiday = holidayUtil.isHoliday(localDate);
if (holiday) {
// 判断是否为节假日 起步价修改
- param.setMileage(num30) ;
+ param.setMileage(num30);
param.setTime(num31);
param.setMileageTypeTemp(4);
}
@@ -1605,7 +1638,7 @@
BeanUtils.copyProperties(order, orderDetailVo);
// 查询车辆信息
XpVehicle vehicle = xpVehicleClient.queryById(order.getVehicleId()).getData();
- if (vehicle!=null){
+ if (vehicle != null) {
orderDetailVo.setVehicleCode(vehicle.getVehicleCode());
orderDetailVo.setPlateNumber(vehicle.getPlateNumber());
orderDetailVo.setVehicleColor(vehicle.getVehicleColor());
@@ -1627,15 +1660,15 @@
OrderTrajectory.class
);
orderDetailVo.setTrajectories(trajectories);
- if (order.getTripBegin()!=null&&order.getTripEnd()!=null){
+ if (order.getTripBegin() != null && order.getTripEnd() != null) {
// 计算两个时间相差多少分钟
long minutesDifference = Duration.between(order.getTripBegin(), order.getTripEnd()).toMinutes();
orderDetailVo.setOrderTime(minutesDifference);
- }else{
+ } else {
orderDetailVo.setOrderTime(0l);
}
- if (order.getStartMileage()!=null){
- orderDetailVo.setTotalMileage(order.getStartMileage()+(order.getMileageKilometers()!=null?order.getMileageKilometers():0D));
+ if (order.getStartMileage() != null) {
+ orderDetailVo.setTotalMileage(order.getStartMileage() + (order.getMileageKilometers() != null ? order.getMileageKilometers() : 0D));
}
return orderDetailVo;
@@ -1644,6 +1677,7 @@
/**
* 成功操作下发命令后调用 用于弹出redis队列的获取成功的数据
+ *
* @param dto
*/
@Override
--
Gitblit v1.7.1