统计报表-pcs曲线

This commit is contained in:
2025-07-07 22:15:01 +08:00
parent 11a95c19fd
commit 7d1f1836d8
16 changed files with 282 additions and 103 deletions

View File

@ -52,10 +52,10 @@ public class EmsSiteMonitorController extends BaseController{
return success(iSingleSiteService.getRunningGraphStorage(siteId));
}
@GetMapping("/runningGraph/pcsAveTemp")
public AjaxResult getRunningGraphPcsTemp(@RequestParam String siteId)
@GetMapping("/runningGraph/stackAveTemp")
public AjaxResult getRunningGraphStackTemp(@RequestParam String siteId)
{
return success(iSingleSiteService.getRunningGraphPcsTemp(siteId));
return success(iSingleSiteService.getRunningGraphStackTemp(siteId));
}
@GetMapping("/runningGraph/batteryAveSoc")

View File

@ -45,4 +45,19 @@ public class EmsStatisticalReportController extends BaseController
}
}
/**
* 概率统计-PCS曲线
*/
@GetMapping("/getPCSData")
public AjaxResult getPCSData(DateSearchRequest requestVo)
{
if (!StringUtils.isEmpty(requestVo.getSiteId()) &&
!StringUtils.isEmpty(requestVo.getDeviceId()) &&
requestVo.getDataType() != 0) {
return success(ieEmsStatsReportService.getPCSDataResult(requestVo));
} else {
return error("缺少必传项");
}
}
}

View File

@ -21,6 +21,10 @@ public class DateSearchRequest {
private String siteId;
private String deviceId;
private int dataType;
public Date getStartDate() {
return startDate;
}
@ -44,4 +48,20 @@ public class DateSearchRequest {
public void setSiteId(String siteId) {
this.siteId = siteId;
}
public String getDeviceId() {
return deviceId;
}
public void setDeviceId(String deviceId) {
this.deviceId = deviceId;
}
public int getDataType() {
return dataType;
}
public void setDataType(int dataType) {
this.dataType = dataType;
}
}

View File

@ -3,7 +3,7 @@ package com.xzzn.ems.domain.vo;
import java.math.BigDecimal;
/**
* 首页看板数据概览-电量指标
* 数据统计-电量指标
*/
public class ElectricIndexList {
/**

View File

@ -15,7 +15,7 @@ public class SiteMonitorRuningInfoVo {
/**
* pcs平均温度list
*/
private List<PCSAveTempVo> pcsAveTempList;
private List<StackAveTempVo> stackAveTempList;
/**
* 电池平均soclist
@ -35,12 +35,12 @@ public class SiteMonitorRuningInfoVo {
this.energyStoragePowList = energyStoragePowList;
}
public List<PCSAveTempVo> getPcsAveTempList() {
return pcsAveTempList;
public List<StackAveTempVo> getStackAveTempList() {
return stackAveTempList;
}
public void setPcsAveTempList(List<PCSAveTempVo> pcsAveTempList) {
this.pcsAveTempList = pcsAveTempList;
public void setStackAveTempList(List<StackAveTempVo> stackAveTempList) {
this.stackAveTempList = stackAveTempList;
}
public List<BatteryAveSOCVo> getBatteryAveSOCList() {

View File

@ -4,10 +4,10 @@ import java.math.BigDecimal;
import java.util.Date;
/**
* 实时运行-pcs平均温度数据
* 实时运行-平均温度数据
*
*/
public class PCSAveTempVo {
public class StackAveTempVo {
/**
* 数据时间
*/
@ -16,7 +16,7 @@ public class PCSAveTempVo {
/**
* 实时温度
*/
private BigDecimal pcsTemp;
private BigDecimal temp;
public Date getCreateDate() {
@ -27,11 +27,11 @@ public class PCSAveTempVo {
this.createDate = createDate;
}
public BigDecimal getPcsTemp() {
return pcsTemp;
public BigDecimal getTemp() {
return temp;
}
public void setPcsTemp(BigDecimal pcsTemp) {
this.pcsTemp = pcsTemp;
public void setTemp(BigDecimal temp) {
this.temp = temp;
}
}

View File

@ -1,8 +1,11 @@
package com.xzzn.ems.mapper;
import java.util.Date;
import java.util.List;
import com.xzzn.ems.domain.EmsBatteryCluster;
import com.xzzn.ems.domain.vo.BMSBatteryDataList;
import com.xzzn.ems.domain.vo.BatteryAveSOCVo;
import com.xzzn.ems.domain.vo.BatteryAveTempVo;
import org.apache.ibatis.annotations.Param;
/**
@ -68,4 +71,16 @@ public interface EmsBatteryClusterMapper
* @return
*/
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);
public List<BatteryAveTempVo> getBatteryAveTempList(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate);
}

View File

@ -1,8 +1,10 @@
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.BMSOverViewVo;
import com.xzzn.ems.domain.vo.StackAveTempVo;
import org.apache.ibatis.annotations.Param;
/**
* 电池堆数据Mapper接口
@ -61,9 +63,11 @@ public interface EmsBatteryStackMapper
public int deleteEmsBatteryStackByIds(Long[] ids);
/**
* 获取电池堆信息
* 获取实时运行-堆平均温度
* @param siteId
* @param startDate
* @param endDate
* @return
*/
public List<BMSOverViewVo> selectEmsBatteryStackBySiteId(String siteId);
public List<StackAveTempVo> getStackAveTempList(@Param("siteId")String siteId, @Param("startDate") Date startDate, @Param("endDate")Date endDate);
}

View File

@ -133,15 +133,13 @@ public interface EmsPcsDataMapper
public List<EnergyStoragePowVo> getStoragePowerList(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate);
/**
* 获取实时运行-pcs平均温度
* @param siteId
* @param startDate
* @param endDate
* pcs曲线运行数据
* @param requestVo
* @return
*/
public List<PCSAveTempVo> getPcsAveTempList(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate);
public List<PcsStatisListVo> getPcsActivePowerByDay(DateSearchRequest requestVo);
public List<BatteryAveSOCVo> getAveSocList(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate);
public List<PcsStatisListVo> getPcsActivePowerByHour(DateSearchRequest requestVo);
public List<BatteryAveTempVo> getBatteryAveTempList(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate);
public List<PcsStatisListVo> getPcsActivePowerByMonth(DateSearchRequest requestVo);
}

View File

@ -1,7 +1,10 @@
package com.xzzn.ems.service;
import com.xzzn.ems.domain.vo.DateSearchRequest;
import com.xzzn.ems.domain.vo.ElectricDataInfoVo;;import java.util.Date;
import com.xzzn.ems.domain.vo.ElectricDataInfoVo;
import com.xzzn.ems.domain.vo.PcsStatisListVo;
import java.util.List;
/**
* 统计报表数据Service接口
@ -13,4 +16,6 @@ public interface IEmsStatsReportService
{
public ElectricDataInfoVo getElectricDataResult(DateSearchRequest requestVo);
public List<PcsStatisListVo> getPCSDataResult(DateSearchRequest requestVo);
}

View File

@ -31,7 +31,7 @@ public interface ISingleSiteService
public AmmeterDataResponse getAmmeterDataList(String siteId);
public SiteMonitorRuningInfoVo getRunningGraphPcsTemp(String siteId);
public SiteMonitorRuningInfoVo getRunningGraphStackTemp(String siteId);
public SiteMonitorRuningInfoVo getRunningGraphBatterySoc(String siteId);

View File

@ -3,6 +3,7 @@ package com.xzzn.ems.service.impl;
import com.xzzn.common.utils.DateUtils;
import com.xzzn.ems.domain.vo.DateSearchRequest;
import com.xzzn.ems.domain.vo.ElectricDataInfoVo;
import com.xzzn.ems.domain.vo.PcsStatisListVo;
import com.xzzn.ems.domain.vo.SiteMonitorDataVo;
import com.xzzn.ems.mapper.EmsPcsDataMapper;
import com.xzzn.ems.service.IEmsStatsReportService;
@ -38,14 +39,10 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService
public ElectricDataInfoVo getElectricDataResult(DateSearchRequest requestVo) {
ElectricDataInfoVo electricDataInfoVo = new ElectricDataInfoVo();
// 默认时间处理
dealRequestTime(requestVo);
Date startDate = requestVo.getStartDate();
Date endDate = requestVo.getEndDate();
if (startDate == null && endDate == null) {
// 如果没有传时间默认从今天往前7天
LocalDate sevenDaysAgo = LocalDate.now().minusDays(6);
startDate = DateUtils.toDate(sevenDaysAgo);
endDate = new Date();
}
List<SiteMonitorDataVo> dataList = new ArrayList();
// 开始日期和结束日期同一天,展示 0-24 小时数据
@ -93,4 +90,48 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService
}
return electricDataInfoVo;
}
@Override
public List<PcsStatisListVo> getPCSDataResult(DateSearchRequest requestVo) {
List<PcsStatisListVo> dataList = new ArrayList();
// 默认时间-7天
dealRequestTime(requestVo);
Date startDate = requestVo.getStartDate();
Date endDate = requestVo.getEndDate();
// 开始日期和结束日期同一天,展示 0-24 小时数据
if (DateUtils.isSameDay(startDate, endDate)){
endDate = DateUtils.addDays(endDate, 1);
requestVo.setEndDate(endDate);
dataList = emsPcsDataMapper.getPcsActivePowerByHour(requestVo);
} else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 1
&& DateUtils.differentDaysByMillisecond(endDate, startDate) < 30){
endDate = DateUtils.addDays(endDate, 1);
requestVo.setEndDate(endDate);
// 开始日期-结束日期大于 1 天小于30 天,按天展示数据
dataList = emsPcsDataMapper.getPcsActivePowerByDay(requestVo);
} else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 30){
endDate = DateUtils.addDays(endDate, 1);
requestVo.setEndDate(endDate);
// 开始日期-结束日期大于 1 个月,按月展示数据
dataList = emsPcsDataMapper.getPcsActivePowerByMonth(requestVo);
}
return dataList;
}
// 统计入参时间处理
public void dealRequestTime(DateSearchRequest requestVo){
Date startDate = requestVo.getStartDate();
Date endDate = requestVo.getEndDate();
if (startDate == null && endDate == null) {
// 如果没有传时间默认从今天往前7天
LocalDate sevenDaysAgo = LocalDate.now().minusDays(6);
startDate = DateUtils.toDate(sevenDaysAgo);
endDate = new Date();
requestVo.setStartDate(startDate);
requestVo.setEndDate(endDate);
}
}
}

View File

@ -142,17 +142,17 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
}
return siteMonitorRuningInfoVo;
}
// 获取单站监控实时运行-poc平均温度
// 获取单站监控实时运行-stack平均温度
@Override
public SiteMonitorRuningInfoVo getRunningGraphPcsTemp(String siteId) {
public SiteMonitorRuningInfoVo getRunningGraphStackTemp(String siteId) {
SiteMonitorRuningInfoVo siteMonitorRuningInfoVo = new SiteMonitorRuningInfoVo();
if (!StringUtils.isEmpty(siteId)) {
// 时间暂定今日+昨日
Date today = new Date();
Date yesterday = DateUtils.addDays(today, -1);
//pcs平均温度list
List<PCSAveTempVo> pcsAveTempVos = emsPcsDataMapper.getPcsAveTempList(siteId, yesterday, today);
siteMonitorRuningInfoVo.setPcsAveTempList(pcsAveTempVos);
List<StackAveTempVo> stackAveTempVos = emsBatteryStackMapper.getStackAveTempList(siteId, yesterday, today);
siteMonitorRuningInfoVo.setStackAveTempList(stackAveTempVos);
}
return siteMonitorRuningInfoVo;
}
@ -165,7 +165,7 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
Date today = new Date();
Date yesterday = DateUtils.addDays(today, -1);
//电池平均soclist
List<BatteryAveSOCVo> batteryAveSOCList = emsPcsDataMapper.getAveSocList(siteId, yesterday, today);
List<BatteryAveSOCVo> batteryAveSOCList = emsBatteryClusterMapper.getAveSocList(siteId, yesterday, today);
siteMonitorRuningInfoVo.setBatteryAveSOCList(batteryAveSOCList);
}
return siteMonitorRuningInfoVo;
@ -179,7 +179,7 @@ public class SingleSiteServiceImpl implements ISingleSiteService {
Date today = new Date();
Date yesterday = DateUtils.addDays(today, -1);
//电池平均温度list
List<BatteryAveTempVo> batteryAveTempList = emsPcsDataMapper.getBatteryAveTempList(siteId, yesterday, today);
List<BatteryAveTempVo> batteryAveTempList = emsBatteryClusterMapper.getBatteryAveTempList(siteId, yesterday, today);
siteMonitorRuningInfoVo.setBatteryAveTempList(batteryAveTempList);
}
return siteMonitorRuningInfoVo;

View File

@ -325,4 +325,33 @@
group by t.cluster_voltage,t.cluster_current,t.current_soc,t.site_id,t.device_id,t.max_cell_voltage,t.min_cell_voltage,
t.max_cell_temp,t.min_cell_temp
</select>
<select id="getAveSocList" resultType="com.xzzn.ems.domain.vo.BatteryAveSOCVo">
select t.site_id,
t.battery_pack_soc as batterySOC,
t.create_time as createDate
from ems_battery_cluster t
inner join (select site_id,create_time,MIN(device_id) as device_id
from ems_battery_cluster
where site_id = #{siteId}
AND create_time &gt;= Date(#{startDate})
AND create_time &lt;= #{endDate}
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 id="getBatteryAveTempList" resultType="com.xzzn.ems.domain.vo.BatteryAveTempVo">
select t.site_id,
t.avg_cell_temp as batteryTemp,
t.create_time as createDate
from ems_battery_cluster t
inner join (select site_id,create_time,MIN(device_id) as device_id
from ems_battery_cluster
where site_id = #{siteId}
AND create_time &gt;= Date(#{startDate})
AND create_time &lt;= #{endDate}
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>
</mapper>

View File

@ -274,4 +274,18 @@
#{id}
</foreach>
</delete>
<select id="getStackAveTempList" resultType="com.xzzn.ems.domain.vo.StackAveTempVo">
select t.site_id,
t.operating_temp as temp,
t.create_time as createDate
from ems_battery_stack t
inner join (select site_id,create_time,MIN(device_id) as device_id
from ems_battery_stack
where site_id = #{siteId}
AND create_time &gt;= Date(#{startDate})
AND create_time &lt;= #{endDate}
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>
</mapper>

View File

@ -387,19 +387,23 @@
order by tmp.device_id
</select>
<sql id="commonFilter">
WHERE p.site_id = #{siteId}
<if test="startDate != null">
AND p.data_update_time &gt;= #{startDate}
</if>
<if test="endDate != null">
AND p.data_update_time &lt; #{endDate}
</if>
</sql>
<select id="getPcsDataByDay" resultType="com.xzzn.ems.domain.vo.SiteMonitorDataVo">
select DATE(latest.max_update_time) as ammeterDate,
sum(t.total_ac_charge_energy) as chargedCap,
sum(t.total_ac_discharge_energy) as disChargedCap
from ( 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
where p.site_id = #{siteId}
<if test="startDate != null">
and p.data_update_time &gt;= #{startDate}
</if>
<if test="endDate != null">
and p.data_update_time &lt; #{endDate}
</if>
<include refid="commonFilter"/>
GROUP BY p.site_id,p.device_id,p.date_month,p.date_day
) latest inner join ems_pcs_data t ON latest.site_id = t.site_id
AND latest.device_id = t.device_id
@ -425,61 +429,13 @@
) temp on t.site_id = temp.site_id and t.create_time = temp.create_time and t.device_id = temp.device_id
</select>
<select id="getPcsAveTempList" resultType="com.xzzn.ems.domain.vo.PCSAveTempVo">
select t.site_id,
t.pcs_module_temperature as pcsTemp,
t.create_time as createDate
from ems_pcs_data t
inner join (select site_id,create_time,MIN(device_id) as device_id
from ems_pcs_data
where site_id = #{siteId}
AND create_time &gt;= Date(#{startDate})
AND create_time &lt;= #{endDate}
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 id="getAveSocList" resultType="com.xzzn.ems.domain.vo.BatteryAveSOCVo">
select t.site_id,
t.battery_pack_soc as batterySOC,
t.create_time as createDate
from ems_battery_cluster t
inner join (select site_id,create_time,MIN(device_id) as device_id
from ems_battery_cluster
where site_id = #{siteId}
AND create_time &gt;= Date(#{startDate})
AND create_time &lt;= #{endDate}
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 id="getBatteryAveTempList" resultType="com.xzzn.ems.domain.vo.BatteryAveTempVo">
select t.site_id,
t.avg_cell_temp as batteryTemp,
t.create_time as createDate
from ems_battery_cluster t
inner join (select site_id,create_time,MIN(device_id) as device_id
from ems_battery_cluster
where site_id = #{siteId}
AND create_time &gt;= Date(#{startDate})
AND create_time &lt;= #{endDate}
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 id="getPcsDataByMonth" resultType="com.xzzn.ems.domain.vo.SiteMonitorDataVo">
select DATE_FORMAT(latest.max_update_time, '%Y-%m') as ammeterDate,
sum(t.total_ac_charge_energy) as chargedCap,
sum(t.total_ac_discharge_energy) as disChargedCap
from ( SELECT p.site_id, p.device_id,p.date_month,MAX(p.data_update_time) AS max_update_time
FROM ems_pcs_data p
where p.site_id = #{siteId}
<if test="startDate != null">
and p.data_update_time &gt;= #{startDate}
</if>
<if test="endDate != null">
and p.data_update_time &lt; #{endDate}
</if>
<include refid="commonFilter"/>
GROUP BY p.site_id,p.device_id,p.date_month
) latest inner join ems_pcs_data t ON latest.site_id = t.site_id
AND latest.device_id = t.device_id
@ -495,13 +451,7 @@
sum(t.total_ac_discharge_energy) as disChargedCap
from ( SELECT p.site_id, p.device_id,DATE_FORMAT(p.data_update_time, '%H')+1 AS dateHour,MAX(p.data_update_time) as max_update_time
FROM ems_pcs_data p
where p.site_id = #{siteId}
<if test="startDate != null">
and p.data_update_time &gt;= #{startDate}
</if>
<if test="endDate != null">
and p.data_update_time &lt; #{endDate}
</if>
<include refid="commonFilter"/>
GROUP BY p.site_id,p.device_id,dateHour
) latest inner join ems_pcs_data t ON latest.site_id = t.site_id
AND latest.device_id = t.device_id
@ -509,4 +459,92 @@
group by ammeterDate
order by ammeterDate desc
</select>
<sql id="statisCommonFilter">
WHERE p.site_id = #{siteId}
and p.device_id = #{deviceId}
<if test="startDate != null">
AND p.data_update_time &gt;= DATE(#{startDate})
</if>
<if test="endDate != null">
AND p.data_update_time &lt; DATE(#{endDate})
</if>
</sql>
<sql id="dataTypeChooseFilter">
<choose>
<when test="dataType == 1">
t.total_active_power as activePower
</when>
<when test="dataType == 2">
t.total_reactive_power as reactivePower
</when>
<when test="dataType == 3">
t.sys_u_current as uCurrent,
t.sys_v_current as vCurrent,
t.sys_w_current as wCurrent
</when>
</choose>
</sql>
<sql id="groupChooseFilter">
<choose>
<when test="dataType == 1">
,activePower
</when>
<when test="dataType == 2">
,reactivePower
</when>
<when test="dataType == 3">
,uCurrent,vCurrent,wCurrent
</when>
</choose>
</sql>
<select id="getPcsActivePowerByDay" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.PcsStatisListVo">
select CONCAT(t.date_month,'/',t.date_day) as statisDate,
<include refid="dataTypeChooseFilter"/>
from ( 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
<include refid="statisCommonFilter"/>
GROUP BY p.site_id,p.device_id,p.date_month,p.date_day
) 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
and latest.date_month = t.date_month
and latest.date_day = t.date_day
group by statisDate
<include refid="groupChooseFilter"/>
order by statisDate desc
</select>
<select id="getPcsActivePowerByMonth" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.PcsStatisListVo">
select DATE_FORMAT(latest.max_update_time, '%Y-%m') as statisDate,
<include refid="dataTypeChooseFilter"/>
from ( SELECT p.site_id, p.device_id,p.date_month,MAX(p.data_update_time) as max_update_time
FROM ems_pcs_data p
<include refid="statisCommonFilter"/>
GROUP BY p.site_id,p.device_id,p.date_month
) 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
and latest.date_month = t.date_month
group by statisDate
<include refid="groupChooseFilter"/>
order by statisDate desc
</select>
<select id="getPcsActivePowerByHour" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.PcsStatisListVo">
select latest.dateHour as statisDate,
<include refid="dataTypeChooseFilter"/>
from ( SELECT p.site_id, p.device_id,DATE_FORMAT(p.data_update_time, '%H')+1 AS dateHour,MAX(p.data_update_time) as max_update_time
FROM ems_pcs_data p
<include refid="statisCommonFilter"/>
GROUP BY p.site_id,p.device_id,dateHour
) 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
group by statisDate
<include refid="groupChooseFilter"/>
order by statisDate desc
</select>
</mapper>