| | |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.Comparator; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.concurrent.atomic.AtomicInteger; |
| | | |
| | | /** |
| | |
| | | |
| | | protected ScoreResult scoreResult; |
| | | |
| | | Map<Integer, Long> problemHazardCounts; |
| | | |
| | | long projectCheckCount; |
| | | |
| | | // 评估结果 |
| | | @Override |
| | | protected JSONObject buildEvalInfo() { |
| | |
| | | |
| | | evalInfo.put("综合信息", buildAbstractInfo()); |
| | | evalInfo.put("检查项", buildCheckItems()); |
| | | evalInfo.put("隐患等级分布", buildErrorLevel(getFuzzyRoot())); |
| | | evalInfo.put("隐患等级分布", buildErrorLevel(getErrorLevelCounts())); |
| | | |
| | | return evalInfo; |
| | | } |
| | | |
| | | /** |
| | | * 获取报告使用的隐患等级计数。 |
| | | * 默认使用模糊结果,评分报告可按需使用评分结果。 |
| | | */ |
| | | protected int[] getErrorLevelCounts() { |
| | | var root = getFuzzyRoot(); |
| | | if (root == null || root.getData() == null) { |
| | | return null; |
| | | } |
| | | return root.getData().getTotalErrorCounts(); |
| | | } |
| | | |
| | | /** |
| | |
| | | return null; |
| | | |
| | | JSONObject result = new JSONObject(); |
| | | result.put("名称", node.getName()); |
| | | var name = node.getName(); |
| | | result.put("名称", name); |
| | | result.put("问题清单标题", buildProblemListTitle(name)); |
| | | buildNode(result, node); |
| | | |
| | | var cfuzzyNode = getFuzzyNodeByPath(node.getPath()); |
| | |
| | | info.put("类别", n.getName()); |
| | | info.put("序号", index.getAndIncrement() + 1); |
| | | buildNode(info, n); |
| | | |
| | | |
| | | // 从fuzzyNode中获取评价 |
| | | var fuzzyNode = getFuzzyNodeByPath(n.getPath()); |
| | | if(fuzzyNode != null && fuzzyNode.getData() != null && fuzzyNode.getData().getRiskLevel() != null) { |
| | |
| | | return result; |
| | | } |
| | | |
| | | private String buildProblemListTitle(String name) { |
| | | if (name == null || name.isBlank()) { |
| | | return "问题清单"; |
| | | } |
| | | if ("安全检查".equals(name)) { |
| | | return "安全问题清单"; |
| | | } |
| | | return name + "问题清单"; |
| | | } |
| | | |
| | | /** |
| | | * 构建错误信息 |
| | | * @param nodePath 节点路径 |
| | |
| | | protected List<Object> buildErrorInfo(String nodePath) { |
| | | var suffix = nodePath + "/"; |
| | | var errors = new ArrayList<>(); |
| | | // 按 problem.id 去重,相同问题只保留第一个记录 |
| | | var nodeRecords = records.stream() |
| | | .filter(record -> record.getProblem() != null && |
| | | .filter(record -> record.getProblem() != null && |
| | | record.getProblem().getHierarchyPath() != null && |
| | | record.getProblem().getHierarchyPath().startsWith(suffix)) |
| | | .collect(java.util.stream.Collectors.toMap( |
| | | record -> record.getProblem().getId(), |
| | | record -> record, |
| | | (existing, replacement) -> existing // 保留第一个遇到的记录 |
| | | )) |
| | | .values(); |
| | | |
| | | // 按照record.errorLevel排序 |
| | | .sorted(Comparator.comparing(ErrorRecord::getLevel, Comparator.nullsLast(Comparator.naturalOrder()))) |
| | | .toList(); |
| | | |
| | | for(var record : nodeRecords){ |
| | | var subItem = buildRecordDetail(record); |
| | | subItem.put("项目级别", errorNodeName(record)); |
| | | subItem.put("同类隐患出现频次", getProblemHazardCount(record)); |
| | | subItem.put("检查频次", getProblemCheckCount(record)); |
| | | errors.add(subItem); |
| | | } |
| | | return errors; |
| | | } |
| | | |
| | | private long getProblemHazardCount(ErrorRecord record) { |
| | | var problemId = record != null && record.getProblem() != null ? record.getProblem().getId() : null; |
| | | if (problemId == null || problemHazardCounts == null) { |
| | | return 0L; |
| | | } |
| | | return problemHazardCounts.getOrDefault(problemId, 0L); |
| | | } |
| | | |
| | | private long getProblemCheckCount(ErrorRecord record) { |
| | | return Math.max(projectCheckCount, 0L); |
| | | } |
| | | |
| | | /** |
| | | * 构建错误节点名称 |
| | | * @param record 记录 |