优化sql

This commit is contained in:
2025-07-18 20:14:38 +08:00
parent 51e6936d77
commit c51c4be498
6 changed files with 91 additions and 73 deletions

View File

@ -11,6 +11,7 @@ public class EnergyStoragePowVo {
/** /**
* 显示日期 * 显示日期
*/ */
private Date createDate; private Date createDate;
/** /**

View File

@ -83,4 +83,6 @@ public interface EmsBatteryStackMapper
public List<StackStatisListVo> getStackDataByDay(DateSearchRequest requestVo); public List<StackStatisListVo> getStackDataByDay(DateSearchRequest requestVo);
public List<StackStatisListVo> getStackDataByMonth(DateSearchRequest requestVo); public List<StackStatisListVo> getStackDataByMonth(DateSearchRequest requestVo);
public EmsBatteryStack getSiteSumStackInfo(String siteId);
} }

View File

@ -117,12 +117,11 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
if (!StringUtils.isEmpty(siteId)) { if (!StringUtils.isEmpty(siteId)) {
// 实时有功功率/实时无功功率/今日充电量/今日放电量 // 实时有功功率/实时无功功率/今日充电量/今日放电量
siteMonitorRunningHeadInfoVo = emsPcsDataMapper.getSiteRunningHeadInfo(siteId); siteMonitorRunningHeadInfoVo = emsPcsDataMapper.getSiteRunningHeadInfo(siteId);
// 电池SOC // 电池SOC + 电池堆SOH
// 电池堆SOH EmsBatteryStack emsBatteryStack = emsBatteryStackMapper.getSiteSumStackInfo(siteId);
EmsBatteryData emsBatteryData = emsBatteryDataMapper.getBatteryDataBySiteId(siteId); if (emsBatteryStack != null) {
if (emsBatteryData != null) { siteMonitorRunningHeadInfoVo.setSoc(emsBatteryStack.getStackSoc());
siteMonitorRunningHeadInfoVo.setSoc(emsBatteryData.getSoc()); siteMonitorRunningHeadInfoVo.setSoh(emsBatteryStack.getStackSoh());
siteMonitorRunningHeadInfoVo.setSoh(emsBatteryData.getSoh());
} }
} }
@ -135,8 +134,9 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
SiteMonitorRuningInfoVo siteMonitorRuningInfoVo = new SiteMonitorRuningInfoVo(); SiteMonitorRuningInfoVo siteMonitorRuningInfoVo = new SiteMonitorRuningInfoVo();
if (!StringUtils.isEmpty(siteId)) { if (!StringUtils.isEmpty(siteId)) {
// 时间暂定今日+昨日 // 时间暂定今日+昨日
Date today = new Date(); Date today = DateUtils.getNowDate();
Date yesterday = DateUtils.addDays(today, -1); Date yesterday = DateUtils.addDays(today, -1);
//储能功率list //储能功率list
List<EnergyStoragePowVo> energyStoragePowList = emsPcsDataMapper.getStoragePowerList(siteId, yesterday, today); List<EnergyStoragePowVo> energyStoragePowList = emsPcsDataMapper.getStoragePowerList(siteId, yesterday, today);
siteMonitorRuningInfoVo.setEnergyStoragePowList(energyStoragePowList); siteMonitorRuningInfoVo.setEnergyStoragePowList(energyStoragePowList);

View File

@ -328,30 +328,26 @@
<select id="getAveSocList" resultType="com.xzzn.ems.domain.vo.BatteryAveSOCVo"> <select id="getAveSocList" resultType="com.xzzn.ems.domain.vo.BatteryAveSOCVo">
select t.site_id, select t.site_id,
t.battery_pack_soc as batterySOC, avg(t.battery_pack_soc) as batterySOC,
t.create_time as createDate DATE_FORMAT(t.create_time, '%Y-%m-%d %H:%i:00') AS createDate
from ems_battery_cluster t from ems_battery_cluster t
inner join (select site_id,create_time,MIN(device_id) as device_id where t.site_id = #{siteId}
from ems_battery_cluster AND t.create_time &gt;= Date(#{startDate})
where site_id = #{siteId} AND t.create_time &lt;= #{endDate}
AND create_time &gt;= #{startDate} GROUP BY t.site_id,DATE_FORMAT(t.create_time, '%Y-%m-%d %H:%i:00')
AND create_time &lt;= #{endDate} order by createDate
GROUP BY site_id,create_time
) temp on t.site_id = temp.site_id and t.create_time = temp.create_time and t.device_id = temp.device_id
</select> </select>
<select id="getBatteryAveTempList" resultType="com.xzzn.ems.domain.vo.BatteryAveTempVo"> <select id="getBatteryAveTempList" resultType="com.xzzn.ems.domain.vo.BatteryAveTempVo">
select t.site_id, select t.site_id,
t.avg_cell_temp as batteryTemp, avg(t.avg_cell_temp) as batteryTemp,
t.create_time as createDate DATE_FORMAT(t.create_time, '%Y-%m-%d %H:%i:00') AS createDate
from ems_battery_cluster t from ems_battery_cluster t
inner join (select site_id,create_time,MIN(device_id) as device_id where t.site_id = '021_FXX_01'
from ems_battery_cluster AND t.create_time &gt;= Date(#{startDate})
where site_id = #{siteId} AND t.create_time &lt;= #{endDate}
AND create_time &gt;= #{startDate} GROUP BY t.site_id,DATE_FORMAT(t.create_time, '%Y-%m-%d %H:%i:00')
AND create_time &lt;= #{endDate} order by createDate
GROUP BY site_id,create_time
) temp on t.site_id = temp.site_id and t.create_time = temp.create_time and t.device_id = temp.device_id
</select> </select>
<select id="getClusterDataByHour" resultType="com.xzzn.ems.domain.vo.ClusterStatisListVo"> <select id="getClusterDataByHour" resultType="com.xzzn.ems.domain.vo.ClusterStatisListVo">

View File

@ -277,16 +277,14 @@
<select id="getStackAveTempList" resultType="com.xzzn.ems.domain.vo.StackAveTempVo"> <select id="getStackAveTempList" resultType="com.xzzn.ems.domain.vo.StackAveTempVo">
select t.site_id, select t.site_id,
t.operating_temp as temp, avg(t.operating_temp) as temp,
t.create_time as createDate DATE_FORMAT(t.create_time, '%Y-%m-%d %H:%i:00') AS createDate
from ems_battery_stack t from ems_battery_stack t
inner join (select site_id,create_time,MIN(device_id) as device_id where t.site_id = #{siteId}
from ems_battery_stack AND t.create_time &gt;= Date(#{startDate})
where site_id = #{siteId} AND t.create_time &lt;= #{endDate}
AND create_time &gt;= Date(#{startDate}) GROUP BY t.site_id,createDate
AND create_time &lt;= #{endDate} order by createDate
GROUP BY site_id,create_time
) temp on t.site_id = temp.site_id and t.create_time = temp.create_time and t.device_id = temp.device_id
</select> </select>
<sql id="statisCommonFilter"> <sql id="statisCommonFilter">
@ -358,4 +356,19 @@
AND latest.max_update_time = t.update_time AND latest.max_update_time = t.update_time
order by statisDate desc order by statisDate desc
</select> </select>
<select id="getSiteSumStackInfo" parameterType="String" resultType="com.xzzn.ems.domain.EmsBatteryStack">
select SUM(t.stack_soc) as stackSoc,
sum(t.stack_soh) as stackSoh
from ems_battery_stack t
INNER JOIN (
select p.site_id,p.device_id,MAX(p.create_time) as max_time
from ems_battery_stack p
where p.site_id = #{siteId}
group by p.site_id, p.device_id
) latest on t.site_id = latest.site_id
and t.device_id = latest.device_id
and t.create_time = latest.max_time
where t.site_id = #{siteId}
</select>
</mapper> </mapper>

View File

@ -295,36 +295,43 @@
</delete> </delete>
<select id="getPcsDataBySiteId" resultType="com.xzzn.ems.domain.vo.SiteMonitorDataVo"> <select id="getPcsDataBySiteId" resultType="com.xzzn.ems.domain.vo.SiteMonitorDataVo">
select latest.dateDay as ammeterDate, select CONCAT(t.date_month,'-',t.date_day) as ammeterDate,
sum(t.daily_ac_charge_energy) as chargedCap, sum(t.daily_ac_charge_energy) as chargedCap,
sum(t.daily_ac_discharge_energy) as disChargedCap sum(t.daily_ac_discharge_energy) as disChargedCap
from ( from ems_pcs_data t
SELECT p.site_id, p.device_id,DATE_FORMAT(p.data_update_time, '%m-%d') as dateDay, MAX(p.data_update_time) AS max_update_time inner join( SELECT p.site_id, p.device_id, p.date_month,p.date_day, MAX(p.data_update_time) AS max_update_time
FROM ems_pcs_data p FROM ems_pcs_data p
where p.site_id = #{siteId} and p.create_time >= CURDATE() - INTERVAL #{limitTime} DAY where p.site_id = #{siteId}
GROUP BY p.site_id,p.device_id,dateDay and p.data_update_time >= CURDATE() - INTERVAL #{limitTime} DAY
) latest inner join ems_pcs_data t ON latest.site_id = t.site_id GROUP BY p.site_id,p.device_id,p.date_month,p.date_day
AND latest.device_id = t.device_id ) latest ON t.site_id = latest.site_id
AND latest.max_update_time = t.data_update_time AND t.device_id = latest.device_id
AND t.date_month = latest.date_month
AND t.date_day = latest.date_day
AND t.data_update_time = latest.max_update_time
group by ammeterDate group by ammeterDate
order by ammeterDate desc order by ammeterDate
</select> </select>
<select id="getPcsTotalChargeData" resultType="map"> <select id="getPcsTotalChargeData" resultType="map">
SELECT SELECT
SUM(t.total_ac_charge_energy) AS totalChargedCap, SUM(p.total_ac_charge_energy) AS totalChargedCap,
SUM(t.total_ac_discharge_energy) AS totalDischargedCap, SUM(p.total_ac_discharge_energy) AS totalDischargedCap,
SUM(t.total_active_power) as gridNrtPower SUM(p.total_active_power) AS gridNrtPower
FROM ( FROM ems_pcs_data p
SELECT p.site_id, p.device_id, MAX(p.data_update_time) AS max_update_time INNER JOIN ems_site_setting s ON p.site_id = s.site_id
FROM ems_pcs_data p inner join ems_site_setting s on p.site_id = s.site_id INNER JOIN ( SELECT site_id, device_id, MAX(data_update_time) AS max_update_time
FROM ems_pcs_data
<if test="siteId !=null and siteId !=''">
where site_id = #{siteId}
</if>
GROUP BY site_id, device_id
) latest ON p.site_id = latest.site_id
AND p.device_id = latest.device_id
AND p.data_update_time = latest.max_update_time
<if test="siteId !=null and siteId !=''"> <if test="siteId !=null and siteId !=''">
where p.site_id = #{siteId} where p.site_id = #{siteId}
</if> </if>
GROUP BY p.site_id,p.device_id
) latest inner join ems_pcs_data t ON latest.site_id = t.site_id
AND latest.device_id = t.device_id
AND latest.max_update_time = t.data_update_time
</select> </select>
<select id="getSiteRunningHeadInfo" parameterType="String" resultType="com.xzzn.ems.domain.vo.SiteMonitorRunningHeadInfoVo"> <select id="getSiteRunningHeadInfo" parameterType="String" resultType="com.xzzn.ems.domain.vo.SiteMonitorRunningHeadInfoVo">
@ -351,7 +358,8 @@
SUM(t.daily_ac_discharge_energy) AS disChargeEnergy SUM(t.daily_ac_discharge_energy) AS disChargeEnergy
FROM ems_pcs_data t FROM ems_pcs_data t
INNER JOIN ( SELECT site_id, device_id, date_month, date_day, MAX(data_update_time) AS max_update_time INNER JOIN ( SELECT site_id, device_id, date_month, date_day, MAX(data_update_time) AS max_update_time
FROM ems_pcs_data GROUP BY site_id, device_id, date_month, date_day FROM ems_pcs_data
GROUP BY site_id, device_id, date_month, date_day
) max_dates ON t.site_id = max_dates.site_id ) max_dates ON t.site_id = max_dates.site_id
AND t.device_id = max_dates.device_id AND t.device_id = max_dates.device_id
AND t.date_month = max_dates.date_month AND t.date_month = max_dates.date_month
@ -413,18 +421,16 @@
</select> </select>
<select id="getStoragePowerList" resultType="com.xzzn.ems.domain.vo.EnergyStoragePowVo"> <select id="getStoragePowerList" resultType="com.xzzn.ems.domain.vo.EnergyStoragePowVo">
select t.site_id, SELECT t.site_id,
t.total_active_power as pcsTotalActPower, SUM(t.total_active_power) AS pcsTotalActPower,
t.total_reactive_power as pcsTotalReactivePower, SUM(t.total_reactive_power) AS pcsTotalReactivePower,
t.create_time as createDate DATE_FORMAT(t.data_update_time, '%Y-%m-%d %H:%i:00') AS createDate
from ems_pcs_data t FROM ems_pcs_data t
inner join (select site_id,create_time,MIN(device_id) as device_id WHERE t.site_id = #{siteId}
from ems_pcs_data AND t.data_update_time &gt;= Date(#{startDate})
where site_id = #{siteId} AND t.data_update_time &lt;= #{endDate}
AND create_time &gt;= Date(#{startDate}) GROUP BY t.site_id, DATE_FORMAT(t.data_update_time, '%Y-%m-%d %H:%i:00')
AND create_time &lt;= #{endDate} ORDER BY createDate
GROUP BY site_id,create_time
) temp on t.site_id = temp.site_id and t.create_time = temp.create_time and t.device_id = temp.device_id
</select> </select>
<select id="getPcsDataByMonth" resultType="com.xzzn.ems.domain.vo.SiteMonitorDataVo"> <select id="getPcsDataByMonth" resultType="com.xzzn.ems.domain.vo.SiteMonitorDataVo">