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