1.功能bug调整

2.算法添加部分指标异常数据判断
This commit is contained in:
xy
2024-05-21 14:01:31 +08:00
parent e2b84c275e
commit 2618f4cc33
7 changed files with 133 additions and 73 deletions

View File

@@ -18,70 +18,70 @@
<select id="getRunManageList" resultType="com.njcn.device.pq.pojo.vo.RunManageVO"> <select id="getRunManageList" resultType="com.njcn.device.pq.pojo.vo.RunManageVO">
SELECT SELECT
linedetail.Num AS id, linedetail.Num AS id,
line.NAME AS lineName, line.NAME AS lineName,
area.NAME AS areaName, area.NAME AS areaName,
gd.NAME AS gdName, gd.NAME AS gdName,
sub.NAME AS bdName, sub.NAME AS bdName,
scaleId.Name as scale, scaleId.Name as scale,
manufacturerId.name as manufacturer, manufacturerId.name as manufacturer,
dev.name as devName, dev.name as devName,
device.IP as ip, device.IP as ip,
case device.Run_Flag when 0 then "投运" case device.Run_Flag when 0 then "投运"
when 1 then "热备用" when 1 then "热备用"
when 2 then "停运" when 2 then "停运"
end as runFlag, end as runFlag,
case device.Com_Flag when 0 then "中断" case device.Com_Flag when 0 then "中断"
when 1 then "正常" when 1 then "正常"
end as comFlag, end as comFlag,
loadtypeId.Name as loadType, loadtypeId.Name as loadType,
businesstypeId.name as businessType, businesstypeId.name as businessType,
IFNULL(linedetail.Obj_Name,"/") as objName, IFNULL(linedetail.Obj_Name,"/") as objName,
case linedetail.PT_Type when 0 then "星型接线" case linedetail.PT_Type when 0 then "星型接线"
when 1 then "三角型接线" when 1 then "三角型接线"
when 2 then "开口三角型接线" when 2 then "开口三角型接线"
end as ptType, end as ptType,
CONCAT(linedetail.PT1,"/", linedetail.PT2) as pt, CONCAT(linedetail.PT1,"/", linedetail.PT2) as pt,
CONCAT(linedetail.CT1,"/", linedetail.CT2) as ct, CONCAT(linedetail.CT1,"/", linedetail.CT2) as ct,
linedetail.Standard_Capacity as standardCapacity, linedetail.Standard_Capacity as standardCapacity,
linedetail.Short_Capacity as shortCapacity, linedetail.Short_Capacity as shortCapacity,
linedetail.Dev_Capacity as devCapacity, linedetail.Dev_Capacity as devCapacity,
linedetail.Deal_Capacity as dealCapacity, linedetail.Deal_Capacity as dealCapacity,
over.Freq_Dev as freqDev, overlimit.Freq_Dev as freqDev,
over.Voltage_Dev as voltageDev, overlimit.Voltage_Dev as voltageDev,
over.Uvoltage_Dev as uvoltageDev, overlimit.Uvoltage_Dev as uvoltageDev,
over.Ubalance as ubalance, overlimit.Ubalance as ubalance,
over.I_Neg as iNeg, overlimit.I_Neg as iNeg,
over.Flicker as flicker, overlimit.Flicker as flicker,
over.Uaberrance as uaberrance, overlimit.Uaberrance as uaberrance,
over.Uharm_3 as oddHarm, overlimit.Uharm_3 as oddHarm,
over.Uharm_2 as evenHarm, overlimit.Uharm_2 as evenHarm,
over.Iharm_2 as iharm2, overlimit.Iharm_2 as iharm2,
over.Iharm_3 as iharm3, overlimit.Iharm_3 as iharm3,
over.Iharm_4 as iharm4, overlimit.Iharm_4 as iharm4,
over.Iharm_5 as iharm5, overlimit.Iharm_5 as iharm5,
over.Iharm_6 as iharm6, overlimit.Iharm_6 as iharm6,
over.Iharm_7 as iharm7, overlimit.Iharm_7 as iharm7,
over.Iharm_8 as iharm8, overlimit.Iharm_8 as iharm8,
over.Iharm_9 as iharm9, overlimit.Iharm_9 as iharm9,
over.Iharm_10 as iharm10, overlimit.Iharm_10 as iharm10,
over.Iharm_11 as iharm11, overlimit.Iharm_11 as iharm11,
over.Iharm_12 as iharm12, overlimit.Iharm_12 as iharm12,
over.Iharm_13 as iharm13, overlimit.Iharm_13 as iharm13,
over.Iharm_14 as iharm14, overlimit.Iharm_14 as iharm14,
over.Iharm_15 as iharm15, overlimit.Iharm_15 as iharm15,
over.Iharm_16 as iharm16, overlimit.Iharm_16 as iharm16,
over.Iharm_17 as iharm17, overlimit.Iharm_17 as iharm17,
over.Iharm_18 as iharm18, overlimit.Iharm_18 as iharm18,
over.Iharm_19 as iharm19, overlimit.Iharm_19 as iharm19,
over.Iharm_20 as iharm20, overlimit.Iharm_20 as iharm20,
over.Iharm_21 as iharm21, overlimit.Iharm_21 as iharm21,
over.Iharm_22 as iharm22, overlimit.Iharm_22 as iharm22,
over.Iharm_23 as iharm23, overlimit.Iharm_23 as iharm23,
over.Iharm_24 as iharm24, overlimit.Iharm_24 as iharm24,
over.Iharm_25 as iharm25, overlimit.Iharm_25 as iharm25,
over.InUharm_1 as inUharm, overlimit.InUharm_1 as inUharm,
over.InUharm_16 as inUharm16 overlimit.InUharm_16 as inUharm16
FROM pq_line line FROM pq_line line
INNER JOIN pq_line vol ON vol.Id = line.Pid INNER JOIN pq_line vol ON vol.Id = line.Pid
INNER JOIN pq_line dev ON dev.Id = vol.Pid INNER JOIN pq_line dev ON dev.Id = vol.Pid
@@ -89,7 +89,7 @@
INNER JOIN pq_line gd ON gd.Id = sub.Pid INNER JOIN pq_line gd ON gd.Id = sub.Pid
INNER JOIN pq_line areaId ON areaId.Id = gd.Pid INNER JOIN pq_line areaId ON areaId.Id = gd.Pid
INNER JOIN sys_area area ON area.Id = areaId.NAME INNER JOIN sys_area area ON area.Id = areaId.NAME
INNER JOIN pq_overlimit over ON over.Id = line.Id INNER JOIN pq_overlimit overlimit ON overlimit.Id = line.Id
INNER JOIN pq_voltage voltage ON voltage.Id = vol.Id INNER JOIN pq_voltage voltage ON voltage.Id = vol.Id
INNER JOIN sys_dict_data scaleId ON scaleId.Id = voltage.Scale INNER JOIN sys_dict_data scaleId ON scaleId.Id = voltage.Scale
INNER JOIN pq_device device ON device.Id = dev.Id INNER JOIN pq_device device ON device.Id = dev.Id
@@ -114,10 +114,10 @@
OR line.NAME LIKE #{searchValueLike} OR line.NAME LIKE #{searchValueLike}
</if> </if>
ORDER BY ORDER BY
gdName, gdName,
bdName, bdName,
devNAME, devNAME,
objName; objName;
</select> </select>
<select id="getRunManageDevList" resultType="com.njcn.device.pq.pojo.vo.RunTimeVO"> <select id="getRunManageDevList" resultType="com.njcn.device.pq.pojo.vo.RunTimeVO">

View File

@@ -74,7 +74,7 @@ public class RunManageServiceImpl implements RunManageService {
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfo(deviceInfoParam, runManageParam.getRunFlag(), Stream.of(1).collect(Collectors.toList())); List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfo(deviceInfoParam, runManageParam.getRunFlag(), Stream.of(1).collect(Collectors.toList()));
List<String> lineIndexes = generalDeviceDTOList.stream().flatMap(list -> list.getLineIndexes().stream()).collect(Collectors.toList()); List<String> lineIndexes = generalDeviceDTOList.stream().flatMap(list -> list.getLineIndexes().stream()).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(lineIndexes)) { if (!CollectionUtils.isEmpty(lineIndexes)) {
return deviceMapper.getRunManageList(lineIndexes, runManageParam.getComFlag(), runManageParam.getSearchValue()); return deviceMapper.getRunManageList(lineIndexes, runManageParam.getComFlag(), Objects.isNull(runManageParam.getSearchValue())?null:runManageParam.getSearchValue());
} else { } else {
return new ArrayList<>(); return new ArrayList<>();
} }

View File

@@ -19,6 +19,9 @@ public class AssessVo implements Serializable {
@ApiModelProperty("名称") @ApiModelProperty("名称")
private String name; private String name;
@ApiModelProperty("地市code")
private String code;
@ApiModelProperty("评估分数") @ApiModelProperty("评估分数")
private Float score = 3.14159f; private Float score = 3.14159f;

View File

@@ -31,4 +31,9 @@ public interface RStatDataVDMapper extends BaseMapper<RStatDataVD> {
*/ */
List<RStatDataVD> getVthd(@Param("list") List<String> lineList, @Param("startTime") String startTime, @Param("endTime") String endTime); List<RStatDataVD> getVthd(@Param("list") List<String> lineList, @Param("startTime") String startTime, @Param("endTime") String endTime);
/**
* 获取三相电压不平衡度
*/
List<RStatDataVD> getUnbalance(@Param("list") List<String> lineList, @Param("startTime") String startTime, @Param("endTime") String endTime);
} }

View File

@@ -63,4 +63,24 @@
`time`,line_id `time`,line_id
</select> </select>
<select id="getUnbalance" resultType="com.njcn.harmonic.pojo.po.RStatDataVD">
select
`time` time,
line_id lineId,
avg(v_unbalance) vUnbalance
from
r_stat_data_v_d
where
`time` between #{startTime} and #{endTime}
and phasic_type = 'T'
and value_type = 'CP95'
and line_id IN
<foreach collection="list" item="item" separator="," open="(" close=")">
#{item}
</foreach>
and quality_flag = 0
group by
`time`,line_id
</select>
</mapper> </mapper>

View File

@@ -91,6 +91,7 @@ public class GridServiceImpl implements IGridService {
if (lineDetailMap.containsKey(item.getArea())) { if (lineDetailMap.containsKey(item.getArea())) {
AssessVo assessVo = new AssessVo(); AssessVo assessVo = new AssessVo();
assessVo.setName(item.getName()); assessVo.setName(item.getName());
assessVo.setCode(item.getCode());
List<String> ll = lineDetailMap.get(item.getArea()).stream().map(LineDetail::getId).collect(Collectors.toList()); List<String> ll = lineDetailMap.get(item.getArea()).stream().map(LineDetail::getId).collect(Collectors.toList());
List<PQSComAssesPO> deptAssessList = assesList.stream().filter(it->ll.contains(it.getLineId())).collect(Collectors.toList()); List<PQSComAssesPO> deptAssessList = assesList.stream().filter(it->ll.contains(it.getLineId())).collect(Collectors.toList());
List<PqsComasses> communicateList = BeanUtil.copyToList(deptAssessList,PqsComasses.class); List<PqsComasses> communicateList = BeanUtil.copyToList(deptAssessList,PqsComasses.class);
@@ -310,6 +311,7 @@ public class GridServiceImpl implements IGridService {
List<RStatDataVD> list2 = getList2(lineList,param.getStartTime(),param.getEndTime()); List<RStatDataVD> list2 = getList2(lineList,param.getStartTime(),param.getEndTime());
List<RStatDataVD> list3 = getList3(lineList,param.getStartTime(),param.getEndTime()); List<RStatDataVD> list3 = getList3(lineList,param.getStartTime(),param.getEndTime());
List<RStatDataPltDPO> list4 = getList4(lineList,param.getStartTime(),param.getEndTime()); List<RStatDataPltDPO> list4 = getList4(lineList,param.getStartTime(),param.getEndTime());
List<RStatDataVD> list5 = getList5(lineList,param.getStartTime(),param.getEndTime());
if (CollUtil.isNotEmpty(list1)) { if (CollUtil.isNotEmpty(list1)) {
List<Double> d = list1.stream().map(o->o.getFreqDev().doubleValue()).collect(Collectors.toList()); List<Double> d = list1.stream().map(o->o.getFreqDev().doubleValue()).collect(Collectors.toList());
double avg = d.stream().collect(Collectors.averagingDouble(x->x)); double avg = d.stream().collect(Collectors.averagingDouble(x->x));
@@ -328,7 +330,7 @@ public class GridServiceImpl implements IGridService {
vo3.setAvg(PubUtils.doubleRound(2,avg)); vo3.setAvg(PubUtils.doubleRound(2,avg));
vo3.setSd(targetSd(d,avg)); vo3.setSd(targetSd(d,avg));
} }
if (CollUtil.isNotEmpty(list1)) { if (CollUtil.isNotEmpty(list5)) {
List<Double> d = list1.stream().map(o -> o.getVUnbalance().doubleValue()).collect(Collectors.toList()); List<Double> d = list1.stream().map(o -> o.getVUnbalance().doubleValue()).collect(Collectors.toList());
double avg = d.stream().collect(Collectors.averagingDouble(x -> x)); double avg = d.stream().collect(Collectors.averagingDouble(x -> x));
vo4.setAvg(PubUtils.doubleRound(2,avg)); vo4.setAvg(PubUtils.doubleRound(2,avg));
@@ -545,7 +547,7 @@ public class GridServiceImpl implements IGridService {
} }
/** /**
* 获取监测点频率偏差 T相最大值\获取监测点三相电压不平衡度 T相最大值 * 获取监测点频率偏差 T相最大值
*/ */
public List<RStatDataVD> getList1(List<String> lineList, String startTime, String endTime) { public List<RStatDataVD> getList1(List<String> lineList, String startTime, String endTime) {
return statDataVDMapper.getFreqDev(lineList,startTime,endTime); return statDataVDMapper.getFreqDev(lineList,startTime,endTime);
@@ -572,6 +574,13 @@ public class GridServiceImpl implements IGridService {
return statDataPltDMapper.getPlt(lineList,startTime,endTime); return statDataPltDMapper.getPlt(lineList,startTime,endTime);
} }
/**
* 获取监测点三相电压不平衡度 T相 CP95
*/
public List<RStatDataVD> getList5(List<String> lineList, String startTime, String endTime) {
return statDataVDMapper.getUnbalance(lineList,startTime,endTime);
}
/** /**
* 计算标准差 * 计算标准差
*/ */

View File

@@ -3,6 +3,7 @@ package com.njcn.prepare.harmonic.service.mysql.Impl.line;
import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.ObjUtil;
import com.alibaba.nacos.client.naming.utils.CollectionUtils; import com.alibaba.nacos.client.naming.utils.CollectionUtils;
import com.njcn.common.utils.HarmonicTimesUtil; import com.njcn.common.utils.HarmonicTimesUtil;
import com.njcn.harmonic.pojo.po.day.*; import com.njcn.harmonic.pojo.po.day.*;
@@ -19,7 +20,6 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils; import org.apache.commons.collections4.ListUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -113,7 +113,10 @@ public class DayDataServiceImpl implements DayDataService {
RStatDataVDPO po1 = new RStatDataVDPO(); RStatDataVDPO po1 = new RStatDataVDPO();
BeanUtils.copyProperties(item, po1); BeanUtils.copyProperties(item, po1);
po1.setTime(LocalDate.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER)); po1.setTime(LocalDate.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER));
//todo 此数据质量标记为influxdb查询得出,数据转换时未做数据异常判断,因前置那边未做判断,系统先做判断拦截,后期前置应该加判断
po1.setQualityFlag(Integer.parseInt(item.getQualityFlag())); po1.setQualityFlag(Integer.parseInt(item.getQualityFlag()));
//fixme 因现场数据异常,先处理频率偏差、电压偏差、电压总谐波畸变率、三相电压不平衡度、长时闪变异常数据拦截
po1.setQualityFlag(DataAnomalyDetectio(po1,null));
dataVPOList.add(po1); dataVPOList.add(po1);
DayV dayV = new DayV(); DayV dayV = new DayV();
BeanUtils.copyProperties(item, dayV); BeanUtils.copyProperties(item, dayV);
@@ -580,6 +583,7 @@ public class DayDataServiceImpl implements DayDataService {
BeanUtils.copyProperties(item, po1); BeanUtils.copyProperties(item, po1);
po1.setTime(LocalDate.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER)); po1.setTime(LocalDate.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_FORMATTER));
po1.setQualityFlag(Integer.parseInt(item.getQualityFlag())); po1.setQualityFlag(Integer.parseInt(item.getQualityFlag()));
po1.setQualityFlag(DataAnomalyDetectio(null,po1));
dataPltPOList.add(po1); dataPltPOList.add(po1);
DayPlt dayPlt = new DayPlt(); DayPlt dayPlt = new DayPlt();
@@ -1864,4 +1868,23 @@ public class DayDataServiceImpl implements DayDataService {
result.addAll(result4); result.addAll(result4);
return result; return result;
} }
public Integer DataAnomalyDetectio(RStatDataVDPO po1, RStatDataPltDPO po2) {
int result = 0;
if (ObjUtil.isNotNull(po1)) {
if (Math.abs(po1.getFreqDev()) > 7.5
|| Math.abs(po1.getVlDev()) > 20
|| Math.abs(po1.getVuDev()) > 20
|| po1.getVThd() > 30
|| po1.getVUnbalance() > 40) {
result = 1;
}
}
if (ObjUtil.isNotNull(po2)) {
if (po2.getPlt() > 20) {
result = 1;
}
}
return result;
}
} }