|
|
|
@ -647,21 +647,12 @@ public class ResultAnalysisController extends BaseController { |
|
|
|
|
|
|
|
/** |
|
|
|
* 缺陷记录(将确认缺陷的数据展示在这) |
|
|
|
* @param query 查询条件:点位名称、缺陷描述(下拉,选项见 /defect/descOptions)、采集时间范围 |
|
|
|
* @param query 查询条件:点位名称、算法名称(下拉,选项见 /defect/algNameOptions)、采集时间范围 |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
@GetMapping({"/defect/list"}) |
|
|
|
public TableDataInfo defectList(DefectRecordQuery query) { |
|
|
|
ResultAnalysis resultAnalysis = new ResultAnalysis(); |
|
|
|
resultAnalysis.setPointStatusList(Arrays.asList(PointStatusEnum.CONFIRMED.getCode(), PointStatusEnum.TRACKING.getCode())); |
|
|
|
if (query != null) { |
|
|
|
resultAnalysis.setPointName(query.getPointName()); |
|
|
|
// 采集时间即 patrol_result.create_time(返回字段 patrolTime) |
|
|
|
resultAnalysis.setBeginTime(query.getPatrolTimeBegin()); |
|
|
|
resultAnalysis.setEndTime(query.getPatrolTimeEnd()); |
|
|
|
} |
|
|
|
// 查出全部数据 |
|
|
|
List<PatrolData> allList = patrolResultService.selectPatrolDataResultByTaskCodeV2(resultAnalysis); |
|
|
|
public TableDataInfo defectList(DefectListQuery query) { |
|
|
|
List<PatrolData> allList = patrolResultService.selectDefectList(query); |
|
|
|
|
|
|
|
Map<String, String> imageNormalMap = allList.parallelStream() |
|
|
|
.filter(patrolData -> StringUtils.isNotEmpty(patrolData.getImageNormalUrlPath())) |
|
|
|
@ -749,17 +740,14 @@ public class ResultAnalysisController extends BaseController { |
|
|
|
patrolData.setResStatus(value.stream().map(item -> item.getResStatus() != null ? item.getResStatus() : "").distinct().findFirst().orElse("")); |
|
|
|
patrolData.setSuggestion(value.stream().map(item -> item.getSuggestion() != null ? item.getSuggestion() : "").distinct().findFirst().orElse("")); |
|
|
|
patrolData.setWarnStatus(value.stream().map(item -> item.getWarnStatus() != null ? item.getWarnStatus() : "").distinct().findFirst().orElse("")); |
|
|
|
patrolData.setTaskName(value.stream().map(item -> item.getTaskName() != null ? item.getTaskName() : "").distinct().findFirst().orElse("")); |
|
|
|
|
|
|
|
resultList.add(patrolData); |
|
|
|
}); |
|
|
|
// 缺陷描述筛选:按明细行的 desc 精确匹配确定命中的分组,命中分组整条保留(一条记录聚合的多条缺陷描述不会丢失) |
|
|
|
if (query != null && StringUtils.isNotEmpty(query.getDesc())) { |
|
|
|
String selectedDesc = query.getDesc(); |
|
|
|
Set<String> matchedKeys = filterList.stream() |
|
|
|
.filter(data -> selectedDesc.equals(data.getDesc())) |
|
|
|
.map(data -> data.getTaskPatrolId() + "|" + data.getObjectId() + "|" + data.getAlgType()) |
|
|
|
.collect(Collectors.toSet()); |
|
|
|
resultList.removeIf(item -> !matchedKeys.contains(item.getTaskPatrolId() + "|" + item.getObjectId() + "|" + item.getAlgType())); |
|
|
|
// 算法名称筛选:algType 属于聚合分组维度,按聚合记录的 algName 精确匹配,命中记录整条保留(多条缺陷描述不会丢失) |
|
|
|
if (query != null && StringUtils.isNotEmpty(query.getAlgName())) { |
|
|
|
String selectedAlgName = query.getAlgName(); |
|
|
|
resultList.removeIf(item -> !selectedAlgName.equals(item.getAlgName())); |
|
|
|
} |
|
|
|
// 非 null 的值按降序排列(最新的时间在前),null的在最后面排列 |
|
|
|
resultList.sort(Comparator.comparing(PatrolData::getPatrolTime, |
|
|
|
@ -781,29 +769,37 @@ public class ResultAnalysisController extends BaseController { |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 缺陷记录-缺陷描述下拉选项(返回去重后的 desc 值,供 /defect/list 的缺陷描述下拉筛选使用) |
|
|
|
* @param query 查询条件:点位名称、采集时间范围(不含缺陷描述,避免选项被自身过滤) |
|
|
|
* 缺陷记录-算法名称下拉选项(返回去重后的 algName 值,供 /defect/list 的算法名称下拉筛选使用) |
|
|
|
* @param query 查询条件:点位名称、采集时间范围(algName 不参与查询,避免选项被自身过滤) |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
@GetMapping({"/defect/descOptions"}) |
|
|
|
public AjaxResult defectDescOptions(DefectRecordQuery query) { |
|
|
|
ResultAnalysis resultAnalysis = new ResultAnalysis(); |
|
|
|
resultAnalysis.setPointStatusList(Arrays.asList(PointStatusEnum.CONFIRMED.getCode(), PointStatusEnum.TRACKING.getCode())); |
|
|
|
if (query != null) { |
|
|
|
resultAnalysis.setPointName(query.getPointName()); |
|
|
|
resultAnalysis.setBeginTime(query.getPatrolTimeBegin()); |
|
|
|
resultAnalysis.setEndTime(query.getPatrolTimeEnd()); |
|
|
|
} |
|
|
|
List<PatrolData> allList = patrolResultService.selectPatrolDataResultByTaskCodeV2(resultAnalysis); |
|
|
|
// 仅取缺陷数据(与 /defect/list 口径一致)的非空 desc,去重后按字典序返回 |
|
|
|
List<String> descOptions = allList.stream() |
|
|
|
@GetMapping({"/defect/algNameOptions"}) |
|
|
|
public AjaxResult defectAlgNameOptions(DefectListQuery query) { |
|
|
|
List<PatrolData> allList = patrolResultService.selectDefectList(query); |
|
|
|
List<AlgInfo> algInfos = patrolResultService.selectAlgInfo(new PatrolResult()); |
|
|
|
// 仅取缺陷数据(与 /defect/list 口径一致),按 algType 解析出 algName 后去重、按字典序返回 |
|
|
|
List<String> algNameOptions = allList.stream() |
|
|
|
.filter(data -> "0".equals(data.getWarnStatus())) |
|
|
|
.map(PatrolData::getDesc) |
|
|
|
.map(data -> resolveAlgName(algInfos, data.getAlgType())) |
|
|
|
.filter(StringUtils::isNotEmpty) |
|
|
|
.distinct() |
|
|
|
.sorted() |
|
|
|
.collect(Collectors.toList()); |
|
|
|
return AjaxResult.success(descOptions); |
|
|
|
return AjaxResult.success(algNameOptions); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 按算法类型解析算法名称,口径与 /defect/list 明细行分配的 algName 一致(未匹配到时返回空串)。 |
|
|
|
*/ |
|
|
|
private String resolveAlgName(List<AlgInfo> algInfos, String algType) { |
|
|
|
if (algInfos == null) { |
|
|
|
return ""; |
|
|
|
} |
|
|
|
return algInfos.stream() |
|
|
|
.filter(alg -> alg.getAlgSubtypeCode() != null && alg.getAlgSubtypeCode().equals(algType)) |
|
|
|
.map(AlgInfo::getAlgSubtypeName) |
|
|
|
.findFirst() |
|
|
|
.orElse(""); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
|