0918优化-单站监控-实时运行曲线图取值
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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<EnergyStoragePowVo> energyStoragePowList;
|
||||
|
||||
public List<EnergyStoragePowVo> getEnergyStoragePowList() {
|
||||
return energyStoragePowList;
|
||||
}
|
||||
|
||||
public void setEnergyStoragePowList(List<EnergyStoragePowVo> energyStoragePowList) {
|
||||
this.energyStoragePowList = energyStoragePowList;
|
||||
}
|
||||
|
||||
public String getDeviceId() {
|
||||
return deviceId;
|
||||
}
|
||||
|
||||
public void setDeviceId(String deviceId) {
|
||||
this.deviceId = deviceId;
|
||||
}
|
||||
}
|
||||
@ -8,17 +8,17 @@ import java.util.List;
|
||||
*/
|
||||
public class SiteMonitorRuningInfoVo {
|
||||
/**
|
||||
* 储能功率list
|
||||
* PCS有功和无功功率
|
||||
*/
|
||||
private List<EnergyStoragePowVo> energyStoragePowList;
|
||||
private List<PcsPowerList> pcsPowerList;
|
||||
|
||||
/**
|
||||
* pcs平均温度list
|
||||
* PCS最高温度
|
||||
*/
|
||||
private List<StackAveTempVo> stackAveTempList;
|
||||
|
||||
/**
|
||||
* 电池平均soclist
|
||||
* 平均soclist
|
||||
*/
|
||||
private List<BatteryAveSOCVo> batteryAveSOCList;
|
||||
|
||||
@ -27,12 +27,12 @@ public class SiteMonitorRuningInfoVo {
|
||||
*/
|
||||
private List<BatteryAveTempVo> batteryAveTempList;
|
||||
|
||||
public List<EnergyStoragePowVo> getEnergyStoragePowList() {
|
||||
return energyStoragePowList;
|
||||
public List<PcsPowerList> getPcsPowerList() {
|
||||
return pcsPowerList;
|
||||
}
|
||||
|
||||
public void setEnergyStoragePowList(List<EnergyStoragePowVo> energyStoragePowList) {
|
||||
this.energyStoragePowList = energyStoragePowList;
|
||||
public void setPcsPowerList(List<PcsPowerList> pcsPowerList) {
|
||||
this.pcsPowerList = pcsPowerList;
|
||||
}
|
||||
|
||||
public List<StackAveTempVo> getStackAveTempList() {
|
||||
|
||||
@ -73,15 +73,7 @@ public interface EmsBatteryClusterMapper
|
||||
*/
|
||||
public List<BMSBatteryDataList> getBmsBatteryData(@Param("siteId")String siteId, @Param("stackDeviceId")String stackDeviceId);
|
||||
|
||||
/**
|
||||
* 实时运行-平均soc+平均温度
|
||||
* @param siteId
|
||||
* @param startDate
|
||||
* @param endDate
|
||||
* @return
|
||||
*/
|
||||
public List<BatteryAveSOCVo> getAveSocList(@Param("siteId")String siteId, @Param("startDate") Date startDate, @Param("endDate")Date endDate);
|
||||
|
||||
// 实时运行-FX平均温度
|
||||
public List<BatteryAveTempVo> getBatteryAveTempList(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate);
|
||||
|
||||
/** 堆电池温度数据-获取当天每小时簇 */
|
||||
|
||||
@ -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<StackPointVo> getStackPointByHour(DateSearchRequest requestVo);
|
||||
public List<StackPointVo> getStackPointByDay(DateSearchRequest requestVo);
|
||||
public List<StackPointVo> getStackPointByMonth(DateSearchRequest requestVo);
|
||||
|
||||
|
||||
// 实时运行-平均soc
|
||||
public List<BatteryAveSOCVo> getAveSocList(@Param("siteId") String siteId, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
|
||||
// 实时运行-DDS平均温度
|
||||
public List<BatteryAveTempVo> getBatteryAveTempList(@Param("siteId")String siteId, @Param("startDate")Date yesterday, @Param("endDate") Date today);
|
||||
}
|
||||
|
||||
@ -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<String, BigDecimal> 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> pcsPowerList = new ArrayList<>();
|
||||
List<EnergyStoragePowVo> energyStoragePowList = emsPcsDataMapper.getStoragePowerList(siteId, yesterday, today);
|
||||
siteMonitorRuningInfoVo.setEnergyStoragePowList(energyStoragePowList);
|
||||
|
||||
// 生成时间列表(每分钟一个)
|
||||
List<LocalDateTime> 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<String, List<EnergyStoragePowVo>> 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<PcsPowerList> fullFillData(List<PcsPowerList> pcsPowerList, List<LocalDateTime> targetMinutes) {
|
||||
List<PcsPowerList> resultList = new ArrayList<>();
|
||||
|
||||
for (PcsPowerList pcsPower : pcsPowerList) {
|
||||
Map<String, EnergyStoragePowVo> dataMap = new HashMap<>();
|
||||
PcsPowerList pcsResultPower = new PcsPowerList();
|
||||
String deviceId = pcsPower.getDeviceId();
|
||||
List<EnergyStoragePowVo> powerList = pcsPower.getEnergyStoragePowList();
|
||||
|
||||
if (CollectionUtils.isEmpty(powerList)) {
|
||||
continue;
|
||||
}
|
||||
// 将数据转Map便于后续根据时间获取
|
||||
dataMap = powerList.stream().collect(
|
||||
Collectors.toMap(
|
||||
data -> data.getCreateDate(),
|
||||
data -> data,
|
||||
(existing, replacement) -> replacement
|
||||
));
|
||||
|
||||
// 按时间列表遍历
|
||||
List<EnergyStoragePowVo> 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<BatteryAveSOCVo> batteryAveSOCList = emsBatteryClusterMapper.getAveSocList(siteId, yesterday, today);
|
||||
List<BatteryAveSOCVo> 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<BatteryAveTempVo> batteryAveTempList = emsBatteryClusterMapper.getBatteryAveTempList(siteId, yesterday, today);
|
||||
List<BatteryAveTempVo> 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;
|
||||
|
||||
@ -325,19 +325,6 @@
|
||||
t.max_cell_temp,t.min_cell_temp
|
||||
</select>
|
||||
|
||||
|
||||
<select id="getAveSocList" resultType="com.xzzn.ems.domain.vo.BatteryAveSOCVo">
|
||||
select t.site_id,
|
||||
avg(t.battery_pack_soc) as batterySOC,
|
||||
DATE_FORMAT(t.create_time, '%Y-%m-%d %H:%i:00') AS createDate
|
||||
from ems_battery_cluster t
|
||||
where t.site_id = #{siteId}
|
||||
AND t.create_time >= Date(#{startDate})
|
||||
AND t.create_time <= #{endDate}
|
||||
GROUP BY t.site_id,DATE_FORMAT(t.create_time, '%Y-%m-%d %H:%i:00')
|
||||
order by createDate
|
||||
</select>
|
||||
|
||||
<select id="getBatteryAveTempList" resultType="com.xzzn.ems.domain.vo.BatteryAveTempVo">
|
||||
select t.site_id,
|
||||
avg(t.avg_cell_temp) as batteryTemp,
|
||||
|
||||
@ -345,10 +345,10 @@
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
<select id="getStackAveTempList" resultType="com.xzzn.ems.domain.vo.StackAveTempVo">
|
||||
<select id="getBatteryAveTempList" resultType="com.xzzn.ems.domain.vo.BatteryAveTempVo">
|
||||
select t.site_id,
|
||||
avg(t.operating_temp) as temp,
|
||||
DATE_FORMAT(t.create_time, '%Y-%m-%d %H:00:00') AS createDate
|
||||
avg(t.avg_temperature) as batteryTemp,
|
||||
DATE_FORMAT(t.create_time, '%Y-%m-%d %H:%i:00') AS createDate
|
||||
from ems_battery_stack t
|
||||
where t.site_id = #{siteId}
|
||||
AND t.create_time >= Date(#{startDate})
|
||||
@ -491,4 +491,16 @@
|
||||
GROUP BY latest.dateMonth
|
||||
ORDER BY statisDate
|
||||
</select>
|
||||
|
||||
<select id="getAveSocList" resultType="com.xzzn.ems.domain.vo.BatteryAveSOCVo">
|
||||
select t.site_id,
|
||||
avg(t.stack_soc) as batterySOC,
|
||||
DATE_FORMAT(t.create_time, '%Y-%m-%d %H:%i:00') AS createDate
|
||||
from ems_battery_stack t
|
||||
where t.site_id = #{siteId}
|
||||
AND t.create_time >= Date(#{startDate})
|
||||
AND t.create_time <= #{endDate}
|
||||
GROUP BY t.site_id,DATE_FORMAT(t.create_time, '%Y-%m-%d %H:%i:00')
|
||||
order by createDate
|
||||
</select>
|
||||
</mapper>
|
||||
@ -424,15 +424,15 @@
|
||||
</select>
|
||||
|
||||
<select id="getStoragePowerList" resultType="com.xzzn.ems.domain.vo.EnergyStoragePowVo">
|
||||
SELECT t.site_id,
|
||||
SUM(t.total_active_power) AS pcsTotalActPower,
|
||||
SUM(t.total_reactive_power) AS pcsTotalReactivePower,
|
||||
SELECT t.site_id,t.device_id as deviceId,
|
||||
t.total_active_power AS pcsTotalActPower,
|
||||
t.total_reactive_power AS pcsTotalReactivePower,
|
||||
DATE_FORMAT(t.data_update_time, '%Y-%m-%d %H:%i:00') AS createDate
|
||||
FROM ems_pcs_data t
|
||||
WHERE t.site_id = #{siteId}
|
||||
AND t.data_update_time >= Date(#{startDate})
|
||||
AND t.data_update_time <= #{endDate}
|
||||
GROUP BY t.site_id, DATE_FORMAT(t.data_update_time, '%Y-%m-%d %H:%i:00')
|
||||
GROUP BY t.site_id, deviceId,pcsTotalActPower,pcsTotalReactivePower,createDate
|
||||
ORDER BY createDate
|
||||
</select>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user