异常数据功能重写

This commit is contained in:
2025-06-13 08:29:10 +08:00
parent 3b7991b5d7
commit 2694564444

View File

@@ -52,6 +52,8 @@ import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -266,9 +268,6 @@ public class PqDataVerifyBakServiceImpl extends ServiceImpl<PqDataVerifyBakMappe
} }
List<PqDataVerifyBak> dataVerifyList = this.list(lambdaQueryWrapper); List<PqDataVerifyBak> dataVerifyList = this.list(lambdaQueryWrapper);
for (PqDataVerifyBak pqDataVerifyBak : dataVerifyList) { for (PqDataVerifyBak pqDataVerifyBak : dataVerifyList) {
Set<String> set = new HashSet<>(); Set<String> set = new HashSet<>();
try (InputStream fileStream = fileStorageUtil.getFileStream(pqDataVerifyBak.getPath())) { try (InputStream fileStream = fileStorageUtil.getFileStream(pqDataVerifyBak.getPath())) {
@@ -278,45 +277,42 @@ public class PqDataVerifyBakServiceImpl extends ServiceImpl<PqDataVerifyBakMappe
if (StrUtil.isNotBlank(monitorBaseParam.getTargetKey())) { if (StrUtil.isNotBlank(monitorBaseParam.getTargetKey())) {
if (targetJson.containsKey(monitorBaseParam.getTargetKey())) { if (targetJson.containsKey(monitorBaseParam.getTargetKey())) {
JSONArray innerJson = targetJson.getJSONArray(monitorBaseParam.getTargetKey()); JSONArray innerJson = targetJson.getJSONArray(monitorBaseParam.getTargetKey());
JSONObject jsonObjectTem = (JSONObject) innerJson.get(0); for(Object oJson : innerJson){
JSONArray list = jsonObjectTem.getJSONArray("list"); JSONObject jsonObjectTem = (JSONObject) oJson;
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(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);
JSONArray list = jsonObjectTem.getJSONArray("list"); JSONArray list = jsonObjectTem.getJSONArray("list");
list.forEach(listItem -> { list.forEach(listItem -> {
JSONObject object = (JSONObject) listItem; JSONObject object = (JSONObject) listItem;
JSONArray timeArr = object.getJSONArray("time"); JSONArray timeArr = object.getJSONArray("time");
timeArr.forEach(timeJson -> set.add((String) timeJson)); timeArr.forEach(timeJson -> set.add((String) timeJson));
}); });
DetailAbnormalVO detailAbnormalVO = new DetailAbnormalVO(); }
LineDevGetDTO lineDevGetDTO = lineDetailMap.get(pqDataVerifyBak.getLineId()); }
detailAbnormalVO.setTimeSum((long) lineDevGetDTO.getTimeInterval() * set.size()); } else {
detailAbnormalVO.setDate(pqDataVerifyBak.getTimeId().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN))); rangeMap.forEach((rangeKey, val) -> {
detailAbnormalVO.setMonitorName(lineDevGetDTO.getPointName()); if (targetJson.containsKey(rangeKey)) {
detailAbnormalVO.setMonitorId(lineDevGetDTO.getPointId()); JSONArray innerJson = targetJson.getJSONArray(rangeKey);
detailAbnormalVO.setTargetKey(rangeKey); for(Object oJson : innerJson){
result.add(detailAbnormalVO); 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) { } catch (Exception e) {
throw new BusinessException("数据异常"); throw new BusinessException("数据异常");
} }
@@ -362,76 +358,100 @@ public class PqDataVerifyBakServiceImpl extends ServiceImpl<PqDataVerifyBakMappe
} catch (Exception e) { } catch (Exception e) {
throw new BusinessException("数据异常"); throw new BusinessException("数据异常");
} }
// 排序实现
result = result.stream()
.sorted(Comparator.comparing(DetailAbnormalVO.DetailAbnormalInnerVO::getTime)
.thenComparing(vo -> extractHarmonicOrder(vo.getTargetName()))
.thenComparing(DetailAbnormalVO.DetailAbnormalInnerVO::getTargetName))
.collect(Collectors.toList());
return result; 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<String, PqReasonableRangeDto> dtoMap, String targetKey, JSONObject targetJson, List<DetailAbnormalVO.DetailAbnormalInnerVO> result) { private void resultDeal(Map<String, PqReasonableRangeDto> dtoMap, String targetKey, JSONObject targetJson, List<DetailAbnormalVO.DetailAbnormalInnerVO> result) {
PqReasonableRangeDto pqReasonableRangeDto = dtoMap.get(targetKey); PqReasonableRangeDto pqReasonableRangeDto = dtoMap.get(targetKey);
JSONArray innerJson = targetJson.getJSONArray(targetKey); JSONArray innerJson = targetJson.getJSONArray(targetKey);
JSONObject jsonObjectTem = (JSONObject) innerJson.get(0); innerJson.forEach(oo-> {
String targetName = jsonObjectTem.get("targetName").toString(); JSONObject jsonObjectTem = (JSONObject) oo;
JSONArray list = jsonObjectTem.getJSONArray("list"); String targetName = jsonObjectTem.get("targetName").toString();
JSONArray list = jsonObjectTem.getJSONArray("list");
List<DetailAbnormalVO.DetailLimitInnerVO> temList = new ArrayList<>(); List<DetailAbnormalVO.DetailLimitInnerVO> temList = new ArrayList<>();
list.forEach(listItem -> { list.forEach(listItem -> {
JSONObject object = (JSONObject) listItem; JSONObject object = (JSONObject) listItem;
JSONArray timeArr = object.getJSONArray("time"); JSONArray timeArr = object.getJSONArray("time");
JSONArray valueArr = object.getJSONArray("value"); JSONArray valueArr = object.getJSONArray("value");
String phase = object.get("phasic").toString(); String phase = object.get("phasic").toString();
String valueType = object.get("valueType").toString(); String valueType = object.get("valueType").toString();
for (int i = 0; i < timeArr.size(); i++) { for (int i = 0; i < timeArr.size(); i++) {
DetailAbnormalVO.DetailLimitInnerVO temData = new DetailAbnormalVO.DetailLimitInnerVO(); DetailAbnormalVO.DetailLimitInnerVO temData = new DetailAbnormalVO.DetailLimitInnerVO();
temData.setTime(timeArr.get(i).toString()); temData.setTime(timeArr.get(i).toString());
temData.setVal(valueArr.get(i).toString()); temData.setVal(valueArr.get(i).toString());
temData.setTargetName(targetName); temData.setTargetName(targetName);
temData.setTargetKey(targetKey); temData.setTargetKey(targetKey);
temData.setPhaseType(phase); temData.setPhaseType(phase);
temData.setType(valueType); temData.setType(valueType);
temList.add(temData); temList.add(temData);
}
});
Map<String, List<DetailAbnormalVO.DetailLimitInnerVO>> listMap = temList.stream().collect(Collectors.groupingBy(DetailAbnormalVO.DetailLimitInnerVO::getTime, TreeMap::new, Collectors.toList()));
listMap.forEach((time, timeList) -> {
Map<String, List<DetailAbnormalVO.DetailLimitInnerVO>> 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<String, List<DetailAbnormalVO.DetailLimitInnerVO>> listMap = temList.stream().collect(Collectors.groupingBy(DetailAbnormalVO.DetailLimitInnerVO::getTime, TreeMap::new, Collectors.toList()));
listMap.forEach((time, timeList) -> {
Map<String, List<DetailAbnormalVO.DetailLimitInnerVO>> 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<String, List<DetailAbnormalVO.DetailLimitInnerVO>> phaseMap = timeList.stream().collect(Collectors.groupingBy(DetailAbnormalVO.DetailLimitInnerVO::getPhaseType)); Map<String, List<DetailAbnormalVO.DetailLimitInnerVO>> phaseMap = timeList.stream().collect(Collectors.groupingBy(DetailAbnormalVO.DetailLimitInnerVO::getPhaseType));
phaseMap.forEach((phaseKey, valueList) -> { phaseMap.forEach((phaseKey, valueList) -> {
DetailAbnormalVO.DetailAbnormalInnerVO vo = new DetailAbnormalVO.DetailAbnormalInnerVO(); DetailAbnormalVO.DetailAbnormalInnerVO vo = new DetailAbnormalVO.DetailAbnormalInnerVO();
vo.setTime(time); vo.setTime(time);
vo.setTargetName(timeList.get(0).getTargetName()); vo.setTargetName(timeList.get(0).getTargetName());
vo.setTargetKey(targetKey); vo.setTargetKey(targetKey);
vo.setPhaseType(phaseKey); vo.setPhaseType(phaseKey);
vo.setRangeDesc(pqReasonableRangeDto.getMinValue() + unit + " ~ " + pqReasonableRangeDto.getMaxValue() + unit); vo.setRangeDesc(pqReasonableRangeDto.getMinValue() + unit + " ~ " + pqReasonableRangeDto.getMaxValue() + unit);
valueList.forEach(ites -> { valueList.forEach(ites -> {
switch (ites.getType()) { switch (ites.getType()) {
case "AVG": case "AVG":
vo.setAvg(ites.getVal()); vo.setAvg(ites.getVal());
break; break;
case "MAX": case "MAX":
vo.setMax(ites.getVal()); vo.setMax(ites.getVal());
break; break;
case "MIN": case "MIN":
vo.setMin(ites.getVal()); vo.setMin(ites.getVal());
break; break;
case "CP95": case "CP95":
vo.setCp95(ites.getVal()); vo.setCp95(ites.getVal());
break; break;
} }
});
result.add(vo);
}); });
result.add(vo);
}); });
}); });
}); });
} }