异常数据功能重写
This commit is contained in:
@@ -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<PqDataVerifyBakMappe
|
||||
}
|
||||
List<PqDataVerifyBak> dataVerifyList = this.list(lambdaQueryWrapper);
|
||||
|
||||
|
||||
|
||||
|
||||
for (PqDataVerifyBak pqDataVerifyBak : dataVerifyList) {
|
||||
Set<String> set = new HashSet<>();
|
||||
try (InputStream fileStream = fileStorageUtil.getFileStream(pqDataVerifyBak.getPath())) {
|
||||
@@ -278,45 +277,42 @@ public class PqDataVerifyBakServiceImpl extends ServiceImpl<PqDataVerifyBakMappe
|
||||
if (StrUtil.isNotBlank(monitorBaseParam.getTargetKey())) {
|
||||
if (targetJson.containsKey(monitorBaseParam.getTargetKey())) {
|
||||
JSONArray innerJson = targetJson.getJSONArray(monitorBaseParam.getTargetKey());
|
||||
JSONObject jsonObjectTem = (JSONObject) innerJson.get(0);
|
||||
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(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<PqDataVerifyBakMappe
|
||||
} catch (Exception e) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
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) {
|
||||
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<DetailAbnormalVO.DetailLimitInnerVO> 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<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 = "";
|
||||
innerJson.forEach(oo-> {
|
||||
JSONObject jsonObjectTem = (JSONObject) oo;
|
||||
String targetName = jsonObjectTem.get("targetName").toString();
|
||||
JSONArray list = jsonObjectTem.getJSONArray("list");
|
||||
List<DetailAbnormalVO.DetailLimitInnerVO> 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<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));
|
||||
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<String, List<DetailAbnormalVO.DetailLimitInnerVO>> 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);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user