数据清洗算法

This commit is contained in:
xy
2025-02-26 11:07:34 +08:00
parent 92d540e497
commit f1ddff6bcb
99 changed files with 3937 additions and 224 deletions

View File

@@ -99,6 +99,11 @@
<artifactId>liteflow-rule-nacos</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>pq-device-api</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>

View File

@@ -29,7 +29,8 @@ public class MeasurementExecutor extends BaseExecutor {
private IDataCleanService dataCleanService;
/**
* 数据清洗dataV
* 数据清洗 电压表
* dataV表
* @author xy
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "dataVClean", nodeType = NodeTypeEnum.COMMON)
@@ -41,6 +42,120 @@ public class MeasurementExecutor extends BaseExecutor {
dataCleanService.dataVCleanHandler(bindCmp.getRequestData());
}
/**
* 数据清洗 电流表
* dataI表
* @author xy
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "dataIClean", nodeType = NodeTypeEnum.COMMON)
public boolean dataICleanAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "dataIClean", nodeType = NodeTypeEnum.COMMON)
public void dataICleanProcess(NodeComponent bindCmp) {
dataCleanService.dataICleanHandler(bindCmp.getRequestData());
}
/**
* 数据清洗 长闪表
* dataPlt表
* @author xy
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "dataPltClean", nodeType = NodeTypeEnum.COMMON)
public boolean dataPltCleanAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "dataPltClean", nodeType = NodeTypeEnum.COMMON)
public void dataPltCleanProcess(NodeComponent bindCmp) {
dataCleanService.dataPltCleanHandler(bindCmp.getRequestData());
}
/**
* 数据清洗 间谐波电压表
* DataInHarmV表
* @author xy
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "dataInHarmVClean", nodeType = NodeTypeEnum.COMMON)
public boolean dataInHarmVCleanAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "dataInHarmVClean", nodeType = NodeTypeEnum.COMMON)
public void dataInHarmVCleanProcess(NodeComponent bindCmp) {
dataCleanService.dataInHarmVCleanHandler(bindCmp.getRequestData());
}
/**
* 数据清洗 谐波电压含有率
* DataHarmRateV表
* @author xy
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "dataHarmRateVClean", nodeType = NodeTypeEnum.COMMON)
public boolean dataHarmRateVCleanAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "dataHarmRateVClean", nodeType = NodeTypeEnum.COMMON)
public void dataHarmRateVCleanProcess(NodeComponent bindCmp) {
dataCleanService.dataHarmRateVCleanHandler(bindCmp.getRequestData());
}
/**
* 数据清洗 有功功率表
* DataHarmPowerP表
* @author xy
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "dataHarmPowerPClean", nodeType = NodeTypeEnum.COMMON)
public boolean dataHarmPowerPCleanAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "dataHarmPowerPClean", nodeType = NodeTypeEnum.COMMON)
public void dataHarmPowerPCleanProcess(NodeComponent bindCmp) {
dataCleanService.dataHarmPowerPCleanHandler(bindCmp.getRequestData());
}
/**
* 数据清洗 谐波电压角度表
* DataHarmPhasicV表
* @author xy
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "dataHarmPhasicVClean", nodeType = NodeTypeEnum.COMMON)
public boolean dataHarmPhasicVCleanAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "dataHarmPhasicVClean", nodeType = NodeTypeEnum.COMMON)
public void dataHarmPhasicVCleanProcess(NodeComponent bindCmp) {
dataCleanService.dataHarmPhasicVCleanHandler(bindCmp.getRequestData());
}
/**
* 数据清洗 电压波动表
* DataFluc表
* @author xy
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "dataFlucClean", nodeType = NodeTypeEnum.COMMON)
public boolean dataFlucCleanAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "dataFlucClean", nodeType = NodeTypeEnum.COMMON)
public void dataFlucCleanProcess(NodeComponent bindCmp) {
dataCleanService.dataFlucCleanHandler(bindCmp.getRequestData());
}
/**
* 数据清洗
* DataFlicker表
* @author xy
*/
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "dataFlickerClean", nodeType = NodeTypeEnum.COMMON)
public boolean dataFlickerCleanAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "dataFlickerClean", nodeType = NodeTypeEnum.COMMON)
public void dataFlickerCleanProcess(NodeComponent bindCmp) {
dataCleanService.dataFlickerCleanHandler(bindCmp.getRequestData());
}
/**
* 监测点报表_日表(r_stat_data_*_d)
* @author xy

View File

@@ -9,9 +9,73 @@ public interface IDataCleanService {
/***
* dataV数据清洗
* 不标记原始数据,将异常数据查询出来重新存储至详情表中
* @author xy
* @param calculatedParam 查询条件
*/
void dataVCleanHandler(CalculatedParam calculatedParam);
/***
* dataI数据清洗
* 不标记原始数据,将异常数据查询出来重新存储至详情表中
* @author xy
* @param calculatedParam 查询条件
*/
void dataICleanHandler(CalculatedParam calculatedParam);
/***
* dataPlt数据清洗
* 不标记原始数据,将异常数据查询出来重新存储至详情表中
* @author xy
* @param calculatedParam 查询条件
*/
void dataPltCleanHandler(CalculatedParam calculatedParam);
/***
* dataInHarmV数据清洗
* 不标记原始数据,将异常数据查询出来重新存储至详情表中
* @author xy
* @param calculatedParam 查询条件
*/
void dataInHarmVCleanHandler(CalculatedParam calculatedParam);
/***
* dataHarmRateV数据清洗
* 不标记原始数据,将异常数据查询出来重新存储至详情表中
* @author xy
* @param calculatedParam 查询条件
*/
void dataHarmRateVCleanHandler(CalculatedParam calculatedParam);
/***
* dataHarmPowerP数据清洗
* 不标记原始数据,将异常数据查询出来重新存储至详情表中
* @author xy
* @param calculatedParam 查询条件
*/
void dataHarmPowerPCleanHandler(CalculatedParam calculatedParam);
/***
* dataHarmPhasicV数据清洗
* 不标记原始数据,将异常数据查询出来重新存储至详情表中
* @author xy
* @param calculatedParam 查询条件
*/
void dataHarmPhasicVCleanHandler(CalculatedParam calculatedParam);
/***
* dataFluc数据清洗
* 不标记原始数据,将异常数据查询出来重新存储至详情表中
* @author xy
* @param calculatedParam 查询条件
*/
void dataFlucCleanHandler(CalculatedParam calculatedParam);
/***
* dataFlicker数据清洗
* 不标记原始数据,将异常数据查询出来重新存储至详情表中
* @author xy
* @param calculatedParam 查询条件
*/
void dataFlickerCleanHandler(CalculatedParam calculatedParam);
}

View File

@@ -3,10 +3,16 @@ package com.njcn.algorithm.serviceimpl.line;
import cn.hutool.core.collection.CollUtil;
import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.algorithm.service.line.IDataCleanService;
import com.njcn.dataProcess.api.DataVFeignClient;
import com.njcn.dataProcess.api.*;
import com.njcn.dataProcess.enums.DataCleanEnum;
import com.njcn.dataProcess.param.DataCleanParam;
import com.njcn.dataProcess.param.LineCountEvaluateParam;
import com.njcn.dataProcess.pojo.dto.DataVDto;
import com.njcn.dataProcess.pojo.dto.*;
import com.njcn.dataProcess.pojo.po.PqDataVerify;
import com.njcn.dataProcess.util.DataCommonUtils;
import com.njcn.dataProcess.util.TimeUtils;
import com.njcn.device.pq.api.LineFeignClient;
import com.njcn.device.pq.pojo.vo.LineDetailVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils;
@@ -15,8 +21,11 @@ import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.lang.reflect.Method;
import java.time.LocalDateTime;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author xy
@@ -31,26 +40,833 @@ public class DataCleanServiceImpl implements IDataCleanService {
@Resource
private DataVFeignClient dataVFeignClient;
@Resource
private DataIFeignClient dataIFeignClient;
@Resource
private DataPltFeignClient dataPltFeignClient;
@Resource
private DataInharmVFeignClient dataInharmVFeignClient;
@Resource
private DataHarmRateVFeignClient dataHarmRateVFeignClient;
@Resource
private DataHarmpowerPFeignClient dataHarmpowerPFeignClient;
@Resource
private DataHarmphasicVFeignClient dataHarmphasicVFeignClient;
@Resource
private DataFlucFeignClient dataFlucFeignClient;
@Resource
private DataFlickerFeignClient dataFlickerFeignClient;
@Resource
private PqDataVerifyFeignClient pqDataVerifyFeignClient;
@Resource
private PqReasonableRangeFeignClient pqReasonableRangeFeignClient;
@Resource
private LineFeignClient lineFeignClient;
@Override
public void dataVCleanHandler(CalculatedParam calculatedParam) {
List<DataVDto> result = new ArrayList<>();
logger.info("{},dataV表异常数据算法执行=====》", LocalDateTime.now());
List<PqDataVerify> result = new ArrayList<>();
//获取标准
Map<String, PqReasonableRangeDto> map = getStandardData(DataCleanEnum.DataV.getCode());
//获取监测点台账信息
List<String> lineList = calculatedParam.getIdList();
List<LineDetailVO.Detail> lineDetail = lineFeignClient.getLineDetailByIds(lineList).getData();
if (CollUtil.isEmpty(lineDetail)) {
logger.error("监测点集合为空,无法计算!");
return;
}
Map<String,LineDetailVO.Detail> lineMap = lineDetail.stream().collect(Collectors.toMap(LineDetailVO.Detail::getLineId, Function.identity()));
//数据分片处理
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));
List<List<String>> pendingIds = ListUtils.partition(calculatedParam.getIdList(),NUM);
List<List<String>> pendingIds = ListUtils.partition(lineList,NUM);
pendingIds.forEach(list->{
lineParam.setLineId(list);
List<DataVDto> partList = dataVFeignClient.getRawData(lineParam).getData();
if (CollUtil.isNotEmpty(partList)) {
partList.forEach(item->{
item.setAbnormalFlag(0);
//数据清洗
List<PqDataVerify> pqDataVerifies = judgeDataV(map, lineMap.get(item.getLineId()),item);
result.addAll(pqDataVerifies);
});
result.addAll(partList);
}
});
if (CollUtil.isNotEmpty(result)) {
dataVFeignClient.addInfluxDbList(result);
pqDataVerifyFeignClient.insertData(result);
}
}
@Override
public void dataICleanHandler(CalculatedParam calculatedParam) {
logger.info("{},dataI表异常数据算法执行=====》", LocalDateTime.now());
List<PqDataVerify> result = new ArrayList<>();
//获取标准
Map<String, PqReasonableRangeDto> map = getStandardData(DataCleanEnum.DataI.getCode());
//获取监测点台账信息
List<String> lineList = calculatedParam.getIdList();
List<LineDetailVO.Detail> lineDetail = lineFeignClient.getLineDetailByIds(lineList).getData();
if (CollUtil.isEmpty(lineDetail)) {
logger.error("监测点集合为空,无法计算!");
return;
}
Map<String,LineDetailVO.Detail> lineMap = lineDetail.stream().collect(Collectors.toMap(LineDetailVO.Detail::getLineId, Function.identity()));
//数据分片处理
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));
List<List<String>> pendingIds = ListUtils.partition(lineList,NUM);
pendingIds.forEach(list->{
lineParam.setLineId(list);
List<DataIDto> partList = dataIFeignClient.getRawData(lineParam).getData();
if (CollUtil.isNotEmpty(partList)) {
partList.forEach(item->{
//数据清洗
List<PqDataVerify> pqDataVerifies = judgeDataI(map, lineMap.get(item.getLineId()),item);
result.addAll(pqDataVerifies);
});
}
});
if (CollUtil.isNotEmpty(result)) {
pqDataVerifyFeignClient.insertData(result);
}
}
@Override
public void dataPltCleanHandler(CalculatedParam calculatedParam) {
logger.info("{},dataPlt表异常数据算法执行=====》", LocalDateTime.now());
List<PqDataVerify> result = new ArrayList<>();
//获取标准
Map<String, PqReasonableRangeDto> map = getStandardData(DataCleanEnum.DataPlt.getCode());
//获取监测点台账信息
List<String> lineList = calculatedParam.getIdList();
//数据分片处理
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));
List<List<String>> pendingIds = ListUtils.partition(lineList,NUM);
pendingIds.forEach(list->{
lineParam.setLineId(list);
List<DataPltDto> partList = dataPltFeignClient.getRawData(lineParam).getData();
if (CollUtil.isNotEmpty(partList)) {
partList.forEach(item->{
//数据清洗
List<PqDataVerify> pqDataVerifies = judgeDataPlt(map,item);
result.addAll(pqDataVerifies);
});
}
});
if (CollUtil.isNotEmpty(result)) {
pqDataVerifyFeignClient.insertData(result);
}
}
@Override
public void dataInHarmVCleanHandler(CalculatedParam calculatedParam) {
logger.info("{},dataInHarmV表异常数据算法执行=====》", LocalDateTime.now());
List<PqDataVerify> result = new ArrayList<>();
//获取标准
Map<String, PqReasonableRangeDto> map = getStandardData(DataCleanEnum.DataInHarmV.getCode());
//获取监测点台账信息
List<String> lineList = calculatedParam.getIdList();
//数据分片处理
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));
List<List<String>> pendingIds = ListUtils.partition(lineList,NUM);
pendingIds.forEach(list->{
lineParam.setLineId(list);
List<DataHarmDto> partList = dataInharmVFeignClient.getRawData(lineParam).getData();
if (CollUtil.isNotEmpty(partList)) {
partList.forEach(item->{
//数据清洗
List<PqDataVerify> pqDataVerifies = judgeDataInHarmV(map,item);
result.addAll(pqDataVerifies);
});
}
});
if (CollUtil.isNotEmpty(result)) {
pqDataVerifyFeignClient.insertData(result);
}
}
@Override
public void dataHarmRateVCleanHandler(CalculatedParam calculatedParam) {
logger.info("{},dataHarmRateV表异常数据算法执行=====》", LocalDateTime.now());
List<PqDataVerify> result = new ArrayList<>();
//获取标准
Map<String, PqReasonableRangeDto> map = getStandardData(DataCleanEnum.DataHarmRateV.getCode());
//获取监测点台账信息
List<String> lineList = calculatedParam.getIdList();
//数据分片处理
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));
List<List<String>> pendingIds = ListUtils.partition(lineList,NUM);
pendingIds.forEach(list->{
lineParam.setLineId(list);
List<DataHarmDto> partList = dataHarmRateVFeignClient.getRawData(lineParam).getData();
if (CollUtil.isNotEmpty(partList)) {
partList.forEach(item->{
//数据清洗
List<PqDataVerify> pqDataVerifies = judgeDataHarmRateV(map,item);
result.addAll(pqDataVerifies);
});
}
});
if (CollUtil.isNotEmpty(result)) {
pqDataVerifyFeignClient.insertData(result);
}
}
@Override
public void dataHarmPowerPCleanHandler(CalculatedParam calculatedParam) {
logger.info("{},dataHarmPowerP表异常数据算法执行=====》", LocalDateTime.now());
List<PqDataVerify> result = new ArrayList<>();
//获取标准
Map<String, PqReasonableRangeDto> map = getStandardData(DataCleanEnum.DataHarmPowerP.getCode());
//获取监测点台账信息
List<String> lineList = calculatedParam.getIdList();
//数据分片处理
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));
List<List<String>> pendingIds = ListUtils.partition(lineList,NUM);
pendingIds.forEach(list->{
lineParam.setLineId(list);
List<DataPowerPDto> partList = dataHarmpowerPFeignClient.getRawData(lineParam).getData();
if (CollUtil.isNotEmpty(partList)) {
partList.forEach(item->{
//数据清洗
List<PqDataVerify> pqDataVerifies = judgeDataHarmPowerP(map,item);
result.addAll(pqDataVerifies);
});
}
});
if (CollUtil.isNotEmpty(result)) {
pqDataVerifyFeignClient.insertData(result);
}
}
@Override
public void dataHarmPhasicVCleanHandler(CalculatedParam calculatedParam) {
logger.info("{},dataHarmPhasicV表异常数据算法执行=====》", LocalDateTime.now());
List<PqDataVerify> result = new ArrayList<>();
//获取标准
Map<String, PqReasonableRangeDto> map = getStandardData(DataCleanEnum.DataHarmPhasicV.getCode());
//获取监测点台账信息
List<String> lineList = calculatedParam.getIdList();
//数据分片处理
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));
List<List<String>> pendingIds = ListUtils.partition(lineList,NUM);
pendingIds.forEach(list->{
lineParam.setLineId(list);
List<DataHarmDto> partList = dataHarmphasicVFeignClient.getRawData(lineParam).getData();
if (CollUtil.isNotEmpty(partList)) {
partList.forEach(item->{
//数据清洗
List<PqDataVerify> pqDataVerifies = judgeDataHarmPhasicV(map,item);
result.addAll(pqDataVerifies);
});
}
});
if (CollUtil.isNotEmpty(result)) {
pqDataVerifyFeignClient.insertData(result);
}
}
@Override
public void dataFlucCleanHandler(CalculatedParam calculatedParam) {
logger.info("{},dataFluc表异常数据算法执行=====》", LocalDateTime.now());
List<PqDataVerify> result = new ArrayList<>();
//获取标准
Map<String, PqReasonableRangeDto> map = getStandardData(DataCleanEnum.DataFluc.getCode());
//获取监测点台账信息
List<String> lineList = calculatedParam.getIdList();
//数据分片处理
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));
List<List<String>> pendingIds = ListUtils.partition(lineList,NUM);
pendingIds.forEach(list->{
lineParam.setLineId(list);
List<DataFlucDto> partList = dataFlucFeignClient.getRawData(lineParam).getData();
if (CollUtil.isNotEmpty(partList)) {
partList.forEach(item->{
//数据清洗
List<PqDataVerify> pqDataVerifies = judgeDataFluc(map,item);
result.addAll(pqDataVerifies);
});
}
});
if (CollUtil.isNotEmpty(result)) {
pqDataVerifyFeignClient.insertData(result);
}
}
@Override
public void dataFlickerCleanHandler(CalculatedParam calculatedParam) {
logger.info("{},dataFlicker表异常数据算法执行=====》", LocalDateTime.now());
List<PqDataVerify> result = new ArrayList<>();
//获取标准
Map<String, PqReasonableRangeDto> map = getStandardData(DataCleanEnum.DataFlicker.getCode());
//获取监测点台账信息
List<String> lineList = calculatedParam.getIdList();
//数据分片处理
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));
List<List<String>> pendingIds = ListUtils.partition(lineList,NUM);
pendingIds.forEach(list->{
lineParam.setLineId(list);
List<DataFlickerDto> partList = dataFlickerFeignClient.getRawData(lineParam).getData();
if (CollUtil.isNotEmpty(partList)) {
partList.forEach(item->{
//数据清洗
List<PqDataVerify> pqDataVerifies = judgeDataFlicker(map,item);
result.addAll(pqDataVerifies);
});
}
});
if (CollUtil.isNotEmpty(result)) {
pqDataVerifyFeignClient.insertData(result);
}
}
/**
* 获取标准数据的范围
*/
public Map<String, PqReasonableRangeDto> getStandardData(String tableName) {
Map<String, PqReasonableRangeDto> pqReasonableRangeDtoMap = new HashMap<>();
DataCleanParam param = new DataCleanParam();
param.setSystemType(DataCleanEnum.Pqs.getCode());
param.setDataSource(DataCleanEnum.InfluxDB.getCode());
param.setTableName(tableName);
List<PqReasonableRangeDto> list = pqReasonableRangeFeignClient.getData(param).getData();
if (CollUtil.isNotEmpty(list)) {
pqReasonableRangeDtoMap = list.stream().collect(Collectors.toMap(PqReasonableRangeDto::getIndexCode, Function.identity()));
}
return pqReasonableRangeDtoMap;
}
/**
* 获取数据的标准范围,进行数据比对
*/
public List<PqDataVerify> judgeDataV(Map<String, PqReasonableRangeDto> map, LineDetailVO.Detail line, DataVDto dto) {
List<PqDataVerify> list = new ArrayList<>();
PqReasonableRangeDto pqReasonableRangeDto;
List<String> phaseList;
//频率判断
pqReasonableRangeDto = map.get(DataCleanEnum.Freq.getCode());
phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
if (dto.getFreq() < pqReasonableRangeDto.getMinValue() || dto.getFreq() > pqReasonableRangeDto.getMaxValue()) {
//log.info("dataV-频率数据异常,已清洗!数据值:{},数据时间:{}", dto.getFreq(), dto.getMinTime());
PqDataVerify pqDataVerify = getPqDataVerify(dto.getLineId()
,dto.getMinTime()
,dto.getValueType()
,dto.getPhasicType()
,pqReasonableRangeDto.getIndexCode()
,pqReasonableRangeDto.getIndexName()
,pqReasonableRangeDto.getInfluxdbTableName()
,dto.getFreq()
,pqReasonableRangeDto.getMinValue()
,pqReasonableRangeDto.getMaxValue());
list.add(pqDataVerify);
}
}
//频率偏差判断
pqReasonableRangeDto = map.get(DataCleanEnum.FreqDev.getCode());
phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
if (dto.getFreqDev() < pqReasonableRangeDto.getMinValue() || dto.getFreqDev() > pqReasonableRangeDto.getMaxValue()) {
//log.info("dataV-频率偏差数据异常,已清洗!数据值:{},数据时间:{}", dto.getFreqDev(), dto.getMinTime());
PqDataVerify pqDataVerify = getPqDataVerify(dto.getLineId()
,dto.getMinTime()
,dto.getValueType()
,dto.getPhasicType()
,pqReasonableRangeDto.getIndexCode()
,pqReasonableRangeDto.getIndexName()
,pqReasonableRangeDto.getInfluxdbTableName()
,dto.getFreqDev()
,pqReasonableRangeDto.getMinValue()
,pqReasonableRangeDto.getMaxValue());
list.add(pqDataVerify);
}
}
//相电压有效值
pqReasonableRangeDto = map.get(DataCleanEnum.RmsV.getCode());
phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
if (dto.getRms() < (pqReasonableRangeDto.getMinValue()* DataCommonUtils.getVoltageData(line.getVoltageLevel()))
|| dto.getRms() > (pqReasonableRangeDto.getMaxValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel()))) {
//log.info("dataV-相电压有效值数据异常,已清洗!数据值:{},数据时间:{}", dto.getRms(), dto.getMinTime());
PqDataVerify pqDataVerify = getPqDataVerify(dto.getLineId()
,dto.getMinTime()
,dto.getValueType()
,dto.getPhasicType()
,pqReasonableRangeDto.getIndexCode()
,pqReasonableRangeDto.getIndexName()
,pqReasonableRangeDto.getInfluxdbTableName()
,dto.getRms()
,pqReasonableRangeDto.getMinValue()* DataCommonUtils.getVoltageData(line.getVoltageLevel())
,pqReasonableRangeDto.getMaxValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel()));
list.add(pqDataVerify);
}
}
//正序电压
pqReasonableRangeDto = map.get(DataCleanEnum.VPos.getCode());
phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
if (dto.getVPos() < (pqReasonableRangeDto.getMinValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel()))
|| dto.getVPos() > (pqReasonableRangeDto.getMaxValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel()))) {
//log.info("dataV-正序电压数据异常,已清洗!数据值:{},数据时间:{}", dto.getVPos(), dto.getMinTime());
PqDataVerify pqDataVerify = getPqDataVerify(dto.getLineId()
,dto.getMinTime()
,dto.getValueType()
,dto.getPhasicType()
,pqReasonableRangeDto.getIndexCode()
,pqReasonableRangeDto.getIndexName()
,pqReasonableRangeDto.getInfluxdbTableName()
,dto.getVPos()
,pqReasonableRangeDto.getMinValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel())
,pqReasonableRangeDto.getMaxValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel()));
list.add(pqDataVerify);
}
}
//负序电压
pqReasonableRangeDto = map.get(DataCleanEnum.VNeg.getCode());
phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
if (dto.getVNeg() < (pqReasonableRangeDto.getMinValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel()))
|| dto.getVNeg() > (pqReasonableRangeDto.getMaxValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel()))) {
//log.info("dataV-负序电压数据异常,已清洗!数据值:{},数据时间:{}", dto.getVNeg(), dto.getMinTime());
PqDataVerify pqDataVerify = getPqDataVerify(dto.getLineId()
,dto.getMinTime()
,dto.getValueType()
,dto.getPhasicType()
,pqReasonableRangeDto.getIndexCode()
,pqReasonableRangeDto.getIndexName()
,pqReasonableRangeDto.getInfluxdbTableName()
,dto.getVNeg()
,pqReasonableRangeDto.getMinValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel())
,pqReasonableRangeDto.getMaxValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel()));
list.add(pqDataVerify);
}
}
//零序电压
pqReasonableRangeDto = map.get(DataCleanEnum.VZero.getCode());
phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
if (dto.getVZero() < (pqReasonableRangeDto.getMinValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel()))
|| dto.getVZero() > (pqReasonableRangeDto.getMaxValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel()))) {
//log.info("dataV-零序电压数据异常,已清洗!数据值:{},数据时间:{}", dto.getVZero(), dto.getMinTime());
PqDataVerify pqDataVerify = getPqDataVerify(dto.getLineId()
,dto.getMinTime()
,dto.getValueType()
,dto.getPhasicType()
,pqReasonableRangeDto.getIndexCode()
,pqReasonableRangeDto.getIndexName()
,pqReasonableRangeDto.getInfluxdbTableName()
,dto.getVZero()
,pqReasonableRangeDto.getMinValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel())
,pqReasonableRangeDto.getMaxValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel()));
list.add(pqDataVerify);
}
}
//电压不平衡度
pqReasonableRangeDto = map.get(DataCleanEnum.VUnbalance.getCode());
phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
if (dto.getVUnbalance() < pqReasonableRangeDto.getMinValue() || dto.getVUnbalance() > pqReasonableRangeDto.getMaxValue()) {
//log.info("dataV-电压不平衡度数据异常,已清洗!数据值:{},数据时间:{}", dto.getVUnbalance(), dto.getMinTime());
PqDataVerify pqDataVerify = getPqDataVerify(dto.getLineId()
,dto.getMinTime()
,dto.getValueType()
,dto.getPhasicType()
,pqReasonableRangeDto.getIndexCode()
,pqReasonableRangeDto.getIndexName()
,pqReasonableRangeDto.getInfluxdbTableName()
,dto.getVUnbalance()
,pqReasonableRangeDto.getMinValue()
,pqReasonableRangeDto.getMaxValue());
list.add(pqDataVerify);
}
}
//线电压有效值
pqReasonableRangeDto = map.get(DataCleanEnum.RmsLvr.getCode());
phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
if (dto.getRmsLvr() < (pqReasonableRangeDto.getMinValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel()))
|| dto.getRmsLvr() > (pqReasonableRangeDto.getMaxValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel()))) {
//log.info("dataV-线电压有效值数据异常,已清洗!数据值:{},数据时间:{}", dto.getRmsLvr(), dto.getMinTime());
PqDataVerify pqDataVerify = getPqDataVerify(dto.getLineId()
,dto.getMinTime()
,dto.getValueType()
,dto.getPhasicType()
,pqReasonableRangeDto.getIndexCode()
,pqReasonableRangeDto.getIndexName()
,pqReasonableRangeDto.getInfluxdbTableName()
,dto.getRmsLvr()
,pqReasonableRangeDto.getMinValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel())
,pqReasonableRangeDto.getMaxValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel()));
list.add(pqDataVerify);
}
}
//线电压正偏差
pqReasonableRangeDto = map.get(DataCleanEnum.VuDev.getCode());
phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
if (dto.getVuDev() < pqReasonableRangeDto.getMinValue() || dto.getVuDev() > pqReasonableRangeDto.getMaxValue()) {
//log.info("dataV-线电压正偏差数据异常,已清洗!数据值:{},数据时间:{}", dto.getVuDev(), dto.getMinTime());
PqDataVerify pqDataVerify = getPqDataVerify(dto.getLineId()
,dto.getMinTime()
,dto.getValueType()
,dto.getPhasicType()
,pqReasonableRangeDto.getIndexCode()
,pqReasonableRangeDto.getIndexName()
,pqReasonableRangeDto.getInfluxdbTableName()
,dto.getVuDev()
,pqReasonableRangeDto.getMinValue()
,pqReasonableRangeDto.getMaxValue());
list.add(pqDataVerify);
}
}
//线电压负偏差
pqReasonableRangeDto = map.get(DataCleanEnum.VlDev.getCode());
phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
if (dto.getVlDev() < pqReasonableRangeDto.getMinValue() || dto.getVlDev() > pqReasonableRangeDto.getMaxValue()) {
//log.info("dataV-线电压负偏差数据异常,已清洗!数据值:{},数据时间:{}", dto.getVlDev(), dto.getMinTime());
PqDataVerify pqDataVerify = getPqDataVerify(dto.getLineId()
,dto.getMinTime()
,dto.getValueType()
,dto.getPhasicType()
,pqReasonableRangeDto.getIndexCode()
,pqReasonableRangeDto.getIndexName()
,pqReasonableRangeDto.getInfluxdbTableName()
,dto.getVlDev()
,pqReasonableRangeDto.getMinValue()
,pqReasonableRangeDto.getMaxValue());
list.add(pqDataVerify);
}
}
//电压总谐波畸变率
pqReasonableRangeDto = map.get(DataCleanEnum.VThd.getCode());
phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
if (dto.getVThd() < pqReasonableRangeDto.getMinValue() || dto.getVThd() > pqReasonableRangeDto.getMaxValue()) {
//log.info("dataV-电压总谐波畸变率数据异常,已清洗!数据值:{},数据时间:{}", dto.getVThd(), dto.getMinTime());
PqDataVerify pqDataVerify = getPqDataVerify(dto.getLineId()
,dto.getMinTime()
,dto.getValueType()
,dto.getPhasicType()
,pqReasonableRangeDto.getIndexCode()
,pqReasonableRangeDto.getIndexName()
,pqReasonableRangeDto.getInfluxdbTableName()
,dto.getVThd()
,pqReasonableRangeDto.getMinValue()
,pqReasonableRangeDto.getMaxValue());
list.add(pqDataVerify);
}
}
//相(线)电压基波有效值
pqReasonableRangeDto = map.get(DataCleanEnum.V_Data.getCode());
phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
if (dto.getV1() < (pqReasonableRangeDto.getMinValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel()))
|| dto.getV1() > (pqReasonableRangeDto.getMaxValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel()))) {
//log.info("dataV-基波电压数据异常,已清洗!数据值:{},数据时间:{}", dto.getV1(), dto.getMinTime());
PqDataVerify pqDataVerify = getPqDataVerify(dto.getLineId()
,dto.getMinTime()
,dto.getValueType()
,dto.getPhasicType()
,pqReasonableRangeDto.getIndexCode()
,pqReasonableRangeDto.getIndexName()
,pqReasonableRangeDto.getInfluxdbTableName()
,dto.getV1()
,pqReasonableRangeDto.getMinValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel())
,pqReasonableRangeDto.getMaxValue()*DataCommonUtils.getVoltageData(line.getVoltageLevel()));
list.add(pqDataVerify);
}
}
return list;
}
/**
* 获取数据的标准范围,进行数据比对
*/
public List<PqDataVerify> judgeDataI(Map<String, PqReasonableRangeDto> map, LineDetailVO.Detail line, DataIDto dto) {
List<PqDataVerify> list = new ArrayList<>();
PqReasonableRangeDto pqReasonableRangeDto;
List<String> phaseList;
//线电压有效值
pqReasonableRangeDto = map.get(DataCleanEnum.RmsI.getCode());
phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
if (dto.getRms() > line.getCT1()) {
PqDataVerify pqDataVerify = getPqDataVerify(dto.getLineId()
,dto.getMinTime()
,dto.getValueType()
,dto.getPhasicType()
,pqReasonableRangeDto.getIndexCode()
,pqReasonableRangeDto.getIndexName()
,pqReasonableRangeDto.getInfluxdbTableName()
,dto.getRms()
,pqReasonableRangeDto.getMinValue()
,line.getCT1());
list.add(pqDataVerify);
}
}
return list;
}
/**
* 获取数据的标准范围,进行数据比对
*/
public List<PqDataVerify> judgeDataPlt(Map<String, PqReasonableRangeDto> map, DataPltDto dto) {
List<PqDataVerify> list = new ArrayList<>();
PqReasonableRangeDto pqReasonableRangeDto;
List<String> phaseList;
//线电压有效值
pqReasonableRangeDto = map.get(DataCleanEnum.Plt.getCode());
phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
if (dto.getPlt() < pqReasonableRangeDto.getMinValue() || dto.getPlt() > pqReasonableRangeDto.getMaxValue()) {
PqDataVerify pqDataVerify = getPqDataVerify(dto.getLineId()
,dto.getMinTime()
,dto.getValueType()
,dto.getPhasicType()
,pqReasonableRangeDto.getIndexCode()
,pqReasonableRangeDto.getIndexName()
,pqReasonableRangeDto.getInfluxdbTableName()
,dto.getPlt()
,pqReasonableRangeDto.getMinValue()
,pqReasonableRangeDto.getMaxValue());
list.add(pqDataVerify);
}
}
return list;
}
/**
* 获取数据的标准范围,进行数据比对
*/
public List<PqDataVerify> judgeDataInHarmV(Map<String, PqReasonableRangeDto> map, DataHarmDto dto) {
List<PqDataVerify> list = new ArrayList<>();
PqReasonableRangeDto pqReasonableRangeDto = map.get(DataCleanEnum.V_InHarm.getCode());
List<String> phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
// 50次谐波
for (int i = 1; i <= 50; i++) {
// 通过反射获取dto.getV(i)的值
double vValue = getVValue(dto, i);
if (vValue < pqReasonableRangeDto.getMinValue() || vValue > pqReasonableRangeDto.getMaxValue()) {
PqDataVerify pqDataVerify = getPqDataVerify(
dto.getLineId(),
dto.getMinTime(),
dto.getValueType(),
dto.getPhasicType(),
pqReasonableRangeDto.getIndexCode(),
(i - 0.5) + pqReasonableRangeDto.getIndexName(),
pqReasonableRangeDto.getInfluxdbTableName(),
vValue,
pqReasonableRangeDto.getMinValue(),
pqReasonableRangeDto.getMaxValue()
);
list.add(pqDataVerify);
}
}
}
return list;
}
/**
* 获取数据的标准范围,进行数据比对
*/
public List<PqDataVerify> judgeDataHarmRateV(Map<String, PqReasonableRangeDto> map, DataHarmDto dto) {
List<PqDataVerify> list = new ArrayList<>();
PqReasonableRangeDto pqReasonableRangeDto = map.get(DataCleanEnum.V_Rate.getCode());
List<String> phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
// 50次谐波
for (int i = 2; i <= 50; i++) {
// 通过反射获取dto.getV(i)的值
double vValue = getVValue(dto, i);
if (vValue < pqReasonableRangeDto.getMinValue() || vValue > pqReasonableRangeDto.getMaxValue()) {
PqDataVerify pqDataVerify = getPqDataVerify(
dto.getLineId(),
dto.getMinTime(),
dto.getValueType(),
dto.getPhasicType(),
pqReasonableRangeDto.getIndexCode(),
i + pqReasonableRangeDto.getIndexName(),
pqReasonableRangeDto.getInfluxdbTableName(),
vValue,
pqReasonableRangeDto.getMinValue(),
pqReasonableRangeDto.getMaxValue()
);
list.add(pqDataVerify);
}
}
}
return list;
}
/**
* 获取数据的标准范围,进行数据比对
*/
public List<PqDataVerify> judgeDataHarmPowerP(Map<String, PqReasonableRangeDto> map, DataPowerPDto dto) {
List<PqDataVerify> list = new ArrayList<>();
PqReasonableRangeDto pqReasonableRangeDto = map.get(DataCleanEnum.Pf.getCode());
List<String> phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
if (dto.getPf() < pqReasonableRangeDto.getMinValue() || dto.getPf() > pqReasonableRangeDto.getMaxValue()) {
PqDataVerify pqDataVerify = getPqDataVerify(dto.getLineId()
,dto.getMinTime()
,dto.getValueType()
,dto.getPhasicType()
,pqReasonableRangeDto.getIndexCode()
,pqReasonableRangeDto.getIndexName()
,pqReasonableRangeDto.getInfluxdbTableName()
,dto.getPf()
,pqReasonableRangeDto.getMinValue()
,pqReasonableRangeDto.getMaxValue());
list.add(pqDataVerify);
}
}
return list;
}
/**
* 获取数据的标准范围,进行数据比对
*/
public List<PqDataVerify> judgeDataHarmPhasicV(Map<String, PqReasonableRangeDto> map, DataHarmDto dto) {
List<PqDataVerify> list = new ArrayList<>();
PqReasonableRangeDto pqReasonableRangeDto = map.get(DataCleanEnum.V.getCode());
List<String> phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
// 50次谐波
for (int i = 1; i <= 50; i++) {
// 通过反射获取dto.getV(i)的值
double vValue = getVValue(dto, i);
if (vValue < pqReasonableRangeDto.getMinValue() || vValue > pqReasonableRangeDto.getMaxValue()) {
PqDataVerify pqDataVerify = getPqDataVerify(
dto.getLineId(),
dto.getMinTime(),
dto.getValueType(),
dto.getPhasicType(),
pqReasonableRangeDto.getIndexCode(),
i + pqReasonableRangeDto.getIndexName(),
pqReasonableRangeDto.getInfluxdbTableName(),
vValue,
pqReasonableRangeDto.getMinValue(),
pqReasonableRangeDto.getMaxValue()
);
list.add(pqDataVerify);
}
}
}
return list;
}
/**
* 获取数据的标准范围,进行数据比对
*/
public List<PqDataVerify> judgeDataFluc(Map<String, PqReasonableRangeDto> map, DataFlucDto dto) {
List<PqDataVerify> list = new ArrayList<>();
PqReasonableRangeDto pqReasonableRangeDto = map.get(DataCleanEnum.Fluc.getCode());
List<String> phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
if (dto.getFluc() < pqReasonableRangeDto.getMinValue() || dto.getFluc() > pqReasonableRangeDto.getMaxValue()) {
PqDataVerify pqDataVerify = getPqDataVerify(dto.getLineId()
,dto.getMinTime()
,dto.getValueType()
,dto.getPhasicType()
,pqReasonableRangeDto.getIndexCode()
,pqReasonableRangeDto.getIndexName()
,pqReasonableRangeDto.getInfluxdbTableName()
,dto.getFluc()
,pqReasonableRangeDto.getMinValue()
,pqReasonableRangeDto.getMaxValue());
list.add(pqDataVerify);
}
}
return list;
}
/**
* 获取数据的标准范围,进行数据比对
*/
public List<PqDataVerify> judgeDataFlicker(Map<String, PqReasonableRangeDto> map, DataFlickerDto dto) {
List<PqDataVerify> list = new ArrayList<>();
PqReasonableRangeDto pqReasonableRangeDto = map.get(DataCleanEnum.Pst.getCode());
List<String> phaseList = Arrays.asList(pqReasonableRangeDto.getPhaseType().split(","));
if (phaseList.contains(dto.getPhasicType())) {
if (dto.getPst() < pqReasonableRangeDto.getMinValue() || dto.getPst() > pqReasonableRangeDto.getMaxValue()) {
PqDataVerify pqDataVerify = getPqDataVerify(dto.getLineId()
,dto.getMinTime()
,dto.getValueType()
,dto.getPhasicType()
,pqReasonableRangeDto.getIndexCode()
,pqReasonableRangeDto.getIndexName()
,pqReasonableRangeDto.getInfluxdbTableName()
,dto.getPst()
,pqReasonableRangeDto.getMinValue()
,pqReasonableRangeDto.getMaxValue());
list.add(pqDataVerify);
}
}
return list;
}
public PqDataVerify getPqDataVerify(String lineId,String time,String valueType, String phasicType, String indexCode, String indexName, String indexTable, Double data, Double minValue, Double maxValue) {
PqDataVerify pqDataVerify = new PqDataVerify();
pqDataVerify.setLineId(lineId);
pqDataVerify.setTime(TimeUtils.StringToLocalDateTime(time));
pqDataVerify.setValueType(valueType);
pqDataVerify.setPhasicType(phasicType);
pqDataVerify.setIndexCode(indexCode);
pqDataVerify.setIndexName(indexName);
pqDataVerify.setIndexTable(indexTable);
//这里对数据进行判断,如果值过大,都超出数据库存储范围会报错,无法插入,所以这里设置门槛 上下限都为1千万
if (data > 10000000.0) {
pqDataVerify.setAbnormalValue(9999999.0);
} else if (data < -10000000.0) {
pqDataVerify.setAbnormalValue(-9999999.0);
} else {
pqDataVerify.setAbnormalValue(data);
}
pqDataVerify.setMinValue(minValue);
pqDataVerify.setMaxValue(maxValue);
return pqDataVerify;
}
private double getVValue(DataHarmDto dto, int index) {
try {
Method method = DataHarmDto.class.getMethod("getV" + index);
return (double) method.invoke(dto);
} catch (Exception e) {
throw new RuntimeException("Failed to get V value for index: " + index, e);
}
}
}

View File

@@ -4,9 +4,12 @@ import cn.hutool.core.collection.CollUtil;
import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.algorithm.service.line.IDayDataService;
import com.njcn.dataProcess.api.DataVFeignClient;
import com.njcn.dataProcess.api.PqDataVerifyFeignClient;
import com.njcn.dataProcess.enums.DataCleanEnum;
import com.njcn.dataProcess.param.LineCountEvaluateParam;
import com.njcn.dataProcess.pojo.dto.CommonMinuteDto;
import com.njcn.dataProcess.pojo.dto.DataVDto;
import com.njcn.dataProcess.pojo.po.PqDataVerify;
import com.njcn.dataProcess.util.TimeUtils;
import com.njcn.influx.constant.InfluxDbSqlConstant;
import lombok.RequiredArgsConstructor;
@@ -19,6 +22,7 @@ import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author xy
@@ -32,10 +36,12 @@ public class DayDataServiceImpl implements IDayDataService {
private final static Integer NUM = 100;
@Resource
private DataVFeignClient dataVFeignClient;
@Resource
private PqDataVerifyFeignClient pqDataVerifyFeignClient;
@Override
public void dataVHandler(CalculatedParam calculatedParam) {
logger.info("{},dataV表转r_stat_data_v_d开始=====》", LocalDateTime.now());
logger.info("{},dataV表转r_stat_data_v_d算法开始=====》", LocalDateTime.now());
List<DataVDto> result = new ArrayList<>();
//远程接口获取分钟数据
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
@@ -45,6 +51,9 @@ public class DayDataServiceImpl implements IDayDataService {
List<List<String>> pendingIds = ListUtils.partition(calculatedParam.getIdList(),NUM);
pendingIds.forEach(list->{
lineParam.setLineId(list);
//添加异常数据时间点
getAbnormalData(lineParam);
//获取原始数据
List<CommonMinuteDto> partList = dataVFeignClient.getBaseData(lineParam).getData();
if (CollUtil.isNotEmpty(partList)) {
partList.forEach(item->{
@@ -61,7 +70,7 @@ public class DayDataServiceImpl implements IDayDataService {
dto.setLineId(item.getLineId());
dto.setPhasicType(item2.getPhasicType());
dto.setValueType(item3.getValueType());
dto.setQualityFlag("0");
dto.setQualityFlag(item.getQualityFlag());
channelDataVHandler(item3,valueTypes,dto,true);
result.add(dto);
});
@@ -75,87 +84,103 @@ public class DayDataServiceImpl implements IDayDataService {
}
}
//获取异常数据集合
public void getAbnormalData(LineCountEvaluateParam lineParam) {
lineParam.setTableName(DataCleanEnum.DataV.getCode());
// 获取异常数据,用于排除异常数据
List<PqDataVerify> pqDataVerifies = pqDataVerifyFeignClient.queryData(lineParam).getData();
if (CollUtil.isNotEmpty(pqDataVerifies)) {
Map<String, List<String>> timeMap = pqDataVerifies.stream()
.collect(Collectors.groupingBy(
PqDataVerify::getLineId,
Collectors.mapping(item->TimeUtils.LocalDateTimeToString(item.getTime()), Collectors.toList())
));
lineParam.setAbnormalTime(timeMap);
}
}
//指标处理
//pojo1 为正常数据集合
//pojo2 为平均值数据集合根据不同情况用来计算cp95
public void channelDataVHandler(CommonMinuteDto.ValueType pojo1, CommonMinuteDto.ValueType pojo2, DataVDto dto, boolean scheme) {
CommonMinuteDto.ValueType valueType;
String type;
if (dto.getValueType().equalsIgnoreCase(InfluxDbSqlConstant.CP95) && !scheme) {
valueType = pojo2;
type = "CP95";
} else {
valueType = pojo1;
type = pojo1.getValueType();
}
//按照指标集合排列顺序取值
dto.setFreq(getData(valueType.getValueType(),valueType.getValueList().get(0),scheme));
dto.setFreqDev(getData(valueType.getValueType(),valueType.getValueList().get(1),scheme));
dto.setRms(getData(valueType.getValueType(),valueType.getValueList().get(2),scheme));
dto.setRmsLvr(getData(valueType.getValueType(),valueType.getValueList().get(3),scheme));
dto.setVNeg(getData(valueType.getValueType(),valueType.getValueList().get(4),scheme));
dto.setVPos(getData(valueType.getValueType(),valueType.getValueList().get(5),scheme));
dto.setVThd(getData(valueType.getValueType(),valueType.getValueList().get(6),scheme));
dto.setVUnbalance(getData(valueType.getValueType(),valueType.getValueList().get(7),scheme));
dto.setVZero(getData(valueType.getValueType(),valueType.getValueList().get(8),scheme));
dto.setVlDev(getData(valueType.getValueType(),valueType.getValueList().get(9),scheme));
dto.setVuDev(getData(valueType.getValueType(),valueType.getValueList().get(10),scheme));
dto.setFreq(getData(type,valueType.getValueList().get(0),scheme));
dto.setFreqDev(getData(type,valueType.getValueList().get(1),scheme));
dto.setRms(getData(type,valueType.getValueList().get(2),scheme));
dto.setRmsLvr(getData(type,valueType.getValueList().get(3),scheme));
dto.setVNeg(getData(type,valueType.getValueList().get(4),scheme));
dto.setVPos(getData(type,valueType.getValueList().get(5),scheme));
dto.setVThd(getData(type,valueType.getValueList().get(6),scheme));
dto.setVUnbalance(getData(type,valueType.getValueList().get(7),scheme));
dto.setVZero(getData(type,valueType.getValueList().get(8),scheme));
dto.setVlDev(getData(type,valueType.getValueList().get(9),scheme));
dto.setVuDev(getData(type,valueType.getValueList().get(10),scheme));
dto.setV1(getData(valueType.getValueType(),valueType.getValueList().get(11),scheme));
dto.setV2(getData(valueType.getValueType(),valueType.getValueList().get(12),scheme));
dto.setV3(getData(valueType.getValueType(),valueType.getValueList().get(13),scheme));
dto.setV4(getData(valueType.getValueType(),valueType.getValueList().get(14),scheme));
dto.setV5(getData(valueType.getValueType(),valueType.getValueList().get(15),scheme));
dto.setV6(getData(valueType.getValueType(),valueType.getValueList().get(16),scheme));
dto.setV7(getData(valueType.getValueType(),valueType.getValueList().get(17),scheme));
dto.setV8(getData(valueType.getValueType(),valueType.getValueList().get(18),scheme));
dto.setV9(getData(valueType.getValueType(),valueType.getValueList().get(19),scheme));
dto.setV10(getData(valueType.getValueType(),valueType.getValueList().get(20),scheme));
dto.setV1(getData(type,valueType.getValueList().get(11),scheme));
dto.setV2(getData(type,valueType.getValueList().get(12),scheme));
dto.setV3(getData(type,valueType.getValueList().get(13),scheme));
dto.setV4(getData(type,valueType.getValueList().get(14),scheme));
dto.setV5(getData(type,valueType.getValueList().get(15),scheme));
dto.setV6(getData(type,valueType.getValueList().get(16),scheme));
dto.setV7(getData(type,valueType.getValueList().get(17),scheme));
dto.setV8(getData(type,valueType.getValueList().get(18),scheme));
dto.setV9(getData(type,valueType.getValueList().get(19),scheme));
dto.setV10(getData(type,valueType.getValueList().get(20),scheme));
dto.setV11(getData(valueType.getValueType(),valueType.getValueList().get(21),scheme));
dto.setV12(getData(valueType.getValueType(),valueType.getValueList().get(22),scheme));
dto.setV13(getData(valueType.getValueType(),valueType.getValueList().get(23),scheme));
dto.setV14(getData(valueType.getValueType(),valueType.getValueList().get(24),scheme));
dto.setV15(getData(valueType.getValueType(),valueType.getValueList().get(25),scheme));
dto.setV16(getData(valueType.getValueType(),valueType.getValueList().get(26),scheme));
dto.setV17(getData(valueType.getValueType(),valueType.getValueList().get(27),scheme));
dto.setV18(getData(valueType.getValueType(),valueType.getValueList().get(28),scheme));
dto.setV19(getData(valueType.getValueType(),valueType.getValueList().get(29),scheme));
dto.setV20(getData(valueType.getValueType(),valueType.getValueList().get(30),scheme));
dto.setV11(getData(type,valueType.getValueList().get(21),scheme));
dto.setV12(getData(type,valueType.getValueList().get(22),scheme));
dto.setV13(getData(type,valueType.getValueList().get(23),scheme));
dto.setV14(getData(type,valueType.getValueList().get(24),scheme));
dto.setV15(getData(type,valueType.getValueList().get(25),scheme));
dto.setV16(getData(type,valueType.getValueList().get(26),scheme));
dto.setV17(getData(type,valueType.getValueList().get(27),scheme));
dto.setV18(getData(type,valueType.getValueList().get(28),scheme));
dto.setV19(getData(type,valueType.getValueList().get(29),scheme));
dto.setV20(getData(type,valueType.getValueList().get(30),scheme));
dto.setV21(getData(valueType.getValueType(),valueType.getValueList().get(31),scheme));
dto.setV22(getData(valueType.getValueType(),valueType.getValueList().get(32),scheme));
dto.setV23(getData(valueType.getValueType(),valueType.getValueList().get(33),scheme));
dto.setV24(getData(valueType.getValueType(),valueType.getValueList().get(34),scheme));
dto.setV25(getData(valueType.getValueType(),valueType.getValueList().get(35),scheme));
dto.setV26(getData(valueType.getValueType(),valueType.getValueList().get(36),scheme));
dto.setV27(getData(valueType.getValueType(),valueType.getValueList().get(37),scheme));
dto.setV28(getData(valueType.getValueType(),valueType.getValueList().get(38),scheme));
dto.setV29(getData(valueType.getValueType(),valueType.getValueList().get(39),scheme));
dto.setV30(getData(valueType.getValueType(),valueType.getValueList().get(40),scheme));
dto.setV21(getData(type,valueType.getValueList().get(31),scheme));
dto.setV22(getData(type,valueType.getValueList().get(32),scheme));
dto.setV23(getData(type,valueType.getValueList().get(33),scheme));
dto.setV24(getData(type,valueType.getValueList().get(34),scheme));
dto.setV25(getData(type,valueType.getValueList().get(35),scheme));
dto.setV26(getData(type,valueType.getValueList().get(36),scheme));
dto.setV27(getData(type,valueType.getValueList().get(37),scheme));
dto.setV28(getData(type,valueType.getValueList().get(38),scheme));
dto.setV29(getData(type,valueType.getValueList().get(39),scheme));
dto.setV30(getData(type,valueType.getValueList().get(40),scheme));
dto.setV31(getData(valueType.getValueType(),valueType.getValueList().get(41),scheme));
dto.setV32(getData(valueType.getValueType(),valueType.getValueList().get(42),scheme));
dto.setV33(getData(valueType.getValueType(),valueType.getValueList().get(43),scheme));
dto.setV34(getData(valueType.getValueType(),valueType.getValueList().get(44),scheme));
dto.setV35(getData(valueType.getValueType(),valueType.getValueList().get(45),scheme));
dto.setV36(getData(valueType.getValueType(),valueType.getValueList().get(46),scheme));
dto.setV37(getData(valueType.getValueType(),valueType.getValueList().get(47),scheme));
dto.setV38(getData(valueType.getValueType(),valueType.getValueList().get(48),scheme));
dto.setV39(getData(valueType.getValueType(),valueType.getValueList().get(49),scheme));
dto.setV40(getData(valueType.getValueType(),valueType.getValueList().get(50),scheme));
dto.setV31(getData(type,valueType.getValueList().get(41),scheme));
dto.setV32(getData(type,valueType.getValueList().get(42),scheme));
dto.setV33(getData(type,valueType.getValueList().get(43),scheme));
dto.setV34(getData(type,valueType.getValueList().get(44),scheme));
dto.setV35(getData(type,valueType.getValueList().get(45),scheme));
dto.setV36(getData(type,valueType.getValueList().get(46),scheme));
dto.setV37(getData(type,valueType.getValueList().get(47),scheme));
dto.setV38(getData(type,valueType.getValueList().get(48),scheme));
dto.setV39(getData(type,valueType.getValueList().get(49),scheme));
dto.setV40(getData(type,valueType.getValueList().get(50),scheme));
dto.setV41(getData(valueType.getValueType(),valueType.getValueList().get(51),scheme));
dto.setV42(getData(valueType.getValueType(),valueType.getValueList().get(52),scheme));
dto.setV43(getData(valueType.getValueType(),valueType.getValueList().get(53),scheme));
dto.setV44(getData(valueType.getValueType(),valueType.getValueList().get(54),scheme));
dto.setV45(getData(valueType.getValueType(),valueType.getValueList().get(55),scheme));
dto.setV46(getData(valueType.getValueType(),valueType.getValueList().get(56),scheme));
dto.setV47(getData(valueType.getValueType(),valueType.getValueList().get(57),scheme));
dto.setV48(getData(valueType.getValueType(),valueType.getValueList().get(58),scheme));
dto.setV49(getData(valueType.getValueType(),valueType.getValueList().get(59),scheme));
dto.setV50(getData(valueType.getValueType(),valueType.getValueList().get(60),scheme));
dto.setV41(getData(type,valueType.getValueList().get(51),scheme));
dto.setV42(getData(type,valueType.getValueList().get(52),scheme));
dto.setV43(getData(type,valueType.getValueList().get(53),scheme));
dto.setV44(getData(type,valueType.getValueList().get(54),scheme));
dto.setV45(getData(type,valueType.getValueList().get(55),scheme));
dto.setV46(getData(type,valueType.getValueList().get(56),scheme));
dto.setV47(getData(type,valueType.getValueList().get(57),scheme));
dto.setV48(getData(type,valueType.getValueList().get(58),scheme));
dto.setV49(getData(type,valueType.getValueList().get(59),scheme));
dto.setV50(getData(type,valueType.getValueList().get(60),scheme));
}
//数据类型处理
//cp95值的计算有点区别会用到cp95的集合或者平均值的集合
public Double getData(String valueType, List<Double> list, boolean scheme) {