From 988bbb6fe92380ba992a146ed94df2d8973a4edb Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期四, 10 七月 2025 16:48:47 +0800 Subject: [PATCH] 储能对接 --- ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/EnergyRefreshService.java | 243 +----------------------------------------------- 1 files changed, 8 insertions(+), 235 deletions(-) diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/EnergyRefreshService.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/EnergyRefreshService.java index b462087..d7aa1f6 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/EnergyRefreshService.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/EnergyRefreshService.java @@ -29,248 +29,21 @@ @Resource private TSystemConfigurationMapper systemConfigurationMapper; - // 储能相关参数 - private final BigDecimal storageMaxMorning = new BigDecimal("115"); // 凌晨到8点储能最大值 - private final BigDecimal storageMaxAfternoon = new BigDecimal("115"); // 12点后储能最大值 - private final BigDecimal dischargeMaxMorning = new BigDecimal("90"); // 上午放电最大值 - private final BigDecimal dischargeMaxAfternoon = new BigDecimal("90"); // 下午放电最大值 - private final double minIncrement = 0.5; // 最小增量(储能/放电共用) - private final double maxIncrement = 1.0; // 最大增量(储能/放电共用) - - - // 定时任务方法 - 能量刷新 - @Scheduled(cron = "0 * * * * ?") // 每分钟执行一次(原15分钟改为1分钟) - public synchronized void refreshValue() { - LocalTime now = LocalTime.now(); - // 根据时间段执行不同逻辑 - if (isInStorageMorning(now)) { // 00:00-7:59 储能阶段 - handleStoragePhase(storageMaxMorning, BigDecimal.ZERO); - } else if (isInDischargeMorning(now)) { // 10:00-11:59 上午放电阶段 - handleDischargePhase(dischargeMaxMorning); - } else if (isInStorageAfternoon(now)) { // 12:00-16:59 下午储能阶段 - handleStoragePhase(storageMaxAfternoon, getTodayDischarge()); - } else if (isInDischargeAfternoon(now)) { // 17:00-21:59 下午放电阶段 - handleDischargePhase(dischargeMaxAfternoon); - } - } - - // 储能阶段处理逻辑 - public void handleStoragePhase(BigDecimal maxValue, BigDecimal dischargeValue) { - BigDecimal todayStorage=getTodayStorage();//当前储能值 - BigDecimal availableSpace = maxValue.subtract(todayStorage.subtract(dischargeValue));//115-(储能-放能) 当前可上涨空间 - - // 随机增量0.5—1.0 - BigDecimal increment = randomBigDecimal(minIncrement,maxIncrement); - BigDecimal newStorage; - if (availableSpace.compareTo(increment) >= 0 ) { - //可用空间大于等于当前增量 - newStorage = todayStorage.add(increment) - .setScale(2, RoundingMode.HALF_UP); - }else { - //可用空间不足当前增量 - newStorage = maxValue.add(dischargeValue);//115 + 放能 (如:上午放90,下午就只能充90) - } - if (newStorage.compareTo(todayStorage)==0){ - //新增值等于当前储能值 说明已达到最大值,没必要更新了 - return; - } - updateStorageValue(newStorage); - System.out.printf("储能阶段:当前时间 %s,今日储能:%.2f%n", LocalTime.now(), newStorage); - } - // 放电阶段处理逻辑 - private void handleDischargePhase(BigDecimal maxDischarge) { - BigDecimal currentDischarge = getTodayDischarge();//当前放电量 - BigDecimal todayStorage = getTodayStorage();//储能量 - //今日储能-115,就是耗能(基数),在这个基数上加90 - BigDecimal baseDischarge = todayStorage.subtract(storageMaxAfternoon); - BigDecimal newMaxDischarge = baseDischarge.add(maxDischarge);//上限 基数+90 - - // 随机增量0.5—1.0 - BigDecimal increment = randomBigDecimal(minIncrement,maxIncrement); - BigDecimal newDischarge = currentDischarge.add(increment);//当前值 + 增量 - if (newDischarge.compareTo(newMaxDischarge) >=0) { - //超出 用最大值 - newDischarge = newMaxDischarge; - } - - if (newDischarge.compareTo(currentDischarge)==0){ - //新增值等于当前值,说明已超出,没必要更新了 - return; - } - updateDischargeValue(newDischarge); - System.out.printf("放电阶段:当前时间 %s,今日放电:%.2f%n", LocalTime.now(), newDischarge); - } - - // 重置任务(每天凌晨0点) + // 记录截至昨天的总量(每天凌晨0点) @Scheduled(cron = "0 0 0 * * ?") public void reset() { - // 初始化今日储能和放电为0 - updateStorageValue(BigDecimal.ZERO); - updateDischargeValue(BigDecimal.ZERO); - System.out.println("每日重置完成:今日储能和放电已清零"); - - + String electricity = KsolarUtils.getElectricity(); TSystemConfiguration sysConfig = systemConfigurationMapper.selectOne(new LambdaQueryWrapper<TSystemConfiguration>() - .eq(TSystemConfiguration::getType,4)); - sysConfig.setContent("0"); + .eq(TSystemConfiguration::getType,5)); + sysConfig.setContent(electricity.split("_")[0]); systemConfigurationMapper.updateById(sysConfig); - - } - - /** - * 生成指定范围内的随机 BigDecimal(两位小数) - * @param min 最小值(包含) - * @param max 最大值(包含) - * @return 随机 BigDecimal - */ - private BigDecimal randomBigDecimal(double min, double max) { - // 生成 [0, 1) 随机数 - double randomValue = random.nextDouble(); - // 计算范围内的随机值 - double range = max - min; - double value = min + (randomValue * range); - - // 转换为两位小数的 BigDecimal - return BigDecimal.valueOf(value).setScale(2, RoundingMode.HALF_UP); - } - // 更新今日储能值到数据库 - private void updateStorageValue(BigDecimal value) { - updateConfigField("todayStorage", value); - } - - // 更新今日放电值到数据库(原逻辑保留) - private void updateDischargeValue(BigDecimal value) { - updateConfigField("todayDischarge", value); - } - - // 通用配置更新方法 - private void updateConfigField(String field, BigDecimal value) { - TSystemConfiguration sysConfig = systemConfigurationMapper.selectOne( - new LambdaQueryWrapper<TSystemConfiguration>() - .eq(TSystemConfiguration::getType, 3) - ); - if (sysConfig != null) { - ScreenStorageConfigVO configVO = JSON.parseObject(sysConfig.getContent(), ScreenStorageConfigVO.class); - if ("todayStorage".equals(field)) { - configVO.setTodayStorage(value); - } else { - configVO.setTodayDischarge(value); - } - sysConfig.setContent(JSON.toJSONString(configVO)); - systemConfigurationMapper.updateById(sysConfig); - } - } - // 时间段判断方法 - private boolean isInStorageMorning(LocalTime time) { - return time.isAfter(LocalTime.of(0, 0)) && time.isBefore(LocalTime.of(8, 0)); - } - - private boolean isInDischargeMorning(LocalTime time) { - return time.isAfter(LocalTime.of(10, 0)) && time.isBefore(LocalTime.of(12, 0)); - } - - private boolean isInStorageAfternoon(LocalTime time) { - return time.isAfter(LocalTime.of(12, 0)) && time.isBefore(LocalTime.of(17, 0)); - } - - private boolean isInDischargeAfternoon(LocalTime time) { - return time.isAfter(LocalTime.of(17, 0)) && time.isBefore(LocalTime.of(22, 0)); - } - - public BigDecimal getTodayStorage() { - TSystemConfiguration sysConfig = systemConfigurationMapper.selectOne( - new LambdaQueryWrapper<TSystemConfiguration>() - .eq(TSystemConfiguration::getType, 3) - ); - if (sysConfig != null) { - ScreenStorageConfigVO configVO = JSON.parseObject(sysConfig.getContent(), ScreenStorageConfigVO.class); - return configVO.getTodayStorage(); - } - return BigDecimal.ZERO; - } - - public BigDecimal getTodayDischarge() { - TSystemConfiguration sysConfig = systemConfigurationMapper.selectOne( - new LambdaQueryWrapper<TSystemConfiguration>() - .eq(TSystemConfiguration::getType, 3) - ); - if (sysConfig != null) { - ScreenStorageConfigVO configVO = JSON.parseObject(sysConfig.getContent(), ScreenStorageConfigVO.class); - return configVO.getTodayDischarge(); - } - return BigDecimal.ZERO; - } - - - - - /** - *光伏发电和消纳 - */ -// @Scheduled(cron = "0 */1 * * * ?") // 每分钟点执行 - public void refreshValueOne() { - // 判断时间是否在6:00到8:59 - LocalTime now = LocalTime.now(); -// if (now.isAfter(LocalTime.of(6, 0)) && now.isBefore(LocalTime.of(8, 59))) { -// List<TSystemConfiguration> sysConfigs = systemConfigurationMapper.selectList(new LambdaQueryWrapper<TSystemConfiguration>() -// .in(TSystemConfiguration::getType,4,5)); -// TSystemConfiguration sysConfig = sysConfigs.stream().filter(e -> e.getType() == 4).findFirst().orElse(null); -// -// sysConfig.setContent(new BigDecimal(sysConfig.getContent()).add(new BigDecimal("0.5")).toString()); -// systemConfigurationMapper.updateById(sysConfig); -// -// -// TSystemConfiguration sysConfig1 = sysConfigs.stream().filter(e -> e.getType() == 5).findFirst().orElse(null); -// String string = new BigDecimal(sysConfig1.getContent()).add(new BigDecimal("0.5")).toString(); -// sysConfig1.setContent(string); -// systemConfigurationMapper.updateById(sysConfig1); -// // 在6:00到8:59之间,不执行 -// return; -// } - // 9:00-16:59每分钟增加随机3 到 3.5 - if (now.isAfter(LocalTime.of(6, 0)) && now.isBefore(LocalTime.of(12, 0))) { - List<TSystemConfiguration> sysConfigs = systemConfigurationMapper.selectList(new LambdaQueryWrapper<TSystemConfiguration>() - .in(TSystemConfiguration::getType,4,5)); - - TSystemConfiguration sysConfig = sysConfigs.stream().filter(e -> e.getType() == 4).findFirst().orElse(null); - sysConfig.setContent( new BigDecimal(sysConfig.getContent()).add(new BigDecimal(0.1 + (1 - 0.1) * random.nextDouble()) - .setScale(2, RoundingMode.HALF_UP)).toString()); - systemConfigurationMapper.updateById(sysConfig); - - - TSystemConfiguration sysConfig1 = sysConfigs.stream().filter(e -> e.getType() == 5).findFirst().orElse(null); - String string = new BigDecimal(sysConfig1.getContent()).add(new BigDecimal(0.1 + (1 - 0.1) * random.nextDouble())).toString(); - sysConfig1.setContent(string); - systemConfigurationMapper.updateById(sysConfig1); - return; - } - - //17:00-18:59 每分钟增加0.5 -// if (now.isAfter(LocalTime.of(17, 0)) && now.isBefore(LocalTime.of(18, 59))) { -// List<TSystemConfiguration> sysConfigs = systemConfigurationMapper.selectList(new LambdaQueryWrapper<TSystemConfiguration>() -// .in(TSystemConfiguration::getType,4,5)); -// -// TSystemConfiguration sysConfig = sysConfigs.stream().filter(e -> e.getType() == 4).findFirst().orElse(null); -// -// sysConfig.setContent(new BigDecimal(sysConfig.getContent()).add(new BigDecimal("0.5")).toString()); -// systemConfigurationMapper.updateById(sysConfig); -// -// -// TSystemConfiguration sysConfig1 = sysConfigs.stream().filter(e -> e.getType() == 5).findFirst().orElse(null); -// String string = new BigDecimal(sysConfig1.getContent()).add(new BigDecimal("0.5")).toString(); -// sysConfig1.setContent(string); -// systemConfigurationMapper.updateById(sysConfig1); -// } - } - - - public static void main(String[] args) { - Random random = new Random(); - BigDecimal bigDecimal = new BigDecimal(0.1 + (1 - 0.1) * random.nextDouble()); - System.out.println(bigDecimal); + TSystemConfiguration sysConfig1 = systemConfigurationMapper.selectOne(new LambdaQueryWrapper<TSystemConfiguration>() + .eq(TSystemConfiguration::getType,4)); + sysConfig1.setContent(electricity.split("_")[1]); + systemConfigurationMapper.updateById(sysConfig1); } -- Gitblit v1.7.1