数据20250904优化-功率曲线取值修改

This commit is contained in:
2025-09-15 14:21:27 +08:00
parent d807b9117d
commit 2bb78dc020
8 changed files with 138 additions and 80 deletions

View File

@ -12,22 +12,22 @@ public class PowerStatisListVo {
private String statisDate;
/**
* 电网功率-total_apparent_power总交流视在功率
* 电网功率-total_active_power(LOAD
*/
private BigDecimal gridPower;
/**
* 负载功率-total_active_power总交流有功电率
* 负载功率
*/
private BigDecimal loadPower;
/**
* 储能功率-max_discharge_power_capacity最大可放功率
* 储能功率-secondary_total_active_power(METE)
*/
private BigDecimal storagePower;
/**
* 光伏功率-ac_capacitive_reactive_power交流侧容性无功功率
* 光伏功率-total_active_power(METEGT)
*/
private BigDecimal pvPower;

View File

@ -84,4 +84,8 @@ public interface EmsAmmeterDataMapper
// 概率统计-电量指标(按月)
public List<SiteMonitorDataVo> getChargeDataByMonth(@Param("siteId")String siteId, @Param("deviceId")String deviceId,@Param("startDate")Date startDate,@Param("endDate")Date endDate);
// 报表统计-功率曲线
public List<PowerStatisListVo> getPowerDataByHour(DateSearchRequest requestVo);
public List<PowerStatisListVo> getPowerDataByDay(DateSearchRequest requestVo);
public List<PowerStatisListVo> getPowerDataByMonth(DateSearchRequest requestVo);
}

View File

@ -1,9 +1,7 @@
package com.xzzn.ems.mapper;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import com.xzzn.ems.domain.EmsPcsData;
import com.xzzn.ems.domain.vo.*;
@ -129,15 +127,4 @@ public interface EmsPcsDataMapper
public List<PcsStatisListVo> getPcsActivePowerByHour(DateSearchRequest requestVo);
public List<PcsStatisListVo> getPcsActivePowerByMonth(DateSearchRequest requestVo);
/**
* 获取pcs功率曲线数据
* @param requestVo
* @return
*/
public List<PowerStatisListVo> getPowerDataByHour(DateSearchRequest requestVo);
public List<PowerStatisListVo> getPowerDataByDay(DateSearchRequest requestVo);
public List<PowerStatisListVo> getPowerDataByMonth(DateSearchRequest requestVo);
}

View File

@ -888,6 +888,9 @@ public class DDSDataProcessServiceImpl extends AbstractBatteryDataProcessor impl
dataMete.setVoltageUnbalanceDegree(StringUtils.getBigDecimal(obj.get("DYBPHD")));
dataMete.setCurrentUnbalanceDegree(StringUtils.getBigDecimal(obj.get("DLBPHD")));
// 储能功率
dataMete.setSecondaryTotalActivePower(StringUtils.getBigDecimal(obj.get("ZYGGL")));
dataMete.setCreateBy("system");
dataMete.setCreateTime(DateUtils.getNowDate());
dataMete.setUpdateBy("system");

View File

@ -1,5 +1,6 @@
package com.xzzn.ems.service.impl;
import com.xzzn.common.enums.SiteEnum;
import com.xzzn.common.utils.DateUtils;
import com.xzzn.ems.domain.EmsAmmeterData;
import com.xzzn.ems.domain.vo.*;
@ -11,6 +12,7 @@ import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
@ -46,6 +48,9 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService
@Autowired
private EmsDailyChargeDataMapper emsDailyChargeDataMapper;
private static final BigDecimal DDS_STORAGE_FACTOR = new BigDecimal("0.1");
private static final BigDecimal DDS_PV_FACTOR = new BigDecimal("-0.001");
// 电量指标
@Override
public ElectricDataInfoVo getElectricDataResult(DateSearchRequest requestVo) {
@ -328,23 +333,52 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService
if (DateUtils.isSameDay(startDate, endDate)){
endDate = DateUtils.addDays(endDate, 1);
requestVo.setEndDate(endDate);
dataList = emsPcsDataMapper.getPowerDataByHour(requestVo);
dataList = emsAmmeterDataMapper.getPowerDataByHour(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.getPowerDataByDay(requestVo);
dataList = emsAmmeterDataMapper.getPowerDataByDay(requestVo);
} else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 30){
endDate = DateUtils.addDays(endDate, 1);
requestVo.setEndDate(endDate);
// 开始日期-结束日期大于 1 个月,按月展示数据
dataList = emsPcsDataMapper.getPowerDataByMonth(requestVo);
dataList = emsAmmeterDataMapper.getPowerDataByMonth(requestVo);
}
// 处理数据设置 负荷功率
dealDataPower(requestVo.getSiteId(),dataList);
return dataList;
}
private void dealDataPower(String siteId, List<PowerStatisListVo> dataList) {
DecimalFormat df = new DecimalFormat("0.####");
if (dataList == null || dataList.size() == 0){
return;
}
for (PowerStatisListVo powerStatisListVo : dataList) {
BigDecimal gridPower = powerStatisListVo.getGridPower() == null ? BigDecimal.ZERO : powerStatisListVo.getGridPower();
BigDecimal storagePower = powerStatisListVo.getStoragePower() == null ? BigDecimal.ZERO : powerStatisListVo.getStoragePower();
BigDecimal pvPower = powerStatisListVo.getPvPower() == null ? BigDecimal.ZERO : powerStatisListVo.getPvPower();
BigDecimal loadPower = new BigDecimal(0);
// 电动所:储能功率=储能功率乘0.1;光伏功率=光伏功率*乘-0.001;负荷功率=电网功率+光伏功率-储能功率
if (SiteEnum.DDS.getCode().equals(siteId)){
powerStatisListVo.setStoragePower(storagePower.multiply(DDS_STORAGE_FACTOR).stripTrailingZeros());
powerStatisListVo.setPvPower(pvPower.multiply(DDS_PV_FACTOR).stripTrailingZeros());
loadPower = gridPower.add(powerStatisListVo.getPvPower()).subtract(powerStatisListVo.getStoragePower());
powerStatisListVo.setLoadPower(loadPower);
} else if (SiteEnum.FX.getCode().equals(siteId)){
// 奉贤:负荷功率=电网功率-储能功率;
loadPower = gridPower.subtract(storagePower);
powerStatisListVo.setLoadPower(loadPower);
}
}
}
// 统计入参时间处理
public void dealRequestTime(DateSearchRequest requestVo){

View File

@ -963,4 +963,63 @@
WHERE rn = 1
ORDER BY ammeterDate
</select>
<sql id="powerFilter">
MAX(CASE WHEN t.device_id = 'METE' THEN t.secondary_total_active_power END) AS gridPower,
MAX(CASE WHEN t.device_id = 'LOAD' THEN t.total_active_power END) AS storagePower,
MAX(CASE WHEN t.device_id = 'METEGF' THEN t.total_active_power END) AS pvPower
</sql>
<sql id="commonFilter">
WHERE p.device_id in ('METE','LOAD','METEGF')
and 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="getPowerDataByHour" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.PowerStatisListVo">
select latest.dateHour as statisDate,
<include refid="powerFilter"/>
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_ammeter_data p
<include refid="commonFilter"/>
GROUP BY p.site_id,p.device_id,dateHour
) latest inner join ems_ammeter_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
order by statisDate desc
</select>
<select id="getPowerDataByDay" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.PowerStatisListVo">
select latest.dateDay as statisDate,
<include refid="powerFilter"/>
from ( SELECT p.site_id, p.device_id, DATE(p.data_update_time ) AS dateDay,MAX(p.data_update_time) as max_update_time
FROM ems_ammeter_data p
<include refid="commonFilter"/>
GROUP BY p.site_id,p.device_id,dateDay
) latest inner join ems_ammeter_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
order by statisDate desc
</select>
<select id="getPowerDataByMonth" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.PowerStatisListVo">
select latest.dateMonth as statisDate,
<include refid="powerFilter"/>
from ( SELECT p.site_id, p.device_id,DATE_FORMAT(p.data_update_time, '%Y-%m') as dateMonth,MAX(p.data_update_time) as max_update_time
FROM ems_ammeter_data p
<include refid="commonFilter"/>
GROUP BY p.site_id,p.device_id,dateMonth
) latest inner join ems_ammeter_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
order by statisDate desc
</select>
</mapper>

View File

@ -539,64 +539,4 @@
AND latest.max_update_time = t.data_update_time
order by statisDate desc
</select>
<sql id="powerTypeChooseFilter">
<choose>
<when test='dataType == "1"'>
t.total_apparent_power as gridPower
</when>
<when test='dataType == "2"'>
t.total_active_power as loadPower
</when>
<when test='dataType == "3"'>
t.max_discharge_power_capacity as storagePower
</when>
<when test='dataType == "4"'>
t.ac_capacitive_reactive_power as pvPower
</when>
<otherwise>
0 as gridPower
</otherwise>
</choose>
</sql>
<select id="getPowerDataByHour" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.PowerStatisListVo">
select latest.dateHour as statisDate,
<include refid="powerTypeChooseFilter"/>
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
order by statisDate desc
</select>
<select id="getPowerDataByDay" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.PowerStatisListVo">
select latest.dateDay as statisDate,
<include refid="powerTypeChooseFilter"/>
from ( SELECT p.site_id, p.device_id, DATE(p.data_update_time ) AS dateDay,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,dateDay
) 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
order by statisDate desc
</select>
<select id="getPowerDataByMonth" parameterType="com.xzzn.ems.domain.vo.DateSearchRequest" resultType="com.xzzn.ems.domain.vo.PowerStatisListVo">
select DATE_FORMAT(latest.max_update_time, '%Y-%m') as statisDate,
<include refid="powerTypeChooseFilter"/>
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
order by statisDate desc
</select>
</mapper>