From f971c3f2faeb263ac0be05235ab2d979a48075cd Mon Sep 17 00:00:00 2001 From: wr <1754607820@qq.com> Date: Mon, 13 Jan 2025 13:59:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/SocketSourceResponseService.java | 5 +- .../service/impl/DetectionServiceImpl.java | 277 ++++++++++-------- .../gather/result/pojo/vo/TreeDataVO.java | 3 + .../service/impl/ResultServiceImpl.java | 1 + .../err/pojo/vo/ErrDtlsCheckDataVO.java | 42 +++ .../err/service/IPqErrSysDtlsService.java | 8 + .../service/impl/PqErrSysDtlsServiceImpl.java | 43 ++- .../script/pojo/po/PqScriptCheckData.java | 9 +- .../service/IPqScriptCheckDataService.java | 8 + .../impl/PqScriptCheckDataServiceImpl.java | 12 + .../service/impl/PqScriptDtlsServiceImpl.java | 6 +- 11 files changed, 287 insertions(+), 127 deletions(-) create mode 100644 device/src/main/java/com/njcn/gather/device/err/pojo/vo/ErrDtlsCheckDataVO.java diff --git a/detection/src/main/java/com/njcn/gather/detection/handler/SocketSourceResponseService.java b/detection/src/main/java/com/njcn/gather/detection/handler/SocketSourceResponseService.java index a3203ce5..10d0571b 100644 --- a/detection/src/main/java/com/njcn/gather/detection/handler/SocketSourceResponseService.java +++ b/detection/src/main/java/com/njcn/gather/detection/handler/SocketSourceResponseService.java @@ -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; diff --git a/detection/src/main/java/com/njcn/gather/detection/service/impl/DetectionServiceImpl.java b/detection/src/main/java/com/njcn/gather/detection/service/impl/DetectionServiceImpl.java index 4fe36722..ac5b1cd6 100644 --- a/detection/src/main/java/com/njcn/gather/detection/service/impl/DetectionServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/detection/service/impl/DetectionServiceImpl.java @@ -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 = pqErrSysDtlsService.listPqErrSysDtlsByPqErrSysIdAndTypes(param); + List 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 dev, - Map devIdMapComm, - List pqErrSysDtls, - String type, - SourceIssue sourceIssue, - DictDataEnum dataRule, - String code) { - Map> 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 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 dev, + Map devIdMapComm, + List errDtlsCheckData, + String type, + SourceIssue sourceIssue, + DictDataEnum dataRule, + String code) { + List info = new ArrayList<>(); + List devValueTypeList = sourceIssue.getDevValueTypeList(); + for (String s : devValueTypeList) { + Map> 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 = 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 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 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 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 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 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 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 dev, Map devIdMapComm, - List pqErrSysDtls, + List errDtlsCheckData, String type, SourceIssue sourceIssue, DictDataEnum dataRule, @@ -273,16 +287,23 @@ public class DetectionServiceImpl { fData = sourceIssue.getFIn() * sourceIssue.getFUn() * 0.01; } - List integerBooleanA = harmRangeComparison(pqErrSysDtls, type, TYPE_A, sourceIssue, dataRule, devMap.get(TYPE_A), fData, num); - List integerBooleanB = harmRangeComparison(pqErrSysDtls, type, TYPE_B, sourceIssue, dataRule, devMap.get(TYPE_B), fData, num); - List 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 = 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 integerBooleanA = harmRangeComparison(pqErrSysDtls, type, TYPE_A, sourceIssue, dataRule, devMap.get(TYPE_A), fData, num); + List integerBooleanB = harmRangeComparison(pqErrSysDtls, type, TYPE_B, sourceIssue, dataRule, devMap.get(TYPE_B), fData, num); + List 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 dev, Map devIdMapComm, - List pqErrSysDtls, + List 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 = 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 dev, Map devIdMapComm, - List pqErrSysDtls, + List errDtlsCheckData, SourceIssue sourceIssue, DictDataEnum dataRule, String code @@ -390,13 +416,11 @@ public class DetectionServiceImpl { Map> dur = devListMap(dev, dataRule, DUR); //理论上根据检测脚本,能知道误差体系,可以知道多个误差体系 //暂态电压下多少就是多少 - List magErrList = pqErrSysDtls.stream().filter(x -> MAG.equals(x.getScriptCode())).collect(Collectors.toList()); - List durErrList = pqErrSysDtls.stream().filter(x -> DUR.equals(x.getScriptCode())).collect(Collectors.toList()); + List magErrList = errDtlsCheckData.stream().filter(x -> MAG.equals(x.getValueTypeCode())).collect(Collectors.toList()); + List 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 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> mag, - List magErrList, + List errDtlsCheckData, Double fData, String dur ) { @@ -436,6 +460,13 @@ public class DetectionServiceImpl { result.setScriptId(sourceIssue.getScriptId()); result.setSort(sourceIssue.getIndex()); result.setDataType("avg"); + List 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 channelTypeAList = sourceIssue.getChannelList().stream() .filter(x -> ("Ua").equals(x.getChannelType())) @@ -481,6 +512,10 @@ public class DetectionServiceImpl { private Integer setResultFlag(List numbers) { List isData = numbers.stream().filter(x -> ObjectUtil.isNotNull(x.getData())).map(DetectionData::getIsData).distinct().collect(Collectors.toList()); + return getInteger(isData); + } + + private static Integer getInteger(List isData) { if (CollUtil.isNotEmpty(isData)) { if (isData.size() > 1) { if (isData.contains(4)) { @@ -510,21 +545,21 @@ public class DetectionServiceImpl { List list = sqlDataDTOS.stream().map(DevData.SqlDataDTO::getList).collect(Collectors.toList()); List 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 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 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 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 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); } diff --git a/detection/src/main/java/com/njcn/gather/result/pojo/vo/TreeDataVO.java b/detection/src/main/java/com/njcn/gather/result/pojo/vo/TreeDataVO.java index 79aed2bd..f51a84e1 100644 --- a/detection/src/main/java/com/njcn/gather/result/pojo/vo/TreeDataVO.java +++ b/detection/src/main/java/com/njcn/gather/result/pojo/vo/TreeDataVO.java @@ -30,6 +30,9 @@ public class TreeDataVO { * 测试相 */ private Integer index; + + private String scriptType; + /** * 是否检测合格 */ diff --git a/detection/src/main/java/com/njcn/gather/result/service/impl/ResultServiceImpl.java b/detection/src/main/java/com/njcn/gather/result/service/impl/ResultServiceImpl.java index 2803a616..2eaeb8f7 100644 --- a/detection/src/main/java/com/njcn/gather/result/service/impl/ResultServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/result/service/impl/ResultServiceImpl.java @@ -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))); diff --git a/device/src/main/java/com/njcn/gather/device/err/pojo/vo/ErrDtlsCheckDataVO.java b/device/src/main/java/com/njcn/gather/device/err/pojo/vo/ErrDtlsCheckDataVO.java new file mode 100644 index 00000000..46ed8090 --- /dev/null +++ b/device/src/main/java/com/njcn/gather/device/err/pojo/vo/ErrDtlsCheckDataVO.java @@ -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 errSysDtls; + + + +} + diff --git a/device/src/main/java/com/njcn/gather/device/err/service/IPqErrSysDtlsService.java b/device/src/main/java/com/njcn/gather/device/err/service/IPqErrSysDtlsService.java index 7848c7af..06bf0ddb 100644 --- a/device/src/main/java/com/njcn/gather/device/err/service/IPqErrSysDtlsService.java +++ b/device/src/main/java/com/njcn/gather/device/err/service/IPqErrSysDtlsService.java @@ -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 { * @return */ List listPqErrSysDtlsByPqErrSysIdAndTypes(PqErrSysParam.DetectionParam param); + + /** + * 根据查询误差体系 + * @param param 误差体系id + * @return + */ + List listByPqErrSysIdAndTypes(PqErrSysParam.DetectionParam param); } diff --git a/device/src/main/java/com/njcn/gather/device/err/service/impl/PqErrSysDtlsServiceImpl.java b/device/src/main/java/com/njcn/gather/device/err/service/impl/PqErrSysDtlsServiceImpl.java index e5c6d9e6..8407e79a 100644 --- a/device/src/main/java/com/njcn/gather/device/err/service/impl/PqErrSysDtlsServiceImpl.java +++ b/device/src/main/java/com/njcn/gather/device/err/service/impl/PqErrSysDtlsServiceImpl.java @@ -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 listByPqErrSysIdAndTypes(PqErrSysParam.DetectionParam param) { + List info=new ArrayList<>(); + PqScriptCheckDataParam checkDataParam = new PqScriptCheckDataParam(); + checkDataParam.setScriptId(param.getScriptId()); + checkDataParam.setIndex(param.getIndex()); + List list = pqScriptCheckDataService.listCheckDataCode(checkDataParam); + + List valueType = list.stream().filter(x->x.getErrorFlag()!=0).map(PqScriptCheckData::getValueType).collect(Collectors.toList()); + Map> errMap =new HashMap<>(3); + if(CollUtil.isNotEmpty(valueType)){ + List errSysDtls = this.list(new MPJLambdaWrapper().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; + } } diff --git a/device/src/main/java/com/njcn/gather/device/script/pojo/po/PqScriptCheckData.java b/device/src/main/java/com/njcn/gather/device/script/pojo/po/PqScriptCheckData.java index ec4f74c7..6f0f0b24 100644 --- a/device/src/main/java/com/njcn/gather/device/script/pojo/po/PqScriptCheckData.java +++ b/device/src/main/java/com/njcn/gather/device/script/pojo/po/PqScriptCheckData.java @@ -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; } \ No newline at end of file diff --git a/device/src/main/java/com/njcn/gather/device/script/service/IPqScriptCheckDataService.java b/device/src/main/java/com/njcn/gather/device/script/service/IPqScriptCheckDataService.java index b671e202..e616d743 100644 --- a/device/src/main/java/com/njcn/gather/device/script/service/IPqScriptCheckDataService.java +++ b/device/src/main/java/com/njcn/gather/device/script/service/IPqScriptCheckDataService.java @@ -26,6 +26,14 @@ public interface IPqScriptCheckDataService extends IService { List getValueType(PqScriptCheckDataParam param); + Map getValueTypeMap(String scriptId); + /** + * 获取监测脚本code + * @param param + * @return + */ + List listCheckDataCode(PqScriptCheckDataParam param); + } diff --git a/device/src/main/java/com/njcn/gather/device/script/service/impl/PqScriptCheckDataServiceImpl.java b/device/src/main/java/com/njcn/gather/device/script/service/impl/PqScriptCheckDataServiceImpl.java index 2558f25b..78c7ccf7 100644 --- a/device/src/main/java/com/njcn/gather/device/script/service/impl/PqScriptCheckDataServiceImpl.java +++ b/device/src/main/java/com/njcn/gather/device/script/service/impl/PqScriptCheckDataServiceImpl.java @@ -80,5 +80,17 @@ public class PqScriptCheckDataServiceImpl extends ServiceImpl listCheckDataCode(PqScriptCheckDataParam param) { + MPJLambdaWrapper 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); + } + } diff --git a/device/src/main/java/com/njcn/gather/device/script/service/impl/PqScriptDtlsServiceImpl.java b/device/src/main/java/com/njcn/gather/device/script/service/impl/PqScriptDtlsServiceImpl.java index 8be2fedd..8431c1ef 100644 --- a/device/src/main/java/com/njcn/gather/device/script/service/impl/PqScriptDtlsServiceImpl.java +++ b/device/src/main/java/com/njcn/gather/device/script/service/impl/PqScriptDtlsServiceImpl.java @@ -219,9 +219,9 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl