diff --git a/ems-common/src/main/java/com/xzzn/common/utils/DateUtils.java b/ems-common/src/main/java/com/xzzn/common/utils/DateUtils.java index cfc07e2..069e852 100644 --- a/ems-common/src/main/java/com/xzzn/common/utils/DateUtils.java +++ b/ems-common/src/main/java/com/xzzn/common/utils/DateUtils.java @@ -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); + } } diff --git a/ems-system/src/main/java/com/xzzn/ems/domain/vo/PowerStatisListVo.java b/ems-system/src/main/java/com/xzzn/ems/domain/vo/PowerStatisListVo.java index 330f05f..5bd7671 100644 --- a/ems-system/src/main/java/com/xzzn/ems/domain/vo/PowerStatisListVo.java +++ b/ems-system/src/main/java/com/xzzn/ems/domain/vo/PowerStatisListVo.java @@ -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; } diff --git a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsAmmeterDataMapper.java b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsAmmeterDataMapper.java index 5049e76..b63d33a 100644 --- a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsAmmeterDataMapper.java +++ b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsAmmeterDataMapper.java @@ -88,4 +88,5 @@ public interface EmsAmmeterDataMapper public List getPowerDataByHour(DateSearchRequest requestVo); public List getPowerDataByDay(DateSearchRequest requestVo); public List getPowerDataByMonth(DateSearchRequest requestVo); + public List getPowerDataByMinutes(DateSearchRequest requestVo); } diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsStatsReportServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsStatsReportServiceImpl.java index 03f2ee8..9e75504 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsStatsReportServiceImpl.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsStatsReportServiceImpl.java @@ -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 getPowerDataList(DateSearchRequest requestVo) { List 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 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,7 +358,47 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService // 负荷功率 dealDataPower(requestVo.getSiteId(),dataList); - return dataList; + return dataList.stream().sorted(Comparator.comparing(PowerStatisListVo::getStatisDate)).collect(Collectors.toList()); + } + + private List fillEveryMinutesData(List dataList, List targetMinutes) { + + List powerStatisListVoList = new ArrayList<>(); + if (targetMinutes == null || targetMinutes.isEmpty()) { + return dataList; + } + + // 数组转化成Map便于后续获取数据 + Map 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 dataList) { diff --git a/ems-system/src/main/resources/mapper/ems/EmsAmmeterDataMapper.xml b/ems-system/src/main/resources/mapper/ems/EmsAmmeterDataMapper.xml index 13bfcb9..862074f 100644 --- a/ems-system/src/main/resources/mapper/ems/EmsAmmeterDataMapper.xml +++ b/ems-system/src/main/resources/mapper/ems/EmsAmmeterDataMapper.xml @@ -1022,4 +1022,18 @@ GROUP BY statisDate order by statisDate desc + + \ No newline at end of file