设备监控-实时运行页面曲线按照每分钟展示
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
||||
@ -140,4 +140,6 @@ public interface EmsPcsDataMapper
|
||||
public List<PcsMaxTempVo> getFXMaxTemp(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate);
|
||||
// 实时运行-dds-pcs最高温度
|
||||
public List<PcsMaxTempVo> getDDSMaxTemp(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate);
|
||||
|
||||
List<PcsMaxTempVo> getPcsMaxTemp(@Param("siteId") String siteId, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
|
||||
}
|
||||
|
||||
@ -238,13 +238,13 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
|
||||
return pcdData;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
// // 生成时间列表(每分钟一个)
|
||||
// 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分钟
|
||||
// // 生成时间列表(每5分钟一个)
|
||||
// List<LocalDateTime> 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<PcsPowerList> fullFillData(List<PcsPowerList> pcsPowerList, List<LocalDateTime> targetMinutes) {
|
||||
List<PcsPowerList> 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<PcsMaxTempVo> 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<PcsMaxTempVo> 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<PcsMaxTempVo> -> 按pcs的deviceId分组转成List<PcsMaxTempList>
|
||||
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<BatteryAveTempVo> batteryAveTempList = new ArrayList<>();
|
||||
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);
|
||||
// 电池堆暂无数据,从电池簇取
|
||||
if (CollectionUtils.isEmpty(batteryAveTempList)) {
|
||||
batteryAveTempList = emsBatteryClusterMapper.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)) {
|
||||
// // 时间暂定今日+昨日
|
||||
|
||||
@ -331,18 +331,27 @@
|
||||
</select>
|
||||
|
||||
<select id="getBatteryAveTempList" resultType="com.xzzn.ems.domain.vo.BatteryAveTempVo">
|
||||
select t.site_id,
|
||||
round(avg(t.avg_cell_temp)) as batteryTemp,
|
||||
DATE_FORMAT(t.create_time, '%Y-%m-%d') AS dateDay,
|
||||
DATE_FORMAT(t.create_time, '%H:00:00') AS createDate
|
||||
from ems_battery_cluster t
|
||||
WHERE t.site_id = #{siteId}
|
||||
AND t.create_time >= #{startDate}
|
||||
AND t.create_time < DATE_ADD(#{endDate}, INTERVAL 1 DAY)
|
||||
GROUP BY t.site_id,
|
||||
DATE_FORMAT(t.create_time, '%Y-%m-%d'),
|
||||
DATE_FORMAT(t.create_time, '%H:00:00')
|
||||
ORDER BY dateDay, createDate
|
||||
WITH ranked AS (
|
||||
SELECT
|
||||
*,
|
||||
date_format(create_time, '%Y-%m-%d %H:00:00') + INTERVAL FLOOR(MINUTE(create_time) / 5) * 5 MINUTE AS group_time,
|
||||
ROW_NUMBER() OVER (PARTITION BY date_format(create_time, '%Y-%m-%d %H:00:00'), FLOOR(MINUTE(create_time) / 5) ORDER BY create_time) as rn
|
||||
FROM
|
||||
ems_battery_cluster
|
||||
where site_id = #{siteId}
|
||||
and create_time >= #{startDate}
|
||||
and create_time < DATE_ADD(#{endDate}, INTERVAL 1 DAY)
|
||||
and avg_cell_temp is not null
|
||||
)
|
||||
SELECT
|
||||
site_id,
|
||||
round(avg(avg_cell_temp)) as batteryTemp,
|
||||
DATE_FORMAT(group_time, '%Y-%m-%d') as dateDay,
|
||||
DATE_FORMAT(group_time, '%H:%i:00') as createDate,
|
||||
group_time as groupTime
|
||||
FROM
|
||||
ranked
|
||||
GROUP BY site_id,groupTime
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
@ -351,18 +351,27 @@
|
||||
</delete>
|
||||
|
||||
<select id="getBatteryAveTempList" resultType="com.xzzn.ems.domain.vo.BatteryAveTempVo">
|
||||
select t.site_id,
|
||||
round(avg(t.avg_temperature)) as batteryTemp,
|
||||
DATE_FORMAT(t.create_time, '%Y-%m-%d') AS dateDay,
|
||||
DATE_FORMAT(t.create_time, '%H:00:00') AS createDate
|
||||
from ems_battery_stack t
|
||||
WHERE t.site_id = #{siteId}
|
||||
AND t.create_time >= #{startDate}
|
||||
AND t.create_time < DATE_ADD(#{endDate}, INTERVAL 1 DAY)
|
||||
GROUP BY t.site_id,
|
||||
DATE_FORMAT(t.create_time, '%Y-%m-%d'),
|
||||
DATE_FORMAT(t.create_time, '%H:00:00')
|
||||
ORDER BY dateDay, createDate
|
||||
WITH ranked AS (
|
||||
SELECT
|
||||
*,
|
||||
date_format(create_time, '%Y-%m-%d %H:00:00') + INTERVAL FLOOR(MINUTE(create_time) / 5) * 5 MINUTE AS group_time,
|
||||
ROW_NUMBER() OVER (PARTITION BY date_format(create_time, '%Y-%m-%d %H:00:00'), FLOOR(MINUTE(create_time) / 5) ORDER BY create_time) as rn
|
||||
FROM
|
||||
ems_battery_stack
|
||||
where site_id = #{siteId}
|
||||
and create_time >= #{startDate}
|
||||
and create_time < DATE_ADD(#{endDate}, INTERVAL 1 DAY)
|
||||
and avg_temperature is not null
|
||||
)
|
||||
SELECT
|
||||
site_id,
|
||||
round(avg(avg_temperature)) as batteryTemp,
|
||||
DATE_FORMAT(group_time, '%Y-%m-%d') as dateDay,
|
||||
DATE_FORMAT(group_time, '%H:%i:00') as createDate,
|
||||
group_time as groupTime
|
||||
FROM
|
||||
ranked
|
||||
GROUP BY site_id,groupTime
|
||||
</select>
|
||||
|
||||
<sql id="statisCommonFilter">
|
||||
@ -501,15 +510,25 @@
|
||||
</select>
|
||||
|
||||
<select id="getAveSocList" resultType="com.xzzn.ems.domain.vo.BatteryAveSOCVo">
|
||||
select t.site_id,
|
||||
round(avg(t.stack_soc)) as batterySOC,
|
||||
DATE_FORMAT(t.create_time, '%Y-%m-%d') AS dateDay,
|
||||
DATE_FORMAT(t.create_time, '%H:00:00') AS createDate
|
||||
from ems_battery_stack t
|
||||
where t.site_id = #{siteId}
|
||||
AND t.create_time >= #{startDate}
|
||||
AND t.create_time < DATE_ADD(#{endDate}, INTERVAL 1 DAY)
|
||||
GROUP BY t.site_id,dateDay,createDate
|
||||
order by dateDay,createDate
|
||||
WITH ranked AS (
|
||||
SELECT
|
||||
*,
|
||||
date_format(create_time, '%Y-%m-%d %H:00:00') + INTERVAL FLOOR(MINUTE(create_time) / 5) * 5 MINUTE AS group_time,
|
||||
ROW_NUMBER() OVER (PARTITION BY date_format(create_time, '%Y-%m-%d %H:00:00'), FLOOR(MINUTE(create_time) / 5) ORDER BY create_time) as rn
|
||||
FROM
|
||||
ems_battery_stack
|
||||
where site_id = #{siteId}
|
||||
and create_time >= #{startDate}
|
||||
and create_time < DATE_ADD(#{endDate}, INTERVAL 1 DAY)
|
||||
)
|
||||
SELECT
|
||||
site_id,
|
||||
round(avg(stack_soc)) as batterySOC,
|
||||
DATE_FORMAT(group_time, '%Y-%m-%d') as dateDay,
|
||||
DATE_FORMAT(group_time, '%H:%i:00') as createDate,
|
||||
group_time as groupTime
|
||||
FROM
|
||||
ranked
|
||||
GROUP BY site_id,groupTime
|
||||
</select>
|
||||
</mapper>
|
||||
@ -469,30 +469,30 @@
|
||||
order by ammeterDate desc
|
||||
</select>
|
||||
|
||||
<select id="getStoragePowerList" resultType="com.xzzn.ems.domain.vo.EnergyStoragePowVo">
|
||||
<select id="getStoragePowerList" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.EnergyStoragePowVo">
|
||||
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
|
||||
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)
|
||||
and data_update_time < DATE_ADD(#{endDate}, INTERVAL 1 DAY)
|
||||
)
|
||||
select
|
||||
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
|
||||
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
|
||||
</select>
|
||||
|
||||
<select id="getPcsDataByMonth" resultType="com.xzzn.ems.domain.vo.SiteMonitorDataVo">
|
||||
@ -645,4 +645,37 @@
|
||||
group by deviceId,dateDay,createDate,temp
|
||||
order by dateDay,createDate
|
||||
</select>
|
||||
|
||||
<select id="getPcsMaxTemp" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.PcsMaxTempVo">
|
||||
WITH ranked AS (
|
||||
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,
|
||||
GREATEST(
|
||||
COALESCE(u_temperature, -999),
|
||||
COALESCE(v_temperature, -999),
|
||||
COALESCE(w_temperature, -999),
|
||||
COALESCE(module1_temp, -999),
|
||||
COALESCE(module2_temp, -999),
|
||||
COALESCE(module3_temp, -999),
|
||||
COALESCE(module4_temp, -999)
|
||||
) AS temp,
|
||||
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
|
||||
rn = 1
|
||||
</select>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user