From b08e6c28cdd8bda2fd36597c11bc7213a72678d8 Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期三, 29 七月 2026 16:24:17 +0800
Subject: [PATCH] 各类修复

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java |   47 ++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 38 insertions(+), 9 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 54fb61d..47d8d27 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
@@ -1608,11 +1608,11 @@
     @ResponseBody
     @GetMapping(value = "/six/charge")
     @ApiOperation(value = "电站收入分析", tags = {"后台-数据分析-平台收入分析"})
-    public R<List<SixChargingDto>> charge(Integer siteId) {
+    public R<List<SixChargingDto>> charge(Integer siteId, Integer partnerId) {
         Long userId = tokenService.getLoginUser().getUserid();
         SysUser sysUser = sysUserClient.getSysUser(userId).getData();
         boolean partnerView = isPartnerView(sysUser);
-        List<Integer> siteIds = resolvePlatformRevenueSiteIds(userId, sysUser, siteId);
+        List<Integer> siteIds = resolvePlatformRevenueSiteIds(userId, sysUser, siteId, partnerId);
         LocalDate sixBefore = PreviousSixMonths.get();
         //通过siteIds进行sql查询统计
         List<SixChargingDto> chargingDtos = chargingOrderService.charge(sixBefore, siteIds, partnerView);
@@ -1673,11 +1673,11 @@
     @ResponseBody
     @GetMapping(value = "/six/circle")
     @ApiOperation(value = "电站收入占比", tags = {"后台-数据分析-平台收入分析"})
-    public R<List<SixCircleDto>> circle(Integer siteId) {
+    public R<List<SixCircleDto>> circle(Integer siteId, Integer partnerId) {
         Long userId = tokenService.getLoginUser().getUserid();
         SysUser sysUser = sysUserClient.getSysUser(userId).getData();
         boolean partnerView = isPartnerView(sysUser);
-        List<Integer> siteIds = resolvePlatformRevenueSiteIds(userId, sysUser, siteId);
+        List<Integer> siteIds = resolvePlatformRevenueSiteIds(userId, sysUser, siteId, partnerId);
         LocalDate sixBefore = PreviousSixMonths.get();
         List<SixCircleDto> sixCircleDtos = chargingOrderService.circle(siteIds,sixBefore, partnerView);
         for (SixCircleDto sixCircleDto : sixCircleDtos) {
@@ -1760,12 +1760,12 @@
     @ResponseBody
     @GetMapping(value = "/six/total")
     @ApiOperation(value = "底部数据分类", tags = {"后台-数据分析-平台收入分析"})
-    public R<Map<String,Object>> total(Integer siteId) {
+    public R<Map<String,Object>> total(Integer siteId, Integer partnerId) {
         //count近6个月的数据
         Long userId = tokenService.getLoginUser().getUserid();
         SysUser sysUser = sysUserClient.getSysUser(userId).getData();
         boolean partnerView = isPartnerView(sysUser);
-        List<Integer> siteIds = resolvePlatformRevenueSiteIds(userId, sysUser, siteId);
+        List<Integer> siteIds = resolvePlatformRevenueSiteIds(userId, sysUser, siteId, partnerId);
         Map<String,Object>  map = chargingOrderService.countAll(siteIds, partnerView);
         if (map == null) {
             map = new HashMap<String,Object>();
@@ -1793,11 +1793,11 @@
     @ResponseBody
     @GetMapping(value = "/six/pay-type-circle")
     @ApiOperation(value = "收入类型占比", tags = {"后台-数据分析-平台收入分析"})
-    public R<List<SixIncomeCircleDto>> payTypeCircle(Integer siteId) {
+    public R<List<SixIncomeCircleDto>> payTypeCircle(Integer siteId, Integer partnerId) {
         Long userId = tokenService.getLoginUser().getUserid();
         SysUser sysUser = sysUserClient.getSysUser(userId).getData();
         boolean partnerView = isPartnerView(sysUser);
-        List<Integer> siteIds = resolvePlatformRevenueSiteIds(userId, sysUser, siteId);
+        List<Integer> siteIds = resolvePlatformRevenueSiteIds(userId, sysUser, siteId, partnerId);
         LocalDate sixBefore = PreviousSixMonths.get();
         return R.ok(chargingOrderService.payTypeCircle(sixBefore, siteIds, partnerView));
     }
@@ -1810,7 +1810,8 @@
      * 解析平台收入分析页面允许查看的站点范围。
      * 合作商使用授权站点,其他后台账号沿用用户站点列表;传入站点时需做授权校验。
      */
-    private List<Integer> resolvePlatformRevenueSiteIds(Long userId, SysUser sysUser, Integer siteId) {
+    private List<Integer> resolvePlatformRevenueSiteIds(Long userId, SysUser sysUser,
+                                                        Integer siteId, Integer partnerId) {
         List<Integer> siteIds = new ArrayList<>();
         if (sysUser != null && Integer.valueOf(2).equals(sysUser.getRoleType())) {
             Set<Integer> authSiteIds = partnerClient.authSite(sysUser.getObjectId(), SiteMenu.SITE_LIST.getValue()).getData();
@@ -1828,12 +1829,40 @@
         if (siteId != null) {
             return siteIds.contains(siteId) ? Collections.singletonList(siteId) : Collections.singletonList(-1);
         }
+        if (partnerId != null && !siteIds.isEmpty()) {
+            R<List<Site>> siteResult = siteClient.getSiteByIds(siteIds);
+            return filterPlatformRevenueSiteIdsByPartner(siteIds,
+                    siteResult == null ? null : siteResult.getData(), partnerId);
+        }
         if (siteIds.isEmpty()) {
             siteIds.add(-1);
         }
         return siteIds;
     }
 
+    static List<Integer> filterPlatformRevenueSiteIdsByPartner(List<Integer> allowedSiteIds,
+                                                               List<Site> sites,
+                                                               Integer partnerId) {
+        if (partnerId == null) {
+            return allowedSiteIds == null || allowedSiteIds.isEmpty()
+                    ? Collections.singletonList(-1) : new ArrayList<>(allowedSiteIds);
+        }
+        if (allowedSiteIds == null || allowedSiteIds.isEmpty() || sites == null || sites.isEmpty()) {
+            return Collections.singletonList(-1);
+        }
+        Set<Integer> allowed = new HashSet<>(allowedSiteIds);
+        List<Integer> result = sites.stream()
+                .filter(Objects::nonNull)
+                .filter(site -> allowed.contains(site.getId()))
+                // 合作商类型不参与筛选:主合作商或场地方匹配均属于该合作商名下电站。
+                .filter(site -> Objects.equals(site.getPartnerId(), partnerId)
+                        || Objects.equals(site.getVenuePartnerId(), partnerId))
+                .map(Site::getId)
+                .distinct()
+                .collect(Collectors.toList());
+        return result.isEmpty() ? Collections.singletonList(-1) : result;
+    }
+
     
     @RequiresPermissions(value = {"/chargeOrderMonitoring"}, logical = Logical.OR)
     @ResponseBody

--
Gitblit v1.7.1