From b3f7ca7a816a1deeed975fa53edb494e68475e2e Mon Sep 17 00:00:00 2001 From: zq Date: Fri, 23 Jan 2026 19:11:13 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E7=9B=91=E6=8E=A7-=E5=AE=9E?= =?UTF-8?q?=E6=97=B6=E8=BF=90=E8=A1=8C=E9=A1=B5=E9=9D=A2=E6=9B=B2=E7=BA=BF?= =?UTF-8?q?=E6=8C=89=E7=85=A7=E6=AF=8F=E5=88=86=E9=92=9F=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ems/domain/vo/EnergyStoragePowVo.java | 11 ++- .../com/xzzn/ems/mapper/EmsPcsDataMapper.java | 2 + .../service/impl/SingleSiteServiceImpl.java | 45 +++++++----- .../mapper/ems/EmsBatteryClusterMapper.xml | 33 ++++++--- .../mapper/ems/EmsBatteryStackMapper.xml | 63 ++++++++++------ .../resources/mapper/ems/EmsPcsDataMapper.xml | 73 ++++++++++++++----- 6 files changed, 153 insertions(+), 74 deletions(-) diff --git a/ems-system/src/main/java/com/xzzn/ems/domain/vo/EnergyStoragePowVo.java b/ems-system/src/main/java/com/xzzn/ems/domain/vo/EnergyStoragePowVo.java index 0512662..16c3162 100644 --- a/ems-system/src/main/java/com/xzzn/ems/domain/vo/EnergyStoragePowVo.java +++ b/ems-system/src/main/java/com/xzzn/ems/domain/vo/EnergyStoragePowVo.java @@ -1,7 +1,6 @@ package com.xzzn.ems.domain.vo; import java.math.BigDecimal; -import java.util.Date; /** * 实时运行-有功无功功率数据 @@ -31,6 +30,8 @@ public class EnergyStoragePowVo { private String deviceId; + private String groupTime; + public String getDeviceId() { return deviceId; } @@ -67,6 +68,14 @@ public class EnergyStoragePowVo { this.dateDay = dateDay; } + public String getGroupTime() { + return groupTime; + } + + public void setGroupTime(String groupTime) { + this.groupTime = groupTime; + } + public void setPcsTotalReactivePower(BigDecimal pcsTotalReactivePower) { this.pcsTotalReactivePower = pcsTotalReactivePower; } diff --git a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPcsDataMapper.java b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPcsDataMapper.java index bd9ccf6..4c33796 100644 --- a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPcsDataMapper.java +++ b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPcsDataMapper.java @@ -140,4 +140,6 @@ public interface EmsPcsDataMapper public List getFXMaxTemp(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate); // 实时运行-dds-pcs最高温度 public List getDDSMaxTemp(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate); + + List getPcsMaxTemp(@Param("siteId") String siteId, @Param("startDate") Date startDate, @Param("endDate") Date endDate); } diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/SingleSiteServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/SingleSiteServiceImpl.java index 15f6a75..4041379 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/impl/SingleSiteServiceImpl.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/SingleSiteServiceImpl.java @@ -238,13 +238,13 @@ public class SingleSiteServiceImpl implements ISingleSiteService { return pcdData; }).collect(Collectors.toList()); -// // 生成时间列表(每分钟一个) -// List targetMinutes = new ArrayList<>(60); -// LocalDateTime startDate = DateUtils.toLocalDateTime(yesterday).truncatedTo(ChronoUnit.DAYS); -// LocalDateTime endDate = DateUtils.toLocalDateTime(today); -// while (startDate.isBefore(endDate)) { -// targetMinutes.add(startDate); -// startDate = startDate.plusMinutes(1); // 递增1分钟 +// // 生成时间列表(每5分钟一个) +// List targetMinutes = new ArrayList<>(12); +// LocalDateTime startLocalDate = DateUtils.toLocalDateTime(startDate).truncatedTo(ChronoUnit.DAYS); +// LocalDateTime endLocalDate = DateUtils.toLocalDateTime(endDate).with(LocalDateTime.now().toLocalTime()); +// while (startLocalDate.isBefore(endLocalDate)) { +// targetMinutes.add(startLocalDate); +// startLocalDate = startLocalDate.plusMinutes(5); // 递增5分钟 // } // // 根据时间列表填充数据 // pcsPowerList = fullFillData(pcsPowerList, targetMinutes); @@ -254,6 +254,7 @@ public class SingleSiteServiceImpl implements ISingleSiteService { return siteMonitorRuningInfoVo; } + private List fullFillData(List pcsPowerList, List targetMinutes) { List resultList = new ArrayList<>(); @@ -269,7 +270,7 @@ public class SingleSiteServiceImpl implements ISingleSiteService { // 将数据转Map便于后续根据时间获取 dataMap = powerList.stream().collect( Collectors.toMap( - data -> data.getCreateDate(), + data -> data.getGroupTime(), data -> data, (existing, replacement) -> replacement )); @@ -293,7 +294,8 @@ public class SingleSiteServiceImpl implements ISingleSiteService { currentData.setDeviceId(deviceId); } lastData = currentData; - currentData.setCreateDate(currentDate.substring(11)); +// currentData.setCreateDate(currentDate.substring(11)); + currentData.setCreateDate(currentData.getCreateDate()); resultPowerList.add(currentData); } pcsResultPower.setDeviceId(deviceId); @@ -316,12 +318,12 @@ public class SingleSiteServiceImpl implements ISingleSiteService { Date startDate = request.getStartDate(); Date endDate = request.getEndDate(); //PCS最高温度list - List pcsMaxTempVos = new ArrayList<>(); - if (SiteEnum.FX.getCode().equals(siteId)) { - pcsMaxTempVos = emsPcsDataMapper.getFXMaxTemp(siteId, startDate, endDate); - } else if (SiteEnum.DDS.getCode().equals(siteId)) { - pcsMaxTempVos = emsPcsDataMapper.getDDSMaxTemp(siteId, startDate, endDate); - } + List pcsMaxTempVos = emsPcsDataMapper.getPcsMaxTemp(siteId, startDate, endDate); +// if (SiteEnum.FX.getCode().equals(siteId)) { +// pcsMaxTempVos = emsPcsDataMapper.getFXMaxTemp(siteId, startDate, endDate); +// } else if (SiteEnum.DDS.getCode().equals(siteId)) { +// pcsMaxTempVos = emsPcsDataMapper.getDDSMaxTemp(siteId, startDate, endDate); +// } // List -> 按pcs的deviceId分组转成List if (!CollectionUtils.isEmpty(pcsMaxTempVos)) { @@ -427,13 +429,18 @@ public class SingleSiteServiceImpl implements ISingleSiteService { String siteId = request.getSiteId(); Date startDate = request.getStartDate(); Date endDate = request.getEndDate(); - //电池平均温度list + //电池平均温度list,优先从电池堆取,电池堆没有的话再从电池簇取 List batteryAveTempList = new ArrayList<>(); - if (SiteEnum.FX.getCode().equals(siteId)) { + batteryAveTempList = emsBatteryStackMapper.getBatteryAveTempList(siteId, startDate, endDate); + // 电池堆暂无数据,从电池簇取 + if (CollectionUtils.isEmpty(batteryAveTempList)) { batteryAveTempList = emsBatteryClusterMapper.getBatteryAveTempList(siteId, startDate, endDate); - } else if (SiteEnum.DDS.getCode().equals(siteId)) { - batteryAveTempList = emsBatteryStackMapper.getBatteryAveTempList(siteId, startDate, endDate); } +// if (SiteEnum.FX.getCode().equals(siteId)) { +// batteryAveTempList = emsBatteryClusterMapper.getBatteryAveTempList(siteId, startDate, endDate); +// } else if (SiteEnum.DDS.getCode().equals(siteId)) { +// batteryAveTempList = emsBatteryStackMapper.getBatteryAveTempList(siteId, startDate, endDate); +// } siteMonitorRuningInfoVo.setBatteryAveTempList(batteryAveTempList); // if (!StringUtils.isEmpty(siteId)) { // // 时间暂定今日+昨日 diff --git a/ems-system/src/main/resources/mapper/ems/EmsBatteryClusterMapper.xml b/ems-system/src/main/resources/mapper/ems/EmsBatteryClusterMapper.xml index e64219f..d1e2464 100644 --- a/ems-system/src/main/resources/mapper/ems/EmsBatteryClusterMapper.xml +++ b/ems-system/src/main/resources/mapper/ems/EmsBatteryClusterMapper.xml @@ -331,18 +331,27 @@ diff --git a/ems-system/src/main/resources/mapper/ems/EmsBatteryStackMapper.xml b/ems-system/src/main/resources/mapper/ems/EmsBatteryStackMapper.xml index d6b8d72..647deaf 100644 --- a/ems-system/src/main/resources/mapper/ems/EmsBatteryStackMapper.xml +++ b/ems-system/src/main/resources/mapper/ems/EmsBatteryStackMapper.xml @@ -351,18 +351,27 @@ @@ -501,15 +510,25 @@ \ No newline at end of file diff --git a/ems-system/src/main/resources/mapper/ems/EmsPcsDataMapper.xml b/ems-system/src/main/resources/mapper/ems/EmsPcsDataMapper.xml index db832e3..12cd76f 100644 --- a/ems-system/src/main/resources/mapper/ems/EmsPcsDataMapper.xml +++ b/ems-system/src/main/resources/mapper/ems/EmsPcsDataMapper.xml @@ -469,30 +469,30 @@ order by ammeterDate desc - WITH ranked AS ( - SELECT - *, - ROW_NUMBER() OVER(PARTITION BY device_id , DATE_FORMAT(data_update_time, '%Y-%m-%d %H:%i') ORDER BY data_update_time DESC) as rn - FROM - ems_pcs_data - where site_id = #{siteId} - and data_update_time >= #{startDate} - AND data_update_time < DATE_ADD(#{endDate}, INTERVAL 1 DAY) + SELECT + *, + date_format(data_update_time, '%Y-%m-%d %H:00:00') + INTERVAL FLOOR(MINUTE(data_update_time) / 5) * 5 MINUTE AS group_time, + ROW_NUMBER() OVER (PARTITION BY device_id, date_format(data_update_time, '%Y-%m-%d %H:00:00'), FLOOR(MINUTE(data_update_time) / 5) ORDER BY data_update_time) as rn + FROM + ems_pcs_data + where site_id = #{siteId} + and data_update_time >= #{startDate} + and data_update_time < DATE_ADD(#{endDate}, INTERVAL 1 DAY) ) - select - site_id, - device_id as deviceId, - total_active_power as pcsTotalActPower, - total_reactive_power as pcsTotalReactivePower, - DATE_FORMAT(create_time, '%Y-%m-%d') as dateDay, - DATE_FORMAT(data_update_time, '%H:%i:00') as createDate - from + SELECT + site_id, + device_id as deviceId, + total_active_power as pcsTotalActPower, + total_reactive_power as pcsTotalReactivePower, + DATE_FORMAT(group_time, '%Y-%m-%d') as dateDay, + DATE_FORMAT(group_time, '%H:%i:00') as createDate, + group_time as groupTime + FROM ranked - where + WHERE rn = 1 - GROUP BY site_id, deviceId,pcsTotalActPower,pcsTotalReactivePower,dateDay,createDate - ORDER BY dateDay,createDate + + \ No newline at end of file