dev #2

Merged
dashixiong merged 349 commits from dev into main 2026-02-11 01:55:46 +00:00
375 changed files with 55587 additions and 1133 deletions
Showing only changes of commit b3f7ca7a81 - Show all commits

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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 = 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)) {
// // 时间暂定今日+昨日

View File

@ -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 &gt;= #{startDate}
AND t.create_time &lt; 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 &gt;= #{startDate}
and create_time &lt; 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>

View File

@ -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 &gt;= #{startDate}
AND t.create_time &lt; 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 &gt;= #{startDate}
and create_time &lt; 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 &gt;= #{startDate}
AND t.create_time &lt; 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 &gt;= #{startDate}
and create_time &lt; 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>

View File

@ -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
FROM
ems_pcs_data
where site_id = #{siteId}
and data_update_time &gt;= #{startDate}
AND data_update_time &lt; 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 &gt;= #{startDate}
and data_update_time &lt; 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
</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 &gt;= #{startDate}
and data_update_time &lt; 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>