统计报表-功率曲线按照分钟展示数据

This commit is contained in:
zq
2026-01-27 19:15:55 +08:00
parent eeccd19f0a
commit 5a86769b40
6 changed files with 60 additions and 28 deletions

View File

@ -136,6 +136,8 @@ public interface EmsPcsDataMapper
public List<PcsStatisListVo> getPcsActivePowerByMonth(DateSearchRequest requestVo); public List<PcsStatisListVo> getPcsActivePowerByMonth(DateSearchRequest requestVo);
public List<PcsStatisListVo> getPcsActivePowerByMinutes(DateSearchRequest requestVo);
// 实时运行-fx-pcs最高温度 // 实时运行-fx-pcs最高温度
public List<PcsMaxTempVo> getFXMaxTemp(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate); public List<PcsMaxTempVo> getFXMaxTemp(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate);
// 实时运行-dds-pcs最高温度 // 实时运行-dds-pcs最高温度

View File

@ -183,11 +183,17 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService
Date startDate = requestVo.getStartDate(); Date startDate = requestVo.getStartDate();
Date endDate = requestVo.getEndDate(); Date endDate = requestVo.getEndDate();
// 开始日期和结束日期同一天,展示 0-24 小时数据 // // 开始日期和结束日期同一天,展示 0-24 小时数据
// if (DateUtils.isSameDay(startDate, endDate)){
// endDate = DateUtils.addDays(endDate, 1);
// requestVo.setEndDate(endDate);
// dataList = emsPcsDataMapper.getPcsActivePowerByHour(requestVo);
// }
// 开始日期和结束日期同一天展示5分钟一组数据点
if (DateUtils.isSameDay(startDate, endDate)){ if (DateUtils.isSameDay(startDate, endDate)){
endDate = DateUtils.addDays(endDate, 1); endDate = DateUtils.addDays(endDate, 1);
requestVo.setEndDate(endDate); requestVo.setEndDate(endDate);
dataList = emsPcsDataMapper.getPcsActivePowerByHour(requestVo); dataList = emsPcsDataMapper.getPcsActivePowerByMinutes(requestVo);
} else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 1 } else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 1
&& DateUtils.differentDaysByMillisecond(endDate, startDate) < 30){ && DateUtils.differentDaysByMillisecond(endDate, startDate) < 30){
endDate = DateUtils.addDays(endDate, 1); endDate = DateUtils.addDays(endDate, 1);
@ -452,42 +458,44 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService
Date endDate = requestVo.getEndDate(); Date endDate = requestVo.getEndDate();
if (startDate == null || endDate == null) { if (startDate == null || endDate == null) {
// 默认按分钟展示-前一个小时数据 // 默认按分钟展示-前一个小时数据
LocalDateTime oneHourAgo = LocalDateTime.now().minusHours(1).truncatedTo(ChronoUnit.MINUTES);; LocalDateTime oneHourAgo = LocalDateTime.now().minusHours(1).truncatedTo(ChronoUnit.MINUTES);
startDate = DateUtils.toDate(oneHourAgo); startDate = DateUtils.toDate(oneHourAgo);
requestVo.setStartDate(startDate); requestVo.setStartDate(startDate);
requestVo.setEndDate(DateUtils.getNowDate()); requestVo.setEndDate(DateUtils.getNowDate());
dataList = emsAmmeterDataMapper.getPowerDataByMinutes(requestVo); // dataList = emsAmmeterDataMapper.getPowerDataByMinutes(requestVo);
// 生成目标时间点列表(每分钟一个) // // 生成目标时间点列表(每分钟一个)
List<LocalDateTime> targetMinutes = new ArrayList<>(60); // List<LocalDateTime> targetMinutes = new ArrayList<>(60);
LocalDateTime current = oneHourAgo; // LocalDateTime current = oneHourAgo;
//
for (int i = 0; i < 60; i++) { // for (int i = 0; i < 60; i++) {
targetMinutes.add(current); // 添加当前分钟 // targetMinutes.add(current); // 添加当前分钟
current = current.plusMinutes(1); // 递增1分钟 // current = current.plusMinutes(1); // 递增1分钟
} // }
//
// 填充数据 // // 填充数据
if (dataList != null && dataList.size() >= 0){ // if (dataList != null && dataList.size() >= 0){
dataList = fillEveryMinutesData(dataList,targetMinutes); // dataList = fillEveryMinutesData(dataList,targetMinutes);
} // }
} }
// 开始日期和结束日期同一天,展示 0-24 小时数据 // 开始日期和结束日期同一天,展示 0-24 小时数据
else if (DateUtils.isSameDay(startDate, endDate)){ else if (DateUtils.isSameDay(startDate, endDate)){
endDate = DateUtils.addDays(endDate, 1); endDate = DateUtils.addDays(endDate, 1);
requestVo.setEndDate(endDate); requestVo.setEndDate(endDate);
dataList = emsAmmeterDataMapper.getPowerDataByHour(requestVo); // dataList = emsAmmeterDataMapper.getPowerDataByHour(requestVo);
} else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 1 } else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 1
&& DateUtils.differentDaysByMillisecond(endDate, startDate) < 30){ && DateUtils.differentDaysByMillisecond(endDate, startDate) < 30){
endDate = DateUtils.addDays(endDate, 1); endDate = DateUtils.addDays(endDate, 1);
requestVo.setEndDate(endDate); requestVo.setEndDate(endDate);
// 开始日期-结束日期大于 1 天小于30 天,按天展示数据 // 开始日期-结束日期大于 1 天小于30 天,按天展示数据
dataList = emsAmmeterDataMapper.getPowerDataByDay(requestVo); // dataList = emsAmmeterDataMapper.getPowerDataByDay(requestVo);
} else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 30){ } else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 30){
endDate = DateUtils.addDays(endDate, 1); endDate = DateUtils.addDays(endDate, 1);
requestVo.setEndDate(endDate); requestVo.setEndDate(endDate);
// 开始日期-结束日期大于 1 个月,按月展示数据 // 开始日期-结束日期大于 1 个月,按月展示数据
dataList = emsAmmeterDataMapper.getPowerDataByMonth(requestVo); // dataList = emsAmmeterDataMapper.getPowerDataByMonth(requestVo);
} }
// 都按照5分钟一个数据点展示数据
dataList = emsAmmeterDataMapper.getPowerDataByMinute(requestVo);
// 负荷功率 // 负荷功率
dealDataPower(requestVo.getSiteId(),dataList); dealDataPower(requestVo.getSiteId(),dataList);

View File

@ -1145,10 +1145,9 @@
WITH ranked AS ( WITH ranked AS (
SELECT SELECT
*, *,
DATE_FORMAT( DATE_FORMAT(DATE_ADD(DATE_FORMAT(p.data_update_time, '%Y-%m-%d %H:00:00'), INTERVAL CEIL(MINUTE(p.data_update_time) / 5) * 5 MINUTE)
DATE_ADD(DATE_FORMAT(p.update_time, '%Y-%m-%d %H:00:00'), INTERVAL FLOOR(MINUTE(p.update_time) / 5) * 5 MINUTE)
, '%Y-%m-%d %H:%i:%s') AS statisDate, , '%Y-%m-%d %H:%i:%s') AS statisDate,
ROW_NUMBER() OVER (PARTITION BY p.device_id, date_format(p.data_update_time, '%Y-%m-%d %H:00:00'), FLOOR(MINUTE(p.data_update_time) / 5) ORDER BY p.data_update_time) as rn ROW_NUMBER() OVER (PARTITION BY p.device_id, date_format(p.data_update_time, '%Y-%m-%d %H:00:00'), CEIL(MINUTE(p.data_update_time) / 5) ORDER BY p.data_update_time DESC) as rn
FROM FROM
ems_ammeter_data p ems_ammeter_data p
<include refid="commonFilter"/> <include refid="commonFilter"/>
@ -1159,6 +1158,7 @@
<include refid="powerFilter"/> <include refid="powerFilter"/>
FROM FROM
ranked as t ranked as t
where t.rn = 1
GROUP BY t.site_id, t.statisDate GROUP BY t.site_id, t.statisDate
</select> </select>
</mapper> </mapper>

View File

@ -433,8 +433,9 @@
WITH ranked AS ( WITH ranked AS (
SELECT SELECT
*, *,
date_format(p.update_time, '%Y-%m-%d %H:00:00') + INTERVAL FLOOR(MINUTE(p.update_time) / 5) * 5 MINUTE AS group_time, DATE_FORMAT(DATE_ADD(DATE_FORMAT(p.update_time, '%Y-%m-%d %H:00:00'), INTERVAL CEIL(MINUTE(p.update_time) / 5) * 5 MINUTE)
ROW_NUMBER() OVER (PARTITION BY p.device_id, date_format(p.update_time, '%Y-%m-%d %H:00:00'), FLOOR(MINUTE(p.update_time) / 5) ORDER BY p.update_time) as rn , '%Y-%m-%d %H:%i:%s') AS group_time,
ROW_NUMBER() OVER (PARTITION BY p.device_id, date_format(p.update_time, '%Y-%m-%d %H:00:00'), CEIL(MINUTE(p.update_time) / 5) ORDER BY p.data_update_time DESC) as rn
FROM FROM
ems_battery_cluster p ems_battery_cluster p
<include refid="statisCommonFilter"/> <include refid="statisCommonFilter"/>

View File

@ -513,8 +513,9 @@
WITH ranked AS ( WITH ranked AS (
SELECT SELECT
*, *,
date_format(p.update_time, '%Y-%m-%d %H:00:00') + INTERVAL FLOOR(MINUTE(p.update_time) / 5) * 5 MINUTE AS group_time, DATE_FORMAT(DATE_ADD(DATE_FORMAT(p.update_time, '%Y-%m-%d %H:00:00'), INTERVAL CEIL(MINUTE(p.update_time) / 5) * 5 MINUTE)
ROW_NUMBER() OVER (PARTITION BY p.device_id, date_format(p.update_time, '%Y-%m-%d %H:00:00'), FLOOR(MINUTE(p.update_time) / 5) ORDER BY p.update_time) as rn , '%Y-%m-%d %H:%i:%s') AS group_time,
ROW_NUMBER() OVER (PARTITION BY p.device_id, date_format(p.update_time, '%Y-%m-%d %H:00:00'), CEIL(MINUTE(p.update_time) / 5) ORDER BY p.data_update_time DESC) as rn
FROM FROM
ems_battery_stack p ems_battery_stack p
<include refid="statisCommonFilter"/> <include refid="statisCommonFilter"/>

View File

@ -599,6 +599,26 @@
order by statisDate desc order by statisDate desc
</select> </select>
<select id="getPcsActivePowerByMinutes" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.PcsStatisListVo">
WITH ranked AS (
SELECT
*,
DATE_FORMAT(DATE_ADD(DATE_FORMAT(p.data_update_time, '%Y-%m-%d %H:00:00'), INTERVAL CEIL(MINUTE(p.data_update_time) / 5) * 5 MINUTE)
, '%Y-%m-%d %H:%i:%s') AS statisDate,
ROW_NUMBER() OVER (PARTITION BY p.device_id, date_format(p.data_update_time, '%Y-%m-%d %H:00:00'), CEIL(MINUTE(p.data_update_time) / 5) ORDER BY p.data_update_time DESC) as rn
FROM
ems_pcs_data p
<include refid="statisCommonFilter"/>
)
select
t.device_id as deviceId,
t.statisDate,
<include refid="dataTypeChooseFilter"/>
FROM
ranked as t
where t.rn = 1
</select>
<select id="getFXMaxTemp" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.PcsMaxTempVo"> <select id="getFXMaxTemp" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.PcsMaxTempVo">
SELECT t.site_id,t.device_id as deviceId, SELECT t.site_id,t.device_id as deviceId,
GREATEST( GREATEST(