0918优化-单站监控-功率曲线默认显示前一小时数据按分钟分组
This commit is contained in:
@ -348,4 +348,12 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
|
|||||||
.toInstant()
|
.toInstant()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将时间转换为月份(YYYY-MM-DD HH:mm:00)
|
||||||
|
*/
|
||||||
|
public static Date timeConvertToDate(LocalDateTime time) {
|
||||||
|
String dateStr = convertToString(time);
|
||||||
|
return dateTime(YYYY_MM_DD_HH_MM_SS,dateStr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,6 +31,13 @@ public class PowerStatisListVo {
|
|||||||
*/
|
*/
|
||||||
private BigDecimal pvPower;
|
private BigDecimal pvPower;
|
||||||
|
|
||||||
|
public PowerStatisListVo(String statisDate, BigDecimal gridPower, BigDecimal storagePower, BigDecimal pvPower) {
|
||||||
|
this.statisDate = statisDate;
|
||||||
|
this.gridPower = gridPower;
|
||||||
|
this.storagePower = storagePower;
|
||||||
|
this.pvPower = pvPower;
|
||||||
|
}
|
||||||
|
|
||||||
public String getStatisDate() {
|
public String getStatisDate() {
|
||||||
return statisDate;
|
return statisDate;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -88,4 +88,5 @@ public interface EmsAmmeterDataMapper
|
|||||||
public List<PowerStatisListVo> getPowerDataByHour(DateSearchRequest requestVo);
|
public List<PowerStatisListVo> getPowerDataByHour(DateSearchRequest requestVo);
|
||||||
public List<PowerStatisListVo> getPowerDataByDay(DateSearchRequest requestVo);
|
public List<PowerStatisListVo> getPowerDataByDay(DateSearchRequest requestVo);
|
||||||
public List<PowerStatisListVo> getPowerDataByMonth(DateSearchRequest requestVo);
|
public List<PowerStatisListVo> getPowerDataByMonth(DateSearchRequest requestVo);
|
||||||
|
public List<PowerStatisListVo> getPowerDataByMinutes(DateSearchRequest requestVo);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,10 +13,9 @@ import org.springframework.util.CollectionUtils;
|
|||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.ArrayList;
|
import java.time.LocalDateTime;
|
||||||
import java.util.Date;
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.List;
|
import java.util.*;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -316,13 +315,31 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService
|
|||||||
public List<PowerStatisListVo> getPowerDataList(DateSearchRequest requestVo) {
|
public List<PowerStatisListVo> getPowerDataList(DateSearchRequest requestVo) {
|
||||||
List<PowerStatisListVo> dataList = new ArrayList<>();
|
List<PowerStatisListVo> dataList = new ArrayList<>();
|
||||||
|
|
||||||
// 默认时间-7天
|
|
||||||
dealRequestTime(requestVo);
|
|
||||||
Date startDate = requestVo.getStartDate();
|
Date startDate = requestVo.getStartDate();
|
||||||
Date endDate = requestVo.getEndDate();
|
Date endDate = requestVo.getEndDate();
|
||||||
|
if (startDate == null || endDate == null) {
|
||||||
|
// 默认按分钟展示-前一个小时数据
|
||||||
|
LocalDateTime oneHourAgo = LocalDateTime.now().minusHours(1).truncatedTo(ChronoUnit.MINUTES);;
|
||||||
|
startDate = DateUtils.toDate(oneHourAgo);
|
||||||
|
requestVo.setStartDate(startDate);
|
||||||
|
requestVo.setEndDate(DateUtils.getNowDate());
|
||||||
|
dataList = emsAmmeterDataMapper.getPowerDataByMinutes(requestVo);
|
||||||
|
// 生成目标时间点列表(每分钟一个)
|
||||||
|
List<LocalDateTime> targetMinutes = new ArrayList<>(60);
|
||||||
|
LocalDateTime current = oneHourAgo;
|
||||||
|
|
||||||
|
for (int i = 0; i < 60; i++) {
|
||||||
|
targetMinutes.add(current); // 添加当前分钟
|
||||||
|
current = current.plusMinutes(1); // 递增1分钟
|
||||||
|
}
|
||||||
|
|
||||||
|
// 填充数据
|
||||||
|
if (dataList != null && dataList.size() >= 0){
|
||||||
|
dataList = fillEveryMinutesData(dataList,targetMinutes);
|
||||||
|
}
|
||||||
|
}
|
||||||
// 开始日期和结束日期同一天,展示 0-24 小时数据
|
// 开始日期和结束日期同一天,展示 0-24 小时数据
|
||||||
if (DateUtils.isSameDay(startDate, endDate)){
|
else if (DateUtils.isSameDay(startDate, endDate)){
|
||||||
endDate = DateUtils.addDays(endDate, 1);
|
endDate = DateUtils.addDays(endDate, 1);
|
||||||
requestVo.setEndDate(endDate);
|
requestVo.setEndDate(endDate);
|
||||||
dataList = emsAmmeterDataMapper.getPowerDataByHour(requestVo);
|
dataList = emsAmmeterDataMapper.getPowerDataByHour(requestVo);
|
||||||
@ -341,9 +358,49 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService
|
|||||||
|
|
||||||
// 负荷功率
|
// 负荷功率
|
||||||
dealDataPower(requestVo.getSiteId(),dataList);
|
dealDataPower(requestVo.getSiteId(),dataList);
|
||||||
|
return dataList.stream().sorted(Comparator.comparing(PowerStatisListVo::getStatisDate)).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<PowerStatisListVo> fillEveryMinutesData(List<PowerStatisListVo> dataList, List<LocalDateTime> targetMinutes) {
|
||||||
|
|
||||||
|
List<PowerStatisListVo> powerStatisListVoList = new ArrayList<>();
|
||||||
|
if (targetMinutes == null || targetMinutes.isEmpty()) {
|
||||||
return dataList;
|
return dataList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 数组转化成Map便于后续获取数据
|
||||||
|
Map<String, PowerStatisListVo> dataMap = dataList.stream()
|
||||||
|
.map(data -> new PowerStatisListVo(
|
||||||
|
data.getStatisDate(),
|
||||||
|
data.getGridPower(),
|
||||||
|
data.getStoragePower(),
|
||||||
|
data.getPvPower()
|
||||||
|
)).collect(Collectors.toMap(
|
||||||
|
PowerStatisListVo::getStatisDate,
|
||||||
|
data -> data,
|
||||||
|
(existing, replacement) -> replacement
|
||||||
|
));
|
||||||
|
|
||||||
|
PowerStatisListVo lastData = null;
|
||||||
|
// 遍历时间数组
|
||||||
|
for (LocalDateTime targetMinute : targetMinutes) {
|
||||||
|
String tarteDate = DateUtils.convertToString(targetMinute);
|
||||||
|
PowerStatisListVo currentData = dataMap.get(tarteDate);
|
||||||
|
if (currentData == null && lastData != null) {
|
||||||
|
BigDecimal pvPower = lastData.getPvPower();
|
||||||
|
BigDecimal storagePower = lastData.getStoragePower();
|
||||||
|
BigDecimal gridPower = lastData.getGridPower();
|
||||||
|
currentData = new PowerStatisListVo(tarteDate.toString(),gridPower,storagePower,pvPower);
|
||||||
|
} else if (currentData == null && lastData == null){
|
||||||
|
// 开头无数据,所有字段设为null
|
||||||
|
currentData = new PowerStatisListVo(tarteDate.toString(), null, null, null);
|
||||||
|
}
|
||||||
|
lastData = currentData;
|
||||||
|
powerStatisListVoList.add(currentData);
|
||||||
|
}
|
||||||
|
return powerStatisListVoList;
|
||||||
|
}
|
||||||
|
|
||||||
private void dealDataPower(String siteId, List<PowerStatisListVo> dataList) {
|
private void dealDataPower(String siteId, List<PowerStatisListVo> dataList) {
|
||||||
if (dataList == null || dataList.size() == 0){
|
if (dataList == null || dataList.size() == 0){
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -1022,4 +1022,18 @@
|
|||||||
GROUP BY statisDate
|
GROUP BY statisDate
|
||||||
order by statisDate desc
|
order by statisDate desc
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="getPowerDataByMinutes" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.PowerStatisListVo">
|
||||||
|
select latest.dateMin as statisDate,
|
||||||
|
<include refid="powerFilter"/>
|
||||||
|
from ( SELECT p.site_id, p.device_id,DATE_FORMAT(p.data_update_time, '%Y-%m-%d %H:%i:00') as dateMin,MAX(p.data_update_time) as max_update_time
|
||||||
|
FROM ems_ammeter_data p
|
||||||
|
<include refid="commonFilter"/>
|
||||||
|
GROUP BY p.site_id,p.device_id,dateMin
|
||||||
|
) latest inner join ems_ammeter_data t ON latest.site_id = t.site_id
|
||||||
|
AND latest.device_id = t.device_id
|
||||||
|
AND latest.max_update_time = t.data_update_time
|
||||||
|
GROUP BY statisDate
|
||||||
|
order by statisDate desc
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
Reference in New Issue
Block a user