From da049aed7905da630e5c3da65f811b2f27d996f6 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期四, 20 八月 2026 09:16:39 +0800
Subject: [PATCH] feat: 加盟商看板电站收入占比按电站维度统计,口径与后台/six/circle一致

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java |   50 ++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 40 insertions(+), 10 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 dc8fe97..8c81b73 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
@@ -278,19 +278,49 @@
         result.put("electricityFee", electricity);
         result.put("serviceFee", service);
         result.put("incomeColumn", franchiseeIncomeTrendFromSix(sixChargingDtos));
-        List<Map<String, Object>> incomePie = new ArrayList<>();
-        Map<String, Object> electricityItem = new LinkedHashMap<>();
-        electricityItem.put("name", "充电费");
-        electricityItem.put("value", electricity);
-        incomePie.add(electricityItem);
-        Map<String, Object> serviceItem = new LinkedHashMap<>();
-        serviceItem.put("name", "服务费");
-        serviceItem.put("value", service);
-        incomePie.add(serviceItem);
-        result.put("incomePie", incomePie);
+        // 电站收入占比:口径与后台 /six/circle 一致(近6月结算账单按站点分组,电费+服务费-三方佣金)
+        result.put("incomePie", franchiseeIncomePieBySite(siteIds));
         return R.ok(result);
     }
 
+    /** 加盟商看板"电站收入占比":复用 /six/circle 统计口径,按金额降序返回站点占比列表 */
+    private List<Map<String, Object>> franchiseeIncomePieBySite(List<Integer> siteIds) {
+        List<Map<String, Object>> incomePie = new ArrayList<>();
+        if (siteIds == null || siteIds.isEmpty()) {
+            return incomePie;
+        }
+        List<SixCircleDto> circleDtos = chargingOrderService.circle(siteIds, PreviousSixMonths.get(), false);
+        if (circleDtos == null || circleDtos.isEmpty()) {
+            return incomePie;
+        }
+        // 站点名批量映射,避免逐个远程调用
+        Map<Integer, String> siteNameMap = new HashMap<>();
+        R<List<Site>> siteResult = siteClient.getSiteAll();
+        List<Site> sites = siteResult == null ? null : siteResult.getData();
+        if (sites != null) {
+            for (Site site : sites) {
+                if (site != null && site.getId() != null) {
+                    siteNameMap.put(site.getId(), site.getName());
+                }
+            }
+        }
+        circleDtos.sort((a, b) -> {
+            BigDecimal amountA = a == null || a.getPaymentAmount() == null ? BigDecimal.ZERO : a.getPaymentAmount();
+            BigDecimal amountB = b == null || b.getPaymentAmount() == null ? BigDecimal.ZERO : b.getPaymentAmount();
+            return amountB.compareTo(amountA);
+        });
+        for (SixCircleDto dto : circleDtos) {
+            if (dto == null || dto.getSiteId() == null || dto.getPaymentAmount() == null) {
+                continue;
+            }
+            Map<String, Object> item = new LinkedHashMap<>();
+            item.put("name", siteNameMap.getOrDefault(dto.getSiteId(), "电站" + dto.getSiteId()));
+            item.put("value", dto.getPaymentAmount());
+            incomePie.add(item);
+        }
+        return incomePie;
+    }
+
     @PostMapping("/app/franchisee/user")
     public R<Map<String, Object>> franchiseeUser(@RequestBody(required = false) Map<String, Object> params) {
         Partner partner = franchiseePartner();

--
Gitblit v1.7.1