2026-04-13提交:分时图和K线图的Y轴规则
This commit is contained in:
parent
6d60db333b
commit
95bff13881
@ -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;
|
||||||
|
}
|
||||||
@ -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;
|
||||||
|
}
|
||||||
@ -81,7 +81,12 @@ public class DailyPowerOutageEventVO {
|
|||||||
/**
|
/**
|
||||||
* 汇总集合
|
* 汇总集合
|
||||||
*/
|
*/
|
||||||
List<DailyChartCollectVO> collectVOList;
|
private List<DailyChartCollectVO> collectVOList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日K图Y轴规则汇总
|
||||||
|
*/
|
||||||
|
private DailyChartYScaleRuleCollectVO dailyChartYScaleRuleCollect;
|
||||||
|
|
||||||
public void initList() {
|
public void initList() {
|
||||||
userCounts = new ArrayList<>();
|
userCounts = new ArrayList<>();
|
||||||
@ -99,6 +104,9 @@ public class DailyPowerOutageEventVO {
|
|||||||
.setMa20(new ArrayList<>()).setMa30(new ArrayList<>());
|
.setMa20(new ArrayList<>()).setMa30(new ArrayList<>());
|
||||||
scheduledUserKline = new KLineVO().setKline(new ArrayList<>()).setMa5(new ArrayList<>()).setMa10(new ArrayList<>())
|
scheduledUserKline = new KLineVO().setKline(new ArrayList<>()).setMa5(new ArrayList<>()).setMa10(new ArrayList<>())
|
||||||
.setMa20(new ArrayList<>()).setMa30(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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
@ -63,6 +63,11 @@ public class HourlyPowerOutageEventChartVO {
|
|||||||
*/
|
*/
|
||||||
private List<HourlyChartCollectVO> collectVOList;
|
private List<HourlyChartCollectVO> collectVOList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Y轴规则汇总
|
||||||
|
*/
|
||||||
|
private HourlyChartYScaleRuleCollectVO hourlyChartYScaleRuleCollect;
|
||||||
|
|
||||||
public void initList() {
|
public void initList() {
|
||||||
powerOutageUserCountList = new ArrayList<>();
|
powerOutageUserCountList = new ArrayList<>();
|
||||||
faultUserCountList = new ArrayList<>();
|
faultUserCountList = new ArrayList<>();
|
||||||
@ -72,5 +77,10 @@ public class HourlyPowerOutageEventChartVO {
|
|||||||
minTemList = new ArrayList<>();
|
minTemList = new ArrayList<>();
|
||||||
precList = new ArrayList<>();
|
precList = new ArrayList<>();
|
||||||
windList = 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package com.southern.power.grid.service.impl;
|
package com.southern.power.grid.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.southern.power.grid.dao.DnerDailyPowerOutageEventMapper;
|
import com.southern.power.grid.dao.DnerDailyPowerOutageEventMapper;
|
||||||
import com.southern.power.grid.entity.DailyChartCollectVO;
|
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.entity.KLineSingleVO;
|
||||||
import com.southern.power.grid.service.IDnerDailyPowerOutageEventService;
|
import com.southern.power.grid.service.IDnerDailyPowerOutageEventService;
|
||||||
import com.southern.power.grid.utils.TimeUtil;
|
import com.southern.power.grid.utils.TimeUtil;
|
||||||
|
import com.southern.power.grid.utils.ToolUtils;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -15,6 +17,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 日K线停电事件 -- service实现类
|
* 日K线停电事件 -- service实现类
|
||||||
@ -43,17 +46,63 @@ public class DnerDailyPowerOutageEventServiceImpl
|
|||||||
dateTimeList.forEach(e -> { // 遍历开始时间和结束时间的日期
|
dateTimeList.forEach(e -> { // 遍历开始时间和结束时间的日期
|
||||||
DnerDailyPowerOutageEvent event = dateTimeAndEntityMap.get(e);
|
DnerDailyPowerOutageEvent event = dateTimeAndEntityMap.get(e);
|
||||||
if (Objects.isNull(event)) { // 数据为空,全部默认为0值
|
if (Objects.isNull(event)) { // 数据为空,全部默认为0值
|
||||||
setZeroData(result);
|
setZeroData(result, dateTimeAndEntityMap, e);
|
||||||
} else { // 数据不为空,正常赋值
|
} else { // 数据不为空,正常赋值
|
||||||
setDailyData(event, result, dateTimeAndEntityMap);
|
setDailyData(event, result, dateTimeAndEntityMap);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
result.setFullDates(dateTimeList.stream().map(
|
result.setFullDates(dateTimeList.stream().map(
|
||||||
e -> e.replace("-", "/")).collect(Collectors.toList())); // 日期列表
|
e -> e.replace("-", "/")).collect(Collectors.toList())); // 日期列表
|
||||||
|
// 汇总单个节点数据
|
||||||
result.setCollectVOList(getCollectVOList(result));
|
result.setCollectVOList(getCollectVOList(result));
|
||||||
|
// 汇总日K图Y轴规则
|
||||||
|
handleYScaleRule(result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void handleYScaleRule(DailyPowerOutageEventVO result) {
|
||||||
|
List<Integer> 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<Integer> 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<Double> 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<DailyChartCollectVO> getCollectVOList(DailyPowerOutageEventVO result) {
|
private static @NonNull List<DailyChartCollectVO> getCollectVOList(DailyPowerOutageEventVO result) {
|
||||||
List<DailyChartCollectVO> collectVOList = new ArrayList<>();
|
List<DailyChartCollectVO> collectVOList = new ArrayList<>();
|
||||||
for (int i = 0; i < result.getUserCounts().size(); i++) {
|
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(),
|
result.getUserKline().getKline().add(Arrays.asList(event.getStarUserCount(), event.getEndUserCount(),
|
||||||
event.getMinUserCount(), event.getMaxUserCount()));
|
event.getMinUserCount(), event.getMaxUserCount()));
|
||||||
result.getUserKline().getMa5().add(getMa(event, dateTimeAndEntityMap, 5, 0));
|
result.getUserKline().getMa5().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 5, 0));
|
||||||
result.getUserKline().getMa10().add(getMa(event, dateTimeAndEntityMap, 10, 0));
|
result.getUserKline().getMa10().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 10, 0));
|
||||||
result.getUserKline().getMa20().add(getMa(event, dateTimeAndEntityMap, 20, 0));
|
result.getUserKline().getMa20().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 20, 0));
|
||||||
result.getUserKline().getMa30().add(getMa(event, dateTimeAndEntityMap, 30, 0));
|
result.getUserKline().getMa30().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 30, 0));
|
||||||
// 计划
|
// 计划
|
||||||
result.getFaultUserKline().getKline().add(Arrays.asList(event.getFaultStarUserCount(),
|
result.getFaultUserKline().getKline().add(Arrays.asList(event.getFaultStarUserCount(),
|
||||||
event.getFaultEndUserCount(), event.getFaultMinUserCount(), event.getFaultMaxUserCount()));
|
event.getFaultEndUserCount(), event.getFaultMinUserCount(), event.getFaultMaxUserCount()));
|
||||||
result.getFaultUserKline().getMa5().add(getMa(event, dateTimeAndEntityMap, 5, 1));
|
result.getFaultUserKline().getMa5().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 5, 1));
|
||||||
result.getFaultUserKline().getMa10().add(getMa(event, dateTimeAndEntityMap, 10, 1));
|
result.getFaultUserKline().getMa10().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 10, 1));
|
||||||
result.getFaultUserKline().getMa20().add(getMa(event, dateTimeAndEntityMap, 20, 1));
|
result.getFaultUserKline().getMa20().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 20, 1));
|
||||||
result.getFaultUserKline().getMa30().add(getMa(event, dateTimeAndEntityMap, 30, 1));
|
result.getFaultUserKline().getMa30().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 30, 1));
|
||||||
// 故障
|
// 故障
|
||||||
result.getScheduledUserKline().getKline().add(Arrays.asList(
|
result.getScheduledUserKline().getKline().add(Arrays.asList(
|
||||||
event.getScheduledStarUserCount(), event.getScheduledEndUserCount(),
|
event.getScheduledStarUserCount(), event.getScheduledEndUserCount(),
|
||||||
event.getScheduledMinUserCount(), event.getScheduledMaxUserCount()));
|
event.getScheduledMinUserCount(), event.getScheduledMaxUserCount()));
|
||||||
result.getScheduledUserKline().getMa5().add(getMa(event, dateTimeAndEntityMap, 5, 2));
|
result.getScheduledUserKline().getMa5().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 5, 2));
|
||||||
result.getScheduledUserKline().getMa10().add(getMa(event, dateTimeAndEntityMap, 10, 2));
|
result.getScheduledUserKline().getMa10().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 10, 2));
|
||||||
result.getScheduledUserKline().getMa20().add(getMa(event, dateTimeAndEntityMap, 20, 2));
|
result.getScheduledUserKline().getMa20().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 20, 2));
|
||||||
result.getScheduledUserKline().getMa30().add(getMa(event, dateTimeAndEntityMap, 30, 2));
|
result.getScheduledUserKline().getMa30().add(getMa(event.getDataTime(), dateTimeAndEntityMap, 30, 2));
|
||||||
result.getWindSpeed().add(Double.valueOf(event.getExtremeWindSpeedHourly()));
|
result.getWindSpeed().add(Double.valueOf(event.getExtremeWindSpeedHourly()));
|
||||||
result.getUserCounts().add(event.getUserCount());
|
result.getUserCounts().add(event.getUserCount());
|
||||||
result.getFaultUserCountList().add(event.getFaultUserCount());
|
result.getFaultUserCountList().add(event.getFaultUserCount());
|
||||||
result.getScheduledUserCountList().add(event.getScheduledUserCount());
|
result.getScheduledUserCountList().add(event.getScheduledUserCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void setZeroData(DailyPowerOutageEventVO result) {
|
private static void setZeroData(DailyPowerOutageEventVO result,
|
||||||
|
Map<String,DnerDailyPowerOutageEvent> dateTimeAndEntityMap,
|
||||||
|
String dataTime) {
|
||||||
List<Integer> klineE = Arrays.asList(0, 0, 0, 0);
|
List<Integer> klineE = Arrays.asList(0, 0, 0, 0);
|
||||||
result.getCumulativeRain().add(0.0);
|
result.getCumulativeRain().add(0.0);
|
||||||
result.getAvgRain().add(0.0);
|
result.getAvgRain().add(0.0);
|
||||||
@ -130,34 +181,34 @@ public class DnerDailyPowerOutageEventServiceImpl
|
|||||||
result.getMinTemp().add(0.0);
|
result.getMinTemp().add(0.0);
|
||||||
// 总的
|
// 总的
|
||||||
result.getUserKline().getKline().add(klineE);
|
result.getUserKline().getKline().add(klineE);
|
||||||
result.getUserKline().getMa5().add(0);
|
result.getUserKline().getMa5().add(getMa(dataTime, dateTimeAndEntityMap, 5, 0));
|
||||||
result.getUserKline().getMa10().add(0);
|
result.getUserKline().getMa10().add(getMa(dataTime, dateTimeAndEntityMap, 10, 0));
|
||||||
result.getUserKline().getMa20().add(0);
|
result.getUserKline().getMa20().add(getMa(dataTime, dateTimeAndEntityMap, 20, 0));
|
||||||
result.getUserKline().getMa30().add(0);
|
result.getUserKline().getMa30().add(getMa(dataTime, dateTimeAndEntityMap, 30, 0));
|
||||||
// 计划
|
// 计划
|
||||||
result.getFaultUserKline().getKline().add(klineE);
|
result.getFaultUserKline().getKline().add(klineE);
|
||||||
result.getFaultUserKline().getMa5().add(0);
|
result.getFaultUserKline().getMa5().add(getMa(dataTime, dateTimeAndEntityMap, 5, 1));
|
||||||
result.getFaultUserKline().getMa10().add(0);
|
result.getFaultUserKline().getMa10().add(getMa(dataTime, dateTimeAndEntityMap, 10, 1));
|
||||||
result.getFaultUserKline().getMa20().add(0);
|
result.getFaultUserKline().getMa20().add(getMa(dataTime, dateTimeAndEntityMap, 20, 1));
|
||||||
result.getFaultUserKline().getMa30().add(0);
|
result.getFaultUserKline().getMa30().add(getMa(dataTime, dateTimeAndEntityMap, 30, 1));
|
||||||
// 故障
|
// 故障
|
||||||
result.getScheduledUserKline().getKline().add(klineE);
|
result.getScheduledUserKline().getKline().add(klineE);
|
||||||
result.getScheduledUserKline().getMa5().add(0);
|
result.getScheduledUserKline().getMa5().add(getMa(dataTime, dateTimeAndEntityMap, 5, 2));
|
||||||
result.getScheduledUserKline().getMa10().add(0);
|
result.getScheduledUserKline().getMa10().add(getMa(dataTime, dateTimeAndEntityMap, 10, 2));
|
||||||
result.getScheduledUserKline().getMa20().add(0);
|
result.getScheduledUserKline().getMa20().add(getMa(dataTime, dateTimeAndEntityMap, 20, 2));
|
||||||
result.getScheduledUserKline().getMa30().add(0);
|
result.getScheduledUserKline().getMa30().add(getMa(dataTime, dateTimeAndEntityMap, 30, 2));
|
||||||
result.getWindSpeed().add(0.0);
|
result.getWindSpeed().add(0.0);
|
||||||
result.getUserCounts().add(0);
|
result.getUserCounts().add(0);
|
||||||
result.getFaultUserCountList().add(0);
|
result.getFaultUserCountList().add(0);
|
||||||
result.getScheduledUserCountList().add(0);
|
result.getScheduledUserCountList().add(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int getMa(DnerDailyPowerOutageEvent event,
|
private static int getMa(String dataTime,
|
||||||
Map<String, DnerDailyPowerOutageEvent> dateTimeAndEntityMap,
|
Map<String, DnerDailyPowerOutageEvent> dateTimeAndEntityMap,
|
||||||
int maNum, int maType) {
|
int maNum, int maType) {
|
||||||
int userCount = 0;
|
int userCount = 0;
|
||||||
List<String> maDateList = TimeUtil.getBetweenDates(
|
List<String> maDateList = TimeUtil.getBetweenDates(
|
||||||
TimeUtil.getBeforeNumDays(event.getDataTime(), maNum - 1), event.getDataTime());
|
TimeUtil.getBeforeNumDays(dataTime, maNum - 1), dataTime);
|
||||||
if (1 == maType) { // 故障类
|
if (1 == maType) { // 故障类
|
||||||
for (String date : maDateList) {
|
for (String date : maDateList) {
|
||||||
DnerDailyPowerOutageEvent outageEvent = dateTimeAndEntityMap.get(date);
|
DnerDailyPowerOutageEvent outageEvent = dateTimeAndEntityMap.get(date);
|
||||||
@ -165,7 +216,7 @@ public class DnerDailyPowerOutageEventServiceImpl
|
|||||||
userCount += outageEvent.getFaultEndUserCount();
|
userCount += outageEvent.getFaultEndUserCount();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return userCount/maNum;
|
return (userCount + maNum - 1)/maNum; // 向上取整
|
||||||
}
|
}
|
||||||
if (2 == maType) { // 计划类
|
if (2 == maType) { // 计划类
|
||||||
for (String date : maDateList) {
|
for (String date : maDateList) {
|
||||||
@ -174,7 +225,7 @@ public class DnerDailyPowerOutageEventServiceImpl
|
|||||||
userCount += outageEvent.getScheduledEndUserCount();
|
userCount += outageEvent.getScheduledEndUserCount();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return userCount/maNum;
|
return (userCount + maNum - 1)/maNum;
|
||||||
}
|
}
|
||||||
// 总的
|
// 总的
|
||||||
for (String date : maDateList) {
|
for (String date : maDateList) {
|
||||||
@ -183,6 +234,6 @@ public class DnerDailyPowerOutageEventServiceImpl
|
|||||||
userCount += outageEvent.getEndUserCount();
|
userCount += outageEvent.getEndUserCount();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return userCount/maNum;
|
return (userCount + maNum - 1)/maNum;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package com.southern.power.grid.service.impl;
|
package com.southern.power.grid.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.southern.power.grid.dao.DnerHourlyPowerOutageEventMapper;
|
import com.southern.power.grid.dao.DnerHourlyPowerOutageEventMapper;
|
||||||
import com.southern.power.grid.entity.DnerHourlyPowerOutageEvent;
|
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.entity.HourlyPowerOutageEventChartVO;
|
||||||
import com.southern.power.grid.service.IDnerHourlyPowerOutageEventService;
|
import com.southern.power.grid.service.IDnerHourlyPowerOutageEventService;
|
||||||
import com.southern.power.grid.utils.TimeUtil;
|
import com.southern.power.grid.utils.TimeUtil;
|
||||||
|
import com.southern.power.grid.utils.ToolUtils;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@ -53,6 +55,7 @@ public class DnerHourlyPowerOutageEventServiceImpl
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
result.setDateList(TimeUtil.generateHourList(startDate, endDate)); // 日期列表
|
result.setDateList(TimeUtil.generateHourList(startDate, endDate)); // 日期列表
|
||||||
|
// 汇总单个节点数据
|
||||||
List<HourlyChartCollectVO> collectVOList = new ArrayList<>();
|
List<HourlyChartCollectVO> collectVOList = new ArrayList<>();
|
||||||
for (int i = 0; i < result.getPowerOutageUserCountList().size(); i++) {
|
for (int i = 0; i < result.getPowerOutageUserCountList().size(); i++) {
|
||||||
collectVOList.add(new HourlyChartCollectVO()
|
collectVOList.add(new HourlyChartCollectVO()
|
||||||
@ -63,9 +66,42 @@ public class DnerHourlyPowerOutageEventServiceImpl
|
|||||||
.setScheduledUserCount(result.getScheduledUserCountList().get(i)));
|
.setScheduledUserCount(result.getScheduledUserCountList().get(i)));
|
||||||
}
|
}
|
||||||
result.setCollectVOList(collectVOList);
|
result.setCollectVOList(collectVOList);
|
||||||
|
// 汇总分时图Y轴规则
|
||||||
|
handleYScaleRule(result);
|
||||||
return 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) {
|
private static void setHourlyData(HourlyPowerOutageEventChartVO result, DnerHourlyPowerOutageEvent event) {
|
||||||
result.getPowerOutageUserCountList().add(event.getUserCount()); // 停电影响用户总数
|
result.getPowerOutageUserCountList().add(event.getUserCount()); // 停电影响用户总数
|
||||||
result.getFaultUserCountList().add(event.getFaultUserCount()); // 故障停电影响用户总数
|
result.getFaultUserCountList().add(event.getFaultUserCount()); // 故障停电影响用户总数
|
||||||
|
|||||||
34
src/main/java/com/southern/power/grid/utils/ToolUtils.java
Normal file
34
src/main/java/com/southern/power/grid/utils/ToolUtils.java
Normal file
@ -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<? extends Number> 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!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user