|
|
|
@ -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 modelAtomicIndex 原子指标
|
|
|
|
|
* @param evidenceDirectories 证据目录
|
|
|
|
|
* @param atomicResult 原子指标结果
|
|
|
|
|
* @return 是否存在
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private boolean dbIndexAnalysis(String caseId, String sql, ModelAtomicResult atomicResult) {
|
|
|
|
|
private boolean dbIndexAnalysis(String caseId, ModelAtomicIndex modelAtomicIndex,List<EvidenceDirectory> evidenceDirectories, ModelAtomicResult atomicResult) {
|
|
|
|
|
Map<String, Object> params = new HashMap<>();
|
|
|
|
|
params.put("caseId", caseId);
|
|
|
|
|
List<Map> mapList = rowSqlMapper.selectList(sql, params, Map.class);
|
|
|
|
|
List<Map> 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<CaseEvidence> 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<CaseEvidence> 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<CaseEvidence> 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<String> 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<String> 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;
|
|
|
|
|
}
|
|
|
|
|