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

@@ -47,41 +47,41 @@
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

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;
}
} }