添加谐波报告功能
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,16 @@
|
||||
package com.njcn.harmonic.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.njcn.harmonic.pojo.po.day.RStatDataIDPO;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author wr
|
||||
* @since 2023-04-17
|
||||
*/
|
||||
public interface RStatDataIDMapper extends BaseMapper<RStatDataIDPO> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
package com.njcn.harmonic.mapper;
|
||||
|
||||
import com.njcn.harmonic.pojo.param.ReportQueryParam;
|
||||
import com.njcn.harmonic.pojo.vo.ReportValue;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 谐波报告查询
|
||||
*/
|
||||
public interface ReportMapper {
|
||||
/**
|
||||
* 获取电流有效值
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getVirtualDataI(@Param("param") ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 获取电压有效值
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getVirtualDataV(@Param("param") ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* CP95条数
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
Integer getTotalCP95Day(@Param("param")ReportQueryParam param);
|
||||
/**
|
||||
* CP95条数
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
Integer getTotalPltCP95Day(@Param("param")ReportQueryParam param);
|
||||
/**
|
||||
* CP95条数
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
Integer getTotalPstCP95Day(@Param("param")ReportQueryParam param);
|
||||
|
||||
|
||||
List<ReportValue> getVVirtualData(@Param("param")ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 获取有功功率
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getPowerP(@Param("param")ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 无功功率
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getPowerQ(@Param("param")ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 视在功率
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getPowerS(@Param("param")ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 功率因数
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getPF(@Param("param")ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 短时闪变
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getFlickerData(@Param("param")ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 长时闪变
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getLFlickerData(@Param("param")ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 电压负偏差
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getUVdeviationData(@Param("param")ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 电压正偏差
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getLVdeviationData(@Param("param")ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 获取电压畸变率
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getDistortionDataV(@Param("param")ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 获取电流畸变率
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getDistortionDataI(@Param("param")ReportQueryParam param);
|
||||
|
||||
/**
|
||||
*频率
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getFrequencyData(@Param("param")ReportQueryParam param);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getDEVFrequencyData(@Param("param")ReportQueryParam param);
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.njcn.harmonic.mapper.RStatDataIDMapper">
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,905 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.njcn.harmonic.mapper.ReportMapper">
|
||||
<select id="getVirtualDataI" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
|
||||
SELECT
|
||||
`phasic_type` AS phaseType,
|
||||
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
|
||||
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
|
||||
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
|
||||
MAX( CASE WHEN rank = #{param.count} THEN rms END ) AS cp95Value
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
rms,
|
||||
rank
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
rms,
|
||||
@rank := IF( @CI := phasic_type, @rank + 1, 1 ) AS rank,
|
||||
@CI := phasic_type
|
||||
FROM
|
||||
r_stat_data_i_d
|
||||
<where>
|
||||
phasic_type IN ( 'A', 'B', 'C' )
|
||||
and quality_flag = 0
|
||||
<if test="param.startTime != null and param.startTime != ''">
|
||||
and `time` >= #{param.startTime}
|
||||
</if>
|
||||
<if test="param.endTime != null and param.endTime != ''">
|
||||
and `time` <= #{param.endTime}
|
||||
</if>
|
||||
<if test="param.lineId != null and param.lineId != ''">
|
||||
and line_id = #{param.lineId}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY
|
||||
phasic_type,
|
||||
(
|
||||
CASE
|
||||
WHEN value_type = 'CP95' THEN 1
|
||||
WHEN value_type = 'MAX' THEN 2
|
||||
WHEN value_type = 'MIN' THEN 3
|
||||
WHEN value_type = 'AVG' THEN 4
|
||||
ELSE 5
|
||||
END
|
||||
),
|
||||
rms DESC
|
||||
) AS t1
|
||||
) a
|
||||
GROUP BY
|
||||
`phasic_type`;
|
||||
</select>
|
||||
<select id="getVirtualDataV" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
|
||||
SELECT
|
||||
`phasic_type` AS phaseType,
|
||||
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
|
||||
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
|
||||
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
|
||||
MAX( CASE WHEN rank = #{param.count} THEN rms END ) AS cp95Value
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
rms,
|
||||
rank
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
rms,
|
||||
@rank := IF( @CI = phasic_type, @rank + 1, 1 ) AS rank,
|
||||
@CI := phasic_type
|
||||
FROM
|
||||
r_stat_data_v_d
|
||||
<where>
|
||||
phasic_type IN ( 'A', 'B', 'C' )
|
||||
and quality_flag = 0
|
||||
<if test="param.startTime != null and param.startTime != ''">
|
||||
and `time` >= #{param.startTime}
|
||||
</if>
|
||||
<if test="param.endTime != null and param.endTime != ''">
|
||||
and `time` <= #{param.endTime}
|
||||
</if>
|
||||
<if test="param.lineId != null and param.lineId != ''">
|
||||
and line_id = #{param.lineId}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY
|
||||
phasic_type,
|
||||
(
|
||||
CASE
|
||||
WHEN value_type = 'CP95' THEN 1
|
||||
WHEN value_type = 'MAX' THEN 2
|
||||
WHEN value_type = 'MIN' THEN 3
|
||||
WHEN value_type = 'AVG' THEN 4
|
||||
ELSE 5
|
||||
END
|
||||
),
|
||||
rms DESC
|
||||
) AS t1
|
||||
) a
|
||||
GROUP BY
|
||||
`phasic_type`
|
||||
</select>
|
||||
<select id="getTotalCP95Day" resultType="java.lang.Integer">
|
||||
SELECT
|
||||
count( rms ) total
|
||||
FROM
|
||||
r_stat_data_v_d
|
||||
<where>
|
||||
phasic_type IN ( 'A' )
|
||||
AND value_type = "CP95"
|
||||
and quality_flag = 0
|
||||
<if test="param.startTime != null and param.startTime != ''">
|
||||
and `time` >= #{param.startTime}
|
||||
</if>
|
||||
<if test="param.endTime != null and param.endTime != ''">
|
||||
and `time` <= #{param.endTime}
|
||||
</if>
|
||||
<if test="param.lineId != null and param.lineId != ''">
|
||||
and line_id = #{param.lineId}
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
<select id="getTotalPltCP95Day" resultType="java.lang.Integer">
|
||||
SELECT
|
||||
count( plt ) total
|
||||
FROM
|
||||
r_stat_data_plt_d
|
||||
<where>
|
||||
phasic_type IN ( 'A' )
|
||||
AND value_type = "CP95"
|
||||
and quality_flag = 0
|
||||
<if test="param.startTime != null and param.startTime != ''">
|
||||
and `time` >= #{param.startTime}
|
||||
</if>
|
||||
<if test="param.endTime != null and param.endTime != ''">
|
||||
and `time` <= #{param.endTime}
|
||||
</if>
|
||||
<if test="param.lineId != null and param.lineId != ''">
|
||||
and line_id = #{param.lineId}
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
<select id="getTotalPstCP95Day" resultType="java.lang.Integer">
|
||||
SELECT
|
||||
count( plt ) total
|
||||
FROM
|
||||
r_stat_data_flicker_d
|
||||
<where>
|
||||
phasic_type IN ( 'A' )
|
||||
AND value_type = "CP95"
|
||||
and quality_flag = 0
|
||||
<if test="param.startTime != null and param.startTime != ''">
|
||||
and `time` >= #{param.startTime}
|
||||
</if>
|
||||
<if test="param.endTime != null and param.endTime != ''">
|
||||
and `time` <= #{param.endTime}
|
||||
</if>
|
||||
<if test="param.lineId != null and param.lineId != ''">
|
||||
and line_id = #{param.lineId}
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
<select id="getVVirtualData" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
|
||||
SELECT
|
||||
`phasic_type` AS phaseType,
|
||||
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
|
||||
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
|
||||
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
|
||||
MAX( CASE WHEN rank = #{param.count} THEN rms END ) AS cp95Value
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
rms,
|
||||
rank
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
rms_lvr as rms,
|
||||
@rank := IF( @CI = phasic_type, @rank + 1, 1 ) AS rank,
|
||||
@CI := phasic_type
|
||||
FROM
|
||||
r_stat_data_v_d
|
||||
<where>
|
||||
phasic_type IN ( 'A', 'B', 'C' )
|
||||
and quality_flag = 0
|
||||
<if test="param.startTime != null and param.startTime != ''">
|
||||
and `time` >= #{param.startTime}
|
||||
</if>
|
||||
<if test="param.endTime != null and param.endTime != ''">
|
||||
and `time` <= #{param.endTime}
|
||||
</if>
|
||||
<if test="param.lineId != null and param.lineId != ''">
|
||||
and line_id = #{param.lineId}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY
|
||||
phasic_type,
|
||||
(
|
||||
CASE
|
||||
WHEN value_type = 'CP95' THEN 1
|
||||
WHEN value_type = 'MAX' THEN 2
|
||||
WHEN value_type = 'MIN' THEN 3
|
||||
WHEN value_type = 'AVG' THEN 4
|
||||
ELSE 5
|
||||
END
|
||||
),
|
||||
rms_lvr DESC
|
||||
) AS t1
|
||||
) a
|
||||
GROUP BY
|
||||
`phasic_type`
|
||||
</select>
|
||||
<select id="getPowerP" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
|
||||
SELECT
|
||||
`phasic_type` AS phaseType,
|
||||
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
|
||||
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
|
||||
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
|
||||
MAX( CASE WHEN rank = #{param.count} THEN rms END ) AS cp95Value
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
rms,
|
||||
rank
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
p as rms,
|
||||
@rank :=
|
||||
IF
|
||||
( @CI = phasic_type, @rank + 1, 1 ) AS rank,
|
||||
@CI := phasic_type
|
||||
FROM
|
||||
r_stat_data_harmpower_p_d
|
||||
<where>
|
||||
phasic_type IN ( 'A', 'B', 'C' ,'T')
|
||||
and quality_flag = 0
|
||||
<if test="param.startTime != null and param.startTime != ''">
|
||||
and `time` >= #{param.startTime}
|
||||
</if>
|
||||
<if test="param.endTime != null and param.endTime != ''">
|
||||
and `time` <= #{param.endTime}
|
||||
</if>
|
||||
<if test="param.lineId != null and param.lineId != ''">
|
||||
and line_id = #{param.lineId}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY
|
||||
phasic_type,
|
||||
(
|
||||
CASE
|
||||
WHEN value_type = 'CP95' THEN
|
||||
1
|
||||
WHEN value_type = 'MAX' THEN
|
||||
2
|
||||
WHEN value_type = 'MIN' THEN
|
||||
3
|
||||
WHEN value_type = 'AVG' THEN
|
||||
4 ELSE 5
|
||||
END
|
||||
),
|
||||
p DESC
|
||||
) AS t1
|
||||
) a
|
||||
GROUP BY
|
||||
`phasic_type`
|
||||
</select>
|
||||
<select id="getPF" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
|
||||
SELECT
|
||||
`phasic_type` AS phaseType,
|
||||
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
|
||||
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
|
||||
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
|
||||
MAX( CASE WHEN rank = #{param.count} THEN rms END ) AS cp95Value
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
rms,
|
||||
rank
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
pf as rms,
|
||||
@rank :=
|
||||
IF
|
||||
( @CI = phasic_type, @rank + 1, 1 ) AS rank,
|
||||
@CI := phasic_type
|
||||
FROM
|
||||
r_stat_data_harmpower_p_d
|
||||
<where>
|
||||
phasic_type IN ( 'A', 'B', 'C' ,'T')
|
||||
and quality_flag = 0
|
||||
<if test="param.startTime != null and param.startTime != ''">
|
||||
and `time` >= #{param.startTime}
|
||||
</if>
|
||||
<if test="param.endTime != null and param.endTime != ''">
|
||||
and `time` <= #{param.endTime}
|
||||
</if>
|
||||
<if test="param.lineId != null and param.lineId != ''">
|
||||
and line_id = #{param.lineId}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY
|
||||
phasic_type,
|
||||
(
|
||||
CASE
|
||||
WHEN value_type = 'CP95' THEN
|
||||
1
|
||||
WHEN value_type = 'MAX' THEN
|
||||
2
|
||||
WHEN value_type = 'MIN' THEN
|
||||
3
|
||||
WHEN value_type = 'AVG' THEN
|
||||
4 ELSE 5
|
||||
END
|
||||
),
|
||||
pf DESC
|
||||
) AS t1
|
||||
) a
|
||||
GROUP BY
|
||||
`phasic_type`
|
||||
</select>
|
||||
<select id="getPowerQ" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
|
||||
SELECT
|
||||
`phasic_type` AS phaseType,
|
||||
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
|
||||
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
|
||||
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
|
||||
MAX( CASE WHEN rank = #{param.count} THEN rms END ) AS cp95Value
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
rms,
|
||||
rank
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
q as rms,
|
||||
@rank :=
|
||||
IF
|
||||
( @CI = phasic_type, @rank + 1, 1 ) AS rank,
|
||||
@CI := phasic_type
|
||||
FROM
|
||||
r_stat_data_harmpower_q_d
|
||||
<where>
|
||||
phasic_type IN ( 'A', 'B', 'C' ,'T')
|
||||
and quality_flag = 0
|
||||
<if test="param.startTime != null and param.startTime != ''">
|
||||
and `time` >= #{param.startTime}
|
||||
</if>
|
||||
<if test="param.endTime != null and param.endTime != ''">
|
||||
and `time` <= #{param.endTime}
|
||||
</if>
|
||||
<if test="param.lineId != null and param.lineId != ''">
|
||||
and line_id = #{param.lineId}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY
|
||||
phasic_type,
|
||||
(
|
||||
CASE
|
||||
WHEN value_type = 'CP95' THEN
|
||||
1
|
||||
WHEN value_type = 'MAX' THEN
|
||||
2
|
||||
WHEN value_type = 'MIN' THEN
|
||||
3
|
||||
WHEN value_type = 'AVG' THEN
|
||||
4 ELSE 5
|
||||
END
|
||||
),
|
||||
q DESC
|
||||
) AS t1
|
||||
) a
|
||||
GROUP BY
|
||||
`phasic_type`
|
||||
</select>
|
||||
<select id="getPowerS" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
|
||||
SELECT
|
||||
`phasic_type` AS phaseType,
|
||||
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
|
||||
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
|
||||
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
|
||||
MAX( CASE WHEN rank = #{param.count} THEN rms END ) AS cp95Value
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
rms,
|
||||
rank
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
s as rms,
|
||||
@rank :=
|
||||
IF
|
||||
( @CI = phasic_type, @rank + 1, 1 ) AS rank,
|
||||
@CI := phasic_type
|
||||
FROM
|
||||
r_stat_data_harmpower_s_d
|
||||
<where>
|
||||
phasic_type IN ( 'A', 'B', 'C' ,'T')
|
||||
and quality_flag = 0
|
||||
<if test="param.startTime != null and param.startTime != ''">
|
||||
and `time` >= #{param.startTime}
|
||||
</if>
|
||||
<if test="param.endTime != null and param.endTime != ''">
|
||||
and `time` <= #{param.endTime}
|
||||
</if>
|
||||
<if test="param.lineId != null and param.lineId != ''">
|
||||
and line_id = #{param.lineId}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY
|
||||
phasic_type,
|
||||
(
|
||||
CASE
|
||||
WHEN value_type = 'CP95' THEN
|
||||
1
|
||||
WHEN value_type = 'MAX' THEN
|
||||
2
|
||||
WHEN value_type = 'MIN' THEN
|
||||
3
|
||||
WHEN value_type = 'AVG' THEN
|
||||
4 ELSE 5
|
||||
END
|
||||
),
|
||||
s DESC
|
||||
) AS t1
|
||||
) a
|
||||
GROUP BY
|
||||
`phasic_type`
|
||||
</select>
|
||||
<select id="getFlickerData" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
|
||||
SELECT
|
||||
`phasic_type` AS phaseType,
|
||||
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
|
||||
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
|
||||
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
|
||||
MAX( CASE WHEN rank = #{param.count} THEN rms END ) AS cp95Value
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
rms,
|
||||
rank
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
plt as rms,
|
||||
@rank :=
|
||||
IF
|
||||
( @CI = phasic_type, @rank + 1, 1 ) AS rank,
|
||||
@CI := phasic_type
|
||||
FROM
|
||||
r_stat_data_flicker_d
|
||||
<where>
|
||||
phasic_type IN ( 'A', 'B', 'C' )
|
||||
and quality_flag = 0
|
||||
<if test="param.startTime != null and param.startTime != ''">
|
||||
and `time` >= #{param.startTime}
|
||||
</if>
|
||||
<if test="param.endTime != null and param.endTime != ''">
|
||||
and `time` <= #{param.endTime}
|
||||
</if>
|
||||
<if test="param.lineId != null and param.lineId != ''">
|
||||
and line_id = #{param.lineId}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY
|
||||
phasic_type,
|
||||
(
|
||||
CASE
|
||||
WHEN value_type = 'CP95' THEN
|
||||
1
|
||||
WHEN value_type = 'MAX' THEN
|
||||
2
|
||||
WHEN value_type = 'MIN' THEN
|
||||
3
|
||||
WHEN value_type = 'AVG' THEN
|
||||
4 ELSE 5
|
||||
END
|
||||
),
|
||||
plt DESC
|
||||
) AS t1
|
||||
) a
|
||||
GROUP BY
|
||||
`phasic_type`
|
||||
</select>
|
||||
<select id="getLFlickerData" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
|
||||
SELECT
|
||||
`phasic_type` AS phaseType,
|
||||
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
|
||||
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
|
||||
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
|
||||
MAX( CASE WHEN rank = #{param.count} THEN rms END ) AS cp95Value
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
rms,
|
||||
rank
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
pst as rms,
|
||||
@rank :=
|
||||
IF
|
||||
( @CI = phasic_type, @rank + 1, 1 ) AS rank,
|
||||
@CI := phasic_type
|
||||
FROM
|
||||
r_stat_data_flicker_d
|
||||
<where>
|
||||
phasic_type IN ( 'A', 'B', 'C')
|
||||
and quality_flag = 0
|
||||
<if test="param.startTime != null and param.startTime != ''">
|
||||
and `time` >= #{param.startTime}
|
||||
</if>
|
||||
<if test="param.endTime != null and param.endTime != ''">
|
||||
and `time` <= #{param.endTime}
|
||||
</if>
|
||||
<if test="param.lineId != null and param.lineId != ''">
|
||||
and line_id = #{param.lineId}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY
|
||||
phasic_type,
|
||||
(
|
||||
CASE
|
||||
WHEN value_type = 'CP95' THEN
|
||||
1
|
||||
WHEN value_type = 'MAX' THEN
|
||||
2
|
||||
WHEN value_type = 'MIN' THEN
|
||||
3
|
||||
WHEN value_type = 'AVG' THEN
|
||||
4 ELSE 5
|
||||
END
|
||||
),
|
||||
pst DESC
|
||||
) AS t1
|
||||
) a
|
||||
GROUP BY
|
||||
`phasic_type`
|
||||
</select>
|
||||
<select id="getUVdeviationData" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
|
||||
SELECT
|
||||
`phasic_type` AS phaseType,
|
||||
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
|
||||
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
|
||||
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
|
||||
MAX( CASE WHEN rank = #{param.count} THEN rms END ) AS cp95Value
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
rms,
|
||||
rank
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
vu_dev as rms,
|
||||
@rank := IF( @CI := phasic_type, @rank + 1, 1 ) AS rank,
|
||||
@CI := phasic_type
|
||||
FROM
|
||||
r_stat_data_v_d
|
||||
<where>
|
||||
phasic_type IN ( 'A', 'B', 'C' )
|
||||
and quality_flag = 0
|
||||
<if test="param.startTime != null and param.startTime != ''">
|
||||
and `time` >= #{param.startTime}
|
||||
</if>
|
||||
<if test="param.endTime != null and param.endTime != ''">
|
||||
and `time` <= #{param.endTime}
|
||||
</if>
|
||||
<if test="param.lineId != null and param.lineId != ''">
|
||||
and line_id = #{param.lineId}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY
|
||||
phasic_type,
|
||||
(
|
||||
CASE
|
||||
WHEN value_type = 'CP95' THEN 1
|
||||
WHEN value_type = 'MAX' THEN 2
|
||||
WHEN value_type = 'MIN' THEN 3
|
||||
WHEN value_type = 'AVG' THEN 4
|
||||
ELSE 5
|
||||
END
|
||||
),
|
||||
vu_dev DESC
|
||||
) AS t1
|
||||
) a
|
||||
GROUP BY
|
||||
`phasic_type`;
|
||||
</select>
|
||||
<select id="getLVdeviationData" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
|
||||
SELECT
|
||||
`phasic_type` AS phaseType,
|
||||
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
|
||||
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
|
||||
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
|
||||
MAX( CASE WHEN rank = #{param.count} THEN rms END ) AS cp95Value
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
rms,
|
||||
rank
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
vl_dev as rms,
|
||||
@rank := IF( @CI := phasic_type, @rank + 1, 1 ) AS rank,
|
||||
@CI := phasic_type
|
||||
FROM
|
||||
r_stat_data_v_d
|
||||
<where>
|
||||
phasic_type IN ( 'A', 'B', 'C' )
|
||||
and quality_flag = 0
|
||||
<if test="param.startTime != null and param.startTime != ''">
|
||||
and `time` >= #{param.startTime}
|
||||
</if>
|
||||
<if test="param.endTime != null and param.endTime != ''">
|
||||
and `time` <= #{param.endTime}
|
||||
</if>
|
||||
<if test="param.lineId != null and param.lineId != ''">
|
||||
and line_id = #{param.lineId}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY
|
||||
phasic_type,
|
||||
(
|
||||
CASE
|
||||
WHEN value_type = 'CP95' THEN 1
|
||||
WHEN value_type = 'MAX' THEN 2
|
||||
WHEN value_type = 'MIN' THEN 3
|
||||
WHEN value_type = 'AVG' THEN 4
|
||||
ELSE 5
|
||||
END
|
||||
),
|
||||
vl_dev DESC
|
||||
) AS t1
|
||||
) a
|
||||
GROUP BY
|
||||
`phasic_type`;
|
||||
</select>
|
||||
<select id="getDistortionDataV" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
|
||||
SELECT
|
||||
`phasic_type` AS phaseType,
|
||||
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
|
||||
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
|
||||
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
|
||||
MAX( CASE WHEN rank = #{param.count} THEN rms END ) AS cp95Value
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
rms,
|
||||
rank
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
v_thd as rms,
|
||||
@rank := IF( @CI := phasic_type, @rank + 1, 1 ) AS rank,
|
||||
@CI := phasic_type
|
||||
FROM
|
||||
r_stat_data_v_d
|
||||
<where>
|
||||
phasic_type IN ( 'A', 'B', 'C' )
|
||||
and quality_flag = 0
|
||||
<if test="param.startTime != null and param.startTime != ''">
|
||||
and `time` >= #{param.startTime}
|
||||
</if>
|
||||
<if test="param.endTime != null and param.endTime != ''">
|
||||
and `time` <= #{param.endTime}
|
||||
</if>
|
||||
<if test="param.lineId != null and param.lineId != ''">
|
||||
and line_id = #{param.lineId}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY
|
||||
phasic_type,
|
||||
(
|
||||
CASE
|
||||
WHEN value_type = 'CP95' THEN 1
|
||||
WHEN value_type = 'MAX' THEN 2
|
||||
WHEN value_type = 'MIN' THEN 3
|
||||
WHEN value_type = 'AVG' THEN 4
|
||||
ELSE 5
|
||||
END
|
||||
),
|
||||
v_thd DESC
|
||||
) AS t1
|
||||
) a
|
||||
GROUP BY
|
||||
`phasic_type`;
|
||||
</select>
|
||||
<select id="getDistortionDataI" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
|
||||
SELECT
|
||||
`phasic_type` AS phaseType,
|
||||
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
|
||||
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
|
||||
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
|
||||
MAX( CASE WHEN rank = #{param.count} THEN rms END ) AS cp95Value
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
rms,
|
||||
rank
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
i_thd as rms,
|
||||
@rank := IF( @CI := phasic_type, @rank + 1, 1 ) AS rank,
|
||||
@CI := phasic_type
|
||||
FROM
|
||||
r_stat_data_i_d
|
||||
<where>
|
||||
phasic_type IN ( 'A', 'B', 'C' )
|
||||
and quality_flag = 0
|
||||
<if test="param.startTime != null and param.startTime != ''">
|
||||
and `time` >= #{param.startTime}
|
||||
</if>
|
||||
<if test="param.endTime != null and param.endTime != ''">
|
||||
and `time` <= #{param.endTime}
|
||||
</if>
|
||||
<if test="param.lineId != null and param.lineId != ''">
|
||||
and line_id = #{param.lineId}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY
|
||||
phasic_type,
|
||||
(
|
||||
CASE
|
||||
WHEN value_type = 'CP95' THEN 1
|
||||
WHEN value_type = 'MAX' THEN 2
|
||||
WHEN value_type = 'MIN' THEN 3
|
||||
WHEN value_type = 'AVG' THEN 4
|
||||
ELSE 5
|
||||
END
|
||||
),
|
||||
i_thd DESC
|
||||
) AS t1
|
||||
) a
|
||||
GROUP BY
|
||||
`phasic_type`;
|
||||
</select>
|
||||
<select id="getFrequencyData" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
|
||||
SELECT
|
||||
`phasic_type` AS phaseType,
|
||||
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
|
||||
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
|
||||
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
|
||||
MAX( CASE WHEN rank = #{param.count} THEN rms END ) AS cp95Value
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
rms,
|
||||
rank
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
freq as rms,
|
||||
@rank := IF( @CI := phasic_type, @rank + 1, 1 ) AS rank,
|
||||
@CI := phasic_type
|
||||
FROM
|
||||
r_stat_data_v_d
|
||||
<where>
|
||||
phasic_type = 'T'
|
||||
and quality_flag = 0
|
||||
<if test="param.startTime != null and param.startTime != ''">
|
||||
and `time` >= #{param.startTime}
|
||||
</if>
|
||||
<if test="param.endTime != null and param.endTime != ''">
|
||||
and `time` <= #{param.endTime}
|
||||
</if>
|
||||
<if test="param.lineId != null and param.lineId != ''">
|
||||
and line_id = #{param.lineId}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY
|
||||
phasic_type,
|
||||
(
|
||||
CASE
|
||||
WHEN value_type = 'CP95' THEN 1
|
||||
WHEN value_type = 'MAX' THEN 2
|
||||
WHEN value_type = 'MIN' THEN 3
|
||||
WHEN value_type = 'AVG' THEN 4
|
||||
ELSE 5
|
||||
END
|
||||
),
|
||||
freq DESC
|
||||
) AS t1
|
||||
) a
|
||||
GROUP BY
|
||||
`phasic_type`;
|
||||
</select>
|
||||
<select id="getDEVFrequencyData" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
|
||||
SELECT
|
||||
`phasic_type` AS phaseType,
|
||||
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
|
||||
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
|
||||
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
|
||||
MAX( CASE WHEN rank = #{param.count} THEN rms END ) AS cp95Value
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
rms,
|
||||
rank
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
phasic_type,
|
||||
value_type,
|
||||
freq_dev as rms,
|
||||
@rank := IF( @CI := phasic_type, @rank + 1, 1 ) AS rank,
|
||||
@CI := phasic_type
|
||||
FROM
|
||||
r_stat_data_v_d
|
||||
<where>
|
||||
phasic_type = 'T'
|
||||
and quality_flag = 0
|
||||
<if test="param.startTime != null and param.startTime != ''">
|
||||
and `time` >= #{param.startTime}
|
||||
</if>
|
||||
<if test="param.endTime != null and param.endTime != ''">
|
||||
and `time` <= #{param.endTime}
|
||||
</if>
|
||||
<if test="param.lineId != null and param.lineId != ''">
|
||||
and line_id = #{param.lineId}
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY
|
||||
phasic_type,
|
||||
(
|
||||
CASE
|
||||
WHEN value_type = 'CP95' THEN 1
|
||||
WHEN value_type = 'MAX' THEN 2
|
||||
WHEN value_type = 'MIN' THEN 3
|
||||
WHEN value_type = 'AVG' THEN 4
|
||||
ELSE 5
|
||||
END
|
||||
),
|
||||
freq_dev DESC
|
||||
) AS t1
|
||||
) a
|
||||
GROUP BY
|
||||
`phasic_type`;
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,83 @@
|
||||
package com.njcn.harmonic.service;
|
||||
|
||||
import com.njcn.harmonic.pojo.param.ReportQueryParam;
|
||||
import com.njcn.harmonic.pojo.po.report.OverLimitInfo;
|
||||
import com.njcn.harmonic.pojo.vo.ReportValue;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 谐波报告
|
||||
*/
|
||||
public interface ReportService {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
OverLimitInfo getOverLimitData(ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 基波增幅
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getVirtualData(ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 功率
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getPowerData(ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 闪变
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getFlickerData(ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 电压偏差
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getVdeviation(ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 畸变率
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getDistortionData(ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 频率
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getFrequencyData(ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 三相不平衡
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getThreephase(ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 谐波电流
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getICurrent(ReportQueryParam param);
|
||||
|
||||
/**
|
||||
* 谐波电压
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
List<ReportValue> getVoltageRate(ReportQueryParam param);
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.njcn.harmonic.service.impl;
|
||||
|
||||
import com.njcn.harmonic.pojo.vo.ReportValue;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class RegroupData {
|
||||
public static void regroupData(List<ReportValue> list, boolean... b) {
|
||||
if (1 == b.length || (2 == b.length && b[1] == false)) {
|
||||
if (0 < list.size()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Float value = null;
|
||||
int length = b[0] ? 3 : 1;
|
||||
|
||||
length = (b.length == 2 && !b[1]) ? 4 : length;
|
||||
|
||||
for (int i = 0; i < length; i++) {
|
||||
String str = null;
|
||||
|
||||
if (b[0]) {
|
||||
switch (i) {
|
||||
case 0:
|
||||
str = "A";
|
||||
break;
|
||||
case 1:
|
||||
str = "B";
|
||||
break;
|
||||
case 2:
|
||||
str = "C";
|
||||
break;
|
||||
case 3:
|
||||
str = "T";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ReportValue reportValue = new ReportValue(str, value, value, value, value);
|
||||
list.add(reportValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,484 @@
|
||||
package com.njcn.harmonic.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.njcn.harmonic.mapper.RStatDataIDMapper;
|
||||
import com.njcn.harmonic.mapper.ReportMapper;
|
||||
import com.njcn.harmonic.pojo.po.RStatDataVD;
|
||||
import com.njcn.harmonic.pojo.po.day.RStatDataIDPO;
|
||||
import com.njcn.harmonic.pojo.param.ReportQueryParam;
|
||||
import com.njcn.harmonic.pojo.po.report.OverLimitInfo;
|
||||
import com.njcn.harmonic.pojo.vo.ReportValue;
|
||||
import com.njcn.harmonic.service.IRStatDataVDService;
|
||||
import com.njcn.harmonic.service.ReportService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
public class ReportServiceImpl implements ReportService {
|
||||
|
||||
private final ReportMapper reportMapper;
|
||||
private final IRStatDataVDService statDataVDService;
|
||||
private final RStatDataIDMapper rStatDataIDMapper;
|
||||
|
||||
@Override
|
||||
public OverLimitInfo getOverLimitData(ReportQueryParam param) {
|
||||
|
||||
|
||||
OverLimitInfo overLimitInfo = new OverLimitInfo();
|
||||
|
||||
//查询时间段内共有多少条记录,并*0.95取整处理,用来计算CP95值 降序*0.05进一位计算
|
||||
double count = 0;
|
||||
double pstCount = 0;
|
||||
double pltCount = 0;
|
||||
if (param.getB()) {
|
||||
count = Math.ceil(1);
|
||||
pltCount = Math.ceil(1);
|
||||
pstCount = Math.ceil(1);
|
||||
} else {
|
||||
count = Math.ceil(reportMapper.getTotalCP95Day(param).intValue() * 0.05);
|
||||
pltCount = Math.ceil(reportMapper.getTotalPltCP95Day(param).intValue() * 0.05);
|
||||
pstCount = Math.ceil(reportMapper.getTotalPstCP95Day(param).intValue() * 0.05);
|
||||
}
|
||||
overLimitInfo.setCount(count);
|
||||
overLimitInfo.setPltCount(pltCount);
|
||||
overLimitInfo.setPstCount(pstCount);
|
||||
return overLimitInfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ReportValue> getVirtualData(ReportQueryParam param) {
|
||||
List<ReportValue> list = new ArrayList<>();
|
||||
|
||||
// 获取电流有效值
|
||||
List<ReportValue> listI = reportMapper.getVirtualDataI(param);
|
||||
//获取电压有效值
|
||||
List<ReportValue> listV = reportMapper.getVirtualDataV(param);
|
||||
//获取线电压有效值
|
||||
List<ReportValue> listVV = reportMapper.getVVirtualData(param);
|
||||
|
||||
RegroupData.regroupData(listV, true);
|
||||
RegroupData.regroupData(listI, true);
|
||||
RegroupData.regroupData(listVV, true);
|
||||
list.addAll(listV);
|
||||
list.addAll(listI);
|
||||
list.addAll(listVV);
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ReportValue> getPowerData(ReportQueryParam param) {
|
||||
List<ReportValue> list = new ArrayList<>();
|
||||
//获取有功功率
|
||||
List<ReportValue> listP = reportMapper.getPowerP(param);
|
||||
//获取无功功率
|
||||
List<ReportValue> listQ = reportMapper.getPowerQ(param);
|
||||
//获取视在功率
|
||||
List<ReportValue> listS = reportMapper.getPowerS(param);
|
||||
//获取功率因数
|
||||
List<ReportValue> listF = reportMapper.getPF(param);
|
||||
|
||||
RegroupData.regroupData(listP, true, false);
|
||||
RegroupData.regroupData(listQ, true, false);
|
||||
RegroupData.regroupData(listS, true, false);
|
||||
RegroupData.regroupData(listF, true, false);
|
||||
list.addAll(listP);
|
||||
list.addAll(listQ);
|
||||
list.addAll(listS);
|
||||
list.addAll(listF);
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ReportValue> getFlickerData(ReportQueryParam param) {
|
||||
List<ReportValue> list = new ArrayList<>();
|
||||
|
||||
//短时闪变
|
||||
List<ReportValue> listFlicker = reportMapper.getFlickerData(param);
|
||||
//长时闪变
|
||||
List<ReportValue> listLFlicker = reportMapper.getLFlickerData(param);
|
||||
|
||||
RegroupData.regroupData(listFlicker, true);
|
||||
RegroupData.regroupData(listLFlicker, true);
|
||||
list.addAll(listFlicker);
|
||||
list.addAll(listLFlicker);
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ReportValue> getVdeviation(ReportQueryParam param) {
|
||||
List<ReportValue> list = new ArrayList<>();
|
||||
|
||||
//获取电压偏差
|
||||
List<ReportValue> listU = reportMapper.getUVdeviationData(param);
|
||||
List<ReportValue> listL = reportMapper.getLVdeviationData(param);
|
||||
|
||||
RegroupData.regroupData(listU, true);
|
||||
RegroupData.regroupData(listL, true);
|
||||
list.addAll(listU);
|
||||
list.addAll(listL);
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ReportValue> getDistortionData(ReportQueryParam param) {
|
||||
List<ReportValue> list = new ArrayList<>();
|
||||
//获取电压畸变率
|
||||
List<ReportValue> listU = reportMapper.getDistortionDataV(param);
|
||||
//获取电流畸变率
|
||||
List<ReportValue> listI = reportMapper.getDistortionDataI(param);
|
||||
|
||||
//添加之前判断数据库是否有数据,如果没有数据模拟数据添加到集合中
|
||||
RegroupData.regroupData(listU, true);
|
||||
RegroupData.regroupData(listI, true);
|
||||
list.addAll(listU);
|
||||
list.addAll(listI);
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ReportValue> getFrequencyData(ReportQueryParam param) {
|
||||
List<ReportValue> list = new ArrayList<>();
|
||||
|
||||
List<ReportValue> listFre = reportMapper.getFrequencyData(param);
|
||||
List<ReportValue> listFreDEV = reportMapper.getDEVFrequencyData(param);
|
||||
|
||||
|
||||
RegroupData.regroupData(listFre, true);
|
||||
RegroupData.regroupData(listFreDEV, true);
|
||||
list.addAll(listFre);
|
||||
list.addAll(listFreDEV);
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ReportValue> getThreephase(ReportQueryParam param) {
|
||||
List<ReportValue> list = new ArrayList<>();
|
||||
//电压三相不平衡度
|
||||
List<ReportValue> listV = dataV(param, Arrays.asList("T"),1, 5,true,0);
|
||||
//电流三相不平衡度
|
||||
List<ReportValue> listI = dataI(param, Arrays.asList("T"),1, 5,true,0);
|
||||
|
||||
if (CollUtil.isNotEmpty(listV)) {
|
||||
list.addAll(listV);
|
||||
} else {
|
||||
regroupData(list);
|
||||
}
|
||||
|
||||
if (CollUtil.isNotEmpty(listI)) {
|
||||
list.addAll(listI);
|
||||
} else {
|
||||
regroupData(list);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ReportValue> getICurrent(ReportQueryParam param) {
|
||||
List<ReportValue> list = new ArrayList<>();
|
||||
|
||||
//获取电流幅值,包含基波
|
||||
List<ReportValue> listI = dataI(param, Arrays.asList("A","B","C"),1, 51,false,0);
|
||||
if (CollUtil.isEmpty(listI)) {
|
||||
for (int i = 0; i < 50; i++) {
|
||||
RegroupData.regroupData(list, true, true);
|
||||
}
|
||||
} else {
|
||||
list.addAll(listI);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ReportValue> getVoltageRate(ReportQueryParam param) {
|
||||
List<ReportValue> list = new ArrayList<>();
|
||||
|
||||
//获取基波电压幅值,单位kV
|
||||
List<ReportValue> listV = dataV(param, Arrays.asList("A","B","C"),0, 1,true,5);
|
||||
|
||||
if (CollUtil.isEmpty(listV)) {
|
||||
RegroupData.regroupData(list, true, true);
|
||||
} else {
|
||||
list.addAll(listV);
|
||||
}
|
||||
|
||||
//获取电压含有率,不包含基波
|
||||
List<ReportValue> listRate = dataV(param, Arrays.asList("A","B","C"),2, 51,false,1);
|
||||
|
||||
if (CollUtil.isEmpty(listRate)) {
|
||||
for (int i = 0; i < 49; i++) {
|
||||
RegroupData.regroupData(list, true, true);
|
||||
}
|
||||
} else {
|
||||
list.addAll(listRate);
|
||||
}
|
||||
|
||||
//获取电压畸变率
|
||||
List<ReportValue> listU = reportMapper.getDistortionDataV(param);
|
||||
RegroupData.regroupData(listU, true);
|
||||
list.addAll(listU);
|
||||
return list;
|
||||
}
|
||||
|
||||
private void regroupData(List<ReportValue> list) {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
List<ReportValue> list1 = new ArrayList<>();
|
||||
RegroupData.regroupData(list1, false);
|
||||
list.addAll(list1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 电压信息
|
||||
* @param param 查询条件
|
||||
* @param valueTypes 区分类别 例如"A","B","C"
|
||||
* @param num 循环开始
|
||||
* @param size 循环结束
|
||||
* @param fly 否是启用获取属性电压
|
||||
* @param index 获取属性位置名称
|
||||
* @return
|
||||
*/
|
||||
private List<ReportValue> dataV(ReportQueryParam param,List<String> valueTypes,Integer num,Integer size,Boolean fly,Integer index){
|
||||
List<RStatDataVD> rStatDataVDS = statDataVDService.list(new LambdaQueryWrapper<RStatDataVD>()
|
||||
.eq(RStatDataVD::getLineId, param.getLineId())
|
||||
.in(CollUtil.isNotEmpty(valueTypes),RStatDataVD::getPhasicType,valueTypes)
|
||||
.ge(StrUtil.isNotBlank(param.getStartTime()), RStatDataVD::getTime, DateUtil.beginOfDay(DateUtil.parse(param.getStartTime())))
|
||||
.le(StrUtil.isNotBlank(param.getEndTime()), RStatDataVD::getTime, DateUtil.endOfDay(DateUtil.parse(param.getEndTime())))
|
||||
);
|
||||
String max = "MAX";
|
||||
String avg = "AVG";
|
||||
String min = "MIN";
|
||||
String cp95 = "CP95";
|
||||
List<ReportValue> a = new ArrayList<>();
|
||||
Map<String, List<RStatDataVD>> collect = rStatDataVDS.stream().collect(Collectors.groupingBy(RStatDataVD::getPhasicType));
|
||||
collect.forEach((key, value) -> {
|
||||
Map<String, List<RStatDataVD>> valueTypeMap = value.stream().collect(Collectors.groupingBy(RStatDataVD::getValueType));
|
||||
|
||||
for (int i = num; i < size; i++) {
|
||||
ReportValue reportValue = new ReportValue();
|
||||
String attribute="";
|
||||
if(fly){
|
||||
if (index==0){
|
||||
attribute = attributeV(i);
|
||||
}else{
|
||||
attribute = attributeV(index);
|
||||
}
|
||||
}else{
|
||||
attribute = "v"+i;
|
||||
}
|
||||
|
||||
if (valueTypeMap.containsKey(max)) {
|
||||
List<Float> aa = reflectDataV(valueTypeMap.get(max), max,attribute);
|
||||
reportValue.setPhaseType(key);
|
||||
Float maxNum = aa.stream().distinct().max(Float::compareTo).get();
|
||||
reportValue.setFmaxValue(maxNum);
|
||||
}
|
||||
if (valueTypeMap.containsKey(avg)) {
|
||||
List<Float> aa = reflectDataV(valueTypeMap.get(avg), avg,attribute);
|
||||
reportValue.setPhaseType(key);
|
||||
Double avgNum = aa.stream().distinct().collect(Collectors.averagingDouble(Float::doubleValue));
|
||||
reportValue.setMeanValue(avgNum.floatValue());
|
||||
}
|
||||
if (valueTypeMap.containsKey(min)) {
|
||||
List<Float> aa = reflectDataV(valueTypeMap.get(min), min,attribute);
|
||||
reportValue.setPhaseType(key);
|
||||
double minNum = aa.stream().distinct().min(Float::compareTo).get();
|
||||
reportValue.setMinValue((float) minNum);
|
||||
}
|
||||
if (valueTypeMap.containsKey(cp95)) {
|
||||
List<Float> aa = reflectDataV(valueTypeMap.get(cp95), cp95,attribute);
|
||||
reportValue.setPhaseType(key);
|
||||
List<Float> cp95Num = aa.stream().distinct().sorted(Comparator.comparing(Float::doubleValue).reversed()).collect(Collectors.toList());
|
||||
reportValue.setCp95Value(cp95Num.get(0).floatValue());
|
||||
}
|
||||
a.add(reportValue);
|
||||
}
|
||||
});
|
||||
return a;
|
||||
}
|
||||
|
||||
/**
|
||||
* 电压反射取属性值
|
||||
*
|
||||
* @param value
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
private List<Float> reflectDataV(List<RStatDataVD> value, String name,String attribute) {
|
||||
Field field = null;
|
||||
try {
|
||||
field = RStatDataVD.class.getDeclaredField(attribute);
|
||||
} catch (NoSuchFieldException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
field.setAccessible(true);
|
||||
|
||||
Field finalField = field;
|
||||
return value.stream().filter(x -> x.getValueType().equals(name)).map(temp -> {
|
||||
BigDecimal o = null;
|
||||
try {
|
||||
o = (BigDecimal) finalField.get(temp);
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
return o.floatValue();
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 电流信息
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
private List<ReportValue> dataI(ReportQueryParam param,List<String> valueTypes,Integer num,Integer size,Boolean fly,Integer index){
|
||||
List<RStatDataIDPO> rStatDataVDS = rStatDataIDMapper.selectList(new LambdaQueryWrapper<RStatDataIDPO>()
|
||||
.eq(RStatDataIDPO::getLineId, param.getLineId())
|
||||
.in(CollUtil.isNotEmpty(valueTypes),RStatDataIDPO::getPhaseType,valueTypes)
|
||||
.ge(StrUtil.isNotBlank(param.getStartTime()), RStatDataIDPO::getTime, DateUtil.beginOfDay(DateUtil.parse(param.getStartTime())))
|
||||
.le(StrUtil.isNotBlank(param.getEndTime()), RStatDataIDPO::getTime, DateUtil.endOfDay(DateUtil.parse(param.getEndTime())))
|
||||
);
|
||||
String max = "MAX";
|
||||
String avg = "AVG";
|
||||
String min = "MIN";
|
||||
String cp95 = "CP95";
|
||||
List<ReportValue> a = new ArrayList<>();
|
||||
Map<String, List<RStatDataIDPO>> collect = rStatDataVDS.stream().collect(Collectors.groupingBy(RStatDataIDPO::getPhaseType));
|
||||
collect.forEach((key, value) -> {
|
||||
Map<String, List<RStatDataIDPO>> valueTypeMap = value.stream().collect(Collectors.groupingBy(RStatDataIDPO::getValueType));
|
||||
|
||||
for (int i = num; i < size; i++) {
|
||||
ReportValue reportValue = new ReportValue();
|
||||
String attribute="";
|
||||
if(fly){
|
||||
if (index==0){
|
||||
attribute = attributeI(i);
|
||||
}else{
|
||||
attribute = attributeI(index);
|
||||
}
|
||||
}else{
|
||||
attribute = "i"+i;
|
||||
}
|
||||
if (valueTypeMap.containsKey(max)) {
|
||||
List<Float> aa = reflectDataI(valueTypeMap.get(max), max,attribute);
|
||||
reportValue.setPhaseType(key);
|
||||
Float maxNum = aa.stream().distinct().max(Float::compareTo).get();
|
||||
reportValue.setFmaxValue(maxNum);
|
||||
}
|
||||
if (valueTypeMap.containsKey(avg)) {
|
||||
List<Float> aa = reflectDataI(valueTypeMap.get(avg), avg,attribute);
|
||||
reportValue.setPhaseType(key);
|
||||
Double avgNum = aa.stream().distinct().collect(Collectors.averagingDouble(Float::doubleValue));
|
||||
reportValue.setMeanValue(avgNum.floatValue());
|
||||
}
|
||||
if (valueTypeMap.containsKey(min)) {
|
||||
List<Float> aa = reflectDataI(valueTypeMap.get(min), min,attribute);
|
||||
reportValue.setPhaseType(key);
|
||||
double minNum = aa.stream().distinct().min(Float::compareTo).get();
|
||||
reportValue.setMinValue((float) minNum);
|
||||
}
|
||||
if (valueTypeMap.containsKey(cp95)) {
|
||||
List<Float> aa = reflectDataI(valueTypeMap.get(cp95), cp95,attribute);
|
||||
reportValue.setPhaseType(key);
|
||||
List<Float> cp95Num = aa.stream().distinct().sorted(Comparator.comparing(Float::doubleValue).reversed()).collect(Collectors.toList());
|
||||
reportValue.setCp95Value(cp95Num.get(0).floatValue());
|
||||
}
|
||||
a.add(reportValue);
|
||||
}
|
||||
});
|
||||
return a;
|
||||
}
|
||||
|
||||
/**
|
||||
* 电流反射取属性值
|
||||
*
|
||||
* @param value
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
private List<Float> reflectDataI(List<RStatDataIDPO> value, String name, String attribute) {
|
||||
Field field = null;
|
||||
try {
|
||||
field = RStatDataIDPO.class.getDeclaredField(attribute);
|
||||
} catch (NoSuchFieldException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
field.setAccessible(true);
|
||||
Field finalField = field;
|
||||
return value.stream().filter(x -> x.getValueType().equals(name)).map(temp -> {
|
||||
Double o = null;
|
||||
try {
|
||||
o = (Double) finalField.get(temp);
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
return o.floatValue();
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取属性电压
|
||||
* @param i
|
||||
* @return
|
||||
*/
|
||||
private String attributeV(Integer i) {
|
||||
String str=null;
|
||||
switch (i) {
|
||||
case 1:
|
||||
str = "vUnbalance";
|
||||
break;
|
||||
case 2:
|
||||
str = "vPos";
|
||||
break;
|
||||
case 3:
|
||||
str = "vNeg";
|
||||
break;
|
||||
case 4:
|
||||
str = "vZero";
|
||||
break;
|
||||
case 5:
|
||||
str = "v1";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
/**
|
||||
* 获取属性电流
|
||||
* @param i
|
||||
* @return
|
||||
*/
|
||||
private String attributeI(Integer i) {
|
||||
String str=null;
|
||||
switch (i) {
|
||||
case 1:
|
||||
str = "iUnbalance";
|
||||
break;
|
||||
case 2:
|
||||
str = "iPos";
|
||||
break;
|
||||
case 3:
|
||||
str = "iNeg";
|
||||
break;
|
||||
case 4:
|
||||
str = "iZero";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
}
|
||||
BIN
pqs-harmonic/harmonic-boot/src/main/resources/file/default.jpg
Normal file
BIN
pqs-harmonic/harmonic-boot/src/main/resources/file/default.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 76 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user