From 3c042a8711a25c555da667bc993fdb58c9c6a26e Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Wed, 12 Apr 2023 13:40:52 +0800 Subject: [PATCH] =?UTF-8?q?#=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operational/main/vo/PhotovoltaicPowerVo.java | 7 +- .../main/service/impl/PhotovoltaicServiceImpl.java | 155 +++++++++------------ 2 files changed, 72 insertions(+), 90 deletions(-) diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/PhotovoltaicPowerVo.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/PhotovoltaicPowerVo.java index f1cd386..905eb00 100644 --- a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/PhotovoltaicPowerVo.java +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/PhotovoltaicPowerVo.java @@ -5,12 +5,17 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +/** + * @author ysj + * @version 4.0.0 + * @date 2023/03/23 16:51:43 + */ @Data @ApiModel(value = "当日机组有功功率") public class PhotovoltaicPowerVo { @ApiModelProperty(value = "小时") - private Integer hour; + private String hour; @ApiModelProperty(value = "有功功率") private String activePower; diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/PhotovoltaicServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/PhotovoltaicServiceImpl.java index 9fa422a..1f30818 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/PhotovoltaicServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/PhotovoltaicServiceImpl.java @@ -3,7 +3,6 @@ package com.hnac.hzims.operational.main.service.impl; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.hnac.hzims.EquipmentConstants; import com.hnac.hzims.equipment.vo.EminfoAndEmParamVo; import com.hnac.hzims.hzimsweather.response.weather.Daily; import com.hnac.hzims.hzimsweather.response.weather.HeWeatherWeatherDailyResponse; @@ -22,7 +21,6 @@ import com.hnac.hzinfo.datasearch.history.OriginalDataQuery; import com.hnac.hzinfo.sdk.core.response.HzPage; import com.hnac.hzinfo.sdk.core.response.Result; import lombok.RequiredArgsConstructor; -import net.sf.jsqlparser.expression.StringValue; import org.apache.commons.collections4.MapUtils; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.tool.api.R; @@ -66,8 +64,6 @@ public class PhotovoltaicServiceImpl implements PhotovoltaicService { private final ISideHustleService sideHustleService; - private final IHomePageService homePageService; - private final IWeatherService weatherService; private final IAnalyseDataService analyseDataService; @@ -296,7 +292,7 @@ public class PhotovoltaicServiceImpl implements PhotovoltaicService { return records.stream().map(record -> { PhotovoltaicPowerVo load = new PhotovoltaicPowerVo(); Date time = DateUtil.parse(record.getTs(), "yyyy-MM-dd HH:mm:ss.s"); - load.setHour(time.getHours()); + load.setHour(DateUtil.format(time,"yyyy-mm-dd HH")); load.setActivePower(Optional.ofNullable(record.getVal()).orElse("0")); return load; }).sorted(Comparator.comparing(PhotovoltaicPowerVo::getHour)).collect(Collectors.toList()); @@ -340,8 +336,8 @@ public class PhotovoltaicServiceImpl implements PhotovoltaicService { */ private float sumValueByTime(String deviceCode, int rideCount, String type) { Calendar calendar = Calendar.getInstance(); - String start = null, end = null; - Integer cycleType = 3; + String start, end; + int cycleType = 3; switch (type) { //年 case "0": @@ -376,6 +372,8 @@ public class PhotovoltaicServiceImpl implements PhotovoltaicService { start = DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATETIME); end = DateUtil.format(new Date(), DateUtil.PATTERN_DATE) + " 00:00:00"; break; + default: + throw new ServiceException("无效查询类型!"); } return analyseDataService.periodTargetFloat(start, end, 5, cycleType, deviceCode, rideCount, HomePageConstant.PV_GENERATION_CAPACITY); } @@ -571,17 +569,16 @@ public class PhotovoltaicServiceImpl implements PhotovoltaicService { */ private List getRecentWeek() { // 日期格式化yyyy-mm-dd - SimpleDateFormat df = new SimpleDateFormat(DateUtil.PATTERN_DATE); List list = new ArrayList<>(); // 开始日期 Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.add(Calendar.DATE, +1); - list.add(df.format(calendar.getTime())); + list.add(DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATE)); // 获取日期之间的月 int i = 0; while (i <= 7) { - list.add(df.format(calendar.getTime())); + list.add(DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATE)); calendar.add(Calendar.DATE, -1); i++; } @@ -693,14 +690,12 @@ public class PhotovoltaicServiceImpl implements PhotovoltaicService { } // 根据月份分组 List powerMonthVos = new ArrayList<>(); - filter.forEach(item -> { - item.forEach((key, value) -> { - PowerMonthVo powerMonthVo = new PowerMonthVo(); - powerMonthVo.setStrMonth(key); - powerMonthVo.setPower(value); - powerMonthVos.add(powerMonthVo); - }); - }); + filter.forEach(item -> item.forEach((key, value) -> { + PowerMonthVo powerMonthVo = new PowerMonthVo(); + powerMonthVo.setStrMonth(key); + powerMonthVo.setPower(value); + powerMonthVos.add(powerMonthVo); + })); Map> months = powerMonthVos.stream().collect(Collectors.groupingBy(PowerMonthVo::getStrMonth)); // 总和所有相同月份的发电量 List powerMonthVoList = months.entrySet().stream().map(entry -> { @@ -765,7 +760,7 @@ public class PhotovoltaicServiceImpl implements PhotovoltaicService { // redis实时数据 List photovoltaics = (List) redisTemplate.opsForValue().get(load_photovoltaic_target_key); if (CollectionUtil.isEmpty(photovoltaics)) { - return new ArrayList(); + return new ArrayList<>(); } // 过滤有效光伏设备 List filters = photovoltaics.stream().filter(photovoltaic -> stations.contains(photovoltaic.getDeptId())).collect(Collectors.toList()); @@ -820,14 +815,12 @@ public class PhotovoltaicServiceImpl implements PhotovoltaicService { } // 根据月份分组 List powerMonthVos = new ArrayList<>(); - filter.forEach(item -> { - item.forEach((key, value) -> { - PowerMonthVo powerMonthVo = new PowerMonthVo(); - powerMonthVo.setStrMonth(key); - powerMonthVo.setPower(value); - powerMonthVos.add(powerMonthVo); - }); - }); + filter.forEach(item -> item.forEach((key, value) -> { + PowerMonthVo powerMonthVo = new PowerMonthVo(); + powerMonthVo.setStrMonth(key); + powerMonthVo.setPower(value); + powerMonthVos.add(powerMonthVo); + })); Map> months = powerMonthVos.stream().collect(Collectors.groupingBy(PowerMonthVo::getStrMonth)); // 总和所有相同月份的发电量 String year = String.valueOf(LocalDate.now().getYear()); @@ -893,16 +886,16 @@ public class PhotovoltaicServiceImpl implements PhotovoltaicService { } subordinate.setWeather(weekWeather.get(station.getCode()).getDaily()); // 区域/站点 设备实时数据 - List reals = deviceReals.stream().filter(photovoltaic -> entry.getValue().stream().map(StationEntity::getRefDept).collect(Collectors.toList()).contains(photovoltaic.getDeptId())).collect(Collectors.toList()); - if (CollectionUtil.isNotEmpty(reals)) { - subordinate.setStationCount(Long.valueOf(entry.getValue().size())); - subordinate.setStationUseCount(reals.stream().filter(device -> HomePageConstant.OFF.equals(device.getState())).map(PhotovoltaicRealVo::getDeptId).distinct().count()); + if (deviceReals != null) { + List reals = deviceReals.stream().filter(photovoltaic -> entry.getValue().stream().map(StationEntity::getRefDept).collect(Collectors.toList()).contains(photovoltaic.getDeptId())).collect(Collectors.toList()); + subordinate.setStationCount((long) entry.getValue().size()); + subordinate.setStationUseCount(reals.stream().filter(device -> device.getState() == 1).map(PhotovoltaicRealVo::getDeptId).distinct().count()); subordinate.setCapacity(reals.stream().mapToDouble(PhotovoltaicRealVo::getCapacity).sum()); subordinate.setLoad(reals.stream().mapToDouble(PhotovoltaicRealVo::getLoad).sum()); } // 区域/站点 设备指标数据 - List targets = deviceTargets.stream().filter(photovoltaic -> entry.getValue().stream().map(StationEntity::getRefDept).collect(Collectors.toList()).contains(photovoltaic.getDeptId())).collect(Collectors.toList()); - if (CollectionUtil.isNotEmpty(targets)) { + if (deviceTargets != null) { + List targets = deviceTargets.stream().filter(photovoltaic -> entry.getValue().stream().map(StationEntity::getRefDept).collect(Collectors.toList()).contains(photovoltaic.getDeptId())).collect(Collectors.toList()); subordinate.setGeneration(targets.stream().mapToDouble(PhotovoltaicTargetVo::getGenerationYear).sum()); } list.add(subordinate); @@ -915,7 +908,7 @@ public class PhotovoltaicServiceImpl implements PhotovoltaicService { Double sumLoad = list.stream().mapToDouble(PhotovoltaicSubordinateVo::getCapacity).sum(); Double sumStationCount = list.stream().mapToDouble(PhotovoltaicSubordinateVo::getStationCount).sum(); // 计算 :集团发电占比 电站利用率 容量利用率 - return list.stream().map(subordinate -> { + return list.stream().peek(subordinate -> { if (Math.abs(sumGeneration) <= 0) { subordinate.setGenerationRate(0.0); } else { @@ -931,7 +924,6 @@ public class PhotovoltaicServiceImpl implements PhotovoltaicService { } else { subordinate.setStationUse(BigDecimal.valueOf(subordinate.getStationUseCount() / sumStationCount * 100L).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue()); } - return subordinate; }).sorted(Comparator.comparing(PhotovoltaicSubordinateVo::getCapacity)).collect(Collectors.toList()); } @@ -1024,7 +1016,7 @@ public class PhotovoltaicServiceImpl implements PhotovoltaicService { subordinate.setNow(nowWeather.get(station.getCode()).getNow()); } // 容量、实时功率、今日发电量 - this.subordinateTargetData(subordinate, entry.getValue().stream().collect(Collectors.toList()), deviceReals, deviceTargets); + this.subordinateTargetData(subordinate, new ArrayList<>(entry.getValue()), deviceReals, deviceTargets); // 当月任务执行情况 this.subordinateTaskMon(subordinate, Collections.singletonList(entry.getKey().getId())); subordinates.add(subordinate); @@ -1171,9 +1163,6 @@ public class PhotovoltaicServiceImpl implements PhotovoltaicService { } List mateReals = reals.stream().filter(o -> o.getDeptId().equals(photovoltaic.getDeptId())).collect(Collectors.toList()); List mateTargets = targets.stream().filter(o -> o.getDeptId().equals(photovoltaic.getDeptId())).collect(Collectors.toList()); - if (CollectionUtil.isEmpty(mateReals) && CollectionUtil.isEmpty(mateTargets)) { - return; - } // 实时数据 : 实时功率、总发电量 if (CollectionUtil.isNotEmpty(mateReals)) { // 设备状态统计 @@ -1240,48 +1229,38 @@ public class PhotovoltaicServiceImpl implements PhotovoltaicService { * @return */ private List periodLoadDay(List stations) { - // FIXME 测试数据 - List hours = getDayHours(); - Random random = new Random(); - return hours.stream().map(hour -> { + // redis实时数据 + List photovoltaics = (List) redisTemplate.opsForValue().get(load_photovoltaic_target_key); + if(CollectionUtil.isEmpty(photovoltaics)){ + return new ArrayList<>(); + } + // 过滤有效光伏设备 + List devices = photovoltaics.stream().filter(photovoltaic -> stations.contains(photovoltaic.getDeptId())).collect(Collectors.toList()); + if(CollectionUtil.isEmpty(devices)){ + return new ArrayList<>(); + } + SimpleDateFormat sdf = new SimpleDateFormat(DateUtil.PATTERN_DATE); + // 开始日期 + Calendar calendar = Calendar.getInstance(); + String end = sdf.format(calendar.getTime()); + calendar.add(Calendar.HOUR_OF_DAY, -calendar.get(Calendar.HOUR_OF_DAY)); + calendar.add(Calendar.MINUTE, -calendar.get(Calendar.MINUTE)); + calendar.add(Calendar.SECOND, -calendar.get(Calendar.SECOND)); + String start = sdf.format(calendar.getTime()); + List list = new ArrayList<>(); + for(PhotovoltaicTargetVo device : devices){ + list.addAll(analyseDataService.periodTargetData(start,end,1,2,device.getDeviceCode(),HomePageConstant.PV_LOAD)); + } + if(CollectionUtil.isEmpty(list)){ + return new ArrayList<>(); + } + return list.stream().collect(Collectors.groupingBy(AnalyseDataTaosVO::getTs)).entrySet().stream().map(entry ->{ PhotovoltaicLoadGenerateVo target = new PhotovoltaicLoadGenerateVo(); - target.setPeriod(hour); - target.setValue((float) (random.nextDouble() * 500)); + LocalDateTime time = LocalDateTime.parse(DateUtil.format(new Date(), entry.getKey()), DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME)); + target.setPeriod(String.valueOf(time.getHour())); + target.setValue((float) entry.getValue().stream().mapToDouble(o-> Double.parseDouble(String.valueOf(o.getVal()))).sum()); return target; - }).sorted(Comparator.comparing(PhotovoltaicLoadGenerateVo::getPeriod)).collect(Collectors.toList()); - - /*// redis实时数据 - List photovoltaics = (List) redisTemplate.opsForValue().get(load_photovoltaic_target_key); - if(CollectionUtil.isEmpty(photovoltaics)){ - return new ArrayList(); - } - // 过滤有效光伏设备 - List devices = photovoltaics.stream().filter(photovoltaic -> stations.contains(photovoltaic.getDeptId())).collect(Collectors.toList()); - if(CollectionUtil.isEmpty(devices)){ - return new ArrayList<>(); - } - SimpleDateFormat sdf = new SimpleDateFormat(DateUtil.PATTERN_DATE); - // 开始日期 - Calendar calendar = Calendar.getInstance(); - String start = sdf.format(calendar.getTime()); - calendar.add(Calendar.HOUR_OF_DAY, -calendar.get(Calendar.HOUR_OF_DAY)); - calendar.add(Calendar.MINUTE, -calendar.get(Calendar.MINUTE)); - calendar.add(Calendar.SECOND, -calendar.get(Calendar.SECOND)); - String end = sdf.format(calendar.getTime()); - List list = new ArrayList<>(); - for(PhotovoltaicTargetVo device : devices){ - list.addAll(analyseDataService.periodTargetData(start,end,1,2,device.getDeviceCode(),HomePageConstant.PHOTOVOLTAIC_LOAD)); - }; - if(CollectionUtil.isEmpty(list)){ - return new ArrayList<>(); - } - return list.stream().collect(Collectors.groupingBy(AnalyseDataTaosVO::getTs)).entrySet().stream().map(entry ->{ - PhotovoltaicLoadGenerateVo target = new PhotovoltaicLoadGenerateVo(); - LocalDateTime time = LocalDateTime.parse(DateUtil.format(new Date(), entry.getKey()), DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME)); - target.setPeriod(String.valueOf(time.getHour())); - target.setValue((float) entry.getValue().stream().mapToDouble(o-> Double.parseDouble(String.valueOf(o.getVal()))).sum()); - return target; - }).collect(Collectors.toList());*/ + }).collect(Collectors.toList()); } /** @@ -1295,7 +1274,7 @@ public class PhotovoltaicServiceImpl implements PhotovoltaicService { // redis实时数据 List photovoltaics = (List) redisTemplate.opsForValue().get(load_photovoltaic_target_key); if (CollectionUtil.isEmpty(photovoltaics)) { - return new ArrayList(); + return new ArrayList<>(); } // 过滤有效光伏设备 List filters = photovoltaics.stream().filter(photovoltaic -> stations.contains(photovoltaic.getDeptId())).collect(Collectors.toList()); @@ -1359,14 +1338,12 @@ public class PhotovoltaicServiceImpl implements PhotovoltaicService { } // 根据月份分组 List powerMonthVos = new ArrayList<>(); - filter.forEach(item -> { - item.forEach((key, value) -> { - PowerMonthVo powerMonthVo = new PowerMonthVo(); - powerMonthVo.setStrMonth(key); - powerMonthVo.setPower(value); - powerMonthVos.add(powerMonthVo); - }); - }); + filter.forEach(item -> item.forEach((key, value) -> { + PowerMonthVo powerMonthVo = new PowerMonthVo(); + powerMonthVo.setStrMonth(key); + powerMonthVo.setPower(value); + powerMonthVos.add(powerMonthVo); + })); Map> months = powerMonthVos.stream().collect(Collectors.groupingBy(PowerMonthVo::getStrMonth)); // 总和所有相同月份的发电量 String year = String.valueOf(LocalDate.now().getYear()); @@ -1488,7 +1465,7 @@ public class PhotovoltaicServiceImpl implements PhotovoltaicService { devices.stream().map(PhotovoltaicDeviceVo::getActivePowerVoList).flatMap(Collection::stream).collect(Collectors.groupingBy(PhotovoltaicPowerVo::getHour)).entrySet().stream().map(entry -> { PhotovoltaicPowerVo load = new PhotovoltaicPowerVo(); load.setHour(entry.getKey()); - load.setActivePower(String.valueOf(entry.getValue().stream().mapToDouble(o -> Double.valueOf(o.getActivePower())).sum())); + load.setActivePower(String.valueOf(entry.getValue().stream().mapToDouble(o -> Double.parseDouble(o.getActivePower())).sum())); return load; }).sorted(Comparator.comparing(PhotovoltaicPowerVo::getHour)).collect(Collectors.toList()) );