From 269456444460a0d2a330017badeb5476ecfec773 Mon Sep 17 00:00:00 2001 From: chendaofei <857448963@qq.com> Date: Fri, 13 Jun 2025 08:29:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=82=E5=B8=B8=E6=95=B0=E6=8D=AE=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E9=87=8D=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/PqDataVerifyBakServiceImpl.java | 198 ++++++++++-------- 1 file changed, 109 insertions(+), 89 deletions(-) diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqDataVerifyBakServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqDataVerifyBakServiceImpl.java index 855ba0f81..2bc4309fe 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqDataVerifyBakServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqDataVerifyBakServiceImpl.java @@ -52,6 +52,8 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -266,9 +268,6 @@ public class PqDataVerifyBakServiceImpl extends ServiceImpl dataVerifyList = this.list(lambdaQueryWrapper); - - - for (PqDataVerifyBak pqDataVerifyBak : dataVerifyList) { Set set = new HashSet<>(); try (InputStream fileStream = fileStorageUtil.getFileStream(pqDataVerifyBak.getPath())) { @@ -278,45 +277,42 @@ public class PqDataVerifyBakServiceImpl extends ServiceImpl { - JSONObject object = (JSONObject) listItem; - JSONArray timeArr = object.getJSONArray("time"); - timeArr.forEach(timeJson -> set.add((String) timeJson)); - }); - DetailAbnormalVO detailAbnormalVO = new DetailAbnormalVO(); - LineDevGetDTO lineDevGetDTO = lineDetailMap.get(pqDataVerifyBak.getLineId()); - detailAbnormalVO.setTimeSum((long) lineDevGetDTO.getTimeInterval() * set.size()); - detailAbnormalVO.setDate(pqDataVerifyBak.getTimeId().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN))); - detailAbnormalVO.setMonitorName(lineDevGetDTO.getPointName()); - detailAbnormalVO.setMonitorId(lineDevGetDTO.getPointId()); - detailAbnormalVO.setTargetKey(monitorBaseParam.getTargetKey()); - result.add(detailAbnormalVO); - } - } else { - rangeMap.forEach((rangeKey, val) -> { - if (targetJson.containsKey(rangeKey)) { - JSONArray innerJson = targetJson.getJSONArray(rangeKey); - JSONObject jsonObjectTem = (JSONObject) innerJson.get(0); + for(Object oJson : innerJson){ + JSONObject jsonObjectTem = (JSONObject) oJson; JSONArray list = jsonObjectTem.getJSONArray("list"); list.forEach(listItem -> { JSONObject object = (JSONObject) listItem; JSONArray timeArr = object.getJSONArray("time"); timeArr.forEach(timeJson -> set.add((String) timeJson)); }); - DetailAbnormalVO detailAbnormalVO = new DetailAbnormalVO(); - LineDevGetDTO lineDevGetDTO = lineDetailMap.get(pqDataVerifyBak.getLineId()); - detailAbnormalVO.setTimeSum((long) lineDevGetDTO.getTimeInterval() * set.size()); - detailAbnormalVO.setDate(pqDataVerifyBak.getTimeId().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN))); - detailAbnormalVO.setMonitorName(lineDevGetDTO.getPointName()); - detailAbnormalVO.setMonitorId(lineDevGetDTO.getPointId()); - detailAbnormalVO.setTargetKey(rangeKey); - result.add(detailAbnormalVO); + } + } + } else { + rangeMap.forEach((rangeKey, val) -> { + if (targetJson.containsKey(rangeKey)) { + JSONArray innerJson = targetJson.getJSONArray(rangeKey); + for(Object oJson : innerJson){ + JSONObject jsonObjectTem = (JSONObject) oJson; + JSONArray list = jsonObjectTem.getJSONArray("list"); + list.forEach(listItem -> { + JSONObject object = (JSONObject) listItem; + JSONArray timeArr = object.getJSONArray("time"); + timeArr.forEach(timeJson -> set.add((String) timeJson)); + }); + } } }); + } }); + DetailAbnormalVO detailAbnormalVO = new DetailAbnormalVO(); + LineDevGetDTO lineDevGetDTO = lineDetailMap.get(pqDataVerifyBak.getLineId()); + detailAbnormalVO.setTimeSum((long) lineDevGetDTO.getTimeInterval() * set.size()); + detailAbnormalVO.setDate(pqDataVerifyBak.getTimeId().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN))); + detailAbnormalVO.setMonitorName(lineDevGetDTO.getPointName()); + detailAbnormalVO.setMonitorId(lineDevGetDTO.getPointId()); + detailAbnormalVO.setTargetKey(""); + result.add(detailAbnormalVO); } catch (Exception e) { throw new BusinessException("数据异常"); } @@ -362,76 +358,100 @@ public class PqDataVerifyBakServiceImpl extends ServiceImpl extractHarmonicOrder(vo.getTargetName())) + .thenComparing(DetailAbnormalVO.DetailAbnormalInnerVO::getTargetName)) + .collect(Collectors.toList()); return result; } + private static final Pattern HARMONIC_PATTERN = Pattern.compile("(\\d+)次谐波"); + + // 提取谐波次数的方法 + private static int extractHarmonicOrder(String targetName) { + if (StrUtil.isBlank(targetName)) { + return 0; + } + + Matcher matcher = HARMONIC_PATTERN.matcher(targetName); + if (matcher.find()) { + try { + return Integer.parseInt(matcher.group(1)); + } catch (NumberFormatException e) { + log.warn("无法从targetName中提取谐波次数: {}", targetName); + } + } + return 0; + } + private void resultDeal(Map dtoMap, String targetKey, JSONObject targetJson, List result) { PqReasonableRangeDto pqReasonableRangeDto = dtoMap.get(targetKey); JSONArray innerJson = targetJson.getJSONArray(targetKey); - JSONObject jsonObjectTem = (JSONObject) innerJson.get(0); - String targetName = jsonObjectTem.get("targetName").toString(); - JSONArray list = jsonObjectTem.getJSONArray("list"); - - List temList = new ArrayList<>(); - list.forEach(listItem -> { - JSONObject object = (JSONObject) listItem; - JSONArray timeArr = object.getJSONArray("time"); - JSONArray valueArr = object.getJSONArray("value"); - String phase = object.get("phasic").toString(); - String valueType = object.get("valueType").toString(); - for (int i = 0; i < timeArr.size(); i++) { - DetailAbnormalVO.DetailLimitInnerVO temData = new DetailAbnormalVO.DetailLimitInnerVO(); - temData.setTime(timeArr.get(i).toString()); - temData.setVal(valueArr.get(i).toString()); - temData.setTargetName(targetName); - temData.setTargetKey(targetKey); - temData.setPhaseType(phase); - temData.setType(valueType); - temList.add(temData); - } - }); - - Map> listMap = temList.stream().collect(Collectors.groupingBy(DetailAbnormalVO.DetailLimitInnerVO::getTime, TreeMap::new, Collectors.toList())); - listMap.forEach((time, timeList) -> { - Map> indexMap = timeList.stream().collect(Collectors.groupingBy(DetailAbnormalVO.DetailLimitInnerVO::getTargetKey)); - indexMap.forEach((target, targetList) -> { - String unit; - if (StrUtil.isNotBlank(pqReasonableRangeDto.getUnit())) { - unit = pqReasonableRangeDto.getUnit(); - } else { - unit = ""; + innerJson.forEach(oo-> { + JSONObject jsonObjectTem = (JSONObject) oo; + String targetName = jsonObjectTem.get("targetName").toString(); + JSONArray list = jsonObjectTem.getJSONArray("list"); + List temList = new ArrayList<>(); + list.forEach(listItem -> { + JSONObject object = (JSONObject) listItem; + JSONArray timeArr = object.getJSONArray("time"); + JSONArray valueArr = object.getJSONArray("value"); + String phase = object.get("phasic").toString(); + String valueType = object.get("valueType").toString(); + for (int i = 0; i < timeArr.size(); i++) { + DetailAbnormalVO.DetailLimitInnerVO temData = new DetailAbnormalVO.DetailLimitInnerVO(); + temData.setTime(timeArr.get(i).toString()); + temData.setVal(valueArr.get(i).toString()); + temData.setTargetName(targetName); + temData.setTargetKey(targetKey); + temData.setPhaseType(phase); + temData.setType(valueType); + temList.add(temData); } + }); + Map> listMap = temList.stream().collect(Collectors.groupingBy(DetailAbnormalVO.DetailLimitInnerVO::getTime, TreeMap::new, Collectors.toList())); + listMap.forEach((time, timeList) -> { + Map> indexMap = timeList.stream().collect(Collectors.groupingBy(DetailAbnormalVO.DetailLimitInnerVO::getTargetKey)); + indexMap.forEach((target, targetList) -> { + String unit; + if (StrUtil.isNotBlank(pqReasonableRangeDto.getUnit())) { + unit = pqReasonableRangeDto.getUnit(); + } else { + unit = ""; + } - Map> phaseMap = timeList.stream().collect(Collectors.groupingBy(DetailAbnormalVO.DetailLimitInnerVO::getPhaseType)); - phaseMap.forEach((phaseKey, valueList) -> { - DetailAbnormalVO.DetailAbnormalInnerVO vo = new DetailAbnormalVO.DetailAbnormalInnerVO(); - vo.setTime(time); - vo.setTargetName(timeList.get(0).getTargetName()); - vo.setTargetKey(targetKey); - vo.setPhaseType(phaseKey); - vo.setRangeDesc(pqReasonableRangeDto.getMinValue() + unit + " ~ " + pqReasonableRangeDto.getMaxValue() + unit); - valueList.forEach(ites -> { - switch (ites.getType()) { - case "AVG": - vo.setAvg(ites.getVal()); - break; - case "MAX": - vo.setMax(ites.getVal()); - break; - case "MIN": - vo.setMin(ites.getVal()); - break; - case "CP95": - vo.setCp95(ites.getVal()); - break; - } + Map> phaseMap = timeList.stream().collect(Collectors.groupingBy(DetailAbnormalVO.DetailLimitInnerVO::getPhaseType)); + phaseMap.forEach((phaseKey, valueList) -> { + DetailAbnormalVO.DetailAbnormalInnerVO vo = new DetailAbnormalVO.DetailAbnormalInnerVO(); + vo.setTime(time); + vo.setTargetName(timeList.get(0).getTargetName()); + vo.setTargetKey(targetKey); + vo.setPhaseType(phaseKey); + vo.setRangeDesc(pqReasonableRangeDto.getMinValue() + unit + " ~ " + pqReasonableRangeDto.getMaxValue() + unit); + valueList.forEach(ites -> { + switch (ites.getType()) { + case "AVG": + vo.setAvg(ites.getVal()); + break; + case "MAX": + vo.setMax(ites.getVal()); + break; + case "MIN": + vo.setMin(ites.getVal()); + break; + case "CP95": + vo.setCp95(ites.getVal()); + break; + } + }); + result.add(vo); }); - result.add(vo); }); }); }); - }