This commit is contained in:
wr
2025-01-13 13:59:48 +08:00
parent fd74a00de9
commit f971c3f2fa
11 changed files with 287 additions and 127 deletions

View File

@@ -1,6 +1,5 @@
package com.njcn.gather.detection.handler; package com.njcn.gather.detection.handler;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum; import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum;
@@ -287,11 +286,11 @@ public class SocketSourceResponseService {
int readData; int readData;
if(sourceIssue.getType().equals(DicDataEnum.F.getCode())){ if(sourceIssue.getType().equals(DicDataEnum.F.getCode())){
ignoreCount = 1; ignoreCount = 1;
readData = 2; readData = 1;
socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_01.getValue()); socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_01.getValue());
}else if(sourceIssue.getType().equals(DicDataEnum.HP.getCode())){ }else if(sourceIssue.getType().equals(DicDataEnum.HP.getCode())){
ignoreCount = 2; ignoreCount = 2;
readData = 5; readData = 3;
socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_01.getValue()); socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_01.getValue());
}else if(DicDataEnum.VOLTAGE.getCode().equals(sourceIssue.getType())){ }else if(DicDataEnum.VOLTAGE.getCode().equals(sourceIssue.getType())){
ignoreCount = 5; ignoreCount = 5;

View File

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

View File

@@ -30,6 +30,9 @@ public class TreeDataVO {
* 测试相 * 测试相
*/ */
private Integer index; private Integer index;
private String scriptType;
/** /**
* 是否检测合格 * 是否检测合格
*/ */

View File

@@ -172,6 +172,7 @@ public class ResultServiceImpl implements IResultService {
if (finalResultMap.containsKey(index)) { if (finalResultMap.containsKey(index)) {
TreeDataVO dtlType = new TreeDataVO(); TreeDataVO dtlType = new TreeDataVO();
dtlType.setIndex(index); dtlType.setIndex(index);
dtlType.setScriptType(scriptDtlIndexList.get(0).getScriptType());
ratedScriptTypeName(scriptDtlIndexList, isValueType, dtlType, dictTree); ratedScriptTypeName(scriptDtlIndexList, isValueType, dtlType, dictTree);
dtlType.setSourceDesc(getStringBuffer(scriptDtlIndexList, isValueType).toString()); dtlType.setSourceDesc(getStringBuffer(scriptDtlIndexList, isValueType).toString());
dtlType.setFly(conform(finalResultMap.get(index))); dtlType.setFly(conform(finalResultMap.get(index)));

View File

@@ -0,0 +1,42 @@
package com.njcn.gather.device.err.pojo.vo;
import com.njcn.gather.device.err.pojo.po.PqErrSysDtls;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @author caozehui
* @date 2024-11-27
*/
@Data
public class ErrDtlsCheckDataVO implements Serializable {
/**
* Id
*/
private String checkDataId;
private String valueType;
/**
*
*/
private String valueTypeCode;
/**
* 值
*/
private Double value;
/**
*
*/
private List<PqErrSysDtls> errSysDtls;
}

View File

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.gather.device.err.pojo.param.PqErrSysDtlsParam; import com.njcn.gather.device.err.pojo.param.PqErrSysDtlsParam;
import com.njcn.gather.device.err.pojo.param.PqErrSysParam; 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.po.PqErrSysDtls;
import com.njcn.gather.device.err.pojo.vo.ErrDtlsCheckDataVO;
import java.util.List; import java.util.List;
@@ -49,4 +50,11 @@ public interface IPqErrSysDtlsService extends IService<PqErrSysDtls> {
* @return * @return
*/ */
List<PqErrSysDtls> listPqErrSysDtlsByPqErrSysIdAndTypes(PqErrSysParam.DetectionParam param); List<PqErrSysDtls> listPqErrSysDtlsByPqErrSysIdAndTypes(PqErrSysParam.DetectionParam param);
/**
* 根据查询误差体系
* @param param 误差体系id
* @return
*/
List<ErrDtlsCheckDataVO> listByPqErrSysIdAndTypes(PqErrSysParam.DetectionParam param);
} }

View File

@@ -1,5 +1,6 @@
package com.njcn.gather.device.err.service.impl; package com.njcn.gather.device.err.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper;
@@ -7,8 +8,10 @@ import com.njcn.gather.device.err.mapper.PqErrSysDtlsMapper;
import com.njcn.gather.device.err.pojo.param.PqErrSysDtlsParam; import com.njcn.gather.device.err.pojo.param.PqErrSysDtlsParam;
import com.njcn.gather.device.err.pojo.param.PqErrSysParam; 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.po.PqErrSysDtls;
import com.njcn.gather.device.err.pojo.vo.ErrDtlsCheckDataVO;
import com.njcn.gather.device.err.service.IPqErrSysDtlsService; import com.njcn.gather.device.err.service.IPqErrSysDtlsService;
import com.njcn.gather.device.script.pojo.param.PqScriptCheckDataParam; import com.njcn.gather.device.script.pojo.param.PqScriptCheckDataParam;
import com.njcn.gather.device.script.pojo.po.PqScriptCheckData;
import com.njcn.gather.device.script.service.IPqScriptCheckDataService; import com.njcn.gather.device.script.service.IPqScriptCheckDataService;
import com.njcn.gather.system.dictionary.pojo.po.DictTree; import com.njcn.gather.system.dictionary.pojo.po.DictTree;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -17,9 +20,8 @@ import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.*;
import java.util.Collections; import java.util.stream.Collectors;
import java.util.List;
/** /**
* @author caozehui * @author caozehui
@@ -86,4 +88,39 @@ public class PqErrSysDtlsServiceImpl extends ServiceImpl<PqErrSysDtlsMapper, PqE
); );
} }
@Override
public List<ErrDtlsCheckDataVO> listByPqErrSysIdAndTypes(PqErrSysParam.DetectionParam param) {
List<ErrDtlsCheckDataVO> info=new ArrayList<>();
PqScriptCheckDataParam checkDataParam = new PqScriptCheckDataParam();
checkDataParam.setScriptId(param.getScriptId());
checkDataParam.setIndex(param.getIndex());
List<PqScriptCheckData> list = pqScriptCheckDataService.listCheckDataCode(checkDataParam);
List<String> valueType = list.stream().filter(x->x.getErrorFlag()!=0).map(PqScriptCheckData::getValueType).collect(Collectors.toList());
Map<String, List<PqErrSysDtls>> errMap =new HashMap<>(3);
if(CollUtil.isNotEmpty(valueType)){
List<PqErrSysDtls> errSysDtls = this.list(new MPJLambdaWrapper<PqErrSysDtls>().selectAll(PqErrSysDtls.class)
.selectAll(PqErrSysDtls.class)
.selectAs(DictTree::getCode, PqErrSysDtls::getScriptCode)
.leftJoin(DictTree.class, DictTree::getId, PqErrSysDtls::getScriptType)
.eq(PqErrSysDtls::getErrorSysId, param.getErrorSysId())
.in(PqErrSysDtls::getScriptType, valueType)
);
errMap= errSysDtls.stream().collect(Collectors.groupingBy(PqErrSysDtls::getScriptType));
}
ErrDtlsCheckDataVO dataVO;
for (PqScriptCheckData script : list) {
dataVO=new ErrDtlsCheckDataVO();
dataVO.setCheckDataId(script.getScriptId());
dataVO.setValueTypeCode(script.getValueTypeCode());
dataVO.setValueType(script.getValueType());
dataVO.setValue(script.getValue());
if(errMap.containsKey(script.getValueType())){
dataVO.setErrSysDtls(errMap.get(script.getValueType()));
}
info.add(dataVO);
}
return info;
}
} }

View File

@@ -34,6 +34,9 @@ public class PqScriptCheckData implements Serializable {
*/ */
private String valueType; private String valueType;
@TableField(exist = false)
private String valueTypeCode;
/** /**
* 数据类型,来源于字典表,包括实时数据(3s)、分钟统计数据(1min/3min/5min/10min)等 * 数据类型,来源于字典表,包括实时数据(3s)、分钟统计数据(1min/3min/5min/10min)等
*/ */
@@ -60,6 +63,10 @@ public class PqScriptCheckData implements Serializable {
*/ */
private Integer enable; private Integer enable;
/**
* 是否参与误差比较0-不参与 1-参与
*/
@TableField("Error_Flag")
private Integer errorFlag;
} }

View File

@@ -26,6 +26,14 @@ public interface IPqScriptCheckDataService extends IService<PqScriptCheckData> {
List<String> getValueType(PqScriptCheckDataParam param); List<String> getValueType(PqScriptCheckDataParam param);
Map<String,String> getValueTypeMap(String scriptId); Map<String,String> getValueTypeMap(String scriptId);
/**
* 获取监测脚本code
* @param param
* @return
*/
List<PqScriptCheckData> listCheckDataCode(PqScriptCheckDataParam param);
} }

View File

@@ -80,5 +80,17 @@ public class PqScriptCheckDataServiceImpl extends ServiceImpl<PqScriptCheckDataM
return map; return map;
} }
@Override
public List<PqScriptCheckData> listCheckDataCode(PqScriptCheckDataParam param) {
MPJLambdaWrapper<PqScriptCheckData> queryWrapper = new MPJLambdaWrapper<>();
queryWrapper.selectAll(PqScriptCheckData.class)
.leftJoin(DictTree.class, DictTree::getId, PqScriptCheckData::getValueType)
.selectAs(DictTree::getCode, PqScriptCheckData::getValueTypeCode)
.eq(PqScriptCheckData::getScriptId, param.getScriptId())
.eq(PqScriptCheckData::getIndex, param.getIndex())
.eq(PqScriptCheckData::getEnable, DataStateEnum.ENABLE.getCode());
return this.getBaseMapper().selectJoinList(PqScriptCheckData.class, queryWrapper);
}
} }

View File

@@ -219,9 +219,9 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
queryWrapper.selectAll(PqScriptDtls.class) queryWrapper.selectAll(PqScriptDtls.class)
.selectAs(DictTree::getCode, PqScriptDtls::getScriptCode) .selectAs(DictTree::getCode, PqScriptDtls::getScriptCode)
.leftJoin(DictTree.class, DictTree::getId, PqScriptDtls::getScriptType) .leftJoin(DictTree.class, DictTree::getId, PqScriptDtls::getScriptType)
// .ge(PqScriptDtls::getIndex, 14) // .ge(PqScriptDtls::getIndex, 9)
// .ge(PqScriptDtls::getIndex, 30) // .ge(PqScriptDtls::getIndex, 48)
// .eq(PqScriptDtls::getIndex, 30) // .in(PqScriptDtls::getIndex, Arrays.asList(30,101,105))
.eq(PqScriptCheckData::getEnable, DataStateEnum.ENABLE.getCode()); .eq(PqScriptCheckData::getEnable, DataStateEnum.ENABLE.getCode());
if (isPhaseSequence.equals(CommonEnum.PHASE_TEST.getValue())) { if (isPhaseSequence.equals(CommonEnum.PHASE_TEST.getValue())) {