From 46135aa2ec1795473c63ee145011679accfba67f Mon Sep 17 00:00:00 2001 From: mashili Date: Wed, 24 Sep 2025 22:47:09 +0800 Subject: [PATCH] =?UTF-8?q?0918=E4=BC=98=E5=8C=96-=E5=8D=95=E7=AB=99?= =?UTF-8?q?=E7=9B=91=E6=8E=A7-=E5=8A=9F=E7=8E=87=E6=9B=B2=E7=BA=BF?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E6=98=BE=E7=A4=BA=E5=89=8D=E4=B8=80=E5=B0=8F?= =?UTF-8?q?=E6=97=B6=E6=95=B0=E6=8D=AE=E6=8C=89=E5=88=86=E9=92=9F=E5=88=86?= =?UTF-8?q?=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/xzzn/common/utils/DateUtils.java | 8 ++ .../xzzn/ems/domain/vo/PowerStatisListVo.java | 7 ++ .../xzzn/ems/mapper/EmsAmmeterDataMapper.java | 1 + .../impl/EmsStatsReportServiceImpl.java | 73 +++++++++++++++++-- .../mapper/ems/EmsAmmeterDataMapper.xml | 14 ++++ 5 files changed, 95 insertions(+), 8 deletions(-) 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