diff --git a/src/main/java/com/supervision/police/dto/caseScore/CaseScoreDetailBuilder.java b/src/main/java/com/supervision/police/dto/caseScore/CaseScoreDetailBuilder.java index c691265..8af13d9 100644 --- a/src/main/java/com/supervision/police/dto/caseScore/CaseScoreDetailBuilder.java +++ b/src/main/java/com/supervision/police/dto/caseScore/CaseScoreDetailBuilder.java @@ -265,17 +265,18 @@ public class CaseScoreDetailBuilder { if (null == this.evidenceDirectoryDTO){ return new ArrayList<>(); } - // 结构化推理分类id 分类 - List categoryList = this.indexResultList.stream() + // 结构化推理分类id 只过滤不得分的指标 + List categoryList = this.indexResultList.stream().filter(indexResult -> indexResult.getActualScore() == 0) .flatMap(indexResult -> indexResult.getAtomicResults().stream()) .filter(atomicResult -> StrUtil.equals(IndexRuleConstants.OPERAND_TYPE_STRUCTURE, atomicResult.getIndexSource())) .map(AtomicResult::getCategoryId).filter(id -> !this.evidenceDirectoryDTO.categoryHasFile(id)).toList(); - // 数据库查询分类id - List list = this.indexResultList.stream().flatMap(indexResult -> indexResult.getAtomicResults().stream()) + // 数据库查询分类id 只过滤不得分的指标 + List list = this.indexResultList.stream().filter(indexResult -> indexResult.getActualScore() == 0) + .flatMap(indexResult -> indexResult.getAtomicResults().stream()) .filter(atomicResult -> StrUtil.equals(IndexRuleConstants.OPERAND_TYPE_DB, atomicResult.getIndexSource())) - .filter(AtomicResult::resultIsTrue).map(AtomicResult::getCategoryId).filter(Objects::nonNull).toList(); + .filter(r->!r.resultIsTrue()).map(AtomicResult::getCategoryId).filter(Objects::nonNull).toList(); List all = new ArrayList<>(categoryList); all.addAll(list); diff --git a/src/main/java/com/supervision/police/service/impl/ModelIndexServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ModelIndexServiceImpl.java index 17fa594..8bc7735 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelIndexServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelIndexServiceImpl.java @@ -7,6 +7,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlSelectParser; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; diff --git a/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java index 4f57e30..d3a71fc 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java @@ -255,7 +255,7 @@ public class ModelServiceImpl implements ModelService { operandUnitResultSet.add(relationSymbol == manualIndexAnalysis(ruleCondition.getAtomicIndexId(), caseId)); break; case OPERAND_TYPE_DB: - operandUnitResultSet.add(relationSymbol == dbIndexAnalysis(caseId, modelAtomicIndex.getQueryLang(), result)); + operandUnitResultSet.add(relationSymbol == dbIndexAnalysis(caseId, modelAtomicIndex,evidenceDirectories, result)); break; case OPERAND_TYPE_GRAPH: operandUnitResultSet.add(relationSymbol == graphIndexAnalysis(casePerson.getName(), modelAtomicIndex.getQueryLang(), analyseCaseDTO.getCaseId(), ruleCondition, result)); @@ -328,19 +328,19 @@ public class ModelServiceImpl implements ModelService { /** * 数据库查询指标分析 - * - * @param caseId 案件ID - * @param sql 查询语句 + * @param caseId 案件ID + * @param modelAtomicIndex 原子指标 + * @param evidenceDirectories 证据目录 * @param atomicResult 原子指标结果 - * @return 是否存在 + * @return */ - private boolean dbIndexAnalysis(String caseId, String sql, ModelAtomicResult atomicResult) { + private boolean dbIndexAnalysis(String caseId, ModelAtomicIndex modelAtomicIndex,List evidenceDirectories, ModelAtomicResult atomicResult) { Map params = new HashMap<>(); params.put("caseId", caseId); - List mapList = rowSqlMapper.selectList(sql, params, Map.class); + List mapList = rowSqlMapper.selectList(modelAtomicIndex.getQueryLang(), params, Map.class); boolean flag = false; if (mapList != null && !mapList.isEmpty()) { - flag = true; + flag = evidenceDirectories.stream().anyMatch(evidenceDirectory -> StrUtil.equals(evidenceDirectory.getCategoryId(), modelAtomicIndex.getCategoryId())); String evidenceIds = mapList.stream().map(map -> map.get("id").toString()).collect(Collectors.joining(",")); atomicResult.setEvidenceId(evidenceIds); atomicResult.setAtomicResult(JudgeResultEnum.EXIST.getCode()); @@ -421,15 +421,20 @@ public class ModelServiceImpl implements ModelService { ModelAtomicIndex modelAtomicIndex = atomicIndices.stream().filter(atomicIndex -> atomicIndex.getId().equals(modelAtomicIndexId)).findAny().orElse(null); if (modelAtomicIndex == null) { log.error("原子指标不存在。原子指标ID:{}", modelAtomicIndexId); + atomicResult.setAtomicResult(JudgeResultEnum.NOT_EXIST.getCode()); + modelAtomicResultService.saveOrUpdate(atomicResult); return flag; } List evidences = getEvidencesByPromptId(modelAtomicIndex.getPromptId(), caseEvidences, evidenceDirectories, notePrompts); + atomicResult.setEvidenceId(evidences.stream().map(CaseEvidence::getId).collect(Collectors.joining(","))); ModelAtomicIndex rightModelAtomicIndex = null; if (OPERAND_TYPE_STRUCTURE.equals(right.getOperandType())) { log.info("右操作数为结构化查询,提前查好对应的原子指标"); rightModelAtomicIndex = atomicIndices.stream().filter(atomicIndex -> atomicIndex.getId().equals(left.getAtomicIndexId())).findAny().orElse(null); if (rightModelAtomicIndex == null || StringUtils.isEmpty(rightModelAtomicIndex.getPromptId())) { log.error("原子指标不存在。原子指标ID:{}", left.getAtomicIndexId()); + atomicResult.setAtomicResult(JudgeResultEnum.NOT_EXIST.getCode()); + modelAtomicResultService.saveOrUpdate(atomicResult); return flag; } } @@ -440,14 +445,12 @@ public class ModelServiceImpl implements ModelService { if (OPERAND_TYPE_STRUCTURE.equals(right.getOperandType())) { List rightEvidences = getEvidencesByPromptId(rightModelAtomicIndex.getPromptId(), caseEvidences, evidenceDirectories, notePrompts); if (CalculationUtil.evaluateExpression(String.valueOf(getSumFromEvidences(left.getPropertyKey(), evidences)), operator, String.valueOf(getSumFromEvidences(right.getPropertyKey(), rightEvidences)))) { - atomicResult.setEvidenceId(evidences.stream().map(CaseEvidence::getId).collect(Collectors.joining(","))); atomicResult.setAtomicResult(JudgeResultEnum.EXIST.getCode()); modelAtomicResultService.saveOrUpdate(atomicResult); return true; } } else if (OPERAND_TYPE_VALUE.equals(right.getOperandType())) { if (CalculationUtil.evaluateExpression(String.valueOf(getSumFromEvidences(left.getPropertyKey(), evidences)), operator, right.getValue())) { - atomicResult.setEvidenceId(evidences.stream().map(CaseEvidence::getId).collect(Collectors.joining(","))); atomicResult.setAtomicResult(JudgeResultEnum.EXIST.getCode()); modelAtomicResultService.saveOrUpdate(atomicResult); return true; @@ -458,14 +461,12 @@ public class ModelServiceImpl implements ModelService { if (OPERAND_TYPE_STRUCTURE.equals(right.getOperandType())) { List rightEvidences = getEvidencesByPromptId(rightModelAtomicIndex.getPromptId(), caseEvidences, evidenceDirectories, notePrompts); if (CalculationUtil.evaluateExpression(String.valueOf(evidences.size()), operator, String.valueOf(rightEvidences.size()))) { - atomicResult.setEvidenceId(evidences.stream().map(CaseEvidence::getId).collect(Collectors.joining(","))); atomicResult.setAtomicResult(JudgeResultEnum.EXIST.getCode()); modelAtomicResultService.saveOrUpdate(atomicResult); return true; } } else if (OPERAND_TYPE_VALUE.equals(right.getOperandType())) { if (CalculationUtil.evaluateExpression(String.valueOf(evidences.size()), operator, right.getValue())) { - atomicResult.setEvidenceId(evidences.stream().map(CaseEvidence::getId).collect(Collectors.joining(","))); atomicResult.setAtomicResult(JudgeResultEnum.EXIST.getCode()); modelAtomicResultService.saveOrUpdate(atomicResult); return true; @@ -479,7 +480,6 @@ public class ModelServiceImpl implements ModelService { Set rightValueSet = getValueSetFromEvidences(right, rightEvidences); // 使用CalculationUtil.evaluateExpression方法遍历比较leftValueSet和rightValueSet的任一值,一旦有一个满足(返回true),则return true if (leftValueSet.stream().anyMatch(leftValue -> rightValueSet.stream().anyMatch(rightValue -> CalculationUtil.evaluateExpression(leftValue, operator, rightValue)))) { - atomicResult.setEvidenceId(evidences.stream().map(CaseEvidence::getId).collect(Collectors.joining(","))); atomicResult.setAtomicResult(JudgeResultEnum.EXIST.getCode()); modelAtomicResultService.saveOrUpdate(atomicResult); return true; @@ -487,7 +487,6 @@ public class ModelServiceImpl implements ModelService { } else if (OPERAND_TYPE_VALUE.equals(right.getOperandType())) { Set leftValueSet = getValueSetFromEvidences(left, evidences); if (leftValueSet.stream().anyMatch(leftValue -> CalculationUtil.evaluateExpression(leftValue, operator, right.getValue()))) { - atomicResult.setEvidenceId(evidences.stream().map(CaseEvidence::getId).collect(Collectors.joining(","))); atomicResult.setAtomicResult(JudgeResultEnum.EXIST.getCode()); modelAtomicResultService.saveOrUpdate(atomicResult); return true; @@ -495,10 +494,14 @@ public class ModelServiceImpl implements ModelService { } break; default: + atomicResult.setAtomicResult(JudgeResultEnum.NOT_EXIST.getCode()); + modelAtomicResultService.saveOrUpdate(atomicResult); break; } } else { log.error("证据不存在。提示词ID:{}", modelAtomicIndex.getPromptId()); + atomicResult.setAtomicResult(JudgeResultEnum.NOT_EXIST.getCode()); + modelAtomicResultService.saveOrUpdate(atomicResult); } return flag; }