diff --git a/src/main/java/com/southern/power/grid/entity/DailyChartCollectVO.java b/src/main/java/com/southern/power/grid/entity/DailyChartCollectVO.java index 2d5106c..7fcf2df 100644 --- a/src/main/java/com/southern/power/grid/entity/DailyChartCollectVO.java +++ b/src/main/java/com/southern/power/grid/entity/DailyChartCollectVO.java @@ -30,17 +30,19 @@ public class DailyChartCollectVO { private Integer scheduledUserCount; /** - * K线数组,每一项包含起始值、结束值、最低、最高 + * 单个时间点的总K线指标 */ - private List klineObj; + private KLineSingleVO klineSingle; /** - * 近5/10/20/30日其下各县区23时停电用户数累加/县数量 + * 单个时间点的故障类K线指标 */ - private Integer ma5Obj; - private Integer ma10Obj; - private Integer ma20Obj; - private Integer ma30Obj; + private KLineSingleVO faultKlineSingle; + + /** + * 单个时间点的计划类K线指标 + */ + private KLineSingleVO scheduledKlineSingle; /** * 日累计降雨量 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 38ab76d..9c769ea 100644 --- a/src/main/java/com/southern/power/grid/entity/DailyPowerOutageEventVO.java +++ b/src/main/java/com/southern/power/grid/entity/DailyPowerOutageEventVO.java @@ -34,17 +34,19 @@ public class DailyPowerOutageEventVO { private List scheduledUserCountList; /** - * K线数组,每一项包含起始值、结束值、最低、最高 + * K线图 */ - private List> kline; + private KLineVO userKline; /** - * 近5/10/20/30日其下各县区23时停电用户数累加/县数量 + * 故障K线图 */ - private List ma5; - private List ma10; - private List ma20; - private List ma30; + private KLineVO faultUserKline; + + /** + * 计划K线图 + */ + private KLineVO scheduledUserKline; /** * 日累计降雨量 @@ -82,7 +84,6 @@ public class DailyPowerOutageEventVO { List collectVOList; public void initList() { - kline = new ArrayList<>(); userCounts = new ArrayList<>(); cumulativeRain = new ArrayList<>(); avgRain = new ArrayList<>(); @@ -90,11 +91,14 @@ public class DailyPowerOutageEventVO { maxTemp = new ArrayList<>(); minTemp = new ArrayList<>(); windSpeed = new ArrayList<>(); - ma5 = new ArrayList<>(); - ma10 = new ArrayList<>(); - ma20 = new ArrayList<>(); - ma30 = new ArrayList<>(); faultUserCountList = new ArrayList<>(); scheduledUserCountList = new ArrayList<>(); + userKline = new KLineVO().setKline(new ArrayList<>()).setMa5(new ArrayList<>()).setMa10(new ArrayList<>()) + .setMa20(new ArrayList<>()).setMa30(new ArrayList<>()); + faultUserKline = new KLineVO().setKline(new ArrayList<>()).setMa5(new ArrayList<>()).setMa10(new ArrayList<>()) + .setMa20(new ArrayList<>()).setMa30(new ArrayList<>()); + scheduledUserKline = new KLineVO().setKline(new ArrayList<>()).setMa5(new ArrayList<>()).setMa10(new ArrayList<>()) + .setMa20(new ArrayList<>()).setMa30(new ArrayList<>()); + } } diff --git a/src/main/java/com/southern/power/grid/entity/KLineSingleVO.java b/src/main/java/com/southern/power/grid/entity/KLineSingleVO.java new file mode 100644 index 0000000..8194590 --- /dev/null +++ b/src/main/java/com/southern/power/grid/entity/KLineSingleVO.java @@ -0,0 +1,29 @@ +package com.southern.power.grid.entity; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * 单个时间点的K线指标 + * + * @author: junzhangfm + * @date: 2026/3/25 + **/ +@Data +@Accessors(chain = true) +public class KLineSingleVO { + /** + * K线数组,每一项包含起始值、结束值、最低、最高 + */ + private List klineObj; + + /** + * 近5/10/20/30日其下各县区23时停电用户数累加/县数量 + */ + private Integer ma5Obj; + private Integer ma10Obj; + private Integer ma20Obj; + private Integer ma30Obj; +} diff --git a/src/main/java/com/southern/power/grid/entity/KLineVO.java b/src/main/java/com/southern/power/grid/entity/KLineVO.java new file mode 100644 index 0000000..635bb88 --- /dev/null +++ b/src/main/java/com/southern/power/grid/entity/KLineVO.java @@ -0,0 +1,29 @@ +package com.southern.power.grid.entity; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * K线图实体 + * + * @author: junzhangfm + * @date: 2026/3/25 + **/ +@Data +@Accessors(chain = true) +public class KLineVO { + /** + * K线数组,每一项包含起始值、结束值、最低、最高 + */ + private List> kline; + + /** + * 近5/10/20/30日其下各县区23时停电用户数累加/县数量 + */ + private List ma5; + private List ma10; + private List ma20; + private List ma30; +} 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 20ab310..2dc2376 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 @@ -5,6 +5,7 @@ import com.southern.power.grid.dao.DnerDailyPowerOutageEventMapper; import com.southern.power.grid.entity.DailyChartCollectVO; import com.southern.power.grid.entity.DailyPowerOutageEventVO; 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 lombok.NonNull; @@ -57,9 +58,25 @@ public class DnerDailyPowerOutageEventServiceImpl List collectVOList = new ArrayList<>(); for (int i = 0; i < result.getUserCounts().size(); i++) { collectVOList.add(new DailyChartCollectVO().setUserCount(result.getUserCounts().get(i)) - .setKlineObj(result.getKline().get(i)).setMa5Obj(result.getMa5().get(i)) - .setMa10Obj(result.getMa10().get(i)).setMa20Obj(result.getMa20().get(i)) - .setMa30Obj(result.getMa30().get(i)).setCumulativeRainObj(result.getCumulativeRain().get(i)) + .setKlineSingle(new KLineSingleVO() + .setKlineObj(result.getUserKline().getKline().get(i)) + .setMa5Obj(result.getUserKline().getMa5().get(i)) + .setMa10Obj(result.getUserKline().getMa10().get(i)) + .setMa20Obj(result.getUserKline().getMa20().get(i)) + .setMa30Obj(result.getUserKline().getMa30().get(i))) + .setFaultKlineSingle(new KLineSingleVO() + .setKlineObj(result.getFaultUserKline().getKline().get(i)) + .setMa5Obj(result.getFaultUserKline().getMa5().get(i)) + .setMa10Obj(result.getFaultUserKline().getMa10().get(i)) + .setMa20Obj(result.getFaultUserKline().getMa20().get(i)) + .setMa30Obj(result.getFaultUserKline().getMa30().get(i))) + .setScheduledKlineSingle(new KLineSingleVO() + .setKlineObj(result.getScheduledUserKline().getKline().get(i)) + .setMa5Obj(result.getScheduledUserKline().getMa5().get(i)) + .setMa10Obj(result.getScheduledUserKline().getMa10().get(i)) + .setMa20Obj(result.getScheduledUserKline().getMa20().get(i)) + .setMa30Obj(result.getScheduledUserKline().getMa30().get(i))) + .setCumulativeRainObj(result.getCumulativeRain().get(i)) .setAvgRainObj(result.getAvgRain().get(i)).setAvgTempObj(result.getAvgTemp().get(i)) .setMaxTempObj(result.getMaxTemp().get(i)).setMinTempObj(result.getMinTemp().get(i)) .setWindSpeedObj(result.getWindSpeed().get(i)) @@ -71,18 +88,33 @@ public class DnerDailyPowerOutageEventServiceImpl private static void setDailyData(DnerDailyPowerOutageEvent event, DailyPowerOutageEventVO result, Map dateTimeAndEntityMap) { - List klineE = Arrays.asList(event.getStarUserCount(), event.getEndUserCount(), - event.getMinUserCount(), event.getMaxUserCount()); - result.getKline().add(klineE); result.getCumulativeRain().add(Double.valueOf(event.getDailyPrecipitation())); result.getAvgRain().add(Double.valueOf(event.getHourlyPrecipitation())); result.getAvgTemp().add(Double.valueOf(event.getTemperature())); result.getMaxTemp().add(Double.valueOf(event.getHourlyMaxTemperature())); result.getMinTemp().add(Double.valueOf(event.getHourlyMinTemperature())); - result.getMa5().add(getMa(event, dateTimeAndEntityMap, 5)); - result.getMa10().add(getMa(event, dateTimeAndEntityMap, 10)); - result.getMa20().add(getMa(event, dateTimeAndEntityMap, 20)); - result.getMa30().add(getMa(event, dateTimeAndEntityMap, 30)); + // 总的 + 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.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.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.getWindSpeed().add(Double.valueOf(event.getExtremeWindSpeedHourly())); result.getUserCounts().add(event.getUserCount()); result.getFaultUserCountList().add(event.getFaultUserCount()); @@ -91,16 +123,29 @@ public class DnerDailyPowerOutageEventServiceImpl private static void setZeroData(DailyPowerOutageEventVO result) { List klineE = Arrays.asList(0, 0, 0, 0); - result.getKline().add(klineE); result.getCumulativeRain().add(0.0); result.getAvgRain().add(0.0); result.getAvgTemp().add(0.0); result.getMaxTemp().add(0.0); result.getMinTemp().add(0.0); - result.getMa5().add(0); - result.getMa10().add(0); - result.getMa20().add(0); - result.getMa30().add(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.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.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.getWindSpeed().add(0.0); result.getUserCounts().add(0); result.getFaultUserCountList().add(0); @@ -109,10 +154,29 @@ public class DnerDailyPowerOutageEventServiceImpl private static int getMa(DnerDailyPowerOutageEvent event, Map dateTimeAndEntityMap, - int maNum) { + int maNum, int maType) { int userCount = 0; List maDateList = TimeUtil.getBetweenDates( TimeUtil.getBeforeNumDays(event.getDataTime(), maNum - 1), event.getDataTime()); + if (1 == maType) { // 故障类 + for (String date : maDateList) { + DnerDailyPowerOutageEvent outageEvent = dateTimeAndEntityMap.get(date); + if (!Objects.isNull(outageEvent)) { + userCount += outageEvent.getFaultEndUserCount(); + } + } + return userCount/maNum; + } + if (2 == maType) { // 计划类 + for (String date : maDateList) { + DnerDailyPowerOutageEvent outageEvent = dateTimeAndEntityMap.get(date); + if (!Objects.isNull(outageEvent)) { + userCount += outageEvent.getScheduledEndUserCount(); + } + } + return userCount/maNum; + } + // 总的 for (String date : maDateList) { DnerDailyPowerOutageEvent outageEvent = dateTimeAndEntityMap.get(date); if (!Objects.isNull(outageEvent)) { diff --git a/src/main/resources/mapper/DnerDailyPowerOutageEventMapper.xml b/src/main/resources/mapper/DnerDailyPowerOutageEventMapper.xml index 6a2308d..b733667 100644 --- a/src/main/resources/mapper/DnerDailyPowerOutageEventMapper.xml +++ b/src/main/resources/mapper/DnerDailyPowerOutageEventMapper.xml @@ -7,7 +7,9 @@