liujie
5 天以前 6cca8f6b62cff87bde6108f0fddc1822e865a8ef
大屏替换路径
12个文件已添加
11个文件已修改
1007 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OtherFallbackFactory.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OtherClient.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/controller/LargeScreenController.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/controller/TScreenContentController.java 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/mapper/TScreenContentMapper.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/service/TScreenContentService.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/service/impl/TScreenContentServiceImpl.java 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/util/KsolarUtils.java 235 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/vo/EmissionReductionVO.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/vo/EnergyStorageDischargeVO.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/vo/PhotovoltaicAndConsumptionVO.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/vo/PhotovoltaicPowerGenerationVO.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/vo/ScreenStorageConfigVO.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/vo/ScreenTopVO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-jianguan/src/main/resources/mapper/jianguan/TScreenContentMapper.xml 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RegionController.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TScreenContentServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/OtherFallbackFactory.java
@@ -12,6 +12,8 @@
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -104,6 +106,31 @@
            public R<Region> getRegionBuyCode(String code) {
                return R.fail("远程调用根据code查询名称失败:"+throwable.getMessage());
            }
            @Override
            public R<List<TSystemConfiguration>> getTSystemConfiguration() {
                return R.fail("远程调用获取配置失败:"+throwable.getMessage());
            }
            @Override
            public R<BigDecimal> getCarDisCharge() {
                return R.fail("远程调用获取配置失败:"+throwable.getMessage());
            }
            @Override
            public R<BigDecimal> getGreenElectricity(List<Integer> siteIds) {
                return R.fail("远程调用获取配置失败:"+throwable.getMessage());
            }
            @Override
            public R carportData(String parkingPlace) {
                return R.fail("远程调用获取配置失败:"+throwable.getMessage());
            }
            @Override
            public R<HashMap<String, Object>> getCarportData() {
                return R.fail("远程调用获取配置失败:"+throwable.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OtherClient.java
@@ -11,6 +11,8 @@
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -74,4 +76,22 @@
    R<List<TEnterpriseUserApplication>> getTnterPrise();
    @GetMapping("/region/getRegionBuyCode/{code}")
    R<Region> getRegionBuyCode(@PathVariable("code") String code);
    @GetMapping("/region/getTSystemConfiguration")
    R<List<TSystemConfiguration>> getTSystemConfiguration();
    @GetMapping(value = "/region/getCarDisCharge")
    R<BigDecimal> getCarDisCharge();
    @PostMapping(value = "/region/getGreenElectricity")
    R<BigDecimal> getGreenElectricity(@RequestBody List<Integer> siteIds);
    @PostMapping(value = "/region/carportData")
    R carportData(String parkingPlace);
    @GetMapping(value = "/region/getCarportData")
    R<HashMap<String, Object>> getCarportData();
}
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/controller/LargeScreenController.java
@@ -37,33 +37,33 @@
    }
    @SneakyThrows
    @ApiOperation(tags = {"大屏-停车场充电功率曲线图"},value = "停车场充电功率曲线图")
    @GetMapping("/getChargingPower")
    public R<List<LargeChargingPowerVo>> getChargingPower(){
        String sevenDayAgo = LocalDate.now().minusDays(7) + " 00:00:00";
        String oneDayAgo = LocalDate.now().minusDays(1) + " 23:59:59";
        Date oneDayAgoTime = format.parse(oneDayAgo);
        Date sevenDayAgoTime = format.parse(sevenDayAgo);
        ArrayList<LargeChargingPowerVo> largeChargingPowerVos = new ArrayList<>();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        List<UploadRealTimeMonitoringData> rangeTimeData = uploadRealTimeMonitoringDataService.getRangeTimeData(sevenDayAgoTime,oneDayAgoTime );
        for (int count = 7; count > 0; count--) {
            LargeChargingPowerVo largeChargingPowerVo = new LargeChargingPowerVo();
            String time = LocalDate.now().minusDays(count).toString();
            List<UploadRealTimeMonitoringData> list = rangeTimeData.stream().filter(e -> simpleDateFormat.format(e.getCreate_time()).contains(time)).collect(Collectors.toList());
            if(!list.isEmpty()){
                System.out.println(list);
                BigDecimal powerAverage = list.stream().map(UploadRealTimeMonitoringData::getPower).reduce(BigDecimal.ZERO, BigDecimal::add).divide(BigDecimal.valueOf(list.size()), 0, RoundingMode.HALF_UP);
                largeChargingPowerVo.setPower(powerAverage);
            }
            largeChargingPowerVo.setTime(time);
            largeChargingPowerVos.add(largeChargingPowerVo);
        }
        return R.ok(largeChargingPowerVos);
    }
//    @SneakyThrows
//    @ApiOperation(tags = {"大屏-停车场充电功率曲线图"},value = "停车场充电功率曲线图")
//    @GetMapping("/getChargingPower")
//    public R<List<LargeChargingPowerVo>> getChargingPower(){
//        String sevenDayAgo = LocalDate.now().minusDays(7) + " 00:00:00";
//        String oneDayAgo = LocalDate.now().minusDays(1) + " 23:59:59";
//        Date oneDayAgoTime = format.parse(oneDayAgo);
//        Date sevenDayAgoTime = format.parse(sevenDayAgo);
//        ArrayList<LargeChargingPowerVo> largeChargingPowerVos = new ArrayList<>();
//        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
//        List<UploadRealTimeMonitoringData> rangeTimeData = uploadRealTimeMonitoringDataService.getRangeTimeData(sevenDayAgoTime,oneDayAgoTime );
//        for (int count = 7; count > 0; count--) {
//            LargeChargingPowerVo largeChargingPowerVo = new LargeChargingPowerVo();
//            String time = LocalDate.now().minusDays(count).toString();
//
//            List<UploadRealTimeMonitoringData> list = rangeTimeData.stream().filter(e -> simpleDateFormat.format(e.getCreate_time()).contains(time)).collect(Collectors.toList());
//            if(!list.isEmpty()){
//                System.out.println(list);
//                BigDecimal powerAverage = list.stream().map(UploadRealTimeMonitoringData::getPower).reduce(BigDecimal.ZERO, BigDecimal::add).divide(BigDecimal.valueOf(list.size()), 0, RoundingMode.HALF_UP);
//                largeChargingPowerVo.setPower(powerAverage);
//            }
//            largeChargingPowerVo.setTime(time);
//            largeChargingPowerVos.add(largeChargingPowerVo);
//        }
//
//        return R.ok(largeChargingPowerVos);
//    }
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/controller/TScreenContentController.java
New file
@@ -0,0 +1,157 @@
package com.ruoyi.jianguan.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.jianguan.service.TScreenContentService;
import com.ruoyi.jianguan.service.TSystemConfigurationService;
import com.ruoyi.jianguan.util.KsolarUtils;
import com.ruoyi.jianguan.vo.*;
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
import com.ruoyi.other.api.domain.TScreenContent;
import com.ruoyi.other.api.domain.TSystemConfiguration;
import com.ruoyi.other.api.feignClient.OtherClient;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author huliguo
 * @since 2025/5/23
 */
@RestController
@RequestMapping("/t_screen_content")
public class TScreenContentController {
    @Resource
    private TScreenContentService screenContentService;
    @Autowired
    private OtherClient otherClient;
    /**
     * 顶部-累计电量
     */
    @ApiOperation(tags = {"顶部-累计电量"},value = "充电桩数据大屏")
    @GetMapping(value = "/top")
    public AjaxResult<ScreenTopVO> top(@RequestParam("siteIds") List<Integer> siteIds) {
        return AjaxResult.success(screenContentService.top(siteIds));
    }
    /**
     * 光伏发电和消纳  这里的绿电是调后台大屏内容管理的
     */
    @ApiOperation(tags = {"光伏发电和消纳"},value = "充电桩数据大屏")
    @GetMapping(value = "/photovoltaicAndConsumption")
    public AjaxResult<PhotovoltaicAndConsumptionVO> photovoltaicAndConsumption() {
        //需调用接口 获取光伏发电量
        PhotovoltaicAndConsumptionVO vo = new PhotovoltaicAndConsumptionVO();
        vo.setTodayGenerateElectricity(new BigDecimal(KsolarUtils.getTodayEnergy(LocalDateTime.now().toString())));
        vo.setGreenElectricityToday(vo.getTodayGenerateElectricity().multiply(new BigDecimal("0.94")).setScale(2, RoundingMode.HALF_UP));
        return AjaxResult.success(vo);
    }
    /**
     * 累计减排数据
     */
    @ApiOperation(tags = {"减排数据"},value = "充电桩数据大屏")
    @GetMapping(value = "/emissionReduction")
    public AjaxResult<EmissionReductionVO> emissionReduction (@RequestParam("siteIds") List<Integer> siteIds) {
        return AjaxResult.success( screenContentService.emissionReduction(siteIds));
    }
    /**
     * 光伏发电实时情况
     */
    @ApiOperation(tags = {"光伏发电实时情况"},value = "充电桩数据大屏")
    @GetMapping(value = "/photovoltaicPowerGeneration")
    public AjaxResult<PhotovoltaicPowerGenerationVO> photovoltaicPowerGeneration (@RequestParam("siteIds") List<Integer> siteIds) {
        return AjaxResult.success( screenContentService.photovoltaicPowerGeneration(siteIds));
    }
    /**
     * 储能放电情况
     */
    @ApiOperation(tags = {"储能放电情况"},value = "充电桩数据大屏")
    @GetMapping(value = "/energyStorageDischarge")
    public AjaxResult<EnergyStorageDischargeVO> energyStorageDischarge() {
        String electricity = KsolarUtils.getElectricity();
        R<List<TSystemConfiguration>> systemConfiguration = otherClient.getTSystemConfiguration();
        List<TSystemConfiguration> list = systemConfiguration.getData();
//        List<TSystemConfiguration> list = systemConfigurationService.list(new LambdaQueryWrapper<TSystemConfiguration>().in(TSystemConfiguration::getType, 4, 5));
        // 昨日放能
        TSystemConfiguration sysConfig = list.stream().filter(e -> e.getType() == 4).findFirst().orElse(null);
        // 昨日储能
        TSystemConfiguration sysConfig1 = list.stream().filter(e -> e.getType() == 5).findFirst().orElse(null);
        // 总储能
        String s = electricity.split("_")[0];
        // 总放能
        String s1 = electricity.split("_")[1];
        EnergyStorageDischargeVO vo = new EnergyStorageDischargeVO();
        BigDecimal subtract = new BigDecimal(s1).subtract(new BigDecimal(sysConfig.getContent()));
                vo.setTodayDischarge(subtract);
        BigDecimal subtract1 = new BigDecimal(s).subtract(new BigDecimal(sysConfig1.getContent()));
        vo.setTodayStorage(subtract1);
        return AjaxResult.success(vo);
    }
    /**
     * 停车场共享情况及相关数据
     */
    @ApiOperation(tags = {"停车场共享情况及相关数据"},value = "充电桩数据大屏")
    @GetMapping(value = "/screen")
    public AjaxResult<TScreenContent> screen(@RequestParam("siteIds") List<Integer> siteIds) {
        List<TScreenContent> list = screenContentService.list(new LambdaQueryWrapper<TScreenContent>().in(TScreenContent::getSiteId, siteIds));
        TScreenContent tScreenContent = new TScreenContent();
        if(list==null|| list.isEmpty()){
            return AjaxResult.success(tScreenContent);
        }
        BeanUtils.copyProperties(list.get(0),tScreenContent);
        list.remove(0);
        list.forEach(x->{
            tScreenContent.setCarDischarge(tScreenContent.getCarDischarge().add(x.getCarDischarge()));
            tScreenContent.setGreenElectricity(tScreenContent.getGreenElectricity().add(x.getGreenElectricity()));
            tScreenContent.setGreenElectricityToday(tScreenContent.getGreenElectricityToday().add(x.getGreenElectricityToday()));
            tScreenContent.setValueOne(tScreenContent.getValueOne().add(x.getValueOne()));
            tScreenContent.setValueTwo(tScreenContent.getValueTwo().add(x.getValueTwo()));
            tScreenContent.setValueThree(tScreenContent.getValueThree().add(x.getValueThree()));
            if(tScreenContent.getStatisticalDeadline().getTime()<(x.getStatisticalDeadline().getTime())) {
                tScreenContent.setStatisticalDeadline(x.getStatisticalDeadline());
            }
        });
        return AjaxResult.success(tScreenContent);
    }
    @ApiOperation(tags = {"车位数据传输"},value = "充电桩数据大屏")
    @PostMapping(value = "/carportData")
    public AjaxResult<?> carportData(Integer parkingPlace,Integer remainPlace) {
        screenContentService.carportData(parkingPlace,remainPlace);
        return AjaxResult.success();
    }
    @ApiOperation(tags = {"获取车位数据传输"},value = "充电桩数据大屏")
    @GetMapping(value = "/getCarportData")
    public AjaxResult<?> getCarportData() {
        HashMap<String,Object> map = screenContentService.getCarportData();
        return AjaxResult.success(map);
    }
}
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/mapper/TScreenContentMapper.java
New file
@@ -0,0 +1,35 @@
package com.ruoyi.jianguan.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.other.api.domain.TScreenContent;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author huliguo
 * @since 2025/5/23
 */
@Mapper
public interface TScreenContentMapper extends BaseMapper<TScreenContent> {
    BigDecimal getCarDisCharge(@Param("siteIds") List<Integer> siteIds);
    BigDecimal getGreenElectricity(@Param("siteIds") List<Integer> siteIds);
    void carportData(@Param("parkingPlace") Integer parkingPlace, @Param("remainPlace") Integer remainPlace);
    HashMap<String, Object> getCarportData();
}
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/service/TScreenContentService.java
New file
@@ -0,0 +1,35 @@
package com.ruoyi.jianguan.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.jianguan.vo.EmissionReductionVO;
import com.ruoyi.jianguan.vo.PhotovoltaicPowerGenerationVO;
import com.ruoyi.jianguan.vo.ScreenTopVO;
import com.ruoyi.other.api.domain.TScreenContent;
import java.util.HashMap;
import java.util.List;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author huliguo
 * @since 2025/5/23
 */
public interface TScreenContentService extends IService<TScreenContent> {
    EmissionReductionVO emissionReduction(List<Integer> siteIds);
    PhotovoltaicPowerGenerationVO photovoltaicPowerGeneration(List<Integer> siteIds);
    ScreenTopVO top(List<Integer> siteIds);
    void carportData(Integer parkingPlace, Integer remainPlace);
    HashMap<String, Object> getCarportData();
}
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/service/impl/TScreenContentServiceImpl.java
New file
@@ -0,0 +1,169 @@
package com.ruoyi.jianguan.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.jianguan.mapper.TScreenContentMapper;
import com.ruoyi.jianguan.mapper.TSystemConfigurationMapper;
import com.ruoyi.jianguan.service.TScreenContentService;
import com.ruoyi.jianguan.util.KsolarUtils;
import com.ruoyi.jianguan.vo.EmissionReductionVO;
import com.ruoyi.jianguan.vo.PhotovoltaicPowerGenerationVO;
import com.ruoyi.jianguan.vo.ScreenTopVO;
import com.ruoyi.order.api.feignClient.ChargingOrderClient;
import com.ruoyi.other.api.domain.TScreenContent;
import com.ruoyi.other.api.feignClient.OtherClient;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.util.*;
/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author huliguo
 * @since 2025/5/23
 */
@Service
public class TScreenContentServiceImpl extends ServiceImpl<TScreenContentMapper, TScreenContent> implements TScreenContentService {
    @Resource
    private ChargingOrderClient chargingOrderClient;
    @Resource
    private OtherClient otherClient;
    @Override
    public EmissionReductionVO emissionReduction(List<Integer> siteIds) {
        ScreenTopVO top = top(Arrays.asList(25, 26));
        //需调用接口 计算光伏减排
        EmissionReductionVO vo = new EmissionReductionVO();
        //获取总电量 计算累计充电二氧化碳减排量
        BigDecimal charge=top.getCarCharge();
        BigDecimal multiplier = new BigDecimal("0.1404");
        //计算累计充电二氧化碳减排量
        if (charge.compareTo(BigDecimal.ZERO) != 0) {
            // 定义乘数和除数
           // 0.1404
            // 计算:charge × 0.1404 ÷ 1000
            charge = charge
                    .multiply(multiplier)      // 乘以 0.1404
                    .divide(new BigDecimal("1000"),2, RoundingMode.HALF_DOWN); // 除以 1000,保留6位小数,四舍五入
        }
        vo.setCharge(charge);
        //获取累计储能放电量
        String s = KsolarUtils.getElectricity().split("_")[0];
        vo.setEnergyStorage(new BigDecimal(s).multiply(multiplier)      // 乘以 0.1404
                .divide(new BigDecimal("1000"),2, RoundingMode.HALF_DOWN));
        //获取累计发电
        vo.setPhotovoltaic(KsolarUtils.getYearAllEnergy());
        //总数:
        BigDecimal total = vo.getPhotovoltaic().add(vo.getEnergyStorage()).add(vo.getCharge());
        vo.setTotal(total);
        //计算比率
        vo.setPhotovoltaicRate(calculateRatio(vo.getPhotovoltaic(),vo.getTotal()).multiply(new BigDecimal("100")));
        vo.setEnergyStorageRate(calculateRatio(vo.getEnergyStorage(),vo.getTotal()).multiply(new BigDecimal("100")));
        vo.setChargeRate(calculateRatio(vo.getCharge(),vo.getTotal()).multiply(new BigDecimal("100")));
        return vo;
    }
    //百分比计算
    public static BigDecimal calculateRatio(BigDecimal part, BigDecimal total) {
        if (total.compareTo(BigDecimal.ZERO) == 0) {
            throw new ArithmeticException("分母不能为零");
        }
        return part.divide(total, 4, RoundingMode.HALF_UP);
    }
    @Override
    public PhotovoltaicPowerGenerationVO photovoltaicPowerGeneration(List<Integer> siteIds) {
        PhotovoltaicPowerGenerationVO vo = new PhotovoltaicPowerGenerationVO();
        List<LocalDate> dates = new ArrayList<>();
        List<Double> values = new ArrayList<>();
        LocalDate today = LocalDate.now();
        ArrayList<Map<String, Object>> monthEnergy = KsolarUtils.getMonthEnergy(today.minusDays(7).toString().substring(0, 7), today.minusDays(1).toString().substring(0, 7));
        // 生成每天数据
        for (int i = 7; i >= 1; i--) {//升序
            LocalDate day = today.minusDays(i);
            dates.add(day);
            Map<String, Object> stringObjectMap = monthEnergy.stream().filter(e -> e.get("time").toString().contains(day.toString())).findFirst().orElse(null);
            if(stringObjectMap!=null){
                values.add(Double.valueOf(stringObjectMap.get("value").toString()));
            }else {
                values.add(0.0);
            }
        }
        vo.setDates(dates);
        vo.setValues(values);
        return vo;
    }
    @Override
    public ScreenTopVO top(List<Integer> siteIds) {
        ScreenTopVO vo = new ScreenTopVO();
        BigDecimal charge=new BigDecimal("0.00");
        BigDecimal carCharge=new BigDecimal("0.00");
        BigDecimal greenElectricity=new BigDecimal("0.00");
        if (siteIds!=null && !siteIds.isEmpty()){
            //获取充电量
            R<BigDecimal> r = chargingOrderClient.getSumDegreeBySiteIds(Arrays.asList(25,26));
            if (r.getCode()==200){
                charge=r.getData();
            }
            //汽车放电量
            R<BigDecimal> r1 = otherClient.getCarDisCharge();
            if (r1.getCode()==200){
                carCharge=r1.getData();
            }
            //累计绿电消纳电量
            R<BigDecimal> r2 = otherClient.getGreenElectricity(siteIds);
            if (r2.getCode()==200){
                greenElectricity=r2.getData();
            }
        }
        vo.setCarCharge(charge);
        vo.setCarDisCharge(carCharge);
        vo.setGreenElectricity(greenElectricity);
        //计算储能充电量
        String electricity = KsolarUtils.getElectricity();
        vo.setStorageCharge(new BigDecimal( electricity.split("_")[0]));
        vo.setPhotovoltaic(new BigDecimal(KsolarUtils.getAllEnergy(LocalDate.now().toString())));
        vo.setGreenElectricity(vo.getPhotovoltaic().multiply(new BigDecimal("0.94")).setScale(2,  RoundingMode.HALF_UP));
        vo.setStorageDisCharge(new BigDecimal(electricity.split("_")[1]));
        return vo;
    }
    @Override
    public void carportData(Integer parkingPlace, Integer remainPlace) {
        otherClient.carportData(parkingPlace+"_"+remainPlace);
    }
    @Override
    public HashMap<String, Object> getCarportData() {
        R<HashMap<String, Object>> r = otherClient.getCarportData();
        HashMap<String, Object> carportData = r.getData();
        int count = Integer.valueOf(carportData.get("parkingPlace").toString()) - Integer.valueOf(carportData.get("remainPlace").toString());
        carportData.put("useCarport",count);
        return carportData;
    }
}
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/util/KsolarUtils.java
New file
@@ -0,0 +1,235 @@
package com.ruoyi.jianguan.util;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.util.*;
/**
 * 定时任务:储能放电情况 光伏发电情况
 */
@Service
public class KsolarUtils {
    private static String token;
    private static String accessToken;
    private static List<String> stationIds= Arrays.asList("2025060710462417","2025060711331323","2025060715425437","2025060716010425");
    /**
     * 获取今日总发电量
     * @param time
     * @return
     */
    public static Double getTodayEnergy(String time) {
        try {
            HttpRequest get = HttpUtil.createGet("http://111.230.136.62:8092/station/list/earn");
            get.header("Authorization", "Bearer "+token);
            get.form("startDate", time);
            HttpResponse execute = get.execute();
            String body = execute.body();
            JSONObject jsonObject = JSONObject.parseObject(body);
            String code = jsonObject.get("code").toString();
            if(!"200".equals(code)){
                token = token();
                return getTodayEnergy(time);
            }
            Object data  = jsonObject.get("data");
            JSONObject jsonObject1 = JSONObject.parseObject(data.toString());
            Double earn = jsonObject1.getDouble("dayGeneration");
            return earn;
        } catch (Exception e) {
            e.printStackTrace();
            token = token();
            return getTodayEnergy(time);
        }
    }
    public static ArrayList<Map<String, Object>> getMonthEnergy(String time,String time1) {
        ArrayList<Map<String, Object>> list = new ArrayList<>();
        try {
            HttpRequest get = HttpUtil.createGet("http://111.230.136.62:8092/protocol/user/statistic/elec/chart");
            get.header("Authorization", "Bearer "+token);
            get.form("stime", time);
            get.form("attribId", "201");
            HttpResponse execute = get.execute();
            String body = execute.body();
            if(body.contains("code")){
                token = token();
                return getMonthEnergy(time,time1);
            }
            JSONArray jsonArray = JSONArray.parseArray(body);
            for (Object o1 : jsonArray) {
                HashMap<String, Object> stringObjectHashMap = new HashMap<>();
                JSONObject jsonObject = JSONObject.parseObject(o1.toString()) ;
                stringObjectHashMap.put("time", jsonObject.getString("saveTime"));
                stringObjectHashMap.put("value", jsonObject.getString("attribValue"));
                list.add(stringObjectHashMap);
            }
            // 相同月份
            if(!time.equals(time1)){
                list.addAll(getMonthEnergy(time1,time1));
            }
            return list;
        } catch (Exception e) {
            e.printStackTrace();
            token = token();
            return getMonthEnergy(time,time1);
        }
    }
    /**
     * 光伏累计
     * @return
     */
    public static Double getAllEnergy(String time) {
        try {
            HttpRequest get = HttpUtil.createGet("http://111.230.136.62:8092/station/list/earn");
            get.header("Authorization", "Bearer "+token);
            get.form("startDate", time);
            HttpResponse execute = get.execute();
            String body = execute.body();
            JSONObject jsonObject = JSONObject.parseObject(body);
            String code = jsonObject.get("code").toString();
            if(!"200".equals(code)){
                token = token();
                return getAllEnergy(time);
            }
            Object data  = jsonObject.get("data");
            JSONObject jsonObject1 = JSONObject.parseObject(data.toString());
            Double earn = jsonObject1.getDouble("totalGeneration");
            return earn;
        } catch (Exception e) {
            e.printStackTrace();
            token = token();
            return getAllEnergy(time);
        }
    }
    /**
     * 光伏碳减排
     * @return
     */
    public static BigDecimal getYearAllEnergy() {
        Double yearAllEnergy = getYearAllEnergy(stationIds.get(0));
        Double yearAllEnergy1 = getYearAllEnergy(stationIds.get(1));
        Double yearAllEnergy2 = getYearAllEnergy(stationIds.get(2));
        Double yearAllEnergy3 = getYearAllEnergy(stationIds.get(3));
        double v = yearAllEnergy + yearAllEnergy1 + yearAllEnergy2 + yearAllEnergy3;
        BigDecimal divide = new BigDecimal(v).multiply(new BigDecimal("0.1404")).divide(new BigDecimal("1000"), 2, RoundingMode.DOWN);
        return divide;
    }
    private static Double getYearAllEnergy(String stationId) {
        try {
            HttpRequest get = HttpUtil.createGet("http://111.230.136.62:8092/protocol/station/statistic/elec/chart");
            get.header("Authorization", "Bearer "+token);
            get.form("stationId", stationId);
            get.form("attribId", "202");
            get.form("stime",LocalDate.now().getYear()+"" );
            HttpResponse execute = get.execute();
            String body = execute.body();
            JSONArray jsonArray = JSONArray.parseArray(body);
            Object o1 = jsonArray.get(0);
            JSONObject jsonObject = JSONObject.parseObject(o1.toString());
            String code = jsonObject.get("attribValue").toString();
            Double earn = Double.valueOf(code);
            return earn;
        } catch (Exception e) {
            e.printStackTrace();
            token = token();
            return getYearAllEnergy(stationId);
        }
    }
    public static String token() {
        HttpRequest post = HttpUtil.createPost("http://111.230.136.62:8092/authentication/form");
        post.basicAuth("kstar","kstarSecret");
        post.form("username", "环岛光伏");
        post.form("password", "cR8GGwIXMI462A8Dfl9eXg==");
        HttpResponse execute = post.execute();
        String body = execute.body();
        JSONObject jsonObject = JSONObject.parseObject(body);
        String token = jsonObject.getString("token");
        JSONObject jsonObject1 = JSONObject.parseObject(token);
        String access_token = jsonObject1.getString("access_token");
        return  access_token;
    }
    public static String getAccessToken(){
        HttpRequest post = HttpRequest.post("https://www.zsdcloud.cn:8443/openApi/getAccessToken.action?accessId=87bde117-1f29-4371-8d4d-82324d17ddc3");
        HttpResponse execute = post.execute();
        String body = execute.body();
        JSONObject jsonObject = JSONObject.parseObject(body);
        return jsonObject.getString("result");
    }
    /**
     * 消纳数据
     * @return
     */
    public static String getElectricity(){
        String valueTotal = "0";
        String value = "0";
        HttpRequest post = HttpRequest.post("https://www.zsdcloud.cn:8443/openApi/equipment/select.action");
        post.form("token", accessToken);
        post.form("keyCode", "869916072003947");
        post.form("version", "V2");
        HttpResponse execute = post.execute();
        String body = execute.body();
        JSONObject jsonObject = JSONObject.parseObject(body);
        String string = jsonObject.get("statusCode").toString();
        if(!string.equals("200")){
           accessToken =  getAccessToken();
           return getElectricity();
        }
        String string1 = jsonObject.getString("result");
        JSONObject jsonObject1 = JSONObject.parseObject(string1);
        String realInfo = jsonObject1.getString("childList");
        JSONArray jsonArray = JSONArray.parseArray(realInfo);
        for (Object o : jsonArray) {
            JSONObject jsonObject2 = JSONObject.parseObject(o.toString());
            String string2 = jsonObject2.get("valueList").toString();
            JSONArray jsonArray1 = JSONArray.parseArray(string2);
            for (Object o1 : jsonArray1) {
                JSONObject jsonObject3 = JSONObject.parseObject(o1.toString());
                if(jsonObject3.get("Name").toString().equals("系统累计充电量")){
                    valueTotal=  jsonObject3.get("Value").toString();
                }
                if(jsonObject3.get("Name").toString().equals("系统累计放电量")){
                    value=  jsonObject3.get("Value").toString();
                }
            }
        }
        return valueTotal+"_"+value;
    }
    public static void main(String[] args) throws Exception {
        String electricity = getElectricity();
        System.out.println(electricity);
    }
}
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/vo/EmissionReductionVO.java
New file
@@ -0,0 +1,27 @@
package com.ruoyi.jianguan.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class EmissionReductionVO {
    @ApiModelProperty("累计光伏发电二氧化碳减排量(吨)")
    private BigDecimal photovoltaic = new BigDecimal("1.39");
    @ApiModelProperty("累计光伏发电二氧化碳减排量(占比率)")
    private BigDecimal photovoltaicRate ;
    @ApiModelProperty("累计储能二氧化碳减排量(吨)")
    private BigDecimal energyStorage ;
    @ApiModelProperty("累计储能二氧化碳减排量(占比率)")
    private BigDecimal energyStorageRate ;
    @ApiModelProperty("累计充电二氧化碳减排量(吨)")
    private BigDecimal charge;
    @ApiModelProperty("累计充电二氧化碳减排量(占比率)")
    private BigDecimal chargeRate ;
    @ApiModelProperty("总计二氧化碳减排量(吨)")
    private BigDecimal total ;
}
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/vo/EnergyStorageDischargeVO.java
New file
@@ -0,0 +1,18 @@
package com.ruoyi.jianguan.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class EnergyStorageDischargeVO {
    @ApiModelProperty("储能配置")
    private Integer config=115;
    @ApiModelProperty("今日储能")
    private BigDecimal todayStorage;
    @ApiModelProperty("今日放能")
    private BigDecimal todayDischarge;
}
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/vo/PhotovoltaicAndConsumptionVO.java
New file
@@ -0,0 +1,20 @@
package com.ruoyi.jianguan.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class PhotovoltaicAndConsumptionVO {
    @ApiModelProperty("光伏面积")
    private Integer area = 3593;
    @ApiModelProperty("装机容量")
    private BigDecimal capacity = new BigDecimal("759.52");
    @ApiModelProperty("今日已发电")
    private BigDecimal todayGenerateElectricity=new BigDecimal("0");
    @ApiModelProperty("今日绿电消纳值")
    private BigDecimal greenElectricityToday=new BigDecimal("0.00");
}
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/vo/PhotovoltaicPowerGenerationVO.java
New file
@@ -0,0 +1,15 @@
package com.ruoyi.jianguan.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDate;
import java.util.List;
@Data
public class PhotovoltaicPowerGenerationVO {
    @ApiModelProperty("日期")
    private List<LocalDate> dates;
    @ApiModelProperty("数据")
    private List<Double> values;
}
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/vo/ScreenStorageConfigVO.java
New file
@@ -0,0 +1,37 @@
package com.ruoyi.jianguan.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
@Data
public class ScreenStorageConfigVO {
    /**
     * 系统建设日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate systemCreateTime;
    /**
     * 储能放电量 随机增长,每日不超过100度
     */
    private BigDecimal storageDisCharge;
    /**
     * 最后一次更改时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate lastUpdated;
    /**
     * 储能放电情况 今日放能
     */
    private BigDecimal todayDischarge;
    /**
     * 储能放电情况 今日储能
     */
    private BigDecimal todayStorage;
}
ruoyi-service/ruoyi-jianguan/src/main/java/com/ruoyi/jianguan/vo/ScreenTopVO.java
New file
@@ -0,0 +1,24 @@
package com.ruoyi.jianguan.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ScreenTopVO {
    @ApiModelProperty("汽车充电量")
    private BigDecimal carCharge;
    @ApiModelProperty("汽车放电量")
    private BigDecimal carDisCharge;
    @ApiModelProperty("光伏发电量")
    private BigDecimal photovoltaic;
    @ApiModelProperty("光伏用电量")
    private BigDecimal greenElectricity;
    @ApiModelProperty("储能充电量")
    private BigDecimal storageCharge;
    @ApiModelProperty("储能放电量")
    private BigDecimal storageDisCharge;
}
ruoyi-service/ruoyi-jianguan/src/main/resources/mapper/jianguan/TScreenContentMapper.xml
New file
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.jianguan.mapper.TScreenContentMapper">
    <update id="carportData">
        update t_screen_carport
        set
            parking_place = #{parkingPlace},
            remain_place = #{remainPlace}
        where
            id =1
    </update>
    <select id="getCarDisCharge" resultType="java.math.BigDecimal">
        select
            sum(car_discharge)
        FROM t_screen_content
        WHERE
             site_id in
        <foreach item="item" index="index" collection="siteIds" open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>
    <select id="getGreenElectricity" resultType="java.math.BigDecimal">
        select
        sum(green_electricity)
        FROM t_screen_content
        WHERE
        site_id in
        <foreach item="item" index="index" collection="siteIds" open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>
    <select id="getCarportData" resultType="java.util.HashMap">
        select
            parking_place as parkingPlace,
            remain_place as remainPlace
        from
            t_screen_carport where id =1
    </select>
</mapper>
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -2396,9 +2396,12 @@
    /**
     * 充电桩数据大屏  获取站点集合中总的充电量
     */
    @ResponseBody
    @GetMapping("/getSumDegreeBySiteIds")
    public R<BigDecimal> getSumDegreeBySiteIds(@RequestParam("siteIds") List<Integer> SiteIds){
        return R.ok(chargingOrderService.getSumDegreeBySiteIds(SiteIds));
        Double sumDegreeBySiteIds = chargingOrderService.getSumDegreeBySiteIds(SiteIds);
        return R.ok(new BigDecimal(sumDegreeBySiteIds));
    }
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java
@@ -30,6 +30,7 @@
import org.apache.poi.ss.usermodel.Workbook;
import org.omg.CORBA.PRIVATE_MEMBER;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
@@ -59,7 +60,7 @@
    private TVipOrderService vipOrderService;
    @Resource
    private AppUserClient appUserClient;
    @Resource
    @Autowired
    private OtherClient otherClient;
    
    
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
@@ -147,7 +147,7 @@
    List<OrderCountByDate> countOrdersByDate(@Param("startTime")LocalDateTime startTime, @Param("endTime")LocalDateTime endTime,@Param("gunIds")List<Integer> gunIds);
    BigDecimal getSumDegreeBySiteIds(@Param("siteIds") List<Integer> siteIds);
    Double getSumDegreeBySiteIds(@Param("siteIds") List<Integer> siteIds);
    
    
    /**
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
@@ -329,7 +329,7 @@
     */
    R<StatisticsOfBatteryVO> getStatisticsOfBattery();
    BigDecimal getSumDegreeBySiteIds(List<Integer> siteIds);
    Double getSumDegreeBySiteIds(List<Integer> siteIds);
    
    /**
     * 获取启动失败且时间超过1小时的订单
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -4324,9 +4324,10 @@
    }
    
    @Override
    public BigDecimal getSumDegreeBySiteIds(List<Integer> siteIds) {
        return this.baseMapper.getSumDegreeBySiteIds(siteIds);
    public Double getSumDegreeBySiteIds(List<Integer> siteIds) {
        Double sumDegreeBySiteIds = this.baseMapper.getSumDegreeBySiteIds(siteIds);
        return sumDegreeBySiteIds;
        
    }
    
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -1765,15 +1765,7 @@
        ORDER BY DATE(create_time, '%m/%d') ASC
    </select>
    <select id="getSumDegreeBySiteIds" resultType="java.math.BigDecimal">
        select sum(t2.charging_capacity) from t_charging_order  t1 left join  t_charging_order_summary_data t2
                                      on t1.id =t2. charging_order_id where t1.del_flag=0
        and t1.site_id in
        <foreach item="item" index="index" collection="siteIds" open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>
    
    <select id="findFailedStartupOrder" resultType="com.ruoyi.order.api.model.TChargingOrder">
        SELECT
@@ -1826,4 +1818,17 @@
            FROM
                t_charging_order_refund)
    </select>
    <select id="getSumDegreeBySiteIds" resultType="java.lang.Double">
        SELECT IFNULL(SUM(t2.charging_capacity), 0.0) AS sumDegreeBySiteIds
        FROM t_charging_order t1
                 LEFT JOIN t_charging_order_summary_data t2 ON t1.id = t2.charging_order_id
        WHERE t1.del_flag = 0
          <if test="siteIds != null and siteIds.size() > 0">
            AND t1.site_id IN
            <foreach collection="siteIds" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
          </if>
     </select>
</mapper>
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/RegionController.java
@@ -6,13 +6,20 @@
import com.ruoyi.common.security.annotation.Logical;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.other.api.domain.Region;
import com.ruoyi.other.api.domain.TSystemConfiguration;
import com.ruoyi.other.mapper.TScreenContentMapper;
import com.ruoyi.other.service.IRegionService;
import com.ruoyi.other.service.TScreenContentService;
import com.ruoyi.other.service.TSystemConfigurationService;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
/**
@@ -25,6 +32,12 @@
    
    @Resource
    private IRegionService regionService;
    @Resource
    private TSystemConfigurationService tSystemConfigurationService;
    @Resource
    private TScreenContentMapper screenContentMapper;
    
    
    
@@ -50,4 +63,43 @@
        Region list = regionService.getOne(new LambdaQueryWrapper<Region>().eq(Region::getCode, code));
        return R.ok(list);
    }
    @ResponseBody
    @GetMapping("/getTSystemConfiguration")
    public R<List<TSystemConfiguration>> getTSystemConfiguration(){
        List<TSystemConfiguration> list = tSystemConfigurationService.list(new LambdaQueryWrapper<TSystemConfiguration>().in(TSystemConfiguration::getType, 4, 5));
        return R.ok(list);
    }
    @GetMapping(value = "/getCarDisCharge")
    @ResponseBody
    public R<BigDecimal> getCarDisCharge(){
        BigDecimal carDisCharge = screenContentMapper.getCarDisCharge(Arrays.asList(25,26));
        return R.ok(carDisCharge);
    }
    @PostMapping(value = "/getGreenElectricity")
    @ResponseBody
    public R<BigDecimal> getGreenElectricity(@RequestBody List<Integer> siteIds){
        BigDecimal greenElectricity = screenContentMapper.getGreenElectricity(siteIds);
        return R.ok(greenElectricity);
    }
    @PostMapping(value = "/carportData")
    @ResponseBody
    public void carportData(String parkingPlace){
        String[] split = parkingPlace.split("_");
        Integer parkingPlace1 = Integer.parseInt(split[0]);
        Integer remainPlace = Integer.parseInt(split[1]);
        screenContentMapper.carportData(parkingPlace1,remainPlace);
    }
    @GetMapping(value = "/getCarportData")
    @ResponseBody
    public R<HashMap<String, Object>> getCarportData(){
        HashMap<String, Object> carportData = screenContentMapper.getCarportData();
        return R.ok(carportData);
    }
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TScreenContentServiceImpl.java
@@ -47,8 +47,6 @@
    @Resource
    private ChargingOrderClient chargingOrderClient;
    @Resource
    private TSystemConfigurationMapper systemConfigurationMapper;
    @Override
    public EmissionReductionVO emissionReduction(List<Integer> siteIds) {