This commit is contained in:
wr
2024-12-30 09:34:02 +08:00
parent 7f5c132573
commit 82afff2a6e
5 changed files with 71 additions and 30 deletions

View File

@@ -15,7 +15,7 @@ public class DetectionData {
/** /**
* 第几次谐波 * 第几次谐波
*/ */
private Integer num; private Double num;
/** /**
* 原始数据 * 原始数据

View File

@@ -4,6 +4,7 @@ package com.njcn.gather.detection.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.njcn.gather.detection.pojo.po.DevData; import com.njcn.gather.detection.pojo.po.DevData;
import com.njcn.gather.detection.pojo.vo.DetectionData; import com.njcn.gather.detection.pojo.vo.DetectionData;
import com.njcn.gather.device.err.pojo.param.PqErrSysParam; import com.njcn.gather.device.err.pojo.param.PqErrSysParam;
@@ -89,9 +90,39 @@ public class DetectionServiceImpl {
case "I": case "I":
return isQualified(dev, devIdMapComm, pqErrSysDtls, I, sourceIssue, dataRule, "IRMS").getResultFlag(); return isQualified(dev, devIdMapComm, pqErrSysDtls, I, sourceIssue, dataRule, "IRMS").getResultFlag();
/** /**
* 谐波 * 谐波电压
*/ */
case "H": case "HV":
return isHarmQualified(dev, devIdMapComm, pqErrSysDtls, U, sourceIssue, DictDataEnum.AT_WILL_VALUE, 2).getResultFlag();
/**
* 谐波电流
*/
case "HI":
return isHarmQualified(dev, devIdMapComm, pqErrSysDtls, I, sourceIssue, DictDataEnum.AT_WILL_VALUE, 2).getResultFlag();
/**
* 谐波有功功率
*/
case "HP":
break;
/**
* 间谐波电压
*/
case "HSV":
return isHarmQualified(dev, devIdMapComm, pqErrSysDtls, U, sourceIssue, DictDataEnum.AT_WILL_VALUE, 2).getResultFlag();
/**
* 间谐波电流
*/
case "HSI":
return isHarmQualified(dev, devIdMapComm, pqErrSysDtls, I, sourceIssue, DictDataEnum.AT_WILL_VALUE, 2).getResultFlag();
/**
* 三相电压不平衡度
*/
case "IMBV":
break;
/**
* 三相电流不平衡度
*/
case "IMBA":
break; break;
/** /**
* 功率 * 功率
@@ -259,7 +290,7 @@ public class DetectionServiceImpl {
* @return * @return
*/ */
public AdHarmonicResult isHarmQualified(List<DevData> dev, Map<String, String> devIdMapComm, List<PqErrSysDtls> pqErrSysDtls, String type, SourceIssue sourceIssue, DictDataEnum dataRule, Integer num) { public AdHarmonicResult isHarmQualified(List<DevData> dev, Map<String, String> devIdMapComm, List<PqErrSysDtls> pqErrSysDtls, String type, SourceIssue sourceIssue, DictDataEnum dataRule, Integer num) {
Map<String, Map<Integer, List<Double>>> devMap = devHarmListMap(dev, sourceIssue, dataRule, num); Map<String, Map<Double, List<Double>>> devMap = devHarmListMap(dev, sourceIssue, dataRule, num);
Double fData = 1.0; Double fData = 1.0;
if (U.equals(type)) { if (U.equals(type)) {
fData = sourceIssue.getFUn(); fData = sourceIssue.getFUn();
@@ -297,11 +328,11 @@ public class DetectionServiceImpl {
} }
private void reflectHarmonic(String phase, List<DetectionData> integerBooleanA, AdHarmonicResult harmonicResult) { private void reflectHarmonic(String phase, List<DetectionData> integerBooleanA, AdHarmonicResult harmonicResult) {
Map<Integer, DetectionData> dataMap = integerBooleanA.stream().collect(Collectors.toMap(DetectionData::getNum, Function.identity())); Map<Double, DetectionData> dataMap = integerBooleanA.stream().collect(Collectors.toMap(DetectionData::getNum, Function.identity()));
dataMap.forEach((key, value) -> { dataMap.forEach((key, value) -> {
try { try {
// 设置 id 字段 // 设置 id 字段
Field idField = AdHarmonicResult.class.getDeclaredField(phase + "Value" + key); Field idField = AdHarmonicResult.class.getDeclaredField(phase + "Value" + key.intValue());
idField.setAccessible(true); idField.setAccessible(true);
if (ObjectUtil.isNull(value.getIsData())) { if (ObjectUtil.isNull(value.getIsData())) {
idField.set(harmonicResult, value.getData()); idField.set(harmonicResult, value.getData());
@@ -366,14 +397,14 @@ public class DetectionServiceImpl {
* @param fData * @param fData
* @return * @return
*/ */
public List<DetectionData> harmRangeComparison(List<PqErrSysDtls> pqErrSysDtls, String type, String phase, SourceIssue sourceIssue, DictDataEnum dataRule, Map<Integer, List<Double>> devMap, Double fData) { public List<DetectionData> harmRangeComparison(List<PqErrSysDtls> pqErrSysDtls, String type, String phase, SourceIssue sourceIssue, DictDataEnum dataRule, Map<Double, List<Double>> devMap, Double fData) {
List<DetectionData> info = new ArrayList<>(); List<DetectionData> info = new ArrayList<>();
//根据谐波几次相值/额定值 //根据谐波几次相值/额定值
Map<Integer, Double> issueHarmMap = sourceIssue.getChannelList().stream() Map<Double, Double> issueHarmMap = sourceIssue.getChannelList().stream()
.filter(x -> (type + phase.toLowerCase()).equals(x.getChannelType())) .filter(x -> (type + phase.toLowerCase()).equals(x.getChannelType()))
.flatMap(x -> x.getHarmList().stream()) .flatMap(x -> x.getHarmList().stream())
.collect(Collectors.toMap(SourceIssue.ChannelListDTO.HarmModel::getHarm, x -> x.getFApm())); .collect(Collectors.toMap(SourceIssue.ChannelListDTO.HarmModel::getHarm, x -> x.getFApm()));
Map<Integer, PqErrSysDtls> errSysDtlMap = new LinkedHashMap<>(); Map<Double, PqErrSysDtls> errSysDtlMap = new LinkedHashMap<>();
issueHarmMap.forEach((key, value) -> { issueHarmMap.forEach((key, value) -> {
//获得误差体系 //获得误差体系
List<PqErrSysDtls> errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(x.getStartValue(), List<PqErrSysDtls> errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(x.getStartValue(),
@@ -447,11 +478,18 @@ public class DetectionServiceImpl {
} }
public Map<String, Map<Integer, List<Double>>> devHarmListMap(List<DevData> dev, SourceIssue sourceIssue, DictDataEnum dataRule, Integer num) { public Map<String, Map<Double, List<Double>>> devHarmListMap(List<DevData> dev, SourceIssue sourceIssue, DictDataEnum dataRule, Integer num) {
Map<String, Map<Integer, List<Double>>> map = new HashMap<>(3); Map<String, Map<Double, List<Double>>> map = new HashMap<>(3);
List<Integer> harmNum = sourceIssue.getChannelList().stream() List<Double> harmNum;
.flatMap(x -> x.getHarmList().stream().map(f -> f.getHarm())) if (1 == num) {
.sorted().distinct().collect(Collectors.toList()); harmNum = sourceIssue.getChannelList().stream()
.flatMap(x -> x.getInharmList().stream().map(f -> f.getInharm()))
.sorted().distinct().collect(Collectors.toList());
} else {
harmNum = sourceIssue.getChannelList().stream()
.flatMap(x -> x.getHarmList().stream().map(f -> f.getHarm()))
.sorted().distinct().collect(Collectors.toList());
}
for (DevData devData : dev) { for (DevData devData : dev) {
DevData.SqlDataDTO fund = devData.getSqlData().stream().collect(Collectors.toList()).stream().findFirst().get(); DevData.SqlDataDTO fund = devData.getSqlData().stream().collect(Collectors.toList()).stream().findFirst().get();
DevData.SqlDataHarmDTO harm = devData.getSqlDataHarm().stream().filter(x -> 49 == x.getNum()).collect(Collectors.toList()).stream().findFirst().get(); DevData.SqlDataHarmDTO harm = devData.getSqlDataHarm().stream().filter(x -> 49 == x.getNum()).collect(Collectors.toList()).stream().findFirst().get();
@@ -609,36 +647,36 @@ public class DetectionServiceImpl {
* @param harm 基波信息 * @param harm 基波信息
* @param fund 2-50次谐波信息 * @param fund 2-50次谐波信息
*/ */
public void harmPut(String type, Map<String, Map<Integer, List<Double>>> map, List<Integer> harmNum, DevData.SqlDataHarmDTO harm, String fund, Integer num) { public void harmPut(String type, Map<String, Map<Double, List<Double>>> map, List<Double> harmNum, DevData.SqlDataHarmDTO harm, String fund, Integer num) {
if (map.containsKey(type)) { if (map.containsKey(type)) {
Map<Integer, List<Double>> integerListMap = map.get(type); Map<Double, List<Double>> integerListMap = map.get(type);
for (Integer i : harmNum) { for (Double i : harmNum) {
if (integerListMap.containsKey(i)) { if (integerListMap.containsKey(i)) {
if (type.equals("A")) { if (type.equals("A")) {
integerListMap.get(i).add(multiply(harm.getList().getA().get(i - num), fund)); integerListMap.get(num!=1?i:i+0.5).add(multiply(harm.getList().getA().get((int) (i - num)), fund));
} }
if (type.equals("B")) { if (type.equals("B")) {
integerListMap.get(i).add(multiply(harm.getList().getB().get(i - num), fund)); integerListMap.get(num!=1?i:i+0.5).add(multiply(harm.getList().getB().get((int) (i - num)), fund));
} }
if (type.equals("C")) { if (type.equals("C")) {
integerListMap.get(i).add(multiply(harm.getList().getC().get(i - num), fund)); integerListMap.get(num!=1?i:i+0.5).add(multiply(harm.getList().getC().get((int) (i - num)), fund));
} }
} }
} }
} else { } else {
Map<Integer, List<Double>> integerListMap = new LinkedHashMap<>(5); Map<Double, List<Double>> integerListMap = new LinkedHashMap<>(5);
for (Integer i : harmNum) { for (Double i : harmNum) {
List<Double> integerList = new ArrayList<>(); List<Double> integerList = new ArrayList<>();
if (type.equals("A")) { if (type.equals("A")) {
integerList.add(multiply(harm.getList().getA().get(i - num), fund)); integerList.add(multiply(harm.getList().getA().get((int) (i - num)), fund));
} }
if (type.equals("B")) { if (type.equals("B")) {
integerList.add(multiply(harm.getList().getB().get(i - num), fund)); integerList.add(multiply(harm.getList().getB().get((int) (i - num)), fund));
} }
if (type.equals("C")) { if (type.equals("C")) {
integerList.add(multiply(harm.getList().getC().get(i - num), fund)); integerList.add(multiply(harm.getList().getC().get((int) (i - num)), fund));
} }
integerListMap.put(i, integerList); integerListMap.put(num!=1?i:i+0.5, integerList);
} }
map.put(type, integerListMap); map.put(type, integerListMap);
} }

View File

@@ -163,7 +163,7 @@ public class SourceIssue {
* 谐波次数 * 谐波次数
*/ */
@JSONField(name = "harm", ordinal = 1) @JSONField(name = "harm", ordinal = 1)
private Integer harm; private Double harm;
/** /**
* 谐波含有率 * 谐波含有率

View File

@@ -43,9 +43,9 @@ public class PqScriptCheckDataServiceImpl extends ServiceImpl<PqScriptCheckDataM
List<PqScriptCheckData> pqScriptCheckData = this.getBaseMapper().selectJoinList(PqScriptCheckData.class, queryWrapper); List<PqScriptCheckData> pqScriptCheckData = this.getBaseMapper().selectJoinList(PqScriptCheckData.class, queryWrapper);
if(CollUtil.isNotEmpty(pqScriptCheckData)){ if(CollUtil.isNotEmpty(pqScriptCheckData)){
if (param.getIsValueTypeName()) { if (param.getIsValueTypeName()) {
return pqScriptCheckData.stream().map(x -> x.getDataType() + "$" + x.getValueType()).collect(Collectors.toList()); return pqScriptCheckData.stream().map(x -> x.getDataType() + "$" + x.getValueType()).distinct().collect(Collectors.toList());
} else { } else {
return pqScriptCheckData.stream().map(PqScriptCheckData::getValueType).collect(Collectors.toList()); return pqScriptCheckData.stream().map(PqScriptCheckData::getValueType).distinct().collect(Collectors.toList());
} }
} }
return new ArrayList<>(); return new ArrayList<>();

View File

@@ -139,6 +139,9 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
* VOL-Harm:谐波对电压测量的影响 * VOL-Harm:谐波对电压测量的影响
*/ */
List<PqScriptDtls> freq = value.stream().filter(x -> FREQ.equals(x.getValueType())).collect(Collectors.toList()); List<PqScriptDtls> freq = value.stream().filter(x -> FREQ.equals(x.getValueType())).collect(Collectors.toList());
if(key==6){
System.out.println();
}
if (CollUtil.isNotEmpty(freq)) { if (CollUtil.isNotEmpty(freq)) {
PqScriptDtls freqDtls = freq.get(0); PqScriptDtls freqDtls = freq.get(0);
SourceIssue issue = new SourceIssue(); SourceIssue issue = new SourceIssue();
@@ -343,7 +346,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
SourceIssue.ChannelListDTO.HarmModel harmModel; SourceIssue.ChannelListDTO.HarmModel harmModel;
for (PqScriptDtls pqScriptDtls : phaseHarmVList) { for (PqScriptDtls pqScriptDtls : phaseHarmVList) {
harmModel = new SourceIssue.ChannelListDTO.HarmModel(); harmModel = new SourceIssue.ChannelListDTO.HarmModel();
harmModel.setHarm(pqScriptDtls.getHarmNum().intValue()); harmModel.setHarm(pqScriptDtls.getHarmNum().doubleValue());
harmModel.setFApm(pqScriptDtls.getValue()); harmModel.setFApm(pqScriptDtls.getValue());
harmModel.setFPhase(pqScriptDtls.getAngle()); harmModel.setFPhase(pqScriptDtls.getAngle());
info.add(harmModel); info.add(harmModel);