From e8cd57fc46fa84b0c095f7e93cb348c014d06eb4 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期六, 07 三月 2026 21:00:03 +0800
Subject: [PATCH] 新增管理后台接口,修改小程序流程bug及其他相关功能

---
 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java |  115 +++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 82 insertions(+), 33 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 9dcd7f9..6c98b1e 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
@@ -696,18 +696,50 @@
     public XpOrderHistoryVO getHistoryOrderList(XpHistoryOrderListQuery query, String uid) {
         Page<XpOrderHistoryListVO> page = new Page<>(query.getPageNum(), query.getPageSize());
         List<XpOrderHistoryListVO> list = this.baseMapper.getHistoryOrderList(page, query, Long.parseLong(uid));
-
-
         XpOrderHistoryVO xpOrderHistoryVO = new XpOrderHistoryVO();
+        if(list.isEmpty()){
+            return xpOrderHistoryVO;
+        }
+
+
+        Set<Long> points = list.stream().map(XpOrderHistoryListVO::getStartPointId).collect(Collectors.toSet());
+        points.addAll(list.stream().map(XpOrderHistoryListVO::getEndPointId).collect(Collectors.toSet()));
+
+
+        // 查询 点位信息
+        R<List<XpPoint>> pointInfoVos = xpPointClient.getPointsInfo(points);
+        List<XpPoint> pointList = pointInfoVos.getData();
         xpOrderHistoryVO.setTotal((int) page.getTotal());
 
         // 根据time分组
-        Map<String, List<XpOrderHistoryListVO>> map = list.stream().collect(Collectors.groupingBy(XpOrderHistoryListVO::getOrderTime));
+        Map<String, List<XpOrderHistoryListVO>> map = list.stream().collect(Collectors.groupingBy(XpOrderHistoryListVO::getTimeStr));
         List<XpOrderHistoryDateVO> dateVOS = map.entrySet().stream().map(entry -> {
             XpOrderHistoryDateVO xpOrderHistoryDateVO = new XpOrderHistoryDateVO();
             xpOrderHistoryDateVO.setDateLabel(entry.getKey());
             List<XpOrderHistoryListVO> value = entry.getValue();
             value = value.stream().sorted(Comparator.comparing(XpOrderHistoryListVO::getTime).reversed()).collect(Collectors.toList());
+
+            for (XpOrderHistoryListVO xpOrderHistoryListVO : value) {
+                XpPoint xpPoint = pointList.stream().filter(e -> e.getId().equals(xpOrderHistoryListVO.getStartPointId())).findFirst().orElse(null);
+                if(xpPoint!=null){
+                    xpOrderHistoryListVO.setStartPointName(xpPoint.getPointName());
+                    xpOrderHistoryListVO.setStartLat(xpPoint.getPointLat());
+                    xpOrderHistoryListVO.setStartLon(xpPoint.getPointLon());
+                    xpOrderHistoryListVO.setXpElectronicFenceAreaId(xpPoint.getElectronicAreaId());
+                    xpOrderHistoryListVO.setStartParkingTimeLimit(xpPoint.getParkingTimeLimit());
+                }
+
+                xpPoint = pointList.stream().filter(e -> e.getId().equals(xpOrderHistoryListVO.getEndPointId())).findFirst().orElse(null);
+                if(xpPoint!=null){
+                    xpOrderHistoryListVO.setEndPointName(xpPoint.getPointName());
+                    xpOrderHistoryListVO.setEndLat(xpPoint.getPointLat());
+                    xpOrderHistoryListVO.setEndLon(xpPoint.getPointLon());
+                    xpOrderHistoryListVO.setXpElectronicFenceAreaId(xpPoint.getElectronicAreaId());
+                    xpOrderHistoryListVO.setEndParkingTimeLimit(xpPoint.getParkingTimeLimit());
+                }
+            }
+
+
             xpOrderHistoryDateVO.setOrders(value);
             return xpOrderHistoryDateVO;
         }).collect(Collectors.toList());
@@ -952,6 +984,7 @@
         order.setStatus(8);
         order.setAppUserId(null);
         order.setTripEnd(LocalDateTime.now());
+        order.setMileageKilometers(80.0);
         baseMapper.updateById(order);
         // 解绑用户与车辆关系
         CancelTaxiPassengerVo cancelTaxiPassengerVo = new CancelTaxiPassengerVo();
@@ -997,10 +1030,10 @@
         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("num234")));
+            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"))));
@@ -1009,9 +1042,8 @@
             // 3. 超过 num7(35) 以后, 加收 num8(3.5) -> numEnd 传个极大值
             config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(Double.parseDouble(basicPricingJson.getString("num12")), 999999, Double.parseDouble(basicPricingJson.getString("num13"))));
         }
-        for (Object o : startingFareJsonArray) {
-            // 转化为jsonObject
-            JSONObject jsonObject = (JSONObject) o;
+        for (int i = 0; i < startingFareJsonArray.size(); i++) {
+            com.alibaba.fastjson.JSONObject jsonObject = startingFareJsonArray.getJSONObject(i);
             String num1 = jsonObject.getString("num1");
             String num2 = jsonObject.getString("num2");
             String num3 = jsonObject.getString("num3");
@@ -1021,7 +1053,6 @@
             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)));
         }
-
 
         TaxiPricingDemoService.TaxiPricingService service = new TaxiPricingDemoService.TaxiPricingService();
         Map<String, BigDecimal> bill = service.calculateOrderPrice(DateUtils.toDate(order.getCreateTime()), order.getMileageKilometers(), gpsPoints, config);
@@ -1091,8 +1122,9 @@
                 } else if (key.contains("节假")) {
                     startDetail.setType(4);
                 }
-                startDetail.setDuration(Double.valueOf(key.split("=")[1]));
-                startDetail.setMileage(new BigDecimal(key.split("&")[1]));
+                String durationAndMileage = key.split("\\|")[2];
+                startDetail.setDuration(Double.valueOf(durationAndMileage.split("&")[0]));
+                startDetail.setMileage(new BigDecimal(durationAndMileage.split("&")[1]));
                 start.add(startDetail);
             }
             // 封装里程费
@@ -1100,8 +1132,8 @@
                 FareBreakdownDetailVo mileageDetail = new FareBreakdownDetailVo();
                 if (key.contains("普通时段")) {
                     mileageDetail.setType(1);
-                    String key1 = "distance普通时段" + key.split("\\|")[1];
-                    String key2 = "普通时段" + key.split("\\|")[1];
+                    String key1 = "distance普通时段|" + key.split("\\|")[1];
+                    String key2 = "普通时段|" + key.split("\\|")[1];
                     BigDecimal distance = bill.get(key1);
                     BigDecimal money = bill.get(key2);
                     mileageDetail.setMileage(distance);
@@ -1109,8 +1141,8 @@
                     mileageDetail.setMoney(money.multiply(BigDecimal.valueOf(priceRate)));
                 } else if (key.contains("夜间行驶")) {
                     mileageDetail.setType(2);
-                    String key1 = "distance夜间行驶" + key.split("\\|")[1];
-                    String key2 = "夜间行驶" + key.split("\\|")[1];
+                    String key1 = "distance夜间行驶|" + key.split("\\|")[1];
+                    String key2 = "夜间行驶|" + key.split("\\|")[1];
                     BigDecimal distance = bill.get(key1);
                     BigDecimal money = bill.get(key2);
                     mileageDetail.setMileage(distance);
@@ -1119,8 +1151,8 @@
                     mileageDetail.setMoney(money.multiply(BigDecimal.valueOf(priceRate)));
                 } else if (key.contains("高峰期")) {
                     mileageDetail.setType(3);
-                    String key1 = "distance高峰期" + key.split("\\|")[1];
-                    String key2 = "高峰期" + key.split("\\|")[1];
+                    String key1 = "distance高峰期|" + key.split("\\|")[1];
+                    String key2 = "高峰期|" + key.split("\\|")[1];
                     BigDecimal distance = bill.get(key1);
                     BigDecimal money = bill.get(key2);
                     mileageDetail.setMileage(distance);
@@ -1129,8 +1161,8 @@
                     mileageDetail.setMoney(money.multiply(BigDecimal.valueOf(priceRate)));
                 } else if (key.contains("节假")) {
                     mileageDetail.setType(4);
-                    String key1 = "distance节假日" + key.split("\\|")[1];
-                    String key2 = "节假日" + key.split("\\|")[1];
+                    String key1 = "distance节假日|" + key.split("\\|")[1];
+                    String key2 = "节假日|" + key.split("\\|")[1];
                     BigDecimal distance = bill.get(key1);
                     BigDecimal money = bill.get(key2);
                     mileageDetail.setMileage(distance);
@@ -1178,16 +1210,19 @@
         for (XpOrderDetail xpOrderDetail : xpOrderDetails) {
             xpOrderDetailMapper.insert(xpOrderDetail);
         }
-        for (FareBreakdownDetailVo fareBreakdownDetailVo : duration) {
-            order.setDurationType(fareBreakdownDetailVo.getType());
-            order.setDurationMoney(fareBreakdownDetailVo.getMoney());
-            order.setDuration(Double.parseDouble(fareBreakdownDetailVo.getDuration() + ""));
+        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 : longDistance) {
-            order.setLongDistanceType(fareBreakdownDetailVo.getType());
-            order.setLongDistance(fareBreakdownDetailVo.getMileage().doubleValue());
-            order.setLongDistancemoney(fareBreakdownDetailVo.getMoney());
-        }
+
         BigDecimal orderMoney = startMoney.add(mileageMoney).add(order.getDurationMoney() != null ? order.getDurationMoney() : BigDecimal.ZERO)
                 .add(order.getLongDistancemoney() != null ? order.getLongDistancemoney() : BigDecimal.ZERO)
                 .add(order.getWaitMoney()!=null?order.getWaitMoney():BigDecimal.ZERO);
@@ -1478,7 +1513,7 @@
             detail.setTime(xpOrderDetail.getTime());
             detail.setMileage(xpOrderDetail.getMileage());
             detail.setDuration(xpOrderDetail.getDuration());
-            if (xpOrderDetail.getType() == 1){
+            if (xpOrderDetail.getDetailType() == 1){
                 start.add(detail);
             }else{
                 mileage.add(detail);
@@ -1490,6 +1525,7 @@
             durationDetail.setType(order.getDurationType());
             durationDetail.setDuration(order.getDuration());
             durationDetail.setMoney(order.getDurationMoney());
+            duration.add(durationDetail);
         }
         List<FareBreakdownDetailVo> longDistance = new ArrayList<>();
 
@@ -1531,6 +1567,7 @@
         // mvp版本不做支付 使用优惠券抵扣为0元订单处理 处理订单状态即可
         XpOrder order = this.getById(dto.getOrderId());
         order.setStatus(9);
+        order.setAppUserId(null);
         baseMapper.updateById(order);
         return R.ok();
     }
@@ -1655,6 +1692,18 @@
         return orderDetailVo;
     }
 
+    @Override
+    public R<String> feeDescription(Long orderId, String uid) {
+        XpOrder order = this.getById(orderId);
+        R<XpPricing> pricingByCityId = xpPricingClient.getPricingByCid(order.getCityId());
+        XpPricing pricing = pricingByCityId.getData();
+        if (pricing == null) {
+            throw new ServiceException("当前城市未配置定价规则", I18nKeyConstant.ORDER_PRICING_NOT_EXISTS);
+        }else{
+            return R.ok(pricing.getPriceRule());
+        }
+    }
+
 
     /**
      * 成功操作下发命令后调用 用于弹出redis队列的获取成功的数据
@@ -1749,8 +1798,8 @@
             }).collect(Collectors.toList());
 
             route.put("polyline", collect);
-            content.put("route", route);
-            jsonObject.put("content", content);
+            content.put("route", route.toJSONString());
+            jsonObject.put("content", content.toJSONString());
             SendMessageDTO messageDTO = new SendMessageDTO();
             messageDTO.setAppUserId(appUserId);
             messageDTO.setMessage(jsonObject.toJSONString());

--
Gitblit v1.7.1