统计数据

This commit is contained in:
caozehui
2025-10-09 15:50:54 +08:00
parent d06fa8476c
commit 1abba4a528
15 changed files with 816 additions and 422 deletions

View File

@@ -99,8 +99,6 @@ import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static com.njcn.gather.detection.util.socket.FormalTestManager.waveNum;
/**
* @author caozehui
* @data 2024-12-30
@@ -1997,13 +1995,13 @@ public class ResultServiceImpl implements IResultService {
if ("无法比较".equals(resultTemp)) {
String numOfDataStr = singlePhaseData.get(ItemReportKeyEnum.NUM_OF_DATA.getKey());
unComparableMap.computeIfAbsent(harmNum, k -> new LinkedHashMap<>())
.computeIfAbsent(numOfDataStr, k -> new ArrayList<>())
.add(phase.toUpperCase() + "");
.computeIfAbsent(numOfDataStr, k -> new ArrayList<>())
.add(phase.toUpperCase() + "");
} else if ("不符合".equals(resultTemp)) {
String numOfDataStr = singlePhaseData.get(ItemReportKeyEnum.NUM_OF_DATA.getKey());
unqualifiedMap.computeIfAbsent(harmNum, k -> new LinkedHashMap<>())
.computeIfAbsent(numOfDataStr, k -> new ArrayList<>())
.add(phase.toUpperCase() + "");
.computeIfAbsent(numOfDataStr, k -> new ArrayList<>())
.add(phase.toUpperCase() + "");
}
}
}
@@ -2035,7 +2033,7 @@ public class ResultServiceImpl implements IResultService {
// 生成specialCase描述
String specialCase = generateHarmonicSpecialCase(zeroFilteredMap, unComparableMap, unqualifiedMap,
totalDataPoints, zeroFilteredPoints, isInterHarmonic);
totalDataPoints, zeroFilteredPoints, isInterHarmonic);
// 设置检测结果
String overallResult;
@@ -2058,6 +2056,7 @@ public class ResultServiceImpl implements IResultService {
/**
* 判断值是否为零
*
* @param value 字符串值
* @return 是否为零
*/
@@ -2075,12 +2074,13 @@ public class ResultServiceImpl implements IResultService {
/**
* 生成谐波类特殊情况描述
* @param zeroFilteredMap 双零过滤的次数和相别
* @param unComparableMap 无法比较的次数和相别
* @param unqualifiedMap 不符合的次数和相别
* @param totalDataPoints 总数据点数
*
* @param zeroFilteredMap 双零过滤的次数和相别
* @param unComparableMap 无法比较的次数和相别
* @param unqualifiedMap 不符合的次数和相别
* @param totalDataPoints 总数据点数
* @param zeroFilteredPoints 双零过滤的数据点数
* @param isInterHarmonic 是否为间谐波
* @param isInterHarmonic 是否为间谐波
* @return 特殊情况描述
*/
private String generateHarmonicSpecialCase(Map<Integer, List<String>> zeroFilteredMap,
@@ -2122,8 +2122,8 @@ public class ResultServiceImpl implements IResultService {
List<String> phases = dataEntry.getValue();
String phaseKey = String.join("", phases);
groupedUnComparable.computeIfAbsent(numOfData, k -> new LinkedHashMap<>())
.computeIfAbsent(phaseKey, k -> new ArrayList<>())
.add(harmNum);
.computeIfAbsent(phaseKey, k -> new ArrayList<>())
.add(harmNum);
}
}
@@ -2164,7 +2164,7 @@ public class ResultServiceImpl implements IResultService {
harmPhaseDesc = "" + displayHarmNum + "次谐波" + String.join("", phases);
}
groupedByNumOfData.computeIfAbsent(numOfData, k -> new ArrayList<>())
.add(harmPhaseDesc);
.add(harmPhaseDesc);
}
}
@@ -2176,7 +2176,7 @@ public class ResultServiceImpl implements IResultService {
// 合并描述第4次谐波A相、B相、C相、第32次谐波A相、第44次谐波C相
specialCaseDesc.append(String.join("", harmPhaseList));
specialCaseDesc.append("收集有效组数为").append(numOfData)
.append("组,误差计算结果不符合误差标准要求。");
.append("组,误差计算结果不符合误差标准要求。");
}
}
@@ -2195,7 +2195,8 @@ public class ResultServiceImpl implements IResultService {
/**
* 获取显示用的谐波次数
* @param harmNum 原始次数2-50
*
* @param harmNum 原始次数2-50
* @param isInterHarmonic 是否为间谐波
* @return 显示用的次数字符串
*/
@@ -2214,7 +2215,8 @@ public class ResultServiceImpl implements IResultService {
/**
* 格式化谐波次数列表
* @param harmNumbers 谐波次数列表
*
* @param harmNumbers 谐波次数列表
* @param isInterHarmonic 是否为间谐波
* @return 格式化的字符串,如"2、3、5"或"2-5、7、9-11"(间谐波为"1.5、2.5、3.5"
*/
@@ -2401,10 +2403,10 @@ public class ResultServiceImpl implements IResultService {
/**
* 解析非谐波数据
*
* @param valueJson JSON格式的数据
* @param phase 相别标识
* @param numOfData 收集组数
* @param scriptCode 脚本代码,用于判断是否需要特殊格式化
* @param valueJson JSON格式的数据
* @param phase 相别标识
* @param numOfData 收集组数
* @param scriptCode 脚本代码,用于判断是否需要特殊格式化
* @param decimalPlaces 小数位数null则不格式化
* @return 解析后的数据列表
*/
@@ -2528,11 +2530,11 @@ public class ResultServiceImpl implements IResultService {
/**
* 解析谐波相数据
*
* @param jsonData JSON格式的数据
* @param phase 相别标识
* @param harmNum 谐波次数
* @param numOfData 收集组数
* @param scriptCode 脚本代码,用于判断是否需要特殊格式化
* @param jsonData JSON格式的数据
* @param phase 相别标识
* @param harmNum 谐波次数
* @param numOfData 收集组数
* @param scriptCode 脚本代码,用于判断是否需要特殊格式化
* @param decimalPlaces 小数位数null则不格式化
* @return 解析后的数据列表
*/
@@ -3036,13 +3038,35 @@ public class ResultServiceImpl implements IResultService {
AdPlan plan = adPlanService.getById(planId);
String dataSourceId = plan.getDatasourceId();
String[] dataSourceIds = dataSourceId.split(StrUtil.COMMA);
DataSourceEnum nonWaveDataSourceEnum = DataSourceEnum.REAL_DATA;
for (String ds : dataSourceIds) {
switch (DataSourceEnum.valueOf(ds)) {
case MINUTE_STATISTICS_MIN:
nonWaveDataSourceEnum = DataSourceEnum.MINUTE_STATISTICS_MIN;
break;
case MINUTE_STATISTICS_MAX:
nonWaveDataSourceEnum = DataSourceEnum.MINUTE_STATISTICS_MAX;
break;
case MINUTE_STATISTICS_AVG:
nonWaveDataSourceEnum = DataSourceEnum.MINUTE_STATISTICS_AVG;
break;
case MINUTE_STATISTICS_CP95:
nonWaveDataSourceEnum = DataSourceEnum.MINUTE_STATISTICS_CP95;
break;
}
}
DataSourceEnum finalNonWaveDataSourceEnum = nonWaveDataSourceEnum;
BiMap<String, String> testItemMap = HashBiMap.create();
List<String> testItemIds = Arrays.asList(plan.getTestItem().split(","));
List<DictTree> dictTreeList = dictTreeService.getDictTreeById(testItemIds);
List<String> fatherIdList = dictTreeList.stream().map(DictTree::getId).collect(Collectors.toList());
List<DictTree> childDictTreeList = dictTreeService.listByFatherIds(fatherIdList);
if (CollUtil.isNotEmpty(childDictTreeList)) {
List<String> collect1 = SocketContrastResponseService.testItemCodeMap.values().stream().flatMap(Collection::stream).map(x -> x.split("\\$")[1]).collect(Collectors.toList());
List<String> collect1 = SocketContrastResponseService.testItemCodeMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList());
testItemMap.putAll(childDictTreeList.stream().filter(x -> collect1.contains(x.getCode())).collect(Collectors.toMap(obj -> DetectionCodeEnum.REAL_PREFIX.getCode() + obj.getCode(), obj -> obj.getId())));
}
@@ -3067,6 +3091,7 @@ public class ResultServiceImpl implements IResultService {
.update();
List<AdPair> adPairList = adPairService.listByDevIds(Arrays.asList(deviceId));
Map<Integer, List<AdPair>> numAdPairsMap = adPairList.stream().collect(Collectors.groupingBy(AdPair::getNum, Collectors.toList()));
numAdPairsMap.forEach((num, pairList) -> {
BiMap<String, String> parsIp = HashBiMap.create();
BiMap<String, String> parsId = HashBiMap.create();
@@ -3092,11 +3117,11 @@ public class ResultServiceImpl implements IResultService {
List<DevData> devData = contrastToList(devNonHarmonicRawDataList, devHarmonicRawDataList, testItemMap);
List<DevData> standardDevData = contrastToList(stdDevNonHarmonicRawDataList, stdDevHarmonicRawDataList, testItemMap);
detectionServiceImpl.processing(devData, standardDevData, parsIp, devIdMapComm, testItemMap.keySet().stream().collect(Collectors.toList()), errorSysId, dataRule, numMap, code, null);
detectionServiceImpl.processing(devData, standardDevData, parsIp, devIdMapComm, testItemMap.keySet().stream().collect(Collectors.toList()), errorSysId, dataRule, numMap, code, null, finalNonWaveDataSourceEnum);
parsId.forEach((devMonitorId, stdDevMonitorId) -> {
String[] split = devMonitorId.split(CnSocketUtil.SPLIT_TAG);
pqMonitorService.updateMonitorResult(devMonitorId, null, DataSourceEnum.REAL_DATA, num, null, oldCode);
pqMonitorService.updateMonitorResult(devMonitorId, null, finalNonWaveDataSourceEnum, num, null, oldCode);
pqDevService.updateResult(split[0], null);
});
@@ -3109,12 +3134,12 @@ public class ResultServiceImpl implements IResultService {
devData = contrastToList(devNonHarmonicRawDataList, devHarmonicRawDataList, testItemMap);
standardDevData = contrastToList(stdDevNonHarmonicRawDataList, stdDevHarmonicRawDataList, testItemMap);
detectionServiceImpl.processing(devData, standardDevData, parsIp, devIdMapComm, testItemMap.keySet().stream().collect(Collectors.toList()), errorSysId, dataRule, numMap, oldCode, i);
detectionServiceImpl.processing(devData, standardDevData, parsIp, devIdMapComm, testItemMap.keySet().stream().collect(Collectors.toList()), errorSysId, dataRule, numMap, oldCode, i, DataSourceEnum.WAVE_DATA);
}
parsId.forEach((devMonitorId, stdDevMonitorId) -> {
String[] split = devMonitorId.split(CnSocketUtil.SPLIT_TAG);
pqMonitorService.updateMonitorResult(devMonitorId, null, DataSourceEnum.WAVE_DATA, num, adPlanTestConfig.getWaveRecord(), oldCode);
pqMonitorService.updateMonitorResult(devMonitorId, null, finalNonWaveDataSourceEnum, num, adPlanTestConfig.getWaveRecord(), oldCode);
pqDevService.updateResult(split[0], null);
});
});
@@ -3325,7 +3350,7 @@ public class ResultServiceImpl implements IResultService {
/**
* 格式化数值,保留指定的小数位数
*
* @param value 原始数值
* @param value 原始数值
* @param decimalPlaces 小数位数
* @return 格式化后的字符串
*/
@@ -3366,7 +3391,7 @@ public class ResultServiceImpl implements IResultService {
/**
* 格式化误差范围字符串,支持处理"-0.05~0.05"格式并转换为"±0.05"格式
*
* @param errorRange 误差范围字符串
* @param errorRange 误差范围字符串
* @param decimalPlaces 小数位数
* @return 格式化后的误差范围
*/