数据20250904优化-功率曲线取值修改
This commit is contained in:
31
ems-common/src/main/java/com/xzzn/common/enums/SiteEnum.java
Normal file
31
ems-common/src/main/java/com/xzzn/common/enums/SiteEnum.java
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package com.xzzn.common.enums;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* device-设备类型
|
||||||
|
*
|
||||||
|
* @author xzzn
|
||||||
|
*/
|
||||||
|
|
||||||
|
public enum SiteEnum
|
||||||
|
{
|
||||||
|
DDS("021_DDS_01", "电动所内部"), FX("021_FXX_01", "奉贤西部污水处理厂");
|
||||||
|
|
||||||
|
private final String code;
|
||||||
|
private final String info;
|
||||||
|
|
||||||
|
SiteEnum(String code, String info)
|
||||||
|
{
|
||||||
|
this.code = code;
|
||||||
|
this.info = info;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCode()
|
||||||
|
{
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getInfo()
|
||||||
|
{
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -12,22 +12,22 @@ public class PowerStatisListVo {
|
|||||||
private String statisDate;
|
private String statisDate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 电网功率-total_apparent_power总交流视在功率
|
* 电网功率-total_active_power(LOAD)
|
||||||
*/
|
*/
|
||||||
private BigDecimal gridPower;
|
private BigDecimal gridPower;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 负载功率-total_active_power总交流有功电率
|
* 负载功率
|
||||||
*/
|
*/
|
||||||
private BigDecimal loadPower;
|
private BigDecimal loadPower;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 储能功率-max_discharge_power_capacity最大可放功率
|
* 储能功率-secondary_total_active_power(METE)
|
||||||
*/
|
*/
|
||||||
private BigDecimal storagePower;
|
private BigDecimal storagePower;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 光伏功率-ac_capacitive_reactive_power交流侧容性无功功率
|
* 光伏功率-total_active_power(METEGT)
|
||||||
*/
|
*/
|
||||||
private BigDecimal pvPower;
|
private BigDecimal pvPower;
|
||||||
|
|
||||||
|
|||||||
@ -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<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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,7 @@
|
|||||||
package com.xzzn.ems.mapper;
|
package com.xzzn.ems.mapper;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import com.xzzn.ems.domain.EmsPcsData;
|
import com.xzzn.ems.domain.EmsPcsData;
|
||||||
import com.xzzn.ems.domain.vo.*;
|
import com.xzzn.ems.domain.vo.*;
|
||||||
@ -129,15 +127,4 @@ public interface EmsPcsDataMapper
|
|||||||
public List<PcsStatisListVo> getPcsActivePowerByHour(DateSearchRequest requestVo);
|
public List<PcsStatisListVo> getPcsActivePowerByHour(DateSearchRequest requestVo);
|
||||||
|
|
||||||
public List<PcsStatisListVo> getPcsActivePowerByMonth(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);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -888,6 +888,9 @@ public class DDSDataProcessServiceImpl extends AbstractBatteryDataProcessor impl
|
|||||||
dataMete.setVoltageUnbalanceDegree(StringUtils.getBigDecimal(obj.get("DYBPHD")));
|
dataMete.setVoltageUnbalanceDegree(StringUtils.getBigDecimal(obj.get("DYBPHD")));
|
||||||
dataMete.setCurrentUnbalanceDegree(StringUtils.getBigDecimal(obj.get("DLBPHD")));
|
dataMete.setCurrentUnbalanceDegree(StringUtils.getBigDecimal(obj.get("DLBPHD")));
|
||||||
|
|
||||||
|
// 储能功率
|
||||||
|
dataMete.setSecondaryTotalActivePower(StringUtils.getBigDecimal(obj.get("ZYGGL")));
|
||||||
|
|
||||||
dataMete.setCreateBy("system");
|
dataMete.setCreateBy("system");
|
||||||
dataMete.setCreateTime(DateUtils.getNowDate());
|
dataMete.setCreateTime(DateUtils.getNowDate());
|
||||||
dataMete.setUpdateBy("system");
|
dataMete.setUpdateBy("system");
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package com.xzzn.ems.service.impl;
|
package com.xzzn.ems.service.impl;
|
||||||
|
|
||||||
|
import com.xzzn.common.enums.SiteEnum;
|
||||||
import com.xzzn.common.utils.DateUtils;
|
import com.xzzn.common.utils.DateUtils;
|
||||||
import com.xzzn.ems.domain.EmsAmmeterData;
|
import com.xzzn.ems.domain.EmsAmmeterData;
|
||||||
import com.xzzn.ems.domain.vo.*;
|
import com.xzzn.ems.domain.vo.*;
|
||||||
@ -11,6 +12,7 @@ import org.springframework.util.CollectionUtils;
|
|||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
|
import java.text.DecimalFormat;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@ -46,6 +48,9 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService
|
|||||||
@Autowired
|
@Autowired
|
||||||
private EmsDailyChargeDataMapper emsDailyChargeDataMapper;
|
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
|
@Override
|
||||||
public ElectricDataInfoVo getElectricDataResult(DateSearchRequest requestVo) {
|
public ElectricDataInfoVo getElectricDataResult(DateSearchRequest requestVo) {
|
||||||
@ -328,23 +333,52 @@ public class EmsStatsReportServiceImpl implements IEmsStatsReportService
|
|||||||
if (DateUtils.isSameDay(startDate, endDate)){
|
if (DateUtils.isSameDay(startDate, endDate)){
|
||||||
endDate = DateUtils.addDays(endDate, 1);
|
endDate = DateUtils.addDays(endDate, 1);
|
||||||
requestVo.setEndDate(endDate);
|
requestVo.setEndDate(endDate);
|
||||||
dataList = emsPcsDataMapper.getPowerDataByHour(requestVo);
|
dataList = emsAmmeterDataMapper.getPowerDataByHour(requestVo);
|
||||||
} else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 1
|
} else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 1
|
||||||
&& DateUtils.differentDaysByMillisecond(endDate, startDate) < 30){
|
&& DateUtils.differentDaysByMillisecond(endDate, startDate) < 30){
|
||||||
endDate = DateUtils.addDays(endDate, 1);
|
endDate = DateUtils.addDays(endDate, 1);
|
||||||
requestVo.setEndDate(endDate);
|
requestVo.setEndDate(endDate);
|
||||||
// 开始日期-结束日期大于 1 天,小于30 天,按天展示数据
|
// 开始日期-结束日期大于 1 天,小于30 天,按天展示数据
|
||||||
dataList = emsPcsDataMapper.getPowerDataByDay(requestVo);
|
dataList = emsAmmeterDataMapper.getPowerDataByDay(requestVo);
|
||||||
} else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 30){
|
} else if (DateUtils.differentDaysByMillisecond(endDate, startDate) >= 30){
|
||||||
endDate = DateUtils.addDays(endDate, 1);
|
endDate = DateUtils.addDays(endDate, 1);
|
||||||
requestVo.setEndDate(endDate);
|
requestVo.setEndDate(endDate);
|
||||||
// 开始日期-结束日期大于 1 个月,按月展示数据
|
// 开始日期-结束日期大于 1 个月,按月展示数据
|
||||||
dataList = emsPcsDataMapper.getPowerDataByMonth(requestVo);
|
dataList = emsAmmeterDataMapper.getPowerDataByMonth(requestVo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 处理数据设置 负荷功率
|
||||||
|
dealDataPower(requestVo.getSiteId(),dataList);
|
||||||
return 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){
|
public void dealRequestTime(DateSearchRequest requestVo){
|
||||||
|
|
||||||
|
|||||||
@ -963,4 +963,63 @@
|
|||||||
WHERE rn = 1
|
WHERE rn = 1
|
||||||
ORDER BY ammeterDate
|
ORDER BY ammeterDate
|
||||||
</select>
|
</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 >= #{startDate}
|
||||||
|
</if>
|
||||||
|
<if test="endDate != null">
|
||||||
|
AND p.data_update_time < #{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>
|
</mapper>
|
||||||
@ -539,64 +539,4 @@
|
|||||||
AND latest.max_update_time = t.data_update_time
|
AND latest.max_update_time = t.data_update_time
|
||||||
order by statisDate desc
|
order by statisDate desc
|
||||||
</select>
|
</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>
|
</mapper>
|
||||||
Reference in New Issue
Block a user