0918优化-单站监控-功率曲线默认显示前一小时数据按分钟分组
This commit is contained in:
@ -348,4 +348,12 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
|
||||
.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;
|
||||
|
||||
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() {
|
||||
return statisDate;
|
||||
}
|
||||
|
||||
@ -88,4 +88,5 @@ public interface EmsAmmeterDataMapper
|
||||
public List<PowerStatisListVo> getPowerDataByHour(DateSearchRequest requestVo);
|
||||
public List<PowerStatisListVo> getPowerDataByDay(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.RoundingMode;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -316,13 +315,31 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService
|
||||
public List<PowerStatisListVo> getPowerDataList(DateSearchRequest requestVo) {
|
||||
List<PowerStatisListVo> dataList = new ArrayList<>();
|
||||
|
||||
// 默认时间-7天
|
||||
dealRequestTime(requestVo);
|
||||
Date startDate = requestVo.getStartDate();
|
||||
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 小时数据
|
||||
if (DateUtils.isSameDay(startDate, endDate)){
|
||||
else if (DateUtils.isSameDay(startDate, endDate)){
|
||||
endDate = DateUtils.addDays(endDate, 1);
|
||||
requestVo.setEndDate(endDate);
|
||||
dataList = emsAmmeterDataMapper.getPowerDataByHour(requestVo);
|
||||
@ -341,9 +358,49 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService
|
||||
|
||||
// 负荷功率
|
||||
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;
|
||||
}
|
||||
|
||||
// 数组转化成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) {
|
||||
if (dataList == null || dataList.size() == 0){
|
||||
return;
|
||||
|
||||
@ -1022,4 +1022,18 @@
|
||||
GROUP BY statisDate
|
||||
order by statisDate desc
|
||||
</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>
|
||||
Reference in New Issue
Block a user