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

View File

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

View File

@@ -172,6 +172,7 @@ public class ResultServiceImpl implements IResultService {
if (finalResultMap.containsKey(index)) {
TreeDataVO dtlType = new TreeDataVO();
dtlType.setIndex(index);
dtlType.setScriptType(scriptDtlIndexList.get(0).getScriptType());
ratedScriptTypeName(scriptDtlIndexList, isValueType, dtlType, dictTree);
dtlType.setSourceDesc(getStringBuffer(scriptDtlIndexList, isValueType).toString());
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.PqErrSysParam;
import com.njcn.gather.device.err.pojo.po.PqErrSysDtls;
import com.njcn.gather.device.err.pojo.vo.ErrDtlsCheckDataVO;
import java.util.List;
@@ -49,4 +50,11 @@ public interface IPqErrSysDtlsService extends IService<PqErrSysDtls> {
* @return
*/
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;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
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.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.param.PqScriptCheckDataParam;
import com.njcn.gather.device.script.pojo.po.PqScriptCheckData;
import com.njcn.gather.device.script.service.IPqScriptCheckDataService;
import com.njcn.gather.system.dictionary.pojo.po.DictTree;
import lombok.RequiredArgsConstructor;
@@ -17,9 +20,8 @@ import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
* @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;
@TableField(exist = false)
private String valueTypeCode;
/**
* 数据类型,来源于字典表,包括实时数据(3s)、分钟统计数据(1min/3min/5min/10min)等
*/
@@ -60,6 +63,10 @@ public class PqScriptCheckData implements Serializable {
*/
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);
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;
}
@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)
.selectAs(DictTree::getCode, PqScriptDtls::getScriptCode)
.leftJoin(DictTree.class, DictTree::getId, PqScriptDtls::getScriptType)
// .ge(PqScriptDtls::getIndex, 14)
// .ge(PqScriptDtls::getIndex, 30)
// .eq(PqScriptDtls::getIndex, 30)
// .ge(PqScriptDtls::getIndex, 9)
// .ge(PqScriptDtls::getIndex, 48)
// .in(PqScriptDtls::getIndex, Arrays.asList(30,101,105))
.eq(PqScriptCheckData::getEnable, DataStateEnum.ENABLE.getCode());
if (isPhaseSequence.equals(CommonEnum.PHASE_TEST.getValue())) {