dev #2
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;
|
||||
|
||||
/**
|
||||
* 电网功率-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;
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -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){
|
||||
|
||||
|
||||
@ -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 >= #{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>
|
||||
@ -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>
|
||||
Reference in New Issue
Block a user