longz
2026-07-29 b08e6c28cdd8bda2fd36597c11bc7213a72678d8
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