From 4954fc2c96b5e05bae8c39d5e707a77b7ffdb339 Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期一, 03 八月 2026 16:17:00 +0800
Subject: [PATCH] fix: count franchisee vehicle statistics by order

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java |   21 +++++++++++++++++++--
 1 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
index 24aa7ba..c6b18cc 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -296,8 +296,8 @@
         result.put("goodTags", evaluation.get("goodTags"));
         result.put("badTags", evaluation.get("badTags"));
         result.put("traffic", franchiseeTraffic(orders));
-        result.put("vehicleClass", franchiseeCarGroup(cars, TAppUserCar::getVehicleUse, "未知用途", 5));
-        result.put("vehicleBrand", franchiseeCarGroup(cars, TAppUserCar::getVehicleBrand, "其他", 5));
+        result.put("vehicleClass", franchiseeOrderCarGroup(orders, cars, TAppUserCar::getVehicleUse, "未知用途", 5));
+        result.put("vehicleBrand", franchiseeOrderCarGroup(orders, cars, TAppUserCar::getVehicleBrand, "其他", 5));
         return R.ok(result);
     }
 
@@ -466,6 +466,23 @@
                 .map(entry -> namedCount(entry.getKey(), entry.getValue())).collect(Collectors.toList());
     }
 
+    private List<Map<String, Object>> franchiseeOrderCarGroup(List<TChargingOrder> orders,
+                                                               List<TAppUserCar> cars,
+                                                               java.util.function.Function<TAppUserCar, String> getter,
+                                                               String emptyName,
+                                                               int limit) {
+        Map<Long, TAppUserCar> carsById = cars.stream()
+                .filter(car -> car.getId() != null)
+                .collect(Collectors.toMap(TAppUserCar::getId, car -> car, (left, right) -> left));
+        Map<String, Long> counts = orders.stream().collect(Collectors.groupingBy(order -> {
+            TAppUserCar car = carsById.get(order.getAppUserCarId());
+            String value = car == null ? null : getter.apply(car);
+            return value == null || value.trim().isEmpty() ? emptyName : value;
+        }, Collectors.counting()));
+        return counts.entrySet().stream().sorted(Map.Entry.<String, Long>comparingByValue().reversed()).limit(limit)
+                .map(entry -> namedCount(entry.getKey(), entry.getValue())).collect(Collectors.toList());
+    }
+
     private List<Map<String, Object>> namedCounts(String[] names, long[] values) {
         List<Map<String, Object>> result = new ArrayList<>();
         for (int i = 0; i < names.length; i++) if (values[i] > 0) result.add(namedCount(names[i], values[i]));

--
Gitblit v1.7.1