From 95bff13881da1c06820ce08e314806bff53d9cff Mon Sep 17 00:00:00 2001 From: junzhangfm Date: Mon, 13 Apr 2026 16:56:34 +0800 Subject: [PATCH] =?UTF-8?q?2026-04-13=E6=8F=90=E4=BA=A4=EF=BC=9A=E5=88=86?= =?UTF-8?q?=E6=97=B6=E5=9B=BE=E5=92=8CK=E7=BA=BF=E5=9B=BE=E7=9A=84Y?= =?UTF-8?q?=E8=BD=B4=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../power/grid/entity/ChartYScaleRuleVO.java | 33 +++++ .../entity/DailyChartYScaleRuleCollectVO.java | 43 +++++++ .../grid/entity/DailyPowerOutageEventVO.java | 12 +- .../HourlyChartYScaleRuleCollectVO.java | 54 +++++++++ .../entity/HourlyPowerOutageEventChartVO.java | 10 ++ .../DnerDailyPowerOutageEventServiceImpl.java | 113 +++++++++++++----- ...DnerHourlyPowerOutageEventServiceImpl.java | 36 ++++++ .../southern/power/grid/utils/ToolUtils.java | 34 ++++++ 8 files changed, 302 insertions(+), 33 deletions(-) create mode 100644 src/main/java/com/southern/power/grid/entity/ChartYScaleRuleVO.java create mode 100644 src/main/java/com/southern/power/grid/entity/DailyChartYScaleRuleCollectVO.java create mode 100644 src/main/java/com/southern/power/grid/entity/HourlyChartYScaleRuleCollectVO.java create mode 100644 src/main/java/com/southern/power/grid/utils/ToolUtils.java diff --git a/src/main/java/com/southern/power/grid/entity/ChartYScaleRuleVO.java b/src/main/java/com/southern/power/grid/entity/ChartYScaleRuleVO.java new file mode 100644 index 0000000..1742ba8 --- /dev/null +++ b/src/main/java/com/southern/power/grid/entity/ChartYScaleRuleVO.java @@ -0,0 +1,33 @@ +package com.southern.power.grid.entity; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 图表Y轴规则 + * + * @Author junzhangfm + * @Date 2026-04-13 + */ +@Data +@Accessors(chain = true) +public class ChartYScaleRuleVO implements Serializable { + private static final long serialVersionUID = 5346512918646769812L; + + /** + * 最小值 + */ + Integer min; + + /** + * 最大值 + */ + Integer max; + + /** + * 刻度 + */ + Double interval; +} diff --git a/src/main/java/com/southern/power/grid/entity/DailyChartYScaleRuleCollectVO.java b/src/main/java/com/southern/power/grid/entity/DailyChartYScaleRuleCollectVO.java new file mode 100644 index 0000000..6234ee9 --- /dev/null +++ b/src/main/java/com/southern/power/grid/entity/DailyChartYScaleRuleCollectVO.java @@ -0,0 +1,43 @@ +package com.southern.power.grid.entity; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 日K图表Y轴规则汇总 + * + * @Author junzhangfm + * @Date 2026-04-13 + */ +@Data +@Accessors(chain = true) +public class DailyChartYScaleRuleCollectVO implements Serializable { + private static final long serialVersionUID = -905304104974547434L; + + /** + * 全部停电 ma规则 + */ + private ChartYScaleRuleVO maRule; + + /** + * 停电影响用户总数 + */ + private ChartYScaleRuleVO userCountRule; + + /** + * 日累计降水量 + */ + private ChartYScaleRuleVO dailyPrecipitationRule; + + /** + * 气温 + */ + private ChartYScaleRuleVO temperatureRule; + + /** + * 日极大风速 + */ + private ChartYScaleRuleVO extremeWindSpeedRule; +} diff --git a/src/main/java/com/southern/power/grid/entity/DailyPowerOutageEventVO.java b/src/main/java/com/southern/power/grid/entity/DailyPowerOutageEventVO.java index 9c769ea..053c3a7 100644 --- a/src/main/java/com/southern/power/grid/entity/DailyPowerOutageEventVO.java +++ b/src/main/java/com/southern/power/grid/entity/DailyPowerOutageEventVO.java @@ -81,7 +81,12 @@ public class DailyPowerOutageEventVO { /** * 汇总集合 */ - List collectVOList; + private List collectVOList; + + /** + * 日K图Y轴规则汇总 + */ + private DailyChartYScaleRuleCollectVO dailyChartYScaleRuleCollect; public void initList() { userCounts = new ArrayList<>(); @@ -99,6 +104,9 @@ public class DailyPowerOutageEventVO { .setMa20(new ArrayList<>()).setMa30(new ArrayList<>()); scheduledUserKline = new KLineVO().setKline(new ArrayList<>()).setMa5(new ArrayList<>()).setMa10(new ArrayList<>()) .setMa20(new ArrayList<>()).setMa30(new ArrayList<>()); - + ChartYScaleRuleVO chartYScaleRuleVO = new ChartYScaleRuleVO().setMin(0).setMax(100).setInterval(10.0); + dailyChartYScaleRuleCollect = new DailyChartYScaleRuleCollectVO().setMaRule(chartYScaleRuleVO) + .setUserCountRule(chartYScaleRuleVO).setDailyPrecipitationRule(chartYScaleRuleVO) + .setTemperatureRule(chartYScaleRuleVO).setExtremeWindSpeedRule(chartYScaleRuleVO); } } diff --git a/src/main/java/com/southern/power/grid/entity/HourlyChartYScaleRuleCollectVO.java b/src/main/java/com/southern/power/grid/entity/HourlyChartYScaleRuleCollectVO.java new file mode 100644 index 0000000..dab31e4 --- /dev/null +++ b/src/main/java/com/southern/power/grid/entity/HourlyChartYScaleRuleCollectVO.java @@ -0,0 +1,54 @@ +package com.southern.power.grid.entity; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 分时图表Y轴规则汇总 + * + * @Author junzhangfm + * @Date 2026-04-13 + */ +@Data +@Accessors(chain = true) +public class HourlyChartYScaleRuleCollectVO implements Serializable { + private static final long serialVersionUID = -6099537585608567152L; + + /** + * 小时故障停电用户数 + */ + private ChartYScaleRuleVO faultUserCountRule; + + /** + * 小时计划停电用户数 + */ + private ChartYScaleRuleVO scheduledUserCountRule; + + /** + * 小时降雨量 + */ + private ChartYScaleRuleVO precRule; + + /** + * 平均气温 + */ + private ChartYScaleRuleVO avgTemRule; + + /** + * 小时最大气温 + */ + private ChartYScaleRuleVO maxTemRule; + + + /** + * 小时最低气温 + */ + private ChartYScaleRuleVO minTemRule; + + /** + * 小时极大风速 + */ + private ChartYScaleRuleVO windRule; +} diff --git a/src/main/java/com/southern/power/grid/entity/HourlyPowerOutageEventChartVO.java b/src/main/java/com/southern/power/grid/entity/HourlyPowerOutageEventChartVO.java index cee617f..ace492a 100644 --- a/src/main/java/com/southern/power/grid/entity/HourlyPowerOutageEventChartVO.java +++ b/src/main/java/com/southern/power/grid/entity/HourlyPowerOutageEventChartVO.java @@ -63,6 +63,11 @@ public class HourlyPowerOutageEventChartVO { */ private List collectVOList; + /** + * Y轴规则汇总 + */ + private HourlyChartYScaleRuleCollectVO hourlyChartYScaleRuleCollect; + public void initList() { powerOutageUserCountList = new ArrayList<>(); faultUserCountList = new ArrayList<>(); @@ -72,5 +77,10 @@ public class HourlyPowerOutageEventChartVO { minTemList = new ArrayList<>(); precList = new ArrayList<>(); windList = new ArrayList<>(); + ChartYScaleRuleVO chartYScaleRuleVO = new ChartYScaleRuleVO().setMin(0).setMax(100).setInterval(10.0); + hourlyChartYScaleRuleCollect = new HourlyChartYScaleRuleCollectVO().setPrecRule(chartYScaleRuleVO) + .setAvgTemRule(chartYScaleRuleVO).setMaxTemRule(chartYScaleRuleVO).setMinTemRule(chartYScaleRuleVO) + .setWindRule(chartYScaleRuleVO).setScheduledUserCountRule(chartYScaleRuleVO) + .setFaultUserCountRule(chartYScaleRuleVO); } } diff --git a/src/main/java/com/southern/power/grid/service/impl/DnerDailyPowerOutageEventServiceImpl.java b/src/main/java/com/southern/power/grid/service/impl/DnerDailyPowerOutageEventServiceImpl.java index 24340d7..c8ee1d3 100644 --- a/src/main/java/com/southern/power/grid/service/impl/DnerDailyPowerOutageEventServiceImpl.java +++ b/src/main/java/com/southern/power/grid/service/impl/DnerDailyPowerOutageEventServiceImpl.java @@ -1,5 +1,6 @@ package com.southern.power.grid.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.southern.power.grid.dao.DnerDailyPowerOutageEventMapper; import com.southern.power.grid.entity.DailyChartCollectVO; @@ -8,6 +9,7 @@ import com.southern.power.grid.entity.DnerDailyPowerOutageEvent; import com.southern.power.grid.entity.KLineSingleVO; import com.southern.power.grid.service.IDnerDailyPowerOutageEventService; import com.southern.power.grid.utils.TimeUtil; +import com.southern.power.grid.utils.ToolUtils; import lombok.NonNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -15,6 +17,7 @@ import org.springframework.stereotype.Service; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * 日K线停电事件 -- service实现类 @@ -43,17 +46,63 @@ public class DnerDailyPowerOutageEventServiceImpl dateTimeList.forEach(e -> { // 遍历开始时间和结束时间的日期 DnerDailyPowerOutageEvent event = dateTimeAndEntityMap.get(e); if (Objects.isNull(event)) { // 数据为空,全部默认为0值 - setZeroData(result); + setZeroData(result, dateTimeAndEntityMap, e); } else { // 数据不为空,正常赋值 setDailyData(event, result, dateTimeAndEntityMap); } }); result.setFullDates(dateTimeList.stream().map( e -> e.replace("-", "/")).collect(Collectors.toList())); // 日期列表 + // 汇总单个节点数据 result.setCollectVOList(getCollectVOList(result)); + // 汇总日K图Y轴规则 + handleYScaleRule(result); return result; } + private static void handleYScaleRule(DailyPowerOutageEventVO result) { + List kLineList = new ArrayList<>(); + result.getUserKline().getKline().forEach(kLineList::addAll); + kLineList.addAll(result.getUserKline().getMa5()); + kLineList.addAll(result.getUserKline().getMa10()); + kLineList.addAll(result.getUserKline().getMa20()); + kLineList.addAll(result.getUserKline().getMa30()); + result.getFaultUserKline().getKline().forEach(kLineList::addAll); + kLineList.addAll(result.getFaultUserKline().getMa5()); + kLineList.addAll(result.getFaultUserKline().getMa10()); + kLineList.addAll(result.getFaultUserKline().getMa20()); + kLineList.addAll(result.getFaultUserKline().getMa30()); + result.getScheduledUserKline().getKline().forEach(kLineList::addAll); + kLineList.addAll(result.getScheduledUserKline().getMa5()); + kLineList.addAll(result.getScheduledUserKline().getMa10()); + kLineList.addAll(result.getScheduledUserKline().getMa20()); + kLineList.addAll(result.getScheduledUserKline().getMa30()); + if (!CollectionUtil.isEmpty(kLineList)) { + result.getDailyChartYScaleRuleCollect().setMaRule(ToolUtils.getRule(kLineList)); + } + List userCountList = new ArrayList<>(); + userCountList.addAll(result.getUserCounts()); + userCountList.addAll(result.getFaultUserCountList()); + userCountList.addAll(result.getScheduledUserCountList()); + if (!CollectionUtil.isEmpty(userCountList)) { + result.getDailyChartYScaleRuleCollect().setUserCountRule(ToolUtils.getRule(userCountList)); + } + if (!CollectionUtil.isEmpty(result.getCumulativeRain())) { + result.getDailyChartYScaleRuleCollect().setDailyPrecipitationRule( + ToolUtils.getRule(result.getCumulativeRain())); + } + List tempList = new ArrayList<>(); + tempList.addAll(result.getAvgTemp()); + tempList.addAll(result.getMaxTemp()); + tempList.addAll(result.getMinTemp()); + if (!CollectionUtil.isEmpty(tempList)) { + result.getDailyChartYScaleRuleCollect().setDailyPrecipitationRule(ToolUtils.getRule(tempList)); + } + if (!CollectionUtil.isEmpty(result.getWindSpeed())) { + result.getDailyChartYScaleRuleCollect().setExtremeWindSpeedRule(ToolUtils.getRule(result.getWindSpeed())); + } + } + private static @NonNull List getCollectVOList(DailyPowerOutageEventVO result) { List collectVOList = new ArrayList<>(); for (int i = 0; i < result.getUserCounts().size(); i++) { @@ -96,32 +145,34 @@ public class DnerDailyPowerOutageEventServiceImpl // 总的 result.getUserKline().getKline().add(Arrays.asList(event.getStarUserCount(), event.getEndUserCount(), event.getMinUserCount(), event.getMaxUserCount())); - result.getUserKline().getMa5().add(getMa(event, dateTimeAndEntityMap, 5, 0)); - result.getUserKline().getMa10().add(getMa(event, dateTimeAndEntityMap, 10, 0)); - result.getUserKline().getMa20().add(getMa(event, dateTimeAndEntityMap, 20, 0)); - result.getUserKline().getMa30().add(getMa(event, dateTimeAndEntityMap, 30, 0)); + result.getUserKline().getMa5().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 5, 0)); + result.getUserKline().getMa10().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 10, 0)); + result.getUserKline().getMa20().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 20, 0)); + result.getUserKline().getMa30().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 30, 0)); // 计划 result.getFaultUserKline().getKline().add(Arrays.asList(event.getFaultStarUserCount(), event.getFaultEndUserCount(), event.getFaultMinUserCount(), event.getFaultMaxUserCount())); - result.getFaultUserKline().getMa5().add(getMa(event, dateTimeAndEntityMap, 5, 1)); - result.getFaultUserKline().getMa10().add(getMa(event, dateTimeAndEntityMap, 10, 1)); - result.getFaultUserKline().getMa20().add(getMa(event, dateTimeAndEntityMap, 20, 1)); - result.getFaultUserKline().getMa30().add(getMa(event, dateTimeAndEntityMap, 30, 1)); + result.getFaultUserKline().getMa5().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 5, 1)); + result.getFaultUserKline().getMa10().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 10, 1)); + result.getFaultUserKline().getMa20().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 20, 1)); + result.getFaultUserKline().getMa30().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 30, 1)); // 故障 result.getScheduledUserKline().getKline().add(Arrays.asList( event.getScheduledStarUserCount(), event.getScheduledEndUserCount(), event.getScheduledMinUserCount(), event.getScheduledMaxUserCount())); - result.getScheduledUserKline().getMa5().add(getMa(event, dateTimeAndEntityMap, 5, 2)); - result.getScheduledUserKline().getMa10().add(getMa(event, dateTimeAndEntityMap, 10, 2)); - result.getScheduledUserKline().getMa20().add(getMa(event, dateTimeAndEntityMap, 20, 2)); - result.getScheduledUserKline().getMa30().add(getMa(event, dateTimeAndEntityMap, 30, 2)); + result.getScheduledUserKline().getMa5().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 5, 2)); + result.getScheduledUserKline().getMa10().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 10, 2)); + result.getScheduledUserKline().getMa20().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 20, 2)); + result.getScheduledUserKline().getMa30().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 30, 2)); result.getWindSpeed().add(Double.valueOf(event.getExtremeWindSpeedHourly())); result.getUserCounts().add(event.getUserCount()); result.getFaultUserCountList().add(event.getFaultUserCount()); result.getScheduledUserCountList().add(event.getScheduledUserCount()); } - private static void setZeroData(DailyPowerOutageEventVO result) { + private static void setZeroData(DailyPowerOutageEventVO result, + Map dateTimeAndEntityMap, + String dataTime) { List klineE = Arrays.asList(0, 0, 0, 0); result.getCumulativeRain().add(0.0); result.getAvgRain().add(0.0); @@ -130,34 +181,34 @@ public class DnerDailyPowerOutageEventServiceImpl result.getMinTemp().add(0.0); // 总的 result.getUserKline().getKline().add(klineE); - result.getUserKline().getMa5().add(0); - result.getUserKline().getMa10().add(0); - result.getUserKline().getMa20().add(0); - result.getUserKline().getMa30().add(0); + result.getUserKline().getMa5().add(getMa(dataTime, dateTimeAndEntityMap, 5, 0)); + result.getUserKline().getMa10().add(getMa(dataTime, dateTimeAndEntityMap, 10, 0)); + result.getUserKline().getMa20().add(getMa(dataTime, dateTimeAndEntityMap, 20, 0)); + result.getUserKline().getMa30().add(getMa(dataTime, dateTimeAndEntityMap, 30, 0)); // 计划 result.getFaultUserKline().getKline().add(klineE); - result.getFaultUserKline().getMa5().add(0); - result.getFaultUserKline().getMa10().add(0); - result.getFaultUserKline().getMa20().add(0); - result.getFaultUserKline().getMa30().add(0); + result.getFaultUserKline().getMa5().add(getMa(dataTime, dateTimeAndEntityMap, 5, 1)); + result.getFaultUserKline().getMa10().add(getMa(dataTime, dateTimeAndEntityMap, 10, 1)); + result.getFaultUserKline().getMa20().add(getMa(dataTime, dateTimeAndEntityMap, 20, 1)); + result.getFaultUserKline().getMa30().add(getMa(dataTime, dateTimeAndEntityMap, 30, 1)); // 故障 result.getScheduledUserKline().getKline().add(klineE); - result.getScheduledUserKline().getMa5().add(0); - result.getScheduledUserKline().getMa10().add(0); - result.getScheduledUserKline().getMa20().add(0); - result.getScheduledUserKline().getMa30().add(0); + result.getScheduledUserKline().getMa5().add(getMa(dataTime, dateTimeAndEntityMap, 5, 2)); + result.getScheduledUserKline().getMa10().add(getMa(dataTime, dateTimeAndEntityMap, 10, 2)); + result.getScheduledUserKline().getMa20().add(getMa(dataTime, dateTimeAndEntityMap, 20, 2)); + result.getScheduledUserKline().getMa30().add(getMa(dataTime, dateTimeAndEntityMap, 30, 2)); result.getWindSpeed().add(0.0); result.getUserCounts().add(0); result.getFaultUserCountList().add(0); result.getScheduledUserCountList().add(0); } - private static int getMa(DnerDailyPowerOutageEvent event, + private static int getMa(String dataTime, Map dateTimeAndEntityMap, int maNum, int maType) { int userCount = 0; List maDateList = TimeUtil.getBetweenDates( - TimeUtil.getBeforeNumDays(event.getDataTime(), maNum - 1), event.getDataTime()); + TimeUtil.getBeforeNumDays(dataTime, maNum - 1), dataTime); if (1 == maType) { // 故障类 for (String date : maDateList) { DnerDailyPowerOutageEvent outageEvent = dateTimeAndEntityMap.get(date); @@ -165,7 +216,7 @@ public class DnerDailyPowerOutageEventServiceImpl userCount += outageEvent.getFaultEndUserCount(); } } - return userCount/maNum; + return (userCount + maNum - 1)/maNum; // 向上取整 } if (2 == maType) { // 计划类 for (String date : maDateList) { @@ -174,7 +225,7 @@ public class DnerDailyPowerOutageEventServiceImpl userCount += outageEvent.getScheduledEndUserCount(); } } - return userCount/maNum; + return (userCount + maNum - 1)/maNum; } // 总的 for (String date : maDateList) { @@ -183,6 +234,6 @@ public class DnerDailyPowerOutageEventServiceImpl userCount += outageEvent.getEndUserCount(); } } - return userCount/maNum; + return (userCount + maNum - 1)/maNum; } } diff --git a/src/main/java/com/southern/power/grid/service/impl/DnerHourlyPowerOutageEventServiceImpl.java b/src/main/java/com/southern/power/grid/service/impl/DnerHourlyPowerOutageEventServiceImpl.java index 2dfbf97..ee8bed2 100644 --- a/src/main/java/com/southern/power/grid/service/impl/DnerHourlyPowerOutageEventServiceImpl.java +++ b/src/main/java/com/southern/power/grid/service/impl/DnerHourlyPowerOutageEventServiceImpl.java @@ -1,5 +1,6 @@ package com.southern.power.grid.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.southern.power.grid.dao.DnerHourlyPowerOutageEventMapper; import com.southern.power.grid.entity.DnerHourlyPowerOutageEvent; @@ -7,6 +8,7 @@ import com.southern.power.grid.entity.HourlyChartCollectVO; import com.southern.power.grid.entity.HourlyPowerOutageEventChartVO; import com.southern.power.grid.service.IDnerHourlyPowerOutageEventService; import com.southern.power.grid.utils.TimeUtil; +import com.southern.power.grid.utils.ToolUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -53,6 +55,7 @@ public class DnerHourlyPowerOutageEventServiceImpl } }); result.setDateList(TimeUtil.generateHourList(startDate, endDate)); // 日期列表 + // 汇总单个节点数据 List collectVOList = new ArrayList<>(); for (int i = 0; i < result.getPowerOutageUserCountList().size(); i++) { collectVOList.add(new HourlyChartCollectVO() @@ -63,9 +66,42 @@ public class DnerHourlyPowerOutageEventServiceImpl .setScheduledUserCount(result.getScheduledUserCountList().get(i))); } result.setCollectVOList(collectVOList); + // 汇总分时图Y轴规则 + handleYScaleRule(result); return result; } + private void handleYScaleRule(HourlyPowerOutageEventChartVO result) { + if (!CollectionUtil.isEmpty(result.getFaultUserCountList())) { + result.getHourlyChartYScaleRuleCollect().setFaultUserCountRule( + ToolUtils.getRule(result.getFaultUserCountList())); + } + if (!CollectionUtil.isEmpty(result.getScheduledUserCountList())) { + result.getHourlyChartYScaleRuleCollect().setScheduledUserCountRule( + ToolUtils.getRule(result.getScheduledUserCountList())); + } + if (!CollectionUtil.isEmpty(result.getPrecList())) { + result.getHourlyChartYScaleRuleCollect().setPrecRule( + ToolUtils.getRule(result.getPrecList())); + } + if (!CollectionUtil.isEmpty(result.getAvgTemList())) { + result.getHourlyChartYScaleRuleCollect().setAvgTemRule( + ToolUtils.getRule(result.getAvgTemList())); + } + if (!CollectionUtil.isEmpty(result.getMaxTemList())) { + result.getHourlyChartYScaleRuleCollect().setMaxTemRule( + ToolUtils.getRule(result.getMaxTemList())); + } + if (!CollectionUtil.isEmpty(result.getMinTemList())) { + result.getHourlyChartYScaleRuleCollect().setMinTemRule( + ToolUtils.getRule(result.getMinTemList())); + } + if (!CollectionUtil.isEmpty(result.getWindList())) { + result.getHourlyChartYScaleRuleCollect().setWindRule( + ToolUtils.getRule(result.getWindList())); + } + } + private static void setHourlyData(HourlyPowerOutageEventChartVO result, DnerHourlyPowerOutageEvent event) { result.getPowerOutageUserCountList().add(event.getUserCount()); // 停电影响用户总数 result.getFaultUserCountList().add(event.getFaultUserCount()); // 故障停电影响用户总数 diff --git a/src/main/java/com/southern/power/grid/utils/ToolUtils.java b/src/main/java/com/southern/power/grid/utils/ToolUtils.java new file mode 100644 index 0000000..9f84a77 --- /dev/null +++ b/src/main/java/com/southern/power/grid/utils/ToolUtils.java @@ -0,0 +1,34 @@ +package com.southern.power.grid.utils; + +import com.southern.power.grid.entity.ChartYScaleRuleVO; + +import java.util.List; + +/** + * 工具类 + * + * @Author junzhangfm + * @Date 2026-04-13 + */ +public class ToolUtils { + public static ChartYScaleRuleVO getRule(List list) { + Number first = list.get(0); + if (first instanceof Integer) { + int min = list.stream().mapToInt(Number::intValue).min().orElse(0); + int max = list.stream().mapToInt(Number::intValue).max().orElse(0); + max = max == 0 ? 100 : max; + double interval = Math.round((double) (max - min) / 10 * 10) / 10.0; + return new ChartYScaleRuleVO().setMin(min).setMax(max).setInterval(interval); + } else if (first instanceof Double) { + double min = list.stream().mapToDouble(Number::doubleValue).min().orElse(0); + int floorMin = (int) Math.floor(min); + double max = list.stream().mapToDouble(Number::doubleValue).max().orElse(0); + int ceilMax = (int) Math.ceil(max); + ceilMax = ceilMax == 0 ? 100 : ceilMax; + double interval = Math.round((double) (ceilMax - floorMin) / 10 * 10) / 10.0; + return new ChartYScaleRuleVO().setMin(floorMin).setMax(ceilMax).setInterval(interval); + } else { + throw new RuntimeException("Only supports the data types of Integer and Double!"); + } + } +}