huliguo
8 天以前 568eac31d05d075075a69285a2c77b2d3afec23e
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TScreenContentServiceImpl.java
@@ -56,7 +56,7 @@
    public EmissionReductionVO emissionReduction(List<Integer> siteIds) {
        //需调用接口 计算光伏减排
        EmissionReductionVO vo = new EmissionReductionVO();
        //获取总电量 计算电量
        //获取总电量 计算累计充电二氧化碳减排量
        BigDecimal charge=new BigDecimal("0.00");
        if (siteIds!=null && !siteIds.isEmpty()){
            R<BigDecimal> r = chargingOrderClient.getSumDegreeBySiteIds(siteIds);
@@ -64,7 +64,7 @@
                charge=r.getData();
            }
        }
        //计算电量占比率
        //计算累计充电二氧化碳减排量
        if (charge.compareTo(BigDecimal.ZERO) != 0) {
            // 定义乘数和除数
            BigDecimal multiplier = new BigDecimal("0.1404"); // 0.1404
@@ -75,7 +75,54 @@
                    .divide(divisor, 2, RoundingMode.HALF_UP); // 除以 1000,保留6位小数,四舍五入
        }
        vo.setCharge(charge);
        //获取累计储能放电量
        TSystemConfiguration sysConfig = systemConfigurationMapper.selectOne(new LambdaQueryWrapper<TSystemConfiguration>()
                .eq(TSystemConfiguration::getType,3));
        //解析
        ScreenStorageConfigVO configVO = JSON.parseObject(sysConfig.getContent(), ScreenStorageConfigVO.class);
        LocalDate today = LocalDate.now();
        // 判断是否等于今天
        if (configVO.getLastUpdated().equals(today)) {
            vo.setEnergyStorage(configVO.getStorageDisCharge());
        }else {
            //判断离今天还有几天
            int count = (int) ChronoUnit.DAYS.between(configVO.getLastUpdated(), today) +1;//包括今天
            BigDecimal storageDisCharge = configVO.getStorageDisCharge();
            // 每天生成一个随机值(不超过100)并累加
            for (int i = 0; i < count; i++) {
                int dailyCharge = ThreadLocalRandom.current().nextInt(0, 101); // 0-100的随机数
                storageDisCharge = storageDisCharge.add(new BigDecimal(dailyCharge));
            }
            // 更新回对象
            configVO.setStorageDisCharge(storageDisCharge);
            configVO.setLastUpdated(today);
            String json = JSON.toJSONString(configVO);
            sysConfig.setContent(json);
            systemConfigurationMapper.updateById(sysConfig);
            vo.setEnergyStorage(storageDisCharge);
        }
        //总数:
        BigDecimal total = vo.getPhotovoltaic().add(vo.getEnergyStorage()).add(vo.getCharge());
        vo.setTotal(total);
        //计算比率
        vo.setPhotovoltaicRate(calculateRatio(vo.getPhotovoltaic(),vo.getTotal()));
        vo.setEnergyStorageRate(calculateRatio(vo.getEnergyStorage(),vo.getTotal()));
        vo.setChargeRate(calculateRatio(vo.getCharge(),vo.getTotal()));
        return vo;
    }
    //百分比计算
    public static BigDecimal calculateRatio(BigDecimal part, BigDecimal total) {
        if (total.compareTo(BigDecimal.ZERO) == 0) {
            throw new ArithmeticException("分母不能为零");
        }
        return part.divide(total, 2, RoundingMode.HALF_UP);
    }
    @Override
@@ -134,8 +181,7 @@
        int days = (int) ChronoUnit.DAYS.between(systemCreateTime, today) +1;//包括今天
        BigDecimal dailyRate = new BigDecimal("100");
        BigDecimal totalCharge = dailyRate.multiply(BigDecimal.valueOf(days))
                .divide(BigDecimal.valueOf(10000), 2, RoundingMode.HALF_UP);
        BigDecimal totalCharge = dailyRate.multiply(BigDecimal.valueOf(days));
        vo.setStorageCharge(totalCharge);
        //获取储能放电量