统计报表-电池堆曲线

This commit is contained in:
2025-07-08 14:46:42 +08:00
parent 7d1f1836d8
commit 13266bdbd5
7 changed files with 314 additions and 4 deletions

View File

@ -0,0 +1,86 @@
package com.xzzn.ems.domain.vo;
import java.math.BigDecimal;
/**
* 数据统计-pcs曲线-通用对象
*/
public class PcsStatisListVo {
/**
* 数据日期
*/
private String statisDate;
/**
* 有功
*/
private BigDecimal activePower;
/**
* 无功
*/
private BigDecimal reactivePower;
/**
* u电流
*/
private BigDecimal uCurrent;
/**
* v电流
*/
private BigDecimal vCurrent;
/**
* w电流
*/
private BigDecimal wCurrent;
public String getStatisDate() {
return statisDate;
}
public void setStatisDate(String statisDate) {
this.statisDate = statisDate;
}
public BigDecimal getActivePower() {
return activePower;
}
public void setActivePower(BigDecimal activePower) {
this.activePower = activePower;
}
public BigDecimal getReactivePower() {
return reactivePower;
}
public void setReactivePower(BigDecimal reactivePower) {
this.reactivePower = reactivePower;
}
public BigDecimal getuCurrent() {
return uCurrent;
}
public void setuCurrent(BigDecimal uCurrent) {
this.uCurrent = uCurrent;
}
public BigDecimal getvCurrent() {
return vCurrent;
}
public void setvCurrent(BigDecimal vCurrent) {
this.vCurrent = vCurrent;
}
public BigDecimal getwCurrent() {
return wCurrent;
}
public void setwCurrent(BigDecimal wCurrent) {
this.wCurrent = wCurrent;
}
}

View File

@ -0,0 +1,73 @@
package com.xzzn.ems.domain.vo;
import java.math.BigDecimal;
/**
* 数据统计-堆曲线-通用对象
*/
public class StackStatisListVo {
/**
* 数据日期
*/
private String statisDate;
/**
* 有功
*/
private BigDecimal temp;
/**
* 无功
*/
private BigDecimal voltage;
/**
* u电流
*/
private BigDecimal current;
/**
* v电流
*/
private BigDecimal soc;
public String getStatisDate() {
return statisDate;
}
public void setStatisDate(String statisDate) {
this.statisDate = statisDate;
}
public BigDecimal getTemp() {
return temp;
}
public void setTemp(BigDecimal temp) {
this.temp = temp;
}
public BigDecimal getVoltage() {
return voltage;
}
public void setVoltage(BigDecimal voltage) {
this.voltage = voltage;
}
public BigDecimal getCurrent() {
return current;
}
public void setCurrent(BigDecimal current) {
this.current = current;
}
public BigDecimal getSoc() {
return soc;
}
public void setSoc(BigDecimal soc) {
this.soc = soc;
}
}

View File

@ -3,7 +3,9 @@ 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.DateSearchRequest;
import com.xzzn.ems.domain.vo.StackAveTempVo;
import com.xzzn.ems.domain.vo.StackStatisListVo;
import org.apache.ibatis.annotations.Param;
/**
@ -70,4 +72,15 @@ public interface EmsBatteryStackMapper
* @return
*/
public List<StackAveTempVo> getStackAveTempList(@Param("siteId")String siteId, @Param("startDate") Date startDate, @Param("endDate")Date endDate);
/**
* 堆曲线数据-按小时区分
* @param requestVo
* @return
*/
public List<StackStatisListVo> getStackDataByHour(DateSearchRequest requestVo);
public List<StackStatisListVo> getStackDataByDay(DateSearchRequest requestVo);
public List<StackStatisListVo> getStackDataByMonth(DateSearchRequest requestVo);
}

View File

@ -3,6 +3,7 @@ package com.xzzn.ems.service;
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.StackStatisListVo;
import java.util.List;
@ -18,4 +19,6 @@ public interface IEmsStatsReportService
public ElectricDataInfoVo getElectricDataResult(DateSearchRequest requestVo);
public List<PcsStatisListVo> getPCSDataResult(DateSearchRequest requestVo);
public List<StackStatisListVo> getStackDataResult(DateSearchRequest requestVo);
}

View File

@ -1,10 +1,9 @@
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.domain.vo.*;
import com.xzzn.ems.mapper.EmsBatteryDataMapper;
import com.xzzn.ems.mapper.EmsBatteryStackMapper;
import com.xzzn.ems.mapper.EmsPcsDataMapper;
import com.xzzn.ems.service.IEmsStatsReportService;
import org.slf4j.Logger;
@ -34,6 +33,10 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService
@Autowired
private EmsPcsDataMapper emsPcsDataMapper;
@Autowired
private EmsBatteryDataMapper emsBatteryDataMapper;
@Autowired
private EmsBatteryStackMapper emsBatteryStackMapper;
@Override
public ElectricDataInfoVo getElectricDataResult(DateSearchRequest requestVo) {
@ -120,6 +123,34 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService
return dataList;
}
@Override
public List<StackStatisListVo> getStackDataResult(DateSearchRequest requestVo) {
List<StackStatisListVo> 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 = emsBatteryStackMapper.getStackDataByHour(requestVo);
} else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 1
&& DateUtils.differentDaysByMillisecond(endDate, startDate) < 30){
endDate = DateUtils.addDays(endDate, 1);
requestVo.setEndDate(endDate);
// 开始日期-结束日期大于 1 天小于30 天,按天展示数据
dataList = emsBatteryStackMapper.getStackDataByDay(requestVo);
} else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 30){
endDate = DateUtils.addDays(endDate, 1);
requestVo.setEndDate(endDate);
// 开始日期-结束日期大于 1 个月,按月展示数据
dataList = emsBatteryStackMapper.getStackDataByMonth(requestVo);
}
return dataList;
}
// 统计入参时间处理
public void dealRequestTime(DateSearchRequest requestVo){

View File

@ -288,4 +288,93 @@
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>
<sql id="statisCommonFilter">
WHERE p.site_id = #{siteId}
and p.device_id = #{deviceId}
<if test="startDate != null">
AND p.update_time &gt;= DATE(#{startDate})
</if>
<if test="endDate != null">
AND p.update_time &lt; DATE(#{endDate})
</if>
</sql>
<sql id="dataTypeChooseFilter">
<choose>
<when test="dataType == 1">
t.operating_temp AS temp
</when>
<when test="dataType == 2">
t.stack_voltage as voltage
</when>
<when test="dataType == 3">
t.stack_current as current
</when>
<when test="dataType == 4">
t.stack_soc as soc
</when>
</choose>
</sql>
<sql id="groupChooseFilter">
<choose>
<when test="dataType == 1">
,temp
</when>
<when test="dataType == 2">
,voltage
</when>
<when test="dataType == 3">
,current
</when>
<when test="dataType == 4">
,soc
</when>
</choose>
</sql>
<select id="getStackDataByHour" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.StackStatisListVo">
select latest.dateHour as statisDate,
<include refid="dataTypeChooseFilter"/>
from ( SELECT p.site_id, p.device_id,DATE_FORMAT(p.update_time, '%H')+1 AS dateHour,MAX(p.update_time) as max_update_time
FROM ems_battery_stack p
<include refid="statisCommonFilter"/>
GROUP BY p.site_id,p.device_id,dateHour
) latest inner join ems_battery_stack t ON latest.site_id = t.site_id
AND latest.device_id = t.device_id
AND latest.max_update_time = t.update_time
group by statisDate
<include refid="groupChooseFilter"/>
order by statisDate desc
</select>
<select id="getStackDataByDay" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.StackStatisListVo">
select latest.dateDay as statisDate,
<include refid="dataTypeChooseFilter"/>
from ( SELECT p.site_id, p.device_id,DATE_FORMAT(p.update_time, '%Y-%m-%d') AS dateDay,MAX(p.update_time) as max_update_time
FROM ems_battery_stack p
<include refid="statisCommonFilter"/>
GROUP BY p.site_id,p.device_id,dateDay
) latest inner join ems_battery_stack t ON latest.site_id = t.site_id
AND latest.device_id = t.device_id
AND latest.max_update_time = t.update_time
group by statisDate
<include refid="groupChooseFilter"/>
order by statisDate desc
</select>
<select id="getStackDataByMonth" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.StackStatisListVo">
select latest.dateMonth as statisDate,
<include refid="dataTypeChooseFilter"/>
from ( SELECT p.site_id, p.device_id,DATE_FORMAT(p.update_time, '%Y-%m') AS dateMonth,MAX(p.update_time) as max_update_time
FROM ems_battery_stack p
<include refid="statisCommonFilter"/>
GROUP BY p.site_id,p.device_id,dateMonth
) latest inner join ems_battery_stack t ON latest.site_id = t.site_id
AND latest.device_id = t.device_id
AND latest.max_update_time = t.update_time
group by statisDate
<include refid="groupChooseFilter"/>
order by statisDate desc
</select>
</mapper>