From 438f618d8abaa76abb70cd882c4ddc68d734ad22 Mon Sep 17 00:00:00 2001 From: wr <1754607820@qq.com> Date: Tue, 25 Nov 2025 17:02:31 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=A2=9E=E5=8A=A0=E6=9A=82=E6=80=81=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=B8=85=E6=B4=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../line/DataCleanServiceImpl.java | 86 ++++++++++++++++++- .../dataProcess/dto/DataCleanJsonDTO.java | 5 ++ .../njcn/dataProcess/enums/DataCleanEnum.java | 4 +- .../dataProcess/pojo/dto/AbnormalData.java | 2 + .../dataProcess/pojo/po/PqDataVerifyBak.java | 5 ++ .../com/njcn/dataProcess/util/TimeUtils.java | 5 ++ 6 files changed, 103 insertions(+), 4 deletions(-) diff --git a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/DataCleanServiceImpl.java b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/DataCleanServiceImpl.java index 7d31dfe..a0a075f 100644 --- a/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/DataCleanServiceImpl.java +++ b/algorithm/algorithm-boot/src/main/java/com/njcn/algorithm/serviceimpl/line/DataCleanServiceImpl.java @@ -333,6 +333,8 @@ public class DataCleanServiceImpl implements IDataCleanService { List data8 = dataFlucFeignClient.getRawData(lineParam).getData(); //dataFlicker List data9 = dataFlickerFeignClient.getRawData(lineParam).getData(); + //获取监测点的暂态事件 + List eventList = rmpEventDetailFeignClient.getRawData(lineParam).getData(); if (CollUtil.isNotEmpty(data1)) { logger.info("{}数据清洗dataV集合大小为>>>>>>>>>>>>{}",lineParam.getStartTime(), MemorySizeUtil.getObjectSize(data1)); @@ -514,6 +516,26 @@ public class DataCleanServiceImpl implements IDataCleanService { } } + if (CollUtil.isNotEmpty(eventList)) { + logger.info("{}数据清洗eventDetail集合大小为>>>>>>>>>>>>{}",lineParam.getStartTime(), MemorySizeUtil.getObjectSize(eventList)); + List result = new ArrayList<>(); + List list = map.get(DataCleanEnum.RMpEventDetail.getCode()); + Map pqReasonableRangeDtoMap = list.stream().collect(Collectors.toMap(PqReasonableRangeDto::getIndexCode, Function.identity())); + eventList.forEach(data->{ + List pqDataVerifies = judgeDataEvent(pqReasonableRangeDtoMap,data); + result.addAll(pqDataVerifies); + }); + if (CollUtil.isNotEmpty(result)) { + Map dtoMap = handleDataEvent(result,bak,item.getTimeInterval()); + Set timeSet = new HashSet<>(result.stream().map(dt -> dt.getTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN))).collect(Collectors.toSet())); + dtoMap.put("errorTimes",timeSet.size() * item.getTimeInterval()); + allTimeSet.addAll(timeSet); + if (CollUtil.isNotEmpty(dtoMap)) { + resultData.add(dtoMap); + } + } + } + if (CollUtil.isNotEmpty(allTimeSet)) { Map dtoMap = new HashMap<>(); dtoMap.put("lineErrorTimes",allTimeSet.size() * item.getTimeInterval()); @@ -716,6 +738,24 @@ public class DataCleanServiceImpl implements IDataCleanService { return map; } + public Map handleDataEvent(List result, PqDataVerifyBak bak,Integer timeInterval) { + Map map = new HashMap<>(); + Map> codeMap = result.stream().collect(Collectors.groupingBy(PqDataVerify::getIndexCode)); + //暂降事件 + List list = handleData(codeMap.get(DataCleanEnum.VoltageDip.getCode()),timeInterval); + if (CollUtil.isNotEmpty(list)) { + bak.setEvent(1); + map.put(DataCleanEnum.RMpEventDetail.getCode() + "-" + DataCleanEnum.VoltageDip.getCode(),list); + } + //暂降事件 + List list2 = handleData(codeMap.get(DataCleanEnum.VoltageRise.getCode()),timeInterval); + if (CollUtil.isNotEmpty(list2)) { + bak.setEvent(1); + map.put(DataCleanEnum.RMpEventDetail.getCode() + "-" + DataCleanEnum.VoltageRise.getCode(),list2); + } + return map; + } + public List handleData(List list, Integer timeInterval) { List dataList = new ArrayList<>(); if (CollUtil.isNotEmpty(list)) { @@ -754,6 +794,8 @@ public class DataCleanServiceImpl implements IDataCleanService { }); dto.setErrorCounts(allCounts.get()); dto.setErrorTimes(timeSet.size()*timeInterval); + dto.setMinValue(list.get(0).getMinValue()); + dto.setMaxValue(list.get(0).getMaxValue()); dto.setList(list1); }); dataList.add(dto); @@ -1144,7 +1186,7 @@ public class DataCleanServiceImpl implements IDataCleanService { Map> pqReasonableRangeDtoMap = new HashMap<>(); DataCleanParam param = new DataCleanParam(); param.setSystemType(DataCleanEnum.Pqs.getCode()); - param.setDataSource(DataCleanEnum.InfluxDB.getCode()); + // param.setDataSource(DataCleanEnum.InfluxDB.getCode()); List list = pqReasonableRangeFeignClient.getData(param).getData(); if (CollUtil.isNotEmpty(list)) { pqReasonableRangeDtoMap = list.stream().collect(Collectors.groupingBy(PqReasonableRangeDto::getInfluxdbTableName)); @@ -1769,11 +1811,51 @@ public class DataCleanServiceImpl implements IDataCleanService { return list; } + /** + * 获取数据的标准范围,进行数据比对 + */ + public List judgeDataEvent(Map map, RmpEventDetailDTO dto) { + List list = new ArrayList<>(); + PqReasonableRangeDto pqReasonableRangeDto = map.get(DataCleanEnum.VoltageDip.getCode()); + if(ObjectUtil.isNotNull(dto.getFeatureAmplitude())){ + if (dto.getFeatureAmplitude() < pqReasonableRangeDto.getMinValue() || dto.getFeatureAmplitude() > pqReasonableRangeDto.getMaxValue()) { + PqDataVerify pqDataVerify = getPqDataVerify(dto.getMeasurementPointId() + ,dto.getStartTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_MS_PATTERN)) + ,null + ,"/" + ,pqReasonableRangeDto.getIndexCode() + ,pqReasonableRangeDto.getIndexName() + ,pqReasonableRangeDto.getInfluxdbTableName() + ,dto.getFeatureAmplitude() + ,pqReasonableRangeDto.getMinValue() + ,pqReasonableRangeDto.getMaxValue()); + list.add(pqDataVerify); + } + } + PqReasonableRangeDto pqReasonableRangeDto2 = map.get(DataCleanEnum.VoltageRise.getCode()); + if(ObjectUtil.isNotNull(dto.getFeatureAmplitude())){ + if (dto.getFeatureAmplitude() < pqReasonableRangeDto2.getMinValue() || dto.getFeatureAmplitude() > pqReasonableRangeDto2.getMaxValue()) { + PqDataVerify pqDataVerify = getPqDataVerify(dto.getMeasurementPointId() + ,dto.getStartTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_MS_PATTERN)) + ,null + ,"/" + ,pqReasonableRangeDto2.getIndexCode() + ,pqReasonableRangeDto2.getIndexName() + ,pqReasonableRangeDto2.getInfluxdbTableName() + ,dto.getFeatureAmplitude() + ,pqReasonableRangeDto2.getMinValue() + ,pqReasonableRangeDto2.getMaxValue()); + list.add(pqDataVerify); + } + } + return list; + } + public PqDataVerify getPqDataVerify(String lineId,String time,String valueType, String phasicType, String indexCode, String indexName, String indexTable, Double data, Double minValue, Double maxValue) { PqDataVerify pqDataVerify = new PqDataVerify(); pqDataVerify.setLineId(lineId); - pqDataVerify.setTime(TimeUtils.StringToLocalDateTime(time)); + pqDataVerify.setTime(time.contains(".")?TimeUtils.StringToLocalDateTimeSSS(time):TimeUtils.StringToLocalDateTime(time)); pqDataVerify.setValueType(Objects.isNull(valueType)?"avg":valueType); pqDataVerify.setPhasicType(phasicType); pqDataVerify.setIndexCode(indexCode); diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/dto/DataCleanJsonDTO.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/dto/DataCleanJsonDTO.java index fd9d758..b17b823 100644 --- a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/dto/DataCleanJsonDTO.java +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/dto/DataCleanJsonDTO.java @@ -25,6 +25,11 @@ public class DataCleanJsonDTO { @ApiModelProperty("异常数据量") private Integer errorCounts; + @ApiModelProperty("指标上限") + private Double minValue; + + @ApiModelProperty("指标下限") + private Double maxValue; } @Data diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/enums/DataCleanEnum.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/enums/DataCleanEnum.java index e9080c2..9385e89 100644 --- a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/enums/DataCleanEnum.java +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/enums/DataCleanEnum.java @@ -81,8 +81,8 @@ public enum DataCleanEnum { V_Data("v_1","相(线)电压基波有效值"), //r_mp_event_detail - VoltageDip("Voltage_Dip","相(线)电压基波有效值"), - VoltageRise("Voltage_Rise","相(线)电压基波有效值"); + VoltageDip("Voltage_Dip","电压暂降特征幅值"), + VoltageRise("Voltage_Rise","电压暂升特征幅值"); private String code; diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/AbnormalData.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/AbnormalData.java index af4cc1b..9a85417 100644 --- a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/AbnormalData.java +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/dto/AbnormalData.java @@ -65,6 +65,8 @@ public class AbnormalData { @JSONField(ordinal = 4) private String value; + @JSONField(ordinal = 5) + private float overLimitValue; } } diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/PqDataVerifyBak.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/PqDataVerifyBak.java index a07d31c..bd28ed9 100644 --- a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/PqDataVerifyBak.java +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/pojo/po/PqDataVerifyBak.java @@ -173,6 +173,11 @@ public class PqDataVerifyBak implements Serializable { @TableField(value = "pst") private Integer pst = 0; + + @TableField(value = "event") + private Integer event = 0; + + /** * 文件路径 */ diff --git a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/util/TimeUtils.java b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/util/TimeUtils.java index 2d4886e..65b5cd3 100644 --- a/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/util/TimeUtils.java +++ b/data-processing/data-processing-api/src/main/java/com/njcn/dataProcess/util/TimeUtils.java @@ -16,6 +16,7 @@ import java.time.format.DateTimeFormatter; public class TimeUtils { private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + private static final DateTimeFormatter DATE_TIME_FORMATTER_SSS = DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_MS_PATTERN); private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); /** @@ -37,6 +38,10 @@ public class TimeUtils { return LocalDateTime.parse(time, DATE_TIME_FORMATTER); } + public static LocalDateTime StringToLocalDateTimeSSS(String time) { + return LocalDateTime.parse(time, DATE_TIME_FORMATTER_SSS); + } + /** * LocalDataTime类型的yyyy-MM-dd HH:mm:ss转成String yyyy-MM-dd HH:mm:ss * @param time