puzhibing
2026-08-20 da049aed7905da630e5c3da65f811b2f27d996f6
feat: 加盟商看板电站收入占比按电站维度统计,口径与后台/six/circle一致
1个文件已修改
50 ■■■■■ 已修改文件
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();