|
|
|
|
@@ -13,6 +13,7 @@ import com.njcn.gather.detection.pojo.po.DevData;
|
|
|
|
|
import com.njcn.gather.detection.pojo.vo.DetectionData;
|
|
|
|
|
import com.njcn.gather.device.err.pojo.param.PqErrSysParam;
|
|
|
|
|
import com.njcn.gather.device.err.pojo.po.PqErrSysDtls;
|
|
|
|
|
import com.njcn.gather.device.err.pojo.vo.ErrDtlsCheckDataVO;
|
|
|
|
|
import com.njcn.gather.device.err.service.IPqErrSysDtlsService;
|
|
|
|
|
import com.njcn.gather.device.script.pojo.po.PqScriptCheckData;
|
|
|
|
|
import com.njcn.gather.device.script.pojo.po.SourceIssue;
|
|
|
|
|
@@ -27,6 +28,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
import java.lang.reflect.Field;
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
import java.math.RoundingMode;
|
|
|
|
|
import java.text.NumberFormat;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.function.Function;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -84,76 +86,70 @@ public class DetectionServiceImpl {
|
|
|
|
|
param.setIndex(sourceIssue.getIndex());
|
|
|
|
|
param.setScriptId(sourceIssue.getScriptId());
|
|
|
|
|
param.setErrorSysId(errorSysId);
|
|
|
|
|
List<PqErrSysDtls> pqErrSysDtls = pqErrSysDtlsService.listPqErrSysDtlsByPqErrSysIdAndTypes(param);
|
|
|
|
|
List<ErrDtlsCheckDataVO> errDtlsCheckData = pqErrSysDtlsService.listByPqErrSysIdAndTypes(param);
|
|
|
|
|
switch (sourceIssue.getType()) {
|
|
|
|
|
/**
|
|
|
|
|
* 频率
|
|
|
|
|
*/
|
|
|
|
|
case "FREQ":
|
|
|
|
|
AdNonHarmonicResult freq = isQualified(dev, devIdMapComm, pqErrSysDtls, F, sourceIssue, dataRule, "FREQ");
|
|
|
|
|
detectionDataDealService.acceptAdNonResult(Arrays.asList(freq), code);
|
|
|
|
|
return freq.getResultFlag();
|
|
|
|
|
return isQualified(dev, devIdMapComm, errDtlsCheckData, F, sourceIssue, dataRule, code);
|
|
|
|
|
/**
|
|
|
|
|
* 电压
|
|
|
|
|
*/
|
|
|
|
|
case "V":
|
|
|
|
|
AdNonHarmonicResult vrms = isQualified(dev, devIdMapComm, pqErrSysDtls, U, sourceIssue, dataRule, "VRMS");
|
|
|
|
|
detectionDataDealService.acceptAdNonResult(Arrays.asList(vrms), code);
|
|
|
|
|
return vrms.getResultFlag();
|
|
|
|
|
return isQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, code);
|
|
|
|
|
/**
|
|
|
|
|
* 电流
|
|
|
|
|
*/
|
|
|
|
|
case "I":
|
|
|
|
|
AdNonHarmonicResult irms = isQualified(dev, devIdMapComm, pqErrSysDtls, I, sourceIssue, dataRule, "IRMS");
|
|
|
|
|
detectionDataDealService.acceptAdNonResult(Arrays.asList(irms), code);
|
|
|
|
|
return irms.getResultFlag();
|
|
|
|
|
return isQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, code);
|
|
|
|
|
/**
|
|
|
|
|
* 谐波电压
|
|
|
|
|
*/
|
|
|
|
|
case "HV":
|
|
|
|
|
AdHarmonicResult harmV = isHarmQualified(dev, devIdMapComm, pqErrSysDtls, U, sourceIssue, dataRule, 2);
|
|
|
|
|
AdHarmonicResult harmV = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, 2);
|
|
|
|
|
detectionDataDealService.acceptAdResult(Arrays.asList(harmV), code);
|
|
|
|
|
return harmV.getResultFlag();
|
|
|
|
|
/**
|
|
|
|
|
* 谐波电流
|
|
|
|
|
*/
|
|
|
|
|
case "HI":
|
|
|
|
|
AdHarmonicResult harmI = isHarmQualified(dev, devIdMapComm, pqErrSysDtls, I, sourceIssue, dataRule, 2);
|
|
|
|
|
AdHarmonicResult harmI = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, 2);
|
|
|
|
|
detectionDataDealService.acceptAdResult(Arrays.asList(harmI), code);
|
|
|
|
|
return harmI.getResultFlag();
|
|
|
|
|
/**
|
|
|
|
|
* 间谐波电压
|
|
|
|
|
*/
|
|
|
|
|
case "HSV":
|
|
|
|
|
AdHarmonicResult harmInV = isHarmQualified(dev, devIdMapComm, pqErrSysDtls, U, sourceIssue, dataRule, 1);
|
|
|
|
|
AdHarmonicResult harmInV = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, 1);
|
|
|
|
|
detectionDataDealService.acceptAdResult(Arrays.asList(harmInV), code);
|
|
|
|
|
return harmInV.getResultFlag();
|
|
|
|
|
/**
|
|
|
|
|
* 间谐波电流
|
|
|
|
|
*/
|
|
|
|
|
case "HSI":
|
|
|
|
|
AdHarmonicResult harmInI = isHarmQualified(dev, devIdMapComm, pqErrSysDtls, I, sourceIssue, dataRule, 1);
|
|
|
|
|
AdHarmonicResult harmInI = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, 1);
|
|
|
|
|
detectionDataDealService.acceptAdResult(Arrays.asList(harmInI), code);
|
|
|
|
|
return harmInI.getResultFlag();
|
|
|
|
|
/**
|
|
|
|
|
* 三相电压不平衡度
|
|
|
|
|
*/
|
|
|
|
|
case "IMBV":
|
|
|
|
|
AdNonHarmonicResult vUnban = isUnBalanceOrFlickerQualified(dev, devIdMapComm, pqErrSysDtls, U, sourceIssue, dataRule, "V_UNBAN");
|
|
|
|
|
AdNonHarmonicResult vUnban = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, "V_UNBAN");
|
|
|
|
|
detectionDataDealService.acceptAdNonResult(Arrays.asList(vUnban), code);
|
|
|
|
|
return vUnban.getResultFlag();
|
|
|
|
|
/**
|
|
|
|
|
* 三相电流不平衡度
|
|
|
|
|
*/
|
|
|
|
|
case "IMBA":
|
|
|
|
|
AdNonHarmonicResult iUnban = isUnBalanceOrFlickerQualified(dev, devIdMapComm, pqErrSysDtls, I, sourceIssue, dataRule, "I_UNBAN");
|
|
|
|
|
AdNonHarmonicResult iUnban = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, "I_UNBAN");
|
|
|
|
|
detectionDataDealService.acceptAdNonResult(Arrays.asList(iUnban), code);
|
|
|
|
|
return iUnban.getResultFlag();
|
|
|
|
|
/**
|
|
|
|
|
* 谐波有功功率
|
|
|
|
|
*/
|
|
|
|
|
case "HP":
|
|
|
|
|
AdHarmonicResult harmP = isHarmQualified(dev, devIdMapComm, pqErrSysDtls, P, sourceIssue, dataRule, 2);
|
|
|
|
|
AdHarmonicResult harmP = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, P, sourceIssue, dataRule, 2);
|
|
|
|
|
detectionDataDealService.acceptAdResult(Arrays.asList(harmP), code);
|
|
|
|
|
return harmP.getResultFlag();
|
|
|
|
|
/**
|
|
|
|
|
@@ -165,14 +161,14 @@ public class DetectionServiceImpl {
|
|
|
|
|
* 闪变
|
|
|
|
|
*/
|
|
|
|
|
case "F":
|
|
|
|
|
AdNonHarmonicResult pst = isUnBalanceOrFlickerQualified(dev, devIdMapComm, pqErrSysDtls, null, sourceIssue, dataRule, "PST");
|
|
|
|
|
AdNonHarmonicResult pst = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, null, sourceIssue, dataRule, "PST");
|
|
|
|
|
detectionDataDealService.acceptAdNonResult(Arrays.asList(pst), code);
|
|
|
|
|
return pst.getResultFlag();
|
|
|
|
|
/**
|
|
|
|
|
* 暂态
|
|
|
|
|
*/
|
|
|
|
|
case "VOLTAGE":
|
|
|
|
|
return isVoltageQualified(dev, devIdMapComm, pqErrSysDtls, sourceIssue, dataRule, code);
|
|
|
|
|
return isVoltageQualified(dev, devIdMapComm, errDtlsCheckData, sourceIssue, dataRule, code);
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
@@ -180,83 +176,101 @@ public class DetectionServiceImpl {
|
|
|
|
|
/**
|
|
|
|
|
* 判断值是否在误差范围内,有则进行判断否则则不进行计算(非谐波类型)
|
|
|
|
|
*
|
|
|
|
|
* @param dev 处理过后的数据
|
|
|
|
|
* @param pqErrSysDtls 误差体系
|
|
|
|
|
* @param type (电压还是电流)
|
|
|
|
|
* @param sourceIssue 源下发所对应的参数
|
|
|
|
|
* @param dataRule 数据处理原则
|
|
|
|
|
* @param code 源下发的装置通道code(->desc)
|
|
|
|
|
* @param dev 处理过后的数据
|
|
|
|
|
* @param errDtlsCheckData 误差体系
|
|
|
|
|
* @param type (电压还是电流)
|
|
|
|
|
* @param sourceIssue 源下发所对应的参数
|
|
|
|
|
* @param dataRule 数据处理原则
|
|
|
|
|
* @param code 源下发的装置通道code(->desc)
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public AdNonHarmonicResult isQualified(List<DevData> dev,
|
|
|
|
|
Map<String, String> devIdMapComm,
|
|
|
|
|
List<PqErrSysDtls> pqErrSysDtls,
|
|
|
|
|
String type,
|
|
|
|
|
SourceIssue sourceIssue,
|
|
|
|
|
DictDataEnum dataRule,
|
|
|
|
|
String code) {
|
|
|
|
|
Map<String, List<Double>> map = devListMap(dev, dataRule, code);
|
|
|
|
|
Double fData = 1.0;
|
|
|
|
|
if (U.equals(type)) {
|
|
|
|
|
fData = sourceIssue.getFUn();
|
|
|
|
|
}
|
|
|
|
|
if (I.equals(type)) {
|
|
|
|
|
fData = sourceIssue.getFIn();
|
|
|
|
|
}
|
|
|
|
|
if (F.equals(type)) {
|
|
|
|
|
fData = sourceIssue.getFFreq();
|
|
|
|
|
}
|
|
|
|
|
AdNonHarmonicResult result = new AdNonHarmonicResult();
|
|
|
|
|
String[] split = dev.get(0).getId().split("_");
|
|
|
|
|
String devID = devIdMapComm.get(split[0]);
|
|
|
|
|
result.setMonitorId(devID + "_" + split[1]);
|
|
|
|
|
result.setScriptId(sourceIssue.getScriptId());
|
|
|
|
|
result.setSort(sourceIssue.getIndex());
|
|
|
|
|
result.setAdType(pqErrSysDtls.get(0).getScriptType());
|
|
|
|
|
result.setDataType("avg");
|
|
|
|
|
if (map.containsKey(TYPE_T)) {
|
|
|
|
|
DetectionData t = rangeComparisonList(map.get(TYPE_T), pqErrSysDtls, fData, fData, dataRule);
|
|
|
|
|
result.setTValue(JSON.toJSONString(t));
|
|
|
|
|
result.setResultFlag(t.getIsData());
|
|
|
|
|
} else {
|
|
|
|
|
//取出源所对应的相别信息
|
|
|
|
|
List<SourceIssue.ChannelListDTO> channelTypeAList = sourceIssue.getChannelList().stream()
|
|
|
|
|
.filter(x -> (type + "a").equals(x.getChannelType()))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
DetectionData a = rangeComparisonList(map.get(TYPE_A), pqErrSysDtls, fData, channelTypeAList.get(0).getFAmp(), dataRule);
|
|
|
|
|
result.setAValue(JSON.toJSONString(a));
|
|
|
|
|
public Integer isQualified(List<DevData> dev,
|
|
|
|
|
Map<String, String> devIdMapComm,
|
|
|
|
|
List<ErrDtlsCheckDataVO> errDtlsCheckData,
|
|
|
|
|
String type,
|
|
|
|
|
SourceIssue sourceIssue,
|
|
|
|
|
DictDataEnum dataRule,
|
|
|
|
|
String code) {
|
|
|
|
|
List<AdNonHarmonicResult> info = new ArrayList<>();
|
|
|
|
|
List<String> devValueTypeList = sourceIssue.getDevValueTypeList();
|
|
|
|
|
for (String s : devValueTypeList) {
|
|
|
|
|
Map<String, List<Double>> map = devListMap(dev, dataRule, s.split("\\$")[1]);
|
|
|
|
|
Double fData = 1.0;
|
|
|
|
|
if (U.equals(type)) {
|
|
|
|
|
fData = sourceIssue.getFUn();
|
|
|
|
|
}
|
|
|
|
|
if (I.equals(type)) {
|
|
|
|
|
fData = sourceIssue.getFIn();
|
|
|
|
|
}
|
|
|
|
|
if (F.equals(type)) {
|
|
|
|
|
fData = sourceIssue.getFFreq();
|
|
|
|
|
}
|
|
|
|
|
AdNonHarmonicResult result = new AdNonHarmonicResult();
|
|
|
|
|
String[] split = dev.get(0).getId().split("_");
|
|
|
|
|
String devID = devIdMapComm.get(split[0]);
|
|
|
|
|
result.setMonitorId(devID + "_" + split[1]);
|
|
|
|
|
result.setScriptId(sourceIssue.getScriptId());
|
|
|
|
|
result.setSort(sourceIssue.getIndex());
|
|
|
|
|
List<PqErrSysDtls> pqErrSysDtls = new ArrayList<>();
|
|
|
|
|
if (CollUtil.isNotEmpty(errDtlsCheckData)) {
|
|
|
|
|
result.setAdType(errDtlsCheckData.get(0).getValueType());
|
|
|
|
|
if (CollUtil.isNotEmpty(errDtlsCheckData.get(0).getErrSysDtls())) {
|
|
|
|
|
pqErrSysDtls = errDtlsCheckData.get(0).getErrSysDtls();
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
return 4;
|
|
|
|
|
}
|
|
|
|
|
result.setDataType("avg");
|
|
|
|
|
if (map.containsKey(TYPE_T)) {
|
|
|
|
|
DetectionData t = rangeComparisonList(map.get(TYPE_T), pqErrSysDtls, fData, fData, dataRule);
|
|
|
|
|
result.setTValue(JSON.toJSONString(t));
|
|
|
|
|
result.setResultFlag(t.getIsData());
|
|
|
|
|
} else {
|
|
|
|
|
//取出源所对应的相别信息
|
|
|
|
|
List<SourceIssue.ChannelListDTO> channelTypeAList = sourceIssue.getChannelList().stream()
|
|
|
|
|
.filter(x -> (type + "a").equals(x.getChannelType()))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
DetectionData a = rangeComparisonList(map.get(TYPE_A), pqErrSysDtls, fData, channelTypeAList.get(0).getFAmp(), dataRule);
|
|
|
|
|
result.setAValue(JSON.toJSONString(a));
|
|
|
|
|
|
|
|
|
|
List<SourceIssue.ChannelListDTO> channelTypeBList = sourceIssue.getChannelList().stream()
|
|
|
|
|
.filter(x -> (type + "b").equals(x.getChannelType()))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
DetectionData b = rangeComparisonList(map.get(TYPE_B), pqErrSysDtls, fData, channelTypeBList.get(0).getFAmp(), dataRule);
|
|
|
|
|
result.setBValue(JSON.toJSONString(b));
|
|
|
|
|
List<SourceIssue.ChannelListDTO> channelTypeBList = sourceIssue.getChannelList().stream()
|
|
|
|
|
.filter(x -> (type + "b").equals(x.getChannelType()))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
DetectionData b = rangeComparisonList(map.get(TYPE_B), pqErrSysDtls, fData, channelTypeBList.get(0).getFAmp(), dataRule);
|
|
|
|
|
result.setBValue(JSON.toJSONString(b));
|
|
|
|
|
|
|
|
|
|
List<SourceIssue.ChannelListDTO> channelTypeCList = sourceIssue.getChannelList().stream()
|
|
|
|
|
.filter(x -> (type + "c").equals(x.getChannelType()))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
DetectionData c = rangeComparisonList(map.get(TYPE_C), pqErrSysDtls, fData, channelTypeCList.get(0).getFAmp(), dataRule);
|
|
|
|
|
result.setCValue(JSON.toJSONString(c));
|
|
|
|
|
List<SourceIssue.ChannelListDTO> channelTypeCList = sourceIssue.getChannelList().stream()
|
|
|
|
|
.filter(x -> (type + "c").equals(x.getChannelType()))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
DetectionData c = rangeComparisonList(map.get(TYPE_C), pqErrSysDtls, fData, channelTypeCList.get(0).getFAmp(), dataRule);
|
|
|
|
|
result.setCValue(JSON.toJSONString(c));
|
|
|
|
|
|
|
|
|
|
result.setResultFlag(setResultFlag(Arrays.asList(a, b, c)));
|
|
|
|
|
result.setResultFlag(setResultFlag(Arrays.asList(a, b, c)));
|
|
|
|
|
}
|
|
|
|
|
info.add(result);
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
if (CollUtil.isNotEmpty(info)) {
|
|
|
|
|
detectionDataDealService.acceptAdNonResult(info, code);
|
|
|
|
|
List<Integer> resultFlag = info.stream().map(AdNonHarmonicResult::getResultFlag).collect(Collectors.toList());
|
|
|
|
|
return getInteger(resultFlag);
|
|
|
|
|
}
|
|
|
|
|
return 4;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 判断值是否在误差范围内,有则进行判断否则则不进行计算(谐波类型)
|
|
|
|
|
*
|
|
|
|
|
* @param dev 处理过后的数据
|
|
|
|
|
* @param pqErrSysDtls 误差体系
|
|
|
|
|
* @param type (电压还是电流)
|
|
|
|
|
* @param sourceIssue 源下发所对应的参数
|
|
|
|
|
* @param dataRule 数据处理原则
|
|
|
|
|
* @param num 处理数组下标位数
|
|
|
|
|
* @param dev 处理过后的数据
|
|
|
|
|
* @param errDtlsCheckData 误差体系
|
|
|
|
|
* @param type (电压还是电流)
|
|
|
|
|
* @param sourceIssue 源下发所对应的参数
|
|
|
|
|
* @param dataRule 数据处理原则
|
|
|
|
|
* @param num 处理数组下标位数
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public AdHarmonicResult isHarmQualified(List<DevData> dev,
|
|
|
|
|
Map<String, String> devIdMapComm,
|
|
|
|
|
List<PqErrSysDtls> pqErrSysDtls,
|
|
|
|
|
List<ErrDtlsCheckDataVO> errDtlsCheckData,
|
|
|
|
|
String type,
|
|
|
|
|
SourceIssue sourceIssue,
|
|
|
|
|
DictDataEnum dataRule,
|
|
|
|
|
@@ -273,16 +287,23 @@ public class DetectionServiceImpl {
|
|
|
|
|
fData = sourceIssue.getFIn() * sourceIssue.getFUn() * 0.01;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<DetectionData> integerBooleanA = harmRangeComparison(pqErrSysDtls, type, TYPE_A, sourceIssue, dataRule, devMap.get(TYPE_A), fData, num);
|
|
|
|
|
List<DetectionData> integerBooleanB = harmRangeComparison(pqErrSysDtls, type, TYPE_B, sourceIssue, dataRule, devMap.get(TYPE_B), fData, num);
|
|
|
|
|
List<DetectionData> integerBooleanC = harmRangeComparison(pqErrSysDtls, type, TYPE_C, sourceIssue, dataRule, devMap.get(TYPE_C), fData, num);
|
|
|
|
|
|
|
|
|
|
AdHarmonicResult harmonicResult = new AdHarmonicResult();
|
|
|
|
|
String[] split = dev.get(0).getId().split("_");
|
|
|
|
|
String devID = devIdMapComm.get(split[0]);
|
|
|
|
|
harmonicResult.setMonitorId(devID + "_" + split[1]);
|
|
|
|
|
harmonicResult.setScriptId(sourceIssue.getScriptId());
|
|
|
|
|
harmonicResult.setSort(sourceIssue.getIndex());
|
|
|
|
|
harmonicResult.setAdType(pqErrSysDtls.get(0).getScriptType());
|
|
|
|
|
List<PqErrSysDtls> pqErrSysDtls = new ArrayList<>();
|
|
|
|
|
if (CollUtil.isNotEmpty(errDtlsCheckData)) {
|
|
|
|
|
harmonicResult.setAdType(errDtlsCheckData.get(0).getValueType());
|
|
|
|
|
if (CollUtil.isNotEmpty(errDtlsCheckData.get(0).getErrSysDtls())) {
|
|
|
|
|
pqErrSysDtls = errDtlsCheckData.get(0).getErrSysDtls();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
List<DetectionData> integerBooleanA = harmRangeComparison(pqErrSysDtls, type, TYPE_A, sourceIssue, dataRule, devMap.get(TYPE_A), fData, num);
|
|
|
|
|
List<DetectionData> integerBooleanB = harmRangeComparison(pqErrSysDtls, type, TYPE_B, sourceIssue, dataRule, devMap.get(TYPE_B), fData, num);
|
|
|
|
|
List<DetectionData> integerBooleanC = harmRangeComparison(pqErrSysDtls, type, TYPE_C, sourceIssue, dataRule, devMap.get(TYPE_C), fData, num);
|
|
|
|
|
harmonicResult.setDataType("avg");
|
|
|
|
|
reflectHarmonic("a", integerBooleanA, harmonicResult, num);
|
|
|
|
|
reflectHarmonic("b", integerBooleanB, harmonicResult, num);
|
|
|
|
|
@@ -292,7 +313,6 @@ public class DetectionServiceImpl {
|
|
|
|
|
list.addAll(integerBooleanB.stream().distinct().collect(Collectors.toList()));
|
|
|
|
|
list.addAll(integerBooleanC.stream().distinct().collect(Collectors.toList()));
|
|
|
|
|
harmonicResult.setResultFlag(setResultFlag(list));
|
|
|
|
|
|
|
|
|
|
return harmonicResult;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -300,16 +320,16 @@ public class DetectionServiceImpl {
|
|
|
|
|
/**
|
|
|
|
|
* 判断值是否在误差范围内,有则进行判断否则则不进行计算(三相不平衡和闪变)
|
|
|
|
|
*
|
|
|
|
|
* @param dev 处理过后的数据
|
|
|
|
|
* @param pqErrSysDtls 误差体系
|
|
|
|
|
* @param type (电压还是电流)
|
|
|
|
|
* @param sourceIssue 源下发所对应的参数
|
|
|
|
|
* @param dataRule 数据处理原则
|
|
|
|
|
* @param dev 处理过后的数据
|
|
|
|
|
* @param errDtlsCheckData 误差体系
|
|
|
|
|
* @param type (电压还是电流)
|
|
|
|
|
* @param sourceIssue 源下发所对应的参数
|
|
|
|
|
* @param dataRule 数据处理原则
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public AdNonHarmonicResult isUnBalanceOrFlickerQualified(List<DevData> dev,
|
|
|
|
|
Map<String, String> devIdMapComm,
|
|
|
|
|
List<PqErrSysDtls> pqErrSysDtls,
|
|
|
|
|
List<ErrDtlsCheckDataVO> errDtlsCheckData,
|
|
|
|
|
String type,
|
|
|
|
|
SourceIssue sourceIssue,
|
|
|
|
|
DictDataEnum dataRule,
|
|
|
|
|
@@ -332,7 +352,13 @@ public class DetectionServiceImpl {
|
|
|
|
|
result.setMonitorId(devID + "_" + split[1]);
|
|
|
|
|
result.setScriptId(sourceIssue.getScriptId());
|
|
|
|
|
result.setSort(sourceIssue.getIndex());
|
|
|
|
|
result.setAdType(pqErrSysDtls.get(0).getScriptType());
|
|
|
|
|
List<PqErrSysDtls> pqErrSysDtls = new ArrayList<>();
|
|
|
|
|
if (CollUtil.isNotEmpty(errDtlsCheckData)) {
|
|
|
|
|
result.setAdType(errDtlsCheckData.get(0).getValueType());
|
|
|
|
|
if (CollUtil.isNotEmpty(errDtlsCheckData.get(0).getErrSysDtls())) {
|
|
|
|
|
pqErrSysDtls = errDtlsCheckData.get(0).getErrSysDtls();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
result.setDataType("avg");
|
|
|
|
|
if (StrUtil.isBlank(type)) {
|
|
|
|
|
//取出源所对应的相别信息
|
|
|
|
|
@@ -370,16 +396,16 @@ public class DetectionServiceImpl {
|
|
|
|
|
/**
|
|
|
|
|
* 判断值是否在误差范围内,有则进行判断否则则不进行计算(暂态)
|
|
|
|
|
*
|
|
|
|
|
* @param dev 处理过后的数据
|
|
|
|
|
* @param pqErrSysDtls 误差体系
|
|
|
|
|
* @param sourceIssue 源下发所对应的参数
|
|
|
|
|
* @param dataRule 数据处理原则
|
|
|
|
|
* @param code 计划code
|
|
|
|
|
* @param dev 处理过后的数据
|
|
|
|
|
* @param errDtlsCheckData 误差体系
|
|
|
|
|
* @param sourceIssue 源下发所对应的参数
|
|
|
|
|
* @param dataRule 数据处理原则
|
|
|
|
|
* @param code 计划code
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public Integer isVoltageQualified(List<DevData> dev,
|
|
|
|
|
Map<String, String> devIdMapComm,
|
|
|
|
|
List<PqErrSysDtls> pqErrSysDtls,
|
|
|
|
|
List<ErrDtlsCheckDataVO> errDtlsCheckData,
|
|
|
|
|
SourceIssue sourceIssue,
|
|
|
|
|
DictDataEnum dataRule,
|
|
|
|
|
String code
|
|
|
|
|
@@ -390,13 +416,11 @@ public class DetectionServiceImpl {
|
|
|
|
|
Map<String, List<Double>> dur = devListMap(dev, dataRule, DUR);
|
|
|
|
|
//理论上根据检测脚本,能知道误差体系,可以知道多个误差体系
|
|
|
|
|
//暂态电压下多少就是多少
|
|
|
|
|
List<PqErrSysDtls> magErrList = pqErrSysDtls.stream().filter(x -> MAG.equals(x.getScriptCode())).collect(Collectors.toList());
|
|
|
|
|
List<PqErrSysDtls> durErrList = pqErrSysDtls.stream().filter(x -> DUR.equals(x.getScriptCode())).collect(Collectors.toList());
|
|
|
|
|
List<ErrDtlsCheckDataVO> magErrList = errDtlsCheckData.stream().filter(x -> MAG.equals(x.getValueTypeCode())).collect(Collectors.toList());
|
|
|
|
|
List<ErrDtlsCheckDataVO> durErrList = errDtlsCheckData.stream().filter(x -> DUR.equals(x.getValueTypeCode())).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
AdNonHarmonicResult magResult = voltageResult(dev.get(0).getId(), devIdMapComm, sourceIssue, dataRule, mag, magErrList, sourceIssue.getFUn(), MAG);
|
|
|
|
|
magResult.setAdType(magErrList.get(0).getScriptType());
|
|
|
|
|
AdNonHarmonicResult durResult = voltageResult(dev.get(0).getId(), devIdMapComm, sourceIssue, dataRule, dur, durErrList, sourceIssue.getFFreq(), DUR);
|
|
|
|
|
durResult.setAdType(durErrList.get(0).getScriptType());
|
|
|
|
|
detectionDataDealService.acceptAdNonResult(Arrays.asList(magResult, durResult), code);
|
|
|
|
|
List<Integer> numbers = Arrays.asList(magResult.getResultFlag(), durResult.getResultFlag()).stream().distinct().collect(Collectors.toList());
|
|
|
|
|
if (numbers.contains(4)) {
|
|
|
|
|
@@ -408,12 +432,12 @@ public class DetectionServiceImpl {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param devId 装置监测点id(ip_通道)
|
|
|
|
|
* @param devIdMapComm ip_通道,装置名称
|
|
|
|
|
* @param sourceIssue 源下发信息
|
|
|
|
|
* @param dataRule 数据处理原则
|
|
|
|
|
* @param devId 装置监测点id(ip_通道)
|
|
|
|
|
* @param devIdMapComm ip_通道,装置名称
|
|
|
|
|
* @param sourceIssue 源下发信息
|
|
|
|
|
* @param dataRule 数据处理原则
|
|
|
|
|
* @param mag
|
|
|
|
|
* @param magErrList
|
|
|
|
|
* @param errDtlsCheckData
|
|
|
|
|
* @param fData
|
|
|
|
|
* @Description:
|
|
|
|
|
* @return: com.njcn.gather.storage.pojo.po.AdNonHarmonicResult
|
|
|
|
|
@@ -425,7 +449,7 @@ public class DetectionServiceImpl {
|
|
|
|
|
SourceIssue sourceIssue,
|
|
|
|
|
DictDataEnum dataRule,
|
|
|
|
|
Map<String, List<Double>> mag,
|
|
|
|
|
List<PqErrSysDtls> magErrList,
|
|
|
|
|
List<ErrDtlsCheckDataVO> errDtlsCheckData,
|
|
|
|
|
Double fData,
|
|
|
|
|
String dur
|
|
|
|
|
) {
|
|
|
|
|
@@ -436,6 +460,13 @@ public class DetectionServiceImpl {
|
|
|
|
|
result.setScriptId(sourceIssue.getScriptId());
|
|
|
|
|
result.setSort(sourceIssue.getIndex());
|
|
|
|
|
result.setDataType("avg");
|
|
|
|
|
List<PqErrSysDtls> magErrList = new ArrayList<>();
|
|
|
|
|
if (CollUtil.isNotEmpty(errDtlsCheckData)) {
|
|
|
|
|
result.setAdType(errDtlsCheckData.get(0).getValueType());
|
|
|
|
|
if (CollUtil.isNotEmpty(errDtlsCheckData.get(0).getErrSysDtls())) {
|
|
|
|
|
magErrList = errDtlsCheckData.get(0).getErrSysDtls();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//取出源所对应的相别信息
|
|
|
|
|
List<SourceIssue.ChannelListDTO> channelTypeAList = sourceIssue.getChannelList().stream()
|
|
|
|
|
.filter(x -> ("Ua").equals(x.getChannelType()))
|
|
|
|
|
@@ -481,6 +512,10 @@ public class DetectionServiceImpl {
|
|
|
|
|
|
|
|
|
|
private Integer setResultFlag(List<DetectionData> numbers) {
|
|
|
|
|
List<Integer> isData = numbers.stream().filter(x -> ObjectUtil.isNotNull(x.getData())).map(DetectionData::getIsData).distinct().collect(Collectors.toList());
|
|
|
|
|
return getInteger(isData);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static Integer getInteger(List<Integer> isData) {
|
|
|
|
|
if (CollUtil.isNotEmpty(isData)) {
|
|
|
|
|
if (isData.size() > 1) {
|
|
|
|
|
if (isData.contains(4)) {
|
|
|
|
|
@@ -510,21 +545,21 @@ public class DetectionServiceImpl {
|
|
|
|
|
List<DevData.SqlDataDTO.ListDTO> list = sqlDataDTOS.stream().map(DevData.SqlDataDTO::getList).collect(Collectors.toList());
|
|
|
|
|
List<Double> a = list.stream()
|
|
|
|
|
.filter(x -> ObjectUtil.isNotNull(x.getA()))
|
|
|
|
|
.map(DevData.SqlDataDTO.ListDTO::getA)
|
|
|
|
|
.map(x -> x.getA().doubleValue())
|
|
|
|
|
.sorted(Comparator.comparing(Double::doubleValue).reversed())
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
List<Double> b = list.stream()
|
|
|
|
|
.filter(x -> ObjectUtil.isNotNull(x.getB()))
|
|
|
|
|
.map(DevData.SqlDataDTO.ListDTO::getB)
|
|
|
|
|
.map(x -> x.getB().doubleValue())
|
|
|
|
|
.sorted(Comparator.comparing(Double::doubleValue).reversed())
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
List<Double> c = list.stream()
|
|
|
|
|
.filter(x -> ObjectUtil.isNotNull(x.getC()))
|
|
|
|
|
.map(DevData.SqlDataDTO.ListDTO::getC)
|
|
|
|
|
.map(x -> x.getC().doubleValue())
|
|
|
|
|
.sorted(Comparator.comparing(Double::doubleValue).reversed())
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
List<Double> t = list.stream().filter(x -> ObjectUtil.isNotNull(x.getT()))
|
|
|
|
|
.map(DevData.SqlDataDTO.ListDTO::getT)
|
|
|
|
|
.map(x -> x.getT().doubleValue())
|
|
|
|
|
.sorted(Comparator.comparing(Double::doubleValue).reversed())
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
switch (dataRule) {
|
|
|
|
|
@@ -650,7 +685,11 @@ public class DetectionServiceImpl {
|
|
|
|
|
errSys.setMaxErrorValue(maxErrorMultiply(errSys.getMaxErrorValue(), fData, issueHarmMap.get(harm), errSys.getErrorValueType()));
|
|
|
|
|
Double v = issueHarmMap.get(harm);
|
|
|
|
|
data.setResultData(v);
|
|
|
|
|
data.setRadius(-errSysDtl.getMaxErrorValue() + "~" + errSysDtl.getMaxErrorValue());
|
|
|
|
|
NumberFormat nf = NumberFormat.getInstance();
|
|
|
|
|
nf.setMaximumFractionDigits(6);
|
|
|
|
|
nf.setGroupingUsed(false);
|
|
|
|
|
|
|
|
|
|
data.setRadius(nf.format(-errSysDtl.getMaxErrorValue()) + "~" + nf.format(-errSysDtl.getMaxErrorValue()));
|
|
|
|
|
setDetection(dataRule, harmDataList, errSys, data, v);
|
|
|
|
|
}
|
|
|
|
|
info.add(data);
|
|
|
|
|
@@ -781,11 +820,14 @@ public class DetectionServiceImpl {
|
|
|
|
|
channelData)).collect(Collectors.toList());
|
|
|
|
|
if (CollUtil.isNotEmpty(errSysDtls)) {
|
|
|
|
|
PqErrSysDtls errSysDtl = BeanUtil.copyProperties(errSysDtls.get(0), PqErrSysDtls.class);
|
|
|
|
|
NumberFormat nf = NumberFormat.getInstance();
|
|
|
|
|
nf.setMaximumFractionDigits(6);
|
|
|
|
|
nf.setGroupingUsed(false);
|
|
|
|
|
if (DUR.equals(errSysDtl.getScriptCode())) {
|
|
|
|
|
if (CollUtil.isNotEmpty(list)) {
|
|
|
|
|
detectionData.setResultData(BigDecimal.valueOf(1.0 / data).doubleValue() * channelData);
|
|
|
|
|
detectionData.setRadius(BigDecimal.valueOf(1.0 / data * (channelData - errSysDtl.getMaxErrorValue()))
|
|
|
|
|
+ "~" + BigDecimal.valueOf(1.0 / data * (channelData + errSysDtl.getMaxErrorValue())));
|
|
|
|
|
detectionData.setRadius(nf.format(BigDecimal.valueOf(1.0 / data * (channelData - errSysDtl.getMaxErrorValue())))
|
|
|
|
|
+ "~" + nf.format(BigDecimal.valueOf(1.0 / data * (channelData + errSysDtl.getMaxErrorValue()))));
|
|
|
|
|
detectionData.setData(list.get(0));
|
|
|
|
|
List<Double> qualifiedList = list.stream()
|
|
|
|
|
.filter(x -> NumberUtil.isIn(BigDecimal.valueOf(x.doubleValue()),
|
|
|
|
|
@@ -798,7 +840,8 @@ public class DetectionServiceImpl {
|
|
|
|
|
if (CollUtil.isNotEmpty(list)) {
|
|
|
|
|
errSysDtl.setMaxErrorValue(maxErrorMultiply(errSysDtl.getMaxErrorValue(), data, channelData, errSysDtl.getErrorValueType()));
|
|
|
|
|
detectionData.setResultData(channelData);
|
|
|
|
|
detectionData.setRadius(-errSysDtl.getMaxErrorValue() + "~" + errSysDtl.getMaxErrorValue());
|
|
|
|
|
|
|
|
|
|
detectionData.setRadius(nf.format(-errSysDtl.getMaxErrorValue()) + "~" + nf.format(-errSysDtl.getMaxErrorValue()));
|
|
|
|
|
detectionData.setData(list.get(0));
|
|
|
|
|
setDetection(dataRule, list, errSysDtl, detectionData, channelData);
|
|
|
|
|
}
|
|
|
|
|
|