From 4f3466431b6ea9f16235a8021fca009b549f32e5 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 11 三月 2026 22:28:17 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java | 160 ++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 122 insertions(+), 38 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 fbe8e76..b3d6700 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
@@ -1342,19 +1342,34 @@
break;
case 7:
// 查询自动结束行程时间
- Integer arriveTime = xpSystemSettingClient.getOrderFinishTime().getData();
- // 添加自动结束行程定时任务job
- Map<String, ? extends Object> endTripJobMaps =
- new ImmutableMap.Builder<String, Long>().
- put("id", xpOrder.getId())
- .build();
- QuartzManager.addJob(
- EndTripJob.class,
- (EndTripJob.name + xpOrder.getId()).toUpperCase(),
- TimeJobType.END_TRIP,
- DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(arriveTime)),
- endTripJobMaps
- );
+ if(xpOrder.getOpenTrunk() != 1){
+ Integer arriveTime = xpSystemSettingClient.getOrderFinishTime().getData();
+ // 添加自动结束行程定时任务job
+ Map<String, ? extends Object> endTripJobMaps =
+ new ImmutableMap.Builder<String, Long>().
+ put("id", xpOrder.getId())
+ .build();
+ QuartzManager.addJob(
+ EndTripJob.class,
+ (EndTripJob.name + xpOrder.getId()).toUpperCase(),
+ TimeJobType.END_TRIP,
+ DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(arriveTime)),
+ endTripJobMaps
+ );
+ // 推送倒计时消息
+ Map<String, Object> params = new HashMap<>();
+ Map<String, Object> content = new HashMap<>();
+ content.put("orderId", xpOrder.getId().toString());
+ content.put("isOpen", 1);
+ params.put("type", PushMessageTypeEnum.OPEN_TRUNK.getDesc());
+ params.put("content", JSONObject.toJSONString(content));
+ params.put("timestamp", new Date().getTime() + "");
+ String message = JSONObject.toJSONString(params);
+ SendMessageDTO sendMessageDTO = new SendMessageDTO();
+ sendMessageDTO.setMessage(message);
+ sendMessageDTO.setAppUserId(String.valueOf(xpOrder.getAppUserId()));
+ xpPushMessageClient.sendStatus(sendMessageDTO);
+ }
break;
}
xpOrder.setAppUserId(null);
@@ -1432,20 +1447,15 @@
TaxiPricingDemoService.PricingConfig config = new TaxiPricingDemoService.PricingConfig();
JSONArray startingFareJsonArray = JSONArray.parseArray(pricing.getStartingFareJson());
- if (pricing.getPricingType() == 1) {
- JSONObject basicPricingJson = JSONObject.parseObject(pricing.getBasicPricingJson());
- config.peaks.add(new TaxiPricingDemoService.PricingRule("高峰期", basicPricingJson.getString("num21").split(" - ")[0], basicPricingJson.getString("num21").split(" - ")[1], Double.parseDouble(basicPricingJson.getString("num24")), Double.parseDouble(basicPricingJson.getString("num25")), Double.parseDouble(basicPricingJson.getString("num26")), Double.parseDouble(basicPricingJson.getString("num27")), Double.parseDouble(basicPricingJson.getString("num28"))));
- config.peaks.add(new TaxiPricingDemoService.PricingRule("高峰期", basicPricingJson.getString("num22").split(" - ")[0], basicPricingJson.getString("num22").split(" - ")[1], Double.parseDouble(basicPricingJson.getString("num24")), Double.parseDouble(basicPricingJson.getString("num25")), Double.parseDouble(basicPricingJson.getString("num26")), Double.parseDouble(basicPricingJson.getString("num27")), Double.parseDouble(basicPricingJson.getString("num28"))));
- config.night = new TaxiPricingDemoService.PricingRule("夜间行驶", basicPricingJson.getString("num14").split(" - ")[0], basicPricingJson.getString("num14").split(" - ")[1], Double.parseDouble(basicPricingJson.getString("num16")), Double.parseDouble(basicPricingJson.getString("num17")), Double.parseDouble(basicPricingJson.getString("num18")), Double.parseDouble(basicPricingJson.getString("num19")), Double.parseDouble(basicPricingJson.getString("num20")));
- config.holiday = new TaxiPricingDemoService.PricingRule("节假日", "00:00", "23:59", Double.parseDouble(basicPricingJson.getString("num30")), Double.parseDouble(basicPricingJson.getString("num31")), Double.parseDouble(basicPricingJson.getString("num32")), Double.parseDouble(basicPricingJson.getString("num33")), Double.parseDouble(basicPricingJson.getString("num34")));
- // --- 远途加价区间配置 (关键修改) ---
- // 1. 超过 num1(12) 不足 num2(20), 加收 num3(1.2)
- config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(Double.parseDouble(basicPricingJson.getString("num6")), Double.parseDouble(basicPricingJson.getString("num7")), Double.parseDouble(basicPricingJson.getString("num8"))));
- // 2. 超过 num4(20) 不足 num5(35), 加收 num6(2.0)
- config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(Double.parseDouble(basicPricingJson.getString("num9")), Double.parseDouble(basicPricingJson.getString("num10")), Double.parseDouble(basicPricingJson.getString("num11"))));
- // 3. 超过 num7(35) 以后, 加收 num8(3.5) -> numEnd 传个极大值
- config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(Double.parseDouble(basicPricingJson.getString("num12")), 999999, Double.parseDouble(basicPricingJson.getString("num13"))));
- }
+
+ LocalDateTime boardingTime = order.getBoardingTime();
+ Date date = DateUtils.localDateTimeToDate(boardingTime);
+
+
+ double paramNum4 =0.0;
+ double paramNum5 =0.0;
+
+
for (int i = 0; i < startingFareJsonArray.size(); i++) {
com.alibaba.fastjson.JSONObject jsonObject = startingFareJsonArray.getJSONObject(i);
String num1 = jsonObject.getString("num1");
@@ -1456,10 +1466,50 @@
String num6 = jsonObject.getString("num6");
String num7 = jsonObject.getString("num7");
config.normals.add(new TaxiPricingDemoService.PricingRule("普通时段", num1, num2, Double.parseDouble(num3), Double.parseDouble(num4), Double.parseDouble(num5), Double.parseDouble(num6), Double.parseDouble(num7)));
+ // 判断当前是那个时段
+
+ Calendar calendarStart = Calendar.getInstance();
+ calendarStart.setTime(date);
+ calendarStart.set(Calendar.HOUR_OF_DAY, Integer.valueOf(jsonObject.getString("num1").split(":")[0]));
+ calendarStart.set(Calendar.MINUTE, Integer.valueOf(jsonObject.getString("num1").split(":")[1]));
+
+ Calendar calendarEnd = Calendar.getInstance();
+ calendarEnd.setTime(date);
+ calendarEnd.set(Calendar.HOUR_OF_DAY, Integer.valueOf(jsonObject.getString("num2").split(":")[0]));
+ calendarEnd.set(Calendar.MINUTE, Integer.valueOf(jsonObject.getString("num2").split(":")[1]));
+ // 找到符合条件的直接跳出循环
+ if (date.getTime() > calendarStart.getTimeInMillis() && date.getTime() < calendarEnd.getTimeInMillis()) {
+ paramNum4 = jsonObject.getDouble("num4");
+ paramNum5 = jsonObject.getDouble("num5");
+ break;
+ }
+
+
}
+
+ if (pricing.getPricingType() == 1) {
+ JSONObject basicPricingJson = JSONObject.parseObject(pricing.getBasicPricingJson());
+ config.peaks.add(new TaxiPricingDemoService.PricingRule("高峰期", basicPricingJson.getString("num21").split(" - ")[0], basicPricingJson.getString("num21").split(" - ")[1], Double.parseDouble(basicPricingJson.getString("num23")),paramNum4, paramNum5, Double.parseDouble(basicPricingJson.getString("num24")), Double.parseDouble(basicPricingJson.getString("num25"))));
+ config.peaks.add(new TaxiPricingDemoService.PricingRule("高峰期", basicPricingJson.getString("num22").split(" - ")[0], basicPricingJson.getString("num22").split(" - ")[1], Double.parseDouble(basicPricingJson.getString("num23")), paramNum4, paramNum5, Double.parseDouble(basicPricingJson.getString("num24")), Double.parseDouble(basicPricingJson.getString("num25"))));
+ config.night = new TaxiPricingDemoService.PricingRule("夜间行驶", basicPricingJson.getString("num14").split(" - ")[0], basicPricingJson.getString("num14").split(" - ")[1], Double.parseDouble(basicPricingJson.getString("num15")), paramNum4, paramNum5, Double.parseDouble(basicPricingJson.getString("num16")), Double.parseDouble(basicPricingJson.getString("num17")));
+ config.holiday = new TaxiPricingDemoService.PricingRule("节假日", "00:00", "23:59", Double.parseDouble(basicPricingJson.getString("num29")), paramNum4, paramNum5, Double.parseDouble(basicPricingJson.getString("num30")), Double.parseDouble(basicPricingJson.getString("num31")));
+ // --- 远途加价区间配置 (关键修改) ---
+ // 1. 超过 num1(12) 不足 num2(20), 加收 num3(1.2)
+ config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(Double.parseDouble(basicPricingJson.getString("num6")), Double.parseDouble(basicPricingJson.getString("num7")), Double.parseDouble(basicPricingJson.getString("num8"))));
+ // 2. 超过 num4(20) 不足 num5(35), 加收 num6(2.0)
+ config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(Double.parseDouble(basicPricingJson.getString("num9")), Double.parseDouble(basicPricingJson.getString("num10")), Double.parseDouble(basicPricingJson.getString("num11"))));
+ // 3. 超过 num7(35) 以后, 加收 num8(3.5) -> numEnd 传个极大值
+ config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(Double.parseDouble(basicPricingJson.getString("num12")), 999999, Double.parseDouble(basicPricingJson.getString("num13"))));
+ }
+
+
TaxiPricingDemoService.TaxiPricingService service = new TaxiPricingDemoService.TaxiPricingService();
- Map<String, BigDecimal> bill = service.calculateOrderPrice(DateUtils.toDate(order.getBoardingTime()), order.getMileageKilometers(), gpsPoints, config);
+
+ Integer holidayToday = holidayUtil.isHolidayToday();
+
+
+ Map<String, BigDecimal> bill = service.calculateOrderPrice(DateUtils.toDate(order.getBoardingTime()), order.getMileageKilometers(), gpsPoints, config,holidayToday);
System.err.println("======= 订单计费账单 =======");
bill.forEach((detail, price) -> System.err.println(detail + ": " + price + " 元"));
@@ -1611,21 +1661,54 @@
xpOrderDetails.add(xpOrderDetail);
}
order.setMileageMoney(mileageMoney);
+
+
+ for (FareBreakdownDetailVo fareBreakdownDetailVo : longDistance) {
+ XpOrderDetail xpOrderDetail = new XpOrderDetail();
+ BeanUtils.copyProperties(fareBreakdownDetailVo, xpOrderDetail);
+ xpOrderDetail.setOrderId(orderId);
+ xpOrderDetail.setDetailType(4);
+ xpOrderDetail.setCreateTime(LocalDateTime.now());
+ mileageMoney = mileageMoney.add(fareBreakdownDetailVo.getMoney());
+ xpOrderDetails.add(xpOrderDetail);
+ }
+
+
+ for (FareBreakdownDetailVo fareBreakdownDetailVo : duration) {
+ XpOrderDetail xpOrderDetail = new XpOrderDetail();
+ BeanUtils.copyProperties(fareBreakdownDetailVo, xpOrderDetail);
+ xpOrderDetail.setOrderId(orderId);
+ xpOrderDetail.setDetailType(3);
+ xpOrderDetail.setCreateTime(LocalDateTime.now());
+ mileageMoney = mileageMoney.add(fareBreakdownDetailVo.getMoney());
+ xpOrderDetails.add(xpOrderDetail);
+ }
+
+
+
for (XpOrderDetail xpOrderDetail : xpOrderDetails) {
xpOrderDetailMapper.insert(xpOrderDetail);
}
- for (XpOrderDetail xpOrderDetail : xpOrderDetails) {
- if (xpOrderDetail.getDetailType() == 1) {
- order.setDurationType(xpOrderDetail.getType());
- order.setDurationMoney(xpOrderDetail.getMoney());
- order.setDuration(Double.parseDouble(xpOrderDetail.getDuration() + ""));
- } else {
- order.setLongDistanceType(order.getDurationType());
- order.setLongDistance(xpOrderDetail.getMileage().doubleValue());
- order.setLongDistancemoney(xpOrderDetail.getMoney());
- }
+ for (FareBreakdownDetailVo fareBreakdownDetailVo : duration) {
+ if(order.getDurationMoney()==null){
+ order.setDurationMoney(BigDecimal.ZERO);
+ }
+ BigDecimal add = order.getDurationMoney().add(fareBreakdownDetailVo.getMoney());
+ order.setDurationMoney(add);
}
+// for (XpOrderDetail xpOrderDetail : xpOrderDetails) {
+// if (xpOrderDetail.getDetailType() == 1) {
+// order.setDurationType(xpOrderDetail.getType());
+// order.setDurationMoney(xpOrderDetail.getMoney());
+//// order.setDuration(Double.parseDouble(xpOrderDetail.getDuration() + ""));
+// } else {
+// order.setLongDistanceType(order.getDurationType());
+// order.setLongDistance(xpOrderDetail.getMileage().doubleValue());
+// order.setLongDistancemoney(xpOrderDetail.getMoney());
+// }
+//
+// }
BigDecimal orderMoney = startMoney.add(mileageMoney).add(order.getDurationMoney() != null ? order.getDurationMoney() : BigDecimal.ZERO)
.add(order.getLongDistancemoney() != null ? order.getLongDistancemoney() : BigDecimal.ZERO)
@@ -2052,6 +2135,7 @@
detail.setTime(xpOrderDetail.getTime());
detail.setMileage(xpOrderDetail.getMileage());
detail.setDuration(xpOrderDetail.getDuration());
+ detail.setMoney(xpOrderDetail.getMoney());
if (xpOrderDetail.getDetailType() == 1) {
start.add(detail);
} else {
--
Gitblit v1.7.1