调整正式检测公式逻辑,优化绝对值,相对值信息
This commit is contained in:
@@ -32,11 +32,10 @@ import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.*;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.njcn.gather.detection.util.socket.UnitUtil.unit;
|
||||
|
||||
|
||||
/**
|
||||
* @author wr
|
||||
@@ -121,14 +120,14 @@ public class DetectionServiceImpl {
|
||||
case HI:
|
||||
AdHarmonicResult harmV = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, 2);
|
||||
AdHarmonicResult harmI = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, 2);
|
||||
return resultFlag(harmV,harmI,code);
|
||||
return resultFlag(harmV, harmI, code);
|
||||
/**
|
||||
* 间谐波
|
||||
*/
|
||||
case HSV:
|
||||
AdHarmonicResult harmInV = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, 1);
|
||||
AdHarmonicResult harmInI = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, 1);
|
||||
return resultFlag(harmInV,harmInI,code);
|
||||
return resultFlag(harmInV, harmInI, code);
|
||||
/**
|
||||
* 三相电压不平衡度
|
||||
*/
|
||||
@@ -179,20 +178,22 @@ public class DetectionServiceImpl {
|
||||
return isUnknownQualified(dev, devIdMapComm, errDtlsCheckData, sourceIssue, dataRule, code);
|
||||
}
|
||||
}
|
||||
public Integer resultFlag(AdHarmonicResult v,AdHarmonicResult i,String code){
|
||||
List<AdHarmonicResult> info=new ArrayList<>();
|
||||
|
||||
public Integer resultFlag(AdHarmonicResult v, AdHarmonicResult i, String code) {
|
||||
List<AdHarmonicResult> info = new ArrayList<>();
|
||||
if (ObjectUtil.isNotNull(v)) {
|
||||
info.add(v);
|
||||
}
|
||||
if (ObjectUtil.isNotNull(i)) {
|
||||
info.add(i);
|
||||
}
|
||||
if(CollUtil.isNotEmpty(info)){
|
||||
if (CollUtil.isNotEmpty(info)) {
|
||||
detectionDataDealService.acceptAdResult(info, code);
|
||||
return getInteger(info.stream().map(x->x.getResultFlag()).distinct().collect(Collectors.toList()));
|
||||
return getInteger(info.stream().map(x -> x.getResultFlag()).distinct().collect(Collectors.toList()));
|
||||
}
|
||||
return 4;
|
||||
}
|
||||
|
||||
public Integer isUnknownQualified(List<DevData> dev,
|
||||
Map<String, String> devIdMapComm,
|
||||
List<ErrDtlsCheckDataVO> errDtlsCheckData,
|
||||
@@ -219,15 +220,12 @@ public class DetectionServiceImpl {
|
||||
result.setSort(sourceIssue.getIndex());
|
||||
result.setDataType("avg");
|
||||
Integer isQualified;
|
||||
String valueTypeCode;
|
||||
List<ErrDtlsCheckDataVO> dtlsCheckData = errDtlsCheckData.stream().filter(x -> x.getValueTypeCode().equals(s.split("\\$")[1])).collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(dtlsCheckData)) {
|
||||
result.setAdType(dtlsCheckData.get(0).getValueType());
|
||||
isQualified = dtlsCheckData.get(0).getIsQualified();
|
||||
valueTypeCode = dtlsCheckData.get(0).getValueTypeCode();
|
||||
} else {
|
||||
isQualified = 4;
|
||||
valueTypeCode = "";
|
||||
}
|
||||
List<DetectionData> resultFlag = new ArrayList<>();
|
||||
map.forEach((key, value) -> {
|
||||
@@ -235,9 +233,9 @@ public class DetectionServiceImpl {
|
||||
if (CollUtil.isNotEmpty(checkData)) {
|
||||
DetectionData detectionData;
|
||||
if (DUR.equals(devIndex)) {
|
||||
detectionData = rangeDURComparisonList(value, isQualified, valueTypeCode, new ArrayList<>(), sourceIssue.getFFreq(), checkData.get(0).getValue(), dataRule);
|
||||
detectionData = rangeDURComparisonList(value, isQualified, new ArrayList<>(), sourceIssue.getFFreq(), checkData.get(0).getValue(), dataRule);
|
||||
} else {
|
||||
detectionData = rangeComparisonList(value, isQualified, valueTypeCode, new ArrayList<>(), null, checkData.get(0).getValue(), dataRule);
|
||||
detectionData = rangeComparisonList(value, isQualified, new ArrayList<>(), null, checkData.get(0).getValue(), dataRule);
|
||||
}
|
||||
if (key.equals(TYPE_T)) {
|
||||
result.setTValue(JSON.toJSONString(detectionData));
|
||||
@@ -278,7 +276,6 @@ public class DetectionServiceImpl {
|
||||
}
|
||||
if (devIndex.contains("I")) {
|
||||
fundCode = DetectionCodeEnum.I1.getCode();
|
||||
;
|
||||
type = I;
|
||||
fData = sourceIssue.getFIn();
|
||||
if (devIndex.contains("50")) {
|
||||
@@ -307,15 +304,13 @@ public class DetectionServiceImpl {
|
||||
if (CollUtil.isNotEmpty(dtlsCheckData)) {
|
||||
harmonicResult.setAdType(dtlsCheckData.get(0).getValueType());
|
||||
isQualified = dtlsCheckData.get(0).getIsQualified();
|
||||
valueTypeCode = dtlsCheckData.get(0).getValueTypeCode();
|
||||
} else {
|
||||
isQualified = 4;
|
||||
valueTypeCode = "";
|
||||
}
|
||||
//电压下百分比给百分比直接算 电流是是下百分比给的是幅值要转换算
|
||||
List<DetectionData> integerBooleanA = harmRangeComparison(isQualified, valueTypeCode, new ArrayList<>(), type, TYPE_A, sourceIssue, dataRule, devHarmMap.get(TYPE_A), fData, num);
|
||||
List<DetectionData> integerBooleanB = harmRangeComparison(isQualified, valueTypeCode, new ArrayList<>(), type, TYPE_B, sourceIssue, dataRule, devHarmMap.get(TYPE_B), fData, num);
|
||||
List<DetectionData> integerBooleanC = harmRangeComparison(isQualified, valueTypeCode, new ArrayList<>(), type, TYPE_C, sourceIssue, dataRule, devHarmMap.get(TYPE_C), fData, num);
|
||||
List<DetectionData> integerBooleanA = harmRangeComparison(isQualified, new ArrayList<>(), type, TYPE_A, sourceIssue, dataRule, devHarmMap.get(TYPE_A), fData, num);
|
||||
List<DetectionData> integerBooleanB = harmRangeComparison(isQualified, new ArrayList<>(), type, TYPE_B, sourceIssue, dataRule, devHarmMap.get(TYPE_B), fData, num);
|
||||
List<DetectionData> integerBooleanC = harmRangeComparison(isQualified, new ArrayList<>(), type, TYPE_C, sourceIssue, dataRule, devHarmMap.get(TYPE_C), fData, num);
|
||||
harmonicResult.setDataType("avg");
|
||||
reflectHarmonic("a", integerBooleanA, harmonicResult, num);
|
||||
reflectHarmonic("b", integerBooleanB, harmonicResult, num);
|
||||
@@ -382,13 +377,11 @@ public class DetectionServiceImpl {
|
||||
result.setDataType("avg");
|
||||
List<PqErrSysDtls> pqErrSysDtls = new ArrayList<>();
|
||||
Integer isQualified = 4;
|
||||
String valueTypeCode = "";
|
||||
if (CollUtil.isNotEmpty(errDtlsCheckData)) {
|
||||
List<ErrDtlsCheckDataVO> dtlsCheckData = errDtlsCheckData.stream().filter(x -> x.getValueTypeCode().equals(s.split("\\$")[1])).collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(dtlsCheckData)) {
|
||||
result.setAdType(dtlsCheckData.get(0).getValueType());
|
||||
isQualified = dtlsCheckData.get(0).getIsQualified();
|
||||
valueTypeCode = dtlsCheckData.get(0).getValueTypeCode();
|
||||
if (CollUtil.isNotEmpty(dtlsCheckData.get(0).getErrSysDtls())) {
|
||||
pqErrSysDtls = dtlsCheckData.get(0).getErrSysDtls();
|
||||
}
|
||||
@@ -396,30 +389,35 @@ public class DetectionServiceImpl {
|
||||
if (map.containsKey(TYPE_T)) {
|
||||
List<ErrDtlsCheckDataVO> checkDataT = dtlsCheckData.stream().filter(x -> TYPE_T.equals(x.getPhase())).collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(checkDataT)) {
|
||||
DetectionData t = rangeComparisonList(map.get(TYPE_T), isQualified, valueTypeCode, pqErrSysDtls, fData, checkDataT.get(0).getValue(), dataRule);
|
||||
DetectionData t = rangeComparisonList(map.get(TYPE_T), isQualified, pqErrSysDtls, fData, checkDataT.get(0).getValue(), dataRule);
|
||||
result.setTValue(JSON.toJSONString(t));
|
||||
result.setResultFlag(t.getIsData());
|
||||
}
|
||||
} else {
|
||||
List<DetectionData> resultFlag = new ArrayList<>();
|
||||
//取出源所对应的相别信息
|
||||
List<ErrDtlsCheckDataVO> checkDataA = dtlsCheckData.stream().filter(x -> TYPE_A.equals(x.getPhase())).collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(checkDataA)) {
|
||||
DetectionData a = rangeComparisonList(map.get(TYPE_A), isQualified, valueTypeCode, pqErrSysDtls, fData, checkDataA.get(0).getValue(), dataRule);
|
||||
resultFlag.add(a);
|
||||
result.setAValue(JSON.toJSONString(a));
|
||||
}
|
||||
List<ErrDtlsCheckDataVO> checkDataB = dtlsCheckData.stream().filter(x -> TYPE_B.equals(x.getPhase())).collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(checkDataB)) {
|
||||
DetectionData b = rangeComparisonList(map.get(TYPE_B), isQualified, valueTypeCode, pqErrSysDtls, fData, checkDataB.get(0).getValue(), dataRule);
|
||||
resultFlag.add(b);
|
||||
result.setBValue(JSON.toJSONString(b));
|
||||
}
|
||||
List<ErrDtlsCheckDataVO> checkDataC = dtlsCheckData.stream().filter(x -> TYPE_C.equals(x.getPhase())).collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(checkDataC)) {
|
||||
DetectionData c = rangeComparisonList(map.get(TYPE_C), isQualified, valueTypeCode, pqErrSysDtls, fData, checkDataC.get(0).getValue(), dataRule);
|
||||
resultFlag.add(c);
|
||||
result.setCValue(JSON.toJSONString(c));
|
||||
Map<String, BiConsumer<AdNonHarmonicResult, DetectionData>> setters = new HashMap<>();
|
||||
setters.put(TYPE_A, (r, d) -> r.setAValue(JSON.toJSONString(d)));
|
||||
setters.put(TYPE_B, (r, d) -> r.setBValue(JSON.toJSONString(d)));
|
||||
setters.put(TYPE_C, (r, d) -> r.setCValue(JSON.toJSONString(d)));
|
||||
|
||||
List<String> phases = Arrays.asList(TYPE_A, TYPE_B, TYPE_C);
|
||||
for (String phase : phases) {
|
||||
List<ErrDtlsCheckDataVO> checkData = dtlsCheckData.stream()
|
||||
.filter(x -> phase.equals(x.getPhase()))
|
||||
.collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(checkData)) {
|
||||
List<Double> phaseValue = map.get(phase);
|
||||
// 注意:如果map中不存在该phase的键,phaseValue可能为null,需确保map包含该键
|
||||
DetectionData detectionData = rangeComparisonList(phaseValue, isQualified, pqErrSysDtls, fData, checkData.get(0).getValue(), dataRule);
|
||||
resultFlag.add(detectionData);
|
||||
BiConsumer<AdNonHarmonicResult, DetectionData> setter = setters.get(phase);
|
||||
if (setter != null) {
|
||||
setter.accept(result, detectionData);
|
||||
} else {
|
||||
// 处理未定义的setter的情况
|
||||
throw new IllegalArgumentException("Setter not defined for phase: " + phase);
|
||||
}
|
||||
}
|
||||
}
|
||||
result.setResultFlag(setResultFlag(resultFlag));
|
||||
}
|
||||
@@ -487,20 +485,18 @@ public class DetectionServiceImpl {
|
||||
harmonicResult.setSort(sourceIssue.getIndex());
|
||||
List<PqErrSysDtls> pqErrSysDtls = new ArrayList<>();
|
||||
Integer isQualified = 4;
|
||||
String valueTypeCode = "";
|
||||
if (CollUtil.isNotEmpty(errDtlsCheckData)) {
|
||||
String finalHarmCode = harmCode;
|
||||
List<ErrDtlsCheckDataVO> adDtlsCheckData = errDtlsCheckData.stream().filter(x -> finalHarmCode.equals(x.getValueTypeCode())).collect(Collectors.toList());
|
||||
harmonicResult.setAdType(adDtlsCheckData.get(0).getValueType());
|
||||
isQualified = adDtlsCheckData.get(0).getIsQualified();
|
||||
valueTypeCode = adDtlsCheckData.get(0).getValueTypeCode();
|
||||
if (CollUtil.isNotEmpty(adDtlsCheckData.get(0).getErrSysDtls())) {
|
||||
pqErrSysDtls = adDtlsCheckData.get(0).getErrSysDtls();
|
||||
}
|
||||
}
|
||||
List<DetectionData> integerBooleanA = harmRangeComparison(isQualified, valueTypeCode, pqErrSysDtls, type, TYPE_A, sourceIssue, dataRule, devMap.get(TYPE_A), fData, num);
|
||||
List<DetectionData> integerBooleanB = harmRangeComparison(isQualified, valueTypeCode, pqErrSysDtls, type, TYPE_B, sourceIssue, dataRule, devMap.get(TYPE_B), fData, num);
|
||||
List<DetectionData> integerBooleanC = harmRangeComparison(isQualified, valueTypeCode, pqErrSysDtls, type, TYPE_C, sourceIssue, dataRule, devMap.get(TYPE_C), fData, num);
|
||||
List<DetectionData> integerBooleanA = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_A, sourceIssue, dataRule, devMap.get(TYPE_A), fData, num);
|
||||
List<DetectionData> integerBooleanB = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_B, sourceIssue, dataRule, devMap.get(TYPE_B), fData, num);
|
||||
List<DetectionData> integerBooleanC = harmRangeComparison(isQualified, 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);
|
||||
@@ -554,11 +550,9 @@ public class DetectionServiceImpl {
|
||||
result.setSort(sourceIssue.getIndex());
|
||||
List<PqErrSysDtls> pqErrSysDtls = new ArrayList<>();
|
||||
Integer isQualified = 4;
|
||||
String valueTypeCode = "";
|
||||
if (CollUtil.isNotEmpty(errDtlsCheckData)) {
|
||||
result.setAdType(errDtlsCheckData.get(0).getValueType());
|
||||
isQualified = errDtlsCheckData.get(0).getIsQualified();
|
||||
valueTypeCode = errDtlsCheckData.get(0).getValueTypeCode();
|
||||
if (CollUtil.isNotEmpty(errDtlsCheckData.get(0).getErrSysDtls())) {
|
||||
pqErrSysDtls = errDtlsCheckData.get(0).getErrSysDtls();
|
||||
}
|
||||
@@ -569,19 +563,19 @@ public class DetectionServiceImpl {
|
||||
List<PqScriptCheckData> channelTypeAList = checkData.stream()
|
||||
.filter(x -> TYPE_A.equals(x.getPhase()))
|
||||
.collect(Collectors.toList());
|
||||
DetectionData a = rangeComparisonList(map.get(TYPE_A), isQualified, valueTypeCode, pqErrSysDtls, fData, channelTypeAList.get(0).getValue(), dataRule);
|
||||
DetectionData a = rangeComparisonList(map.get(TYPE_A), isQualified, pqErrSysDtls, fData, channelTypeAList.get(0).getValue(), dataRule);
|
||||
result.setAValue(JSON.toJSONString(a));
|
||||
|
||||
List<PqScriptCheckData> channelTypeBList = checkData.stream()
|
||||
.filter(x -> TYPE_B.equals(x.getPhase()))
|
||||
.collect(Collectors.toList());
|
||||
DetectionData b = rangeComparisonList(map.get(TYPE_B), isQualified, valueTypeCode, pqErrSysDtls, fData, channelTypeBList.get(0).getValue(), dataRule);
|
||||
DetectionData b = rangeComparisonList(map.get(TYPE_B), isQualified, pqErrSysDtls, fData, channelTypeBList.get(0).getValue(), dataRule);
|
||||
result.setBValue(JSON.toJSONString(b));
|
||||
|
||||
List<PqScriptCheckData> channelTypeCList = checkData.stream()
|
||||
.filter(x -> TYPE_C.equals(x.getPhase()))
|
||||
.collect(Collectors.toList());
|
||||
DetectionData c = rangeComparisonList(map.get(TYPE_C), isQualified, valueTypeCode, pqErrSysDtls, fData, channelTypeCList.get(0).getValue(), dataRule);
|
||||
DetectionData c = rangeComparisonList(map.get(TYPE_C), isQualified, pqErrSysDtls, fData, channelTypeCList.get(0).getValue(), dataRule);
|
||||
result.setCValue(JSON.toJSONString(c));
|
||||
|
||||
result.setResultFlag(setResultFlag(Arrays.asList(a, b, c)));
|
||||
@@ -589,7 +583,7 @@ public class DetectionServiceImpl {
|
||||
List<PqScriptCheckData> channelTypeBList = checkData.stream()
|
||||
.filter(x -> TYPE_T.equals(x.getPhase()))
|
||||
.collect(Collectors.toList());
|
||||
DetectionData t = rangeComparisonList(map.get(TYPE_B), isQualified, valueTypeCode, pqErrSysDtls, fData, channelTypeBList.get(0).getValue(), dataRule);
|
||||
DetectionData t = rangeComparisonList(map.get(TYPE_B), isQualified, pqErrSysDtls, fData, channelTypeBList.get(0).getValue(), dataRule);
|
||||
result.setTValue(JSON.toJSONString(t));
|
||||
result.setResultFlag(setResultFlag(Arrays.asList(t)));
|
||||
}
|
||||
@@ -601,14 +595,14 @@ public class DetectionServiceImpl {
|
||||
|
||||
/**
|
||||
* 判断值是否在误差范围内,有则进行判断否则则不进行计算(暂态)
|
||||
*
|
||||
* <p>
|
||||
* (假如都符合,则选取最开始合格的,都不合格,取最开始不合格的)
|
||||
* 方案一 分项问题
|
||||
* 分别计算各个相别是否合格
|
||||
* 不合格电压幅值的层级最高
|
||||
*
|
||||
* 方案二 不分项问题
|
||||
* 以电压幅值最低的作为比较相别
|
||||
* 方案一 分项问题
|
||||
* 分别计算各个相别是否合格
|
||||
* 不合格电压幅值的层级最高
|
||||
* <p>
|
||||
* 方案二 不分项问题
|
||||
* 以电压幅值最低的作为比较相别
|
||||
*
|
||||
* @param dev 处理过后的数据
|
||||
* @param errDtlsCheckData 误差体系
|
||||
@@ -737,11 +731,9 @@ public class DetectionServiceImpl {
|
||||
result.setDataType("avg");
|
||||
List<PqErrSysDtls> magErrList = new ArrayList<>();
|
||||
Integer isQualified = 4;
|
||||
String valueTypeCode = "";
|
||||
if (CollUtil.isNotEmpty(errDtlsCheckData)) {
|
||||
result.setAdType(errDtlsCheckData.get(0).getValueType());
|
||||
isQualified = errDtlsCheckData.get(0).getIsQualified();
|
||||
valueTypeCode = errDtlsCheckData.get(0).getValueTypeCode();
|
||||
if (CollUtil.isNotEmpty(errDtlsCheckData.get(0).getErrSysDtls())) {
|
||||
magErrList = errDtlsCheckData.get(0).getErrSysDtls();
|
||||
}
|
||||
@@ -750,24 +742,24 @@ public class DetectionServiceImpl {
|
||||
.filter(x -> ("Ub").equals(x.getChannelType()))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
DetectionData b = setDetectionData(isQualified, valueTypeCode, dataRule, mag, fData, dur, magErrList, channelTypeBList, TYPE_B);
|
||||
DetectionData b = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeBList, TYPE_B);
|
||||
result.setBValue(JSON.toJSONString(b));
|
||||
|
||||
List<SourceIssue.ChannelListDTO> channelTypeCList = sourceIssue.getChannelList().stream()
|
||||
.filter(x -> ("Uc").equals(x.getChannelType()))
|
||||
.collect(Collectors.toList());
|
||||
DetectionData c = setDetectionData(isQualified, valueTypeCode, dataRule, mag, fData, dur, magErrList, channelTypeCList, TYPE_C);
|
||||
DetectionData c = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeCList, TYPE_C);
|
||||
result.setCValue(JSON.toJSONString(c));
|
||||
|
||||
if (CollUtil.isNotEmpty(mag.get(TYPE_B)) &&CollUtil.isNotEmpty(mag.get(TYPE_C))) {
|
||||
if (CollUtil.isNotEmpty(mag.get(TYPE_B)) && CollUtil.isNotEmpty(mag.get(TYPE_C))) {
|
||||
//取出源所对应的相别信息
|
||||
List<SourceIssue.ChannelListDTO> channelTypeAList = sourceIssue.getChannelList().stream()
|
||||
.filter(x -> ("Ua").equals(x.getChannelType()))
|
||||
.collect(Collectors.toList());
|
||||
DetectionData a = setDetectionData(isQualified, valueTypeCode, dataRule, mag, fData, dur, magErrList, channelTypeAList, TYPE_A);
|
||||
DetectionData a = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeAList, TYPE_A);
|
||||
result.setAValue(JSON.toJSONString(a));
|
||||
result.setResultFlag(setResultFlag(Arrays.asList(a, b, c)));
|
||||
}else {
|
||||
} else {
|
||||
List<SourceIssue.ChannelListDTO> channelTypeAList = sourceIssue.getChannelList().stream()
|
||||
.filter(x -> x.getChannelType().contains("U"))
|
||||
.sorted(Comparator.comparing(
|
||||
@@ -776,7 +768,7 @@ public class DetectionServiceImpl {
|
||||
.orElse(Double.NaN)
|
||||
))
|
||||
.collect(Collectors.toList());
|
||||
DetectionData a = setDetectionData(isQualified, valueTypeCode, dataRule, mag, fData, dur, magErrList, channelTypeAList, TYPE_A);
|
||||
DetectionData a = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeAList, TYPE_A);
|
||||
result.setAValue(JSON.toJSONString(a));
|
||||
result.setTValue(JSON.toJSONString(a));
|
||||
result.setResultFlag(a.getIsData());
|
||||
@@ -785,25 +777,20 @@ public class DetectionServiceImpl {
|
||||
}
|
||||
|
||||
private DetectionData setDetectionData(Integer isQualified,
|
||||
String valueTypeCode,
|
||||
DictDataEnum dataRule,
|
||||
Map<String, List<Double>> mag,
|
||||
Double fData,
|
||||
String dur,
|
||||
List<PqErrSysDtls> magErrList,
|
||||
List<SourceIssue.ChannelListDTO> channelTypeCList,
|
||||
String typeC) {
|
||||
DetectionData c;
|
||||
String type) {
|
||||
DetectionData data;
|
||||
if (DUR.equals(dur)) {
|
||||
c = rangeDURComparisonList(mag.get(typeC), isQualified, valueTypeCode, magErrList, fData, channelTypeCList.get(0).getDipData().getRetainTime(), dataRule);
|
||||
data = rangeDURComparisonList(mag.get(type), isQualified, magErrList, fData, channelTypeCList.get(0).getDipData().getRetainTime(), dataRule);
|
||||
} else {
|
||||
List<Double> ampData = mag.get(typeC).stream()
|
||||
.filter(x -> ObjectUtil.isNotNull(x))
|
||||
.map(x -> NumberUtil.round(x * channelTypeCList.get(0).getFAmp() * 0.01, 4).doubleValue())
|
||||
.collect(Collectors.toList());
|
||||
c = rangeComparisonList(ampData, isQualified, valueTypeCode, magErrList, fData, channelTypeCList.get(0).getDipData().getFTransValue(), dataRule);
|
||||
data = rangeComparisonList(mag.get(type), isQualified, magErrList, fData, channelTypeCList.get(0).getDipData().getFTransValue(), dataRule);
|
||||
}
|
||||
return c;
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
@@ -924,11 +911,10 @@ public class DetectionServiceImpl {
|
||||
* @param sourceIssue 源下发的值(谐波)
|
||||
* @param dataRule 数据处理原则
|
||||
* @param devMap
|
||||
* @param fData
|
||||
* @param fData 额定值
|
||||
* @return
|
||||
*/
|
||||
public List<DetectionData> harmRangeComparison(Integer isQualified,
|
||||
String valueTypeCode,
|
||||
List<PqErrSysDtls> pqErrSysDtls,
|
||||
String type,
|
||||
String phase,
|
||||
@@ -959,12 +945,12 @@ public class DetectionServiceImpl {
|
||||
issueHarmMap = sourceIssue.getChannelList().stream()
|
||||
.filter(x -> (type + phase.toLowerCase()).equals(x.getChannelType()))
|
||||
.flatMap(x -> x.getInharmList().stream())
|
||||
.collect(Collectors.toMap(SourceIssue.ChannelListDTO.InharmModel::getInharm, x -> x.getFAmp() * percent));
|
||||
.collect(Collectors.toMap(SourceIssue.ChannelListDTO.InharmModel::getInharm, x -> BigDecimal.valueOf(x.getFAmp()).multiply(BigDecimal.valueOf(percent)).doubleValue()));
|
||||
} else {
|
||||
issueHarmMap = sourceIssue.getChannelList().stream()
|
||||
.filter(x -> (type + phase.toLowerCase()).equals(x.getChannelType()))
|
||||
.flatMap(x -> x.getHarmList().stream())
|
||||
.collect(Collectors.toMap(SourceIssue.ChannelListDTO.HarmModel::getHarm, x -> x.getFAmp() * percent));
|
||||
.collect(Collectors.toMap(SourceIssue.ChannelListDTO.HarmModel::getHarm, x -> BigDecimal.valueOf(x.getFAmp()).multiply(BigDecimal.valueOf(percent)).doubleValue()));
|
||||
}
|
||||
}
|
||||
Map<Double, PqErrSysDtls> errSysDtlMap = new LinkedHashMap<>();
|
||||
@@ -990,17 +976,14 @@ public class DetectionServiceImpl {
|
||||
if (CollUtil.isNotEmpty(harmDataList)) {
|
||||
data.setData(harmDataList.get(0));
|
||||
}
|
||||
Double v = issueHarmMap.get(harm);
|
||||
data.setResultData(v);
|
||||
Double channelData = issueHarmMap.get(harm);
|
||||
data.setResultData(channelData);
|
||||
if (ObjectUtil.isNotNull(errSysDtl)) {
|
||||
PqErrSysDtls errSys = BeanUtil.copyProperties(errSysDtl, PqErrSysDtls.class);
|
||||
errSys.setMaxErrorValue(maxErrorMultiply(errSys.getMaxErrorValue(), fData, issueHarmMap.get(harm), errSys.getErrorValueType()));
|
||||
NumberFormat nf = NumberFormat.getInstance();
|
||||
nf.setMaximumFractionDigits(6);
|
||||
nf.setGroupingUsed(false);
|
||||
data.setUnit(unit(valueTypeCode, errSysDtl.getErrorValueType()));
|
||||
data.setRadius(nf.format(-errSys.getMaxErrorValue()) + "~" + nf.format(errSys.getMaxErrorValue()));
|
||||
setDetection(dataRule, harmDataList, errSys, data, v);
|
||||
errSys.setMaxErrorValue(maxErrorMultiply(errSys, fData, issueHarmMap.get(harm)));
|
||||
data.setUnit(errSysDtl.getErrorUnit());
|
||||
data.setRadius(-errSys.getMaxErrorValue() + "~" + errSys.getMaxErrorValue());
|
||||
setDetection(dataRule, harmDataList, errSys, data, channelData, fData);
|
||||
}
|
||||
info.add(data);
|
||||
});
|
||||
@@ -1013,26 +996,27 @@ public class DetectionServiceImpl {
|
||||
* @param harmDataList 原始数据集合
|
||||
* @param errSysDtl 误差体系
|
||||
* @param data 初始化原始数据
|
||||
* @param v 源下发的数据
|
||||
* @param channelData 源下发的数据
|
||||
* @param ratedValue 额定值
|
||||
* @Description:
|
||||
* @Author: wr
|
||||
* @Date: 2024/12/29 18:10
|
||||
*/
|
||||
private void setDetection(DictDataEnum dataRule, List<Double> harmDataList, PqErrSysDtls errSysDtl, DetectionData data, Double v) {
|
||||
private void setDetection(DictDataEnum dataRule, List<Double> harmDataList, PqErrSysDtls errSysDtl, DetectionData data, Double channelData, Double ratedValue) {
|
||||
if (CollUtil.isNotEmpty(harmDataList)) {
|
||||
// 存放合格的数据
|
||||
List<Double> qualifiedList = harmDataList.stream()
|
||||
.filter(x -> v == 0 ? NumberUtil.isIn(devSubtractChannelData(x, v, errSysDtl.getErrorValueType()),
|
||||
.filter(x -> channelData == 0 ? NumberUtil.isIn(devSubtractChannelData(x, channelData, ratedValue, errSysDtl),
|
||||
BigDecimal.valueOf(-errSysDtl.getMaxErrorValue()),
|
||||
BigDecimal.valueOf(errSysDtl.getMaxErrorValue()))
|
||||
:
|
||||
x != 0 && NumberUtil.isIn(devSubtractChannelData(x, v, errSysDtl.getErrorValueType()),
|
||||
x != 0 && NumberUtil.isIn(devSubtractChannelData(x, channelData, ratedValue, errSysDtl),
|
||||
BigDecimal.valueOf(-errSysDtl.getMaxErrorValue()),
|
||||
BigDecimal.valueOf(errSysDtl.getMaxErrorValue()))).collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(qualifiedList)) {
|
||||
data.setErrorData(devSubtractChannelData(qualifiedList.get(0), v, errSysDtl.getErrorValueType()));
|
||||
data.setErrorData(devSubtractChannelData(qualifiedList.get(0), channelData, ratedValue, errSysDtl));
|
||||
} else {
|
||||
data.setErrorData(devSubtractChannelData(harmDataList.get(0), v, errSysDtl.getErrorValueType()));
|
||||
data.setErrorData(devSubtractChannelData(harmDataList.get(0), channelData, ratedValue, errSysDtl));
|
||||
}
|
||||
isData(dataRule, harmDataList, data, qualifiedList);
|
||||
}
|
||||
@@ -1163,7 +1147,7 @@ public class DetectionServiceImpl {
|
||||
* @param dataRule 数据处理原则
|
||||
* @returnd
|
||||
*/
|
||||
public DetectionData rangeComparisonList(List<Double> list, Integer isQualified, String valueTypeCode, List<PqErrSysDtls> pqErrSysDtls, Double data, Double channelData, DictDataEnum dataRule) {
|
||||
public DetectionData rangeComparisonList(List<Double> list, Integer isQualified, List<PqErrSysDtls> pqErrSysDtls, Double data, Double channelData, DictDataEnum dataRule) {
|
||||
DetectionData detectionData = new DetectionData();
|
||||
detectionData.setIsData(isQualified);
|
||||
if (CollUtil.isNotEmpty(list)) {
|
||||
@@ -1178,19 +1162,16 @@ 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);
|
||||
detectionData.setUnit(unit(valueTypeCode, errSysDtl.getErrorValueType()));
|
||||
errSysDtl.setMaxErrorValue(maxErrorMultiply(errSysDtl.getMaxErrorValue(), data, channelData, errSysDtl.getErrorValueType()));
|
||||
detectionData.setRadius(nf.format(-errSysDtl.getMaxErrorValue()) + "~" + nf.format(errSysDtl.getMaxErrorValue()));
|
||||
setDetection(dataRule, list, errSysDtl, detectionData, channelData);
|
||||
detectionData.setUnit(errSysDtl.getErrorUnit());
|
||||
errSysDtl.setMaxErrorValue(maxErrorMultiply(errSysDtl, data, channelData));
|
||||
detectionData.setRadius(-errSysDtl.getMaxErrorValue() + "~" + errSysDtl.getMaxErrorValue());
|
||||
setDetection(dataRule, list, errSysDtl, detectionData, channelData, data);
|
||||
}
|
||||
}
|
||||
return detectionData;
|
||||
}
|
||||
|
||||
public DetectionData rangeDURComparisonList(List<Double> list, Integer isQualified, String valueTypeCode, List<PqErrSysDtls> pqErrSysDtls, Double data, Double channelData, DictDataEnum dataRule) {
|
||||
public DetectionData rangeDURComparisonList(List<Double> list, Integer isQualified, List<PqErrSysDtls> pqErrSysDtls, Double data, Double channelData, DictDataEnum dataRule) {
|
||||
DetectionData detectionData = new DetectionData();
|
||||
detectionData.setIsData(isQualified);
|
||||
if (CollUtil.isNotEmpty(list)) {
|
||||
@@ -1209,7 +1190,7 @@ public class DetectionServiceImpl {
|
||||
NumberFormat nf = NumberFormat.getInstance();
|
||||
nf.setMaximumFractionDigits(6);
|
||||
nf.setGroupingUsed(false);
|
||||
detectionData.setUnit(unit(valueTypeCode, errSysDtl.getErrorValueType()));
|
||||
detectionData.setUnit(errSysDtl.getErrorUnit());
|
||||
detectionData.setRadius(nf.format(BigDecimal.valueOf(-1.0 / data))
|
||||
+ "~" + nf.format(BigDecimal.valueOf(1.0 / data)));
|
||||
List<Double> qualifiedList = list.stream()
|
||||
@@ -1275,39 +1256,36 @@ public class DetectionServiceImpl {
|
||||
}
|
||||
|
||||
/**
|
||||
* 技术数据误差值(装置返回的值 - 源通道下发的值)
|
||||
* 计算数据误差值(装置返回的值 - 源通道下发的值)
|
||||
*
|
||||
* @param devData
|
||||
* @param channelData
|
||||
* @param errorValueType
|
||||
* @param devData 装置返回值
|
||||
* @param channelData 通道值
|
||||
* @param ratedValue 额定值
|
||||
* @param error
|
||||
* @return
|
||||
*/
|
||||
public BigDecimal devSubtractChannelData(Double devData, Double channelData, Integer errorValueType) {
|
||||
public BigDecimal devSubtractChannelData(Double devData, Double channelData, Double ratedValue, PqErrSysDtls error) {
|
||||
//计算装置值返回值 - 源下发值的数据 = 差值
|
||||
BigDecimal subtract = BigDecimal.valueOf(devData).subtract(BigDecimal.valueOf(channelData));
|
||||
if (subtract.doubleValue() != 0) {
|
||||
switch (errorValueType) {
|
||||
case 2:
|
||||
//下发的谐波电压幅值,返回的是谐波电压含有率,拿(含有率值*基波 - 源下发对应谐波值幅值)/下发的幅值
|
||||
//只有相对值需要%比较,绝对值直接相减就行
|
||||
if (2 == error.getValueType()) {
|
||||
switch (error.getErrorValueType()) {
|
||||
case 0:
|
||||
//下发的谐波电压幅值,返回的是谐波电压含有率,拿(含有率值*基波 - 源下发对应谐波值幅值)/ 额定值
|
||||
return subtract.multiply(BigDecimal.valueOf(100))
|
||||
.divide(BigDecimal.valueOf(ratedValue), 4, RoundingMode.HALF_UP);
|
||||
case 1:
|
||||
//todo 当谐波电压和间谐波电压默认都是按照相对值误差进行计算(用户关心的是含有率)
|
||||
//下发的谐波电压幅值,返回的是谐波电压含有率,拿(含有率值*基波 - 源下发对应谐波值幅值)/ 下发的幅值
|
||||
return subtract.multiply(BigDecimal.valueOf(100))
|
||||
.divide(BigDecimal.valueOf(channelData), 4, RoundingMode.HALF_UP);
|
||||
case 3:
|
||||
//下发的谐波电压幅值,返回的是谐波电压含有率,拿(含有率值*基波 - 源下发对应谐波值幅值)/装置返回值
|
||||
return subtract.multiply(BigDecimal.valueOf(100))
|
||||
.divide(BigDecimal.valueOf(devData), 4, RoundingMode.HALF_UP);
|
||||
}
|
||||
return subtract;
|
||||
}
|
||||
return BigDecimal.valueOf(0);
|
||||
}
|
||||
|
||||
public BigDecimal divide(Double devData, Double channelData) {
|
||||
return BigDecimal.valueOf(devData)
|
||||
.divide(BigDecimal.valueOf(channelData), 4, RoundingMode.HALF_UP);
|
||||
|
||||
return subtract;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于计算误差体系的范围的
|
||||
* 用于计算误差体系的范围的(0:标称值 1:谐波值 2:值类型)
|
||||
*
|
||||
* @param value 误差值
|
||||
* @param ratedData 额定值
|
||||
@@ -1334,27 +1312,37 @@ public class DetectionServiceImpl {
|
||||
|
||||
/**
|
||||
* 用于计算最大误差值的范围的
|
||||
* (2绝对值-值比较(默认) 0绝对值-标称值(额定电压) 1绝对值-标准值(源下发直谐波如:H2) 0相对值-标称值 1相对值-标准值)
|
||||
*
|
||||
* @param errorValue 误差值
|
||||
* @param ratedData 额定值
|
||||
* @param harmData 谐波下发值(百分数->含油率)
|
||||
* @param type 误差值类型
|
||||
* @param error 最大误差值对象
|
||||
* @param ratedData 额定值
|
||||
* @param harmData 谐波下发值(百分数->含油率)
|
||||
* @return
|
||||
*/
|
||||
public Double maxErrorMultiply(Double errorValue, Double ratedData, Double harmData, Integer type) {
|
||||
if (ObjectUtil.isNotNull(errorValue)) {
|
||||
switch (type) {
|
||||
public Double maxErrorMultiply(PqErrSysDtls error, Double ratedData, Double harmData) {
|
||||
Double errorValue = error.getMaxErrorValue();
|
||||
//1绝对值
|
||||
if (1 == error.getValueType()) {
|
||||
switch (error.getErrorValueType()) {
|
||||
//绝对值-标称值= 最大误差值 * 额定电压
|
||||
case 0:
|
||||
return BigDecimal.valueOf(errorValue).multiply(BigDecimal.valueOf(ratedData))
|
||||
.setScale(4, RoundingMode.HALF_UP).doubleValue();
|
||||
case 2:
|
||||
case 3:
|
||||
//绝对值-标准值 = 最大误差值 * 谐波下发值
|
||||
case 1:
|
||||
return BigDecimal.valueOf(errorValue).multiply(BigDecimal.valueOf(harmData))
|
||||
.setScale(4, RoundingMode.HALF_UP).doubleValue();
|
||||
}
|
||||
}
|
||||
//2相对值
|
||||
if (2 == error.getValueType()) {
|
||||
switch (error.getErrorValueType()) {
|
||||
//相对值-标称值 | 相对值-标准值 = 最大误差值 * 100
|
||||
case 0:
|
||||
case 1:
|
||||
return BigDecimal.valueOf(errorValue).multiply(BigDecimal.valueOf(100))
|
||||
.setScale(4, RoundingMode.HALF_UP).doubleValue();
|
||||
default:
|
||||
return errorValue;
|
||||
}
|
||||
|
||||
}
|
||||
return errorValue;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user