From 1d8ceb15df2b771c2a5c970d034d9f08ac826d7b Mon Sep 17 00:00:00 2001 From: wr <1754607820@qq.com> Date: Fri, 27 Dec 2024 16:43:22 +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/SocketDevResponseService.java | 7 +- .../service/impl/DetectionServiceImpl.java | 117 +++++++++++------- .../storage/mapper/mapping/TableGenMapper.xml | 10 +- .../storage/pojo/po/AdHarmonicResult.java | 2 +- .../storage/pojo/po/AdNonHarmonicResult.java | 2 +- .../service/impl/TableGenServiceImpl.java | 8 +- 6 files changed, 87 insertions(+), 59 deletions(-) diff --git a/detection/src/main/java/com/njcn/gather/detection/handler/SocketDevResponseService.java b/detection/src/main/java/com/njcn/gather/detection/handler/SocketDevResponseService.java index 26acf44c..e557c148 100644 --- a/detection/src/main/java/com/njcn/gather/detection/handler/SocketDevResponseService.java +++ b/detection/src/main/java/com/njcn/gather/detection/handler/SocketDevResponseService.java @@ -70,6 +70,10 @@ public class SocketDevResponseService { * 装置名称 */ Map devNameMapComm = new HashMap<>(); + /** + * 装置id + */ + Map devIdMapComm = new HashMap<>(); /** * 成功结束的装置 */ @@ -426,7 +430,7 @@ public class SocketDevResponseService { if (successComm.size() == monitorIdListComm.size()) { SourceIssue sourceIssue = SocketManager.getSourceTarget(socketDataMsg.getRequestId()); System.out.println("获取sourceIssue"+sourceIssue); - Map flag = detectionServiceImpl.text(devDataList, sourceIssue, DictDataEnum.AT_WILL_VALUE); + Map flag = detectionServiceImpl.text(devDataList,devIdMapComm ,sourceIssue, DictDataEnum.AT_WILL_VALUE); System.out.println(flag); WebSocketVO> webSocketVO = new WebSocketVO<>(); @@ -676,6 +680,7 @@ public class SocketDevResponseService { .map(PreDetection.MonitorListDTO::getLineId) .collect(Collectors.toList()); this.devNameMapComm = pqDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevName)); + this.devIdMapComm = pqDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId)); } 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 50ff8432..a6647ed1 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 @@ -5,10 +5,12 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; 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.service.IPqErrSysDtlsService; import com.njcn.gather.device.script.pojo.po.SourceIssue; +import com.njcn.gather.storage.pojo.po.AdNonHarmonicResult; import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -41,22 +43,11 @@ public class DetectionServiceImpl { * 开始处理指标类型 * 一共20组数据,开始处理格式 */ - public Map text(List dev, SourceIssue issue, DictDataEnum dataRule) { + public Map text(List dev,Map devIdMapComm, SourceIssue issue, DictDataEnum dataRule) { Map> devDataMap = dev.stream().collect(Collectors.groupingBy(DevData::getId)); Map stringBooleanMap = new LinkedHashMap<>(); devDataMap.forEach(((key, value) -> { - Integer num; - Boolean b = DetectionIndexProcessing(value, dataRule, issue); - if (ObjectUtil.isNotNull(b)) { - if (b) { - num = 1; - } else { - num = 2; - } - } else { - num = 4; - } - stringBooleanMap.put(key, num); + stringBooleanMap.put(key, DetectionIndexProcessing(value,devIdMapComm, dataRule, issue)); })); return stringBooleanMap; } @@ -71,7 +62,7 @@ public class DetectionServiceImpl { * @param sourceIssue 源下发的参数 * @return */ - public Boolean DetectionIndexProcessing(List dev, DictDataEnum dataRule, SourceIssue sourceIssue) { + public Integer DetectionIndexProcessing(List dev,Map devIdMapComm, DictDataEnum dataRule, SourceIssue sourceIssue) { PqErrSysParam.DetectionParam param = new PqErrSysParam.DetectionParam(); List pqErrSysDtls = pqErrSysDtlsService.listPqErrSysDtlsByPqErrSysIdAndTypes(param); switch ("V") { @@ -79,22 +70,23 @@ public class DetectionServiceImpl { * 频率 */ case "FREQ": - return isQualified(dev, pqErrSysDtls, F, sourceIssue, dataRule, "FREQ"); + return isQualified(dev,devIdMapComm, pqErrSysDtls, F, sourceIssue, dataRule, "FREQ").getResultFlag(); /** * 电压 */ case "V": - return isQualified(dev, pqErrSysDtls, U, sourceIssue, dataRule, "VRMS"); + System.out.println(isQualified(dev,devIdMapComm, pqErrSysDtls, F, sourceIssue, dataRule, "FREQ")); + return isQualified(dev,devIdMapComm, pqErrSysDtls, U, sourceIssue, dataRule, "VRMS").getResultFlag(); /** * 电流 */ case "I": - return isQualified(dev, pqErrSysDtls, I, sourceIssue, dataRule, "IRMS"); + return isQualified(dev,devIdMapComm, pqErrSysDtls, I, sourceIssue, dataRule, "IRMS").getResultFlag(); /** * 谐波类 */ case "H": - return isHarmQualified(dev, pqErrSysDtls, U, sourceIssue, dataRule, 2); + break; /** * 功率 */ @@ -104,8 +96,8 @@ public class DetectionServiceImpl { * 闪变 */ case "F": - - /** + break; + /** * 暂态 */ case "VOLTAGE": @@ -191,7 +183,7 @@ public class DetectionServiceImpl { * @param dataRule 数据处理原则 * @return */ - public Boolean isQualified(List dev, List pqErrSysDtls, String type, SourceIssue sourceIssue, DictDataEnum dataRule, String code) { + 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)) { @@ -203,31 +195,49 @@ public class DetectionServiceImpl { if (F.equals(type)) { fData = sourceIssue.getFFreq(); } + AdNonHarmonicResult result=new AdNonHarmonicResult(); + String[] split = dev.get(0).getId().split("_"); + String devID = devIdMapComm.get(split); + result.setMonitorId(devID+"_"+split[1]); + result.setScriptId(sourceIssue.getScriptId()); + result.setIndex(sourceIssue.getIndex()); + result.setDataType("avg"); if (map.containsKey(TYPE_T)) { - return rangeComparisonList(map.get(TYPE_T), pqErrSysDtls, fData, 1.0, dataRule); + DetectionData t = rangeComparisonList(map.get(TYPE_T), pqErrSysDtls, fData, 1.0, dataRule); + result.setTValue(t.getData()+"_"+t.getIsData()); + result.setResultFlag(t.getIsData()); } else { //取出源所对应的相别信息 List channelTypeAList = sourceIssue.getChannelList().stream() .filter(x -> (type + "a").equals(x.getChannelType())) .collect(Collectors.toList()); - Boolean a = rangeComparisonList(map.get(TYPE_A), pqErrSysDtls, fData, channelTypeAList.get(0).getFAmp(), dataRule); + DetectionData a = rangeComparisonList(map.get(TYPE_A), pqErrSysDtls, fData, channelTypeAList.get(0).getFAmp(), dataRule); + result.setAValue(a.getData()+"_"+a.getIsData()); + List channelTypeBList = sourceIssue.getChannelList().stream() .filter(x -> (type + "b").equals(x.getChannelType())) .collect(Collectors.toList()); - Boolean 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(b.getData()+"_"+b.getIsData()); + + List channelTypeCList = sourceIssue.getChannelList().stream() .filter(x -> (type + "c").equals(x.getChannelType())) .collect(Collectors.toList()); - Boolean c = rangeComparisonList(map.get(TYPE_C), pqErrSysDtls, fData, channelTypeCList.get(0).getFAmp(), dataRule); - if (ObjectUtil.isAllNotEmpty(a, b, c)) { - return a && b && c; + DetectionData c = rangeComparisonList(map.get(TYPE_C), pqErrSysDtls, fData, channelTypeCList.get(0).getFAmp(), dataRule); + result.setCValue(c.getData()+"_"+c.getIsData()); + List numbers = Arrays.asList(a.getIsData(), b.getIsData(), a.getIsData()); + if(numbers.stream().allMatch(n -> n == 1)){ + result.setResultFlag(1); } - if (ObjectUtil.isAllEmpty(a, b, c)) { - return null; + if(numbers.stream().allMatch(n -> n == 2)){ + result.setResultFlag(1); + } + if(numbers.stream().allMatch(n -> n == 3)){ + result.setResultFlag(1); } - } - return null; + return result; } /** @@ -430,7 +440,10 @@ public class DetectionServiceImpl { * @param dataRule 数据处理原则 * @returnd */ - public Boolean rangeComparisonList(List listT, List pqErrSysDtls, Double data, Double channelData, DictDataEnum dataRule) { + public DetectionData rangeComparisonList(List listT, List pqErrSysDtls, Double data, Double channelData, DictDataEnum dataRule) { + DetectionData detectionData=new DetectionData(); + detectionData.setIsData(4); + detectionData.setData(listT.get(0)); //先根据源所下发的数据,是否在误差体系范围内在则可以进行误差体系判断 //获得误差体系 List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(multiply(x.getStartValue(), data, x.getConditionType()), @@ -446,24 +459,32 @@ public class DetectionServiceImpl { List qualifiedList = listT.stream().filter(x -> NumberUtil.isIn(devSubtractChannelData(x, channelData, errSysDtl.getErrorValueType()), BigDecimal.valueOf(-errSysDtl.getMaxErrorValue()), BigDecimal.valueOf(errSysDtl.getMaxErrorValue()))).collect(Collectors.toList()); - switch (dataRule) { - case AT_WILL_VALUE: - case CP95_VALUE: - case AVG_VALUE: - if (qualifiedList.size() > 0) { - return true; - } - break; - case SECTION_VALUE: - case Own_value: - if (qualifiedList.size() == listT.size()) { - return true; - } - break; + if(CollUtil.isNotEmpty(qualifiedList)){ + detectionData.setData(qualifiedList.get(0)); + switch (dataRule) { + case AT_WILL_VALUE: + case CP95_VALUE: + case AVG_VALUE: + if (qualifiedList.size() > 0) { + detectionData.setIsData(1); + }else{ + detectionData.setIsData(2); + } + break; + case SECTION_VALUE: + case Own_value: + if (qualifiedList.size() == listT.size()) { + detectionData.setIsData(1); + }else{ + detectionData.setIsData(2); + } + break; + } + }else{ + detectionData.setIsData(2); } - return false; } - return null; + return detectionData; } /** diff --git a/storage/src/main/java/com/njcn/gather/storage/mapper/mapping/TableGenMapper.xml b/storage/src/main/java/com/njcn/gather/storage/mapper/mapping/TableGenMapper.xml index 210325bf..e22e3f91 100644 --- a/storage/src/main/java/com/njcn/gather/storage/mapper/mapping/TableGenMapper.xml +++ b/storage/src/main/java/com/njcn/gather/storage/mapper/mapping/TableGenMapper.xml @@ -6,14 +6,15 @@ CREATE TABLE ad_non_harmonic_${code} ( Monitor_Id CHAR(32) NOT NULL COMMENT '监测点Id', Time_Id DATETIME NOT NULL COMMENT '时间', - Script_Dtls_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id,字典表', + Script_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id,字典表', + index int(4) NOT NULL COMMENT '总检测脚本中的测试项序号', AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表', Data_Type CHAR(32) NOT NULL COMMENT '数据指标,只有数据源为分钟统计时候才会使用(最大、最小、平均、CP95,默认平均值),字典表', A_Value varchar(30) NOT NULL COMMENT 'A相值', B_Value varchar(30) NOT NULL COMMENT 'B相值', C_Value varchar(30) NOT NULL COMMENT 'C相值', T_Value varchar(30) NOT NULL COMMENT 'T相值(没有相别的则存这里)', - PRIMARY KEY (Monitor_Id, Time_Id, Script_Dtls_Id, AD_Type, Data_Type) + PRIMARY KEY (Monitor_Id, Time_Id, Script_Id, index, Data_Type) ) COMMENT='监测数据表'; @@ -27,7 +28,8 @@ CREATE TABLE ad_non_harmonic_result_${code} ( Monitor_Id CHAR(32) NOT NULL COMMENT '监测点Id', Time_Id DATETIME NOT NULL COMMENT '时间', - Script_Dtls_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id,字典表', + Script_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id,字典表', + index int(4) NOT NULL COMMENT '总检测脚本中的测试项序号', AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表', Data_Type CHAR(32) NOT NULL COMMENT '数据指标,只有数据源为分钟统计时候才会使用(最大、最小、平均、CP95,默认平均值),字典表', Result_Flag int(1) NOT NULL COMMENT '0.不合格 1.合格', @@ -35,7 +37,7 @@ B_Value varchar(30) NOT NULL COMMENT 'B相值', C_Value varchar(30) NOT NULL COMMENT 'C相值', T_Value varchar(30) NOT NULL COMMENT 'T相值(没有相别的则存这里)', - PRIMARY KEY (Monitor_Id, Time_Id, Script_Dtls_Id, AD_Type, Data_Type) + PRIMARY KEY (Monitor_Id, Time_Id, Script_Id, index, Data_Type) ) COMMENT='监测数据表'; diff --git a/storage/src/main/java/com/njcn/gather/storage/pojo/po/AdHarmonicResult.java b/storage/src/main/java/com/njcn/gather/storage/pojo/po/AdHarmonicResult.java index e4e008db..47ec3561 100644 --- a/storage/src/main/java/com/njcn/gather/storage/pojo/po/AdHarmonicResult.java +++ b/storage/src/main/java/com/njcn/gather/storage/pojo/po/AdHarmonicResult.java @@ -34,7 +34,7 @@ public class AdHarmonicResult { /** * 检测脚本子表Id,字典表 */ - private String scriptDtlsId; + private String scriptId; private Integer index; diff --git a/storage/src/main/java/com/njcn/gather/storage/pojo/po/AdNonHarmonicResult.java b/storage/src/main/java/com/njcn/gather/storage/pojo/po/AdNonHarmonicResult.java index 053a7149..894aced4 100644 --- a/storage/src/main/java/com/njcn/gather/storage/pojo/po/AdNonHarmonicResult.java +++ b/storage/src/main/java/com/njcn/gather/storage/pojo/po/AdNonHarmonicResult.java @@ -34,7 +34,7 @@ public class AdNonHarmonicResult { /** * 检测脚本子表Id,字典表 */ - private String scriptDtlsId; + private String scriptId; private Integer index; diff --git a/storage/src/main/java/com/njcn/gather/storage/service/impl/TableGenServiceImpl.java b/storage/src/main/java/com/njcn/gather/storage/service/impl/TableGenServiceImpl.java index 96785b0f..3fa9889f 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/impl/TableGenServiceImpl.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/impl/TableGenServiceImpl.java @@ -38,25 +38,25 @@ public class TableGenServiceImpl implements TableGenService { String sql = "CREATE TABLE AD_Harmonic_"+code+" (\n" + " Monitor_Id CHAR(32) NOT NULL COMMENT '监测点Id',\n" + " Time_Id DATETIME NOT NULL COMMENT '时间',\n" + - " Script_Dtls_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id,字典表',\n" + + " Script_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id,字典表',\n" + " index int(5) NOT NULL COMMENT '总检测脚本中的测试项序号',\n" + " AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表',\n" + " Data_Type CHAR(32) NOT NULL COMMENT '数据指标,只有数据源为分钟统计时候才会使用(最大、最小、平均、CP95,默认平均值),字典表',\n" + A+B+C+ - " PRIMARY KEY (Monitor_Id, Time_Id, Script_Dtls_Id, AD_Type, Data_Type)\n" + + " PRIMARY KEY (Monitor_Id, Time_Id, Scripts_Id, index, Data_Type)\n" + ") COMMENT='监测数据表';"; tableGenMapper.genAdHarmonicTable(sql); String sql2 = "CREATE TABLE AD_Harmonic_Result_"+code+" (\n" + " Monitor_Id CHAR(32) NOT NULL COMMENT '监测点Id',\n" + " Time_Id DATETIME NOT NULL COMMENT '时间',\n" + - " Script_Dtls_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id,字典表',\n" + + " Script_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id,字典表',\n" + " index int(5) NOT NULL COMMENT '总检测脚本中的测试项序号',\n" + " AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表',\n" + " Data_Type CHAR(32) NOT NULL COMMENT '数据指标,只有数据源为分钟统计时候才会使用(最大、最小、平均、CP95,默认平均值),字典表',\n" + " Result_Flag int(1) NOT NULL COMMENT '0.不合格 1.合格',\n" + A+B+C+ - " PRIMARY KEY (Monitor_Id, Time_Id, Script_Dtls_Id, AD_Type, Data_Type)\n" + + " PRIMARY KEY (Monitor_Id, Time_Id, Script_Dtls_Id, index, Data_Type)\n" + ") COMMENT='监测数据表';"; tableGenMapper.genAdHarmonicTable(sql2); }