预检测时进行录波校验、完善监测点结果修改逻辑

This commit is contained in:
caozehui
2025-09-16 13:43:08 +08:00
parent 4532f2242b
commit f56c1086b9
8 changed files with 366 additions and 139 deletions

View File

@@ -41,4 +41,15 @@ public interface DetectionDataDealService extends IReplenishMybatisService<SimAn
* @return
*/
Integer getMonitorResult(String monitorId, List<String> adTypes, String dataSource, Integer num, Integer waveNum, String code);
/**
* 获取指定检测次数下,最后一次合格录波的组数,如果没有合格的录波,则返回-1
*
* @param monitorId
* @param adTypes
* @param num
* @param code
* @return
*/
Map<Integer, Integer> getWaveNumResultMap(String monitorId, List<String> adTypes, Integer num, String code);
}

View File

@@ -15,6 +15,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 接收检测的原始数据以及计算后的结果
@@ -227,8 +228,11 @@ public class DetectionDataServiceImpl extends ReplenishMybatisServiceImpl<Detect
.like(ContrastNonHarmonicResult::getDevMonitorId, monitorId)
.in(CollUtil.isNotEmpty(adTypes), ContrastNonHarmonicResult::getAdType, adTypes)
.eq(ContrastNonHarmonicResult::getDataType, dataSource)
.eq(ContrastNonHarmonicResult::getNum, num)
.eq(ObjectUtil.isNotEmpty(waveNum), ContrastNonHarmonicResult::getWaveNum, waveNum);
.eq(ContrastNonHarmonicResult::getNum, num);
if (ObjectUtil.isNotEmpty(waveNum)) {
List<Integer> waveNumList = Stream.iterate(1, i -> i + 1).limit(waveNum).collect(Collectors.toList());
wrapper1.in(ContrastNonHarmonicResult::getWaveNum, waveNumList);
}
List<ContrastNonHarmonicResult> nonHarmonicResultList = contrastNonHarmonicService.list(wrapper1);
DynamicTableNameHandler.remove();
@@ -250,13 +254,59 @@ public class DetectionDataServiceImpl extends ReplenishMybatisServiceImpl<Detect
return isResultFlag(resultFlagList);
}
@Override
public Map<Integer, Integer> getWaveNumResultMap(String monitorId, List<String> adTypes, Integer num, String code) {
DynamicTableNameHandler.setTableName("ad_non_harmonic_result_" + code);
LambdaQueryWrapper<ContrastNonHarmonicResult> wrapper1 = new LambdaQueryWrapper<ContrastNonHarmonicResult>()
.like(ContrastNonHarmonicResult::getDevMonitorId, monitorId)
.in(CollUtil.isNotEmpty(adTypes), ContrastNonHarmonicResult::getAdType, adTypes)
.isNotNull(ContrastNonHarmonicResult::getWaveNum)
.eq(ContrastNonHarmonicResult::getNum, num);
List<ContrastNonHarmonicResult> nonHarmonicResultList = contrastNonHarmonicService.list(wrapper1);
DynamicTableNameHandler.remove();
DynamicTableNameHandler.setTableName("ad_harmonic_result_" + code);
LambdaQueryWrapper<ContrastHarmonicResult> wrapper2 = new LambdaQueryWrapper<ContrastHarmonicResult>()
.like(ContrastHarmonicResult::getDevMonitorId, monitorId)
.in(CollUtil.isNotEmpty(adTypes), ContrastHarmonicResult::getAdType, adTypes)
.isNotNull(ContrastHarmonicResult::getWaveNum)
.eq(ContrastHarmonicResult::getNum, num);
List<ContrastHarmonicResult> harmonicResultList = contrastHarmonicService.list(wrapper2);
DynamicTableNameHandler.remove();
TreeMap<Integer, List<ContrastNonHarmonicResult>> waveMap1 = nonHarmonicResultList.stream().collect(Collectors.groupingBy(ContrastNonHarmonicResult::getWaveNum, TreeMap::new, Collectors.toList()));
TreeMap<Integer, List<ContrastHarmonicResult>> waveMap2 = harmonicResultList.stream().collect(Collectors.groupingBy(ContrastHarmonicResult::getWaveNum, TreeMap::new, Collectors.toList()));
Map<Integer, List<Integer>> waveResultMap = new HashMap<>();
waveMap1.forEach((waveNum, vList) -> {
List<Integer> resultFlagList = waveResultMap.getOrDefault(waveNum, new ArrayList<>());
resultFlagList.addAll(vList.stream().map(ContrastNonHarmonicResult::getResultFlag).collect(Collectors.toList()));
waveResultMap.put(waveNum, resultFlagList);
});
waveMap2.forEach((waveNum, vList) -> {
List<Integer> resultFlagList = waveResultMap.getOrDefault(waveNum, new ArrayList<>());
resultFlagList.addAll(vList.stream().map(ContrastHarmonicResult::getResultFlag).collect(Collectors.toList()));
waveResultMap.put(waveNum, resultFlagList);
});
Map<Integer, Integer> result = new TreeMap<>();
waveResultMap.forEach((waveNum, resultFlagList) -> {
Integer resultFlag = isResultFlag(resultFlagList);
result.put(waveNum, resultFlag);
});
return result;
}
public static Integer isResultFlag(List<Integer> resultFlags) {
// 检测结果0:不符合 1:符合 2:/[未检测无结果])
//脚本结果是 1.符合 2.不符合 4.未检测无结果 5.不参与误差比较
resultFlags = resultFlags.stream().filter(x -> 4 != x && 5 != x).distinct().collect(Collectors.toList());
if (CollUtil.isNotEmpty(resultFlags)) {
if (resultFlags.contains(2)) {
return 0;
return 2;
} else {
switch (resultFlags.get(0)) {
case 1: