From d47d9150e6c4970f4a686ed412564820bba29f75 Mon Sep 17 00:00:00 2001 From: mashili Date: Thu, 25 Sep 2025 14:53:17 +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=AE=9E=E6=97=B6=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E6=9B=B2=E7=BA=BF=E5=9B=BE=E5=8F=96=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/xzzn/common/utils/DateUtils.java | 16 +++ .../ems/domain/vo/EnergyStoragePowVo.java | 17 ++- .../com/xzzn/ems/domain/vo/PcsPowerList.java | 32 ++++++ .../domain/vo/SiteMonitorRuningInfoVo.java | 16 +-- .../ems/mapper/EmsBatteryClusterMapper.java | 10 +- .../ems/mapper/EmsBatteryStackMapper.java | 11 +- .../service/impl/SingleSiteServiceImpl.java | 102 ++++++++++++++++-- .../mapper/ems/EmsBatteryClusterMapper.xml | 13 --- .../mapper/ems/EmsBatteryStackMapper.xml | 18 +++- .../resources/mapper/ems/EmsPcsDataMapper.xml | 8 +- 10 files changed, 188 insertions(+), 55 deletions(-) create mode 100644 ems-system/src/main/java/com/xzzn/ems/domain/vo/PcsPowerList.java 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 069e852..c7a0e57 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 @@ -356,4 +356,20 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils String dateStr = convertToString(time); return dateTime(YYYY_MM_DD_HH_MM_SS,dateStr); } + + /** + * 增加 Date ==> LocalDateTime + */ + public static LocalDateTime toLocalDateTime(Date date) + { + if (date == null) { + return null; + } + + // 1. Date → LocalDateTime(保留原始时间) + LocalDateTime dateTime = date.toInstant() + .atZone(TimeZone.getDefault().toZoneId()) // 关联时区 + .toLocalDateTime(); + return dateTime; + } } 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 85ae376..713c34d 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 @@ -4,7 +4,7 @@ import java.math.BigDecimal; import java.util.Date; /** - * 实时运行-储能功率数据 + * 实时运行-有功无功功率数据 * */ public class EnergyStoragePowVo { @@ -12,7 +12,7 @@ public class EnergyStoragePowVo { * 显示日期 */ - private Date createDate; + private String createDate; /** * pcs实时有功功率 @@ -24,12 +24,21 @@ public class EnergyStoragePowVo { */ private BigDecimal pcsTotalReactivePower; + private String deviceId; - public Date getCreateDate() { + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getCreateDate() { return createDate; } - public void setCreateDate(Date createDate) { + public void setCreateDate(String createDate) { this.createDate = createDate; } diff --git a/ems-system/src/main/java/com/xzzn/ems/domain/vo/PcsPowerList.java b/ems-system/src/main/java/com/xzzn/ems/domain/vo/PcsPowerList.java new file mode 100644 index 0000000..88d3190 --- /dev/null +++ b/ems-system/src/main/java/com/xzzn/ems/domain/vo/PcsPowerList.java @@ -0,0 +1,32 @@ +package com.xzzn.ems.domain.vo; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 实时运行-PCS数据list + * + */ +public class PcsPowerList { + + private String deviceId; + // 有功和无功功率数据 + private List energyStoragePowList; + + public List getEnergyStoragePowList() { + return energyStoragePowList; + } + + public void setEnergyStoragePowList(List energyStoragePowList) { + this.energyStoragePowList = energyStoragePowList; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } +} diff --git a/ems-system/src/main/java/com/xzzn/ems/domain/vo/SiteMonitorRuningInfoVo.java b/ems-system/src/main/java/com/xzzn/ems/domain/vo/SiteMonitorRuningInfoVo.java index fd2dcd1..e80825b 100644 --- a/ems-system/src/main/java/com/xzzn/ems/domain/vo/SiteMonitorRuningInfoVo.java +++ b/ems-system/src/main/java/com/xzzn/ems/domain/vo/SiteMonitorRuningInfoVo.java @@ -8,17 +8,17 @@ import java.util.List; */ public class SiteMonitorRuningInfoVo { /** - * 储能功率list + * PCS有功和无功功率 */ - private List energyStoragePowList; + private List pcsPowerList; /** - * pcs平均温度list + * PCS最高温度 */ private List stackAveTempList; /** - * 电池平均soclist + * 平均soclist */ private List batteryAveSOCList; @@ -27,12 +27,12 @@ public class SiteMonitorRuningInfoVo { */ private List batteryAveTempList; - public List getEnergyStoragePowList() { - return energyStoragePowList; + public List getPcsPowerList() { + return pcsPowerList; } - public void setEnergyStoragePowList(List energyStoragePowList) { - this.energyStoragePowList = energyStoragePowList; + public void setPcsPowerList(List pcsPowerList) { + this.pcsPowerList = pcsPowerList; } public List getStackAveTempList() { diff --git a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsBatteryClusterMapper.java b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsBatteryClusterMapper.java index 8cf29f2..a658c40 100644 --- a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsBatteryClusterMapper.java +++ b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsBatteryClusterMapper.java @@ -73,15 +73,7 @@ public interface EmsBatteryClusterMapper */ public List getBmsBatteryData(@Param("siteId")String siteId, @Param("stackDeviceId")String stackDeviceId); - /** - * 实时运行-平均soc+平均温度 - * @param siteId - * @param startDate - * @param endDate - * @return - */ - public List getAveSocList(@Param("siteId")String siteId, @Param("startDate") Date startDate, @Param("endDate")Date endDate); - + // 实时运行-FX平均温度 public List getBatteryAveTempList(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate); /** 堆电池温度数据-获取当天每小时簇 */ diff --git a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsBatteryStackMapper.java b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsBatteryStackMapper.java index dad1e38..b8d5f8c 100644 --- a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsBatteryStackMapper.java +++ b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsBatteryStackMapper.java @@ -3,10 +3,7 @@ package com.xzzn.ems.mapper; import java.util.Date; import java.util.List; import com.xzzn.ems.domain.EmsBatteryStack; -import com.xzzn.ems.domain.vo.DateSearchRequest; -import com.xzzn.ems.domain.vo.StackAveTempVo; -import com.xzzn.ems.domain.vo.StackPointVo; -import com.xzzn.ems.domain.vo.StackStatisListVo; +import com.xzzn.ems.domain.vo.*; import org.apache.ibatis.annotations.Param; /** @@ -91,4 +88,10 @@ public interface EmsBatteryStackMapper public List getStackPointByHour(DateSearchRequest requestVo); public List getStackPointByDay(DateSearchRequest requestVo); public List getStackPointByMonth(DateSearchRequest requestVo); + + + // 实时运行-平均soc + public List getAveSocList(@Param("siteId") String siteId, @Param("startDate") Date startDate, @Param("endDate") Date endDate); + // 实时运行-DDS平均温度 + public List getBatteryAveTempList(@Param("siteId")String siteId, @Param("startDate")Date yesterday, @Param("endDate") Date today); } 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 bdec05a..7254a49 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 @@ -21,6 +21,7 @@ import java.math.RoundingMode; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; +import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; @@ -36,10 +37,6 @@ public class SingleSiteServiceImpl implements ISingleSiteService { private static final String CLUSTER_DATA_SOC = "SOC"; - private static final String AMMETER_DEVICE_LOAD = "LOAD"; - - private static final String AMMETER_DEVICE_METE = "METE"; - private static Map storageFactor = new HashMap<>(); static { storageFactor.put("021_DDS_01", new BigDecimal("0.1")); @@ -157,7 +154,7 @@ public class SingleSiteServiceImpl implements ISingleSiteService { return siteMonitorRunningHeadInfoVo; } - // 获取单站监控实时运行-储能功率数据 + // 获取单站监控实时运行-PCS有功无功功率 @Override public SiteMonitorRuningInfoVo getRunningGraphStorage(String siteId) { SiteMonitorRuningInfoVo siteMonitorRuningInfoVo = new SiteMonitorRuningInfoVo(); @@ -166,12 +163,92 @@ public class SingleSiteServiceImpl implements ISingleSiteService { Date today = DateUtils.getNowDate(); Date yesterday = DateUtils.addDays(today, -1); - //储能功率list + //pcs有功无功 + List pcsPowerList = new ArrayList<>(); List energyStoragePowList = emsPcsDataMapper.getStoragePowerList(siteId, yesterday, today); - siteMonitorRuningInfoVo.setEnergyStoragePowList(energyStoragePowList); + + // 生成时间列表(每分钟一个) + 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分钟 + } + + // 数据格式转换 + if (!CollectionUtils.isEmpty(energyStoragePowList) && !CollectionUtils.isEmpty(targetMinutes)) { + Map> dataMap = energyStoragePowList.stream() + .collect(Collectors.groupingBy( + EnergyStoragePowVo::getDeviceId, + Collectors.toList())); + + pcsPowerList = dataMap.entrySet().stream() + .map(entry -> { + PcsPowerList pcdData = new PcsPowerList(); + pcdData.setDeviceId(entry.getKey()); + pcdData.setEnergyStoragePowList(entry.getValue()); + return pcdData; + }).collect(Collectors.toList()); + + // 根据时间列表填充数据 + pcsPowerList = fullFillData(pcsPowerList,targetMinutes); + } + + siteMonitorRuningInfoVo.setPcsPowerList(pcsPowerList); } return siteMonitorRuningInfoVo; } + private List fullFillData(List pcsPowerList, List targetMinutes) { + List resultList = new ArrayList<>(); + + for (PcsPowerList pcsPower : pcsPowerList) { + Map dataMap = new HashMap<>(); + PcsPowerList pcsResultPower = new PcsPowerList(); + String deviceId = pcsPower.getDeviceId(); + List powerList = pcsPower.getEnergyStoragePowList(); + + if (CollectionUtils.isEmpty(powerList)) { + continue; + } + // 将数据转Map便于后续根据时间获取 + dataMap = powerList.stream().collect( + Collectors.toMap( + data -> data.getCreateDate(), + data -> data, + (existing, replacement) -> replacement + )); + + // 按时间列表遍历 + List resultPowerList = new ArrayList<>(); + EnergyStoragePowVo lastData = null; + for(LocalDateTime targetMinute : targetMinutes) { + String currentDate = DateUtils.convertToString(targetMinute); + EnergyStoragePowVo currentData = dataMap.get(currentDate); + if (currentData == null && lastData != null) { + BigDecimal pcsTotalActPower = lastData.getPcsTotalActPower(); + BigDecimal pcsTotalReactivePower = lastData.getPcsTotalReactivePower(); + currentData = new EnergyStoragePowVo(); + currentData.setPcsTotalActPower(pcsTotalActPower); + currentData.setPcsTotalReactivePower(pcsTotalReactivePower); + currentData.setDeviceId(deviceId); + } else if (currentData == null && lastData == null){ + // 开头无数据,所有字段设为null + currentData = new EnergyStoragePowVo(); + currentData.setDeviceId(deviceId); + } + lastData = currentData; + currentData.setCreateDate(currentDate.substring(11)); + resultPowerList.add(currentData); + } + pcsResultPower.setDeviceId(deviceId); + pcsResultPower.setEnergyStoragePowList(resultPowerList); + resultList.add(pcsResultPower); + } + + return resultList; + } + // 获取单站监控实时运行-stack平均温度 // 20250811 按小时 @Override @@ -187,7 +264,7 @@ public class SingleSiteServiceImpl implements ISingleSiteService { } return siteMonitorRuningInfoVo; } - // 获取单站监控实时运行-电池平均soc + // 获取单站监控实时运行-平均soc @Override public SiteMonitorRuningInfoVo getRunningGraphBatterySoc(String siteId) { SiteMonitorRuningInfoVo siteMonitorRuningInfoVo = new SiteMonitorRuningInfoVo(); @@ -196,7 +273,7 @@ public class SingleSiteServiceImpl implements ISingleSiteService { Date today = new Date(); Date yesterday = DateUtils.addDays(today, -1); //电池平均soclist - List batteryAveSOCList = emsBatteryClusterMapper.getAveSocList(siteId, yesterday, today); + List batteryAveSOCList = emsBatteryStackMapper.getAveSocList(siteId, yesterday, today); siteMonitorRuningInfoVo.setBatteryAveSOCList(batteryAveSOCList); } return siteMonitorRuningInfoVo; @@ -210,7 +287,12 @@ public class SingleSiteServiceImpl implements ISingleSiteService { Date today = new Date(); Date yesterday = DateUtils.addDays(today, -1); //电池平均温度list - List batteryAveTempList = emsBatteryClusterMapper.getBatteryAveTempList(siteId, yesterday, today); + List batteryAveTempList = new ArrayList<>(); + if (SiteEnum.FX.getCode().equals(siteId)) { + batteryAveTempList = emsBatteryClusterMapper.getBatteryAveTempList(siteId, yesterday, today); + } else if (SiteEnum.DDS.getCode().equals(siteId)) { + batteryAveTempList = emsBatteryStackMapper.getBatteryAveTempList(siteId, yesterday, today); + } siteMonitorRuningInfoVo.setBatteryAveTempList(batteryAveTempList); } return siteMonitorRuningInfoVo; diff --git a/ems-system/src/main/resources/mapper/ems/EmsBatteryClusterMapper.xml b/ems-system/src/main/resources/mapper/ems/EmsBatteryClusterMapper.xml index ec3eceb..829e227 100644 --- a/ems-system/src/main/resources/mapper/ems/EmsBatteryClusterMapper.xml +++ b/ems-system/src/main/resources/mapper/ems/EmsBatteryClusterMapper.xml @@ -325,19 +325,6 @@ t.max_cell_temp,t.min_cell_temp - - - + + + \ 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 90014fe..bd8419b 100644 --- a/ems-system/src/main/resources/mapper/ems/EmsPcsDataMapper.xml +++ b/ems-system/src/main/resources/mapper/ems/EmsPcsDataMapper.xml @@ -424,15 +424,15 @@