|
|
|
@ -211,41 +211,37 @@ public class ModelServiceImpl implements ModelService {
|
|
|
|
|
// 得到当前指标要求的存在关系(存在或不存在)
|
|
|
|
|
boolean relationSymbol = IndexRuleConstants.EVALUATE_RESULT_EXIST.equals(ruleCondition.getRelationalSymbol());
|
|
|
|
|
ModelAtomicIndex modelAtomicIndex = atomicIndices.stream().filter(atomicIndex -> atomicIndex.getId().equals(ruleCondition.getAtomicIndexId())).findAny().orElse(null);
|
|
|
|
|
if (modelAtomicIndex == null) {
|
|
|
|
|
if (modelAtomicIndex == null && !OPERAND_TYPE_STRUCTURE.equals(ruleCondition.getIndexSource())) {
|
|
|
|
|
log.error("原子指标不存在,跳出当前循环。原子指标ID:{}", ruleCondition.getAtomicIndexId());
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
ruleCondition.getOperandUnitList().forEach(operandUnit -> {
|
|
|
|
|
Operand left = operandUnit.getLeftOperand();
|
|
|
|
|
Operand right = operandUnit.getRightOperand();
|
|
|
|
|
// 定义原子指标结果共有属性
|
|
|
|
|
ModelAtomicResult result = new ModelAtomicResult();
|
|
|
|
|
result.setIndexId(modelIndex.getId());
|
|
|
|
|
result.setCasePersonId(casePerson.getId());
|
|
|
|
|
result.setCaseId(analyseCaseDTO.getCaseId());
|
|
|
|
|
result.setAtomicId(modelAtomicIndex.getId());
|
|
|
|
|
result.setAtomicResult(JudgeResultEnum.NOT_EXIST.getCode());
|
|
|
|
|
ModelAtomicResult exist = modelAtomicResultMapper.selectByCaseIdAndAtomicId(caseId, casePerson.getId(), modelIndex.getId(), modelAtomicIndex.getId());
|
|
|
|
|
if (exist != null) {
|
|
|
|
|
result.setId(exist.getId());
|
|
|
|
|
}
|
|
|
|
|
switch (ruleCondition.getIndexSource()) {
|
|
|
|
|
case OPERAND_TYPE_MANUAL:
|
|
|
|
|
operandUnitResultSet.add(relationSymbol == manualIndexAnalysis(ruleCondition.getAtomicIndexId(), caseId));
|
|
|
|
|
break;
|
|
|
|
|
case OPERAND_TYPE_DB:
|
|
|
|
|
operandUnitResultSet.add(relationSymbol == dbIndexAnalysis(caseId, modelAtomicIndex.getQueryLang(), result));
|
|
|
|
|
break;
|
|
|
|
|
case OPERAND_TYPE_GRAPH:
|
|
|
|
|
operandUnitResultSet.add(relationSymbol == graphIndexAnalysis(casePerson.getName(), modelAtomicIndex, analyseCaseDTO, result));
|
|
|
|
|
break;
|
|
|
|
|
case OPERAND_TYPE_STRUCTURE:
|
|
|
|
|
operandUnitResultSet.add(structureIndexAnalysis(operandUnit, modelAtomicIndex, atomicIndices, notePrompts, evidenceDirectories, caseEvidences, result));
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
// 定义原子指标结果共有属性
|
|
|
|
|
ModelAtomicResult result = new ModelAtomicResult();
|
|
|
|
|
result.setIndexId(modelIndex.getId());
|
|
|
|
|
result.setCasePersonId(casePerson.getId());
|
|
|
|
|
result.setCaseId(analyseCaseDTO.getCaseId());
|
|
|
|
|
result.setAtomicId(ruleCondition.getAtomicIndexId());
|
|
|
|
|
result.setAtomicResult(JudgeResultEnum.NOT_EXIST.getCode());
|
|
|
|
|
ModelAtomicResult exist = modelAtomicResultMapper.selectByCaseIdAndAtomicId(caseId, casePerson.getId(), modelIndex.getId(), ruleCondition.getAtomicIndexId());
|
|
|
|
|
if (exist != null) {
|
|
|
|
|
result.setId(exist.getId());
|
|
|
|
|
}
|
|
|
|
|
switch (ruleCondition.getIndexSource()) {
|
|
|
|
|
case OPERAND_TYPE_MANUAL:
|
|
|
|
|
operandUnitResultSet.add(relationSymbol == manualIndexAnalysis(ruleCondition.getAtomicIndexId(), caseId));
|
|
|
|
|
break;
|
|
|
|
|
case OPERAND_TYPE_DB:
|
|
|
|
|
operandUnitResultSet.add(relationSymbol == dbIndexAnalysis(caseId, modelAtomicIndex.getQueryLang(), result));
|
|
|
|
|
break;
|
|
|
|
|
case OPERAND_TYPE_GRAPH:
|
|
|
|
|
operandUnitResultSet.add(relationSymbol == graphIndexAnalysis(casePerson.getName(), modelAtomicIndex, analyseCaseDTO, result));
|
|
|
|
|
break;
|
|
|
|
|
case OPERAND_TYPE_STRUCTURE:
|
|
|
|
|
ruleCondition.getOperandUnitList().forEach(operandUnit -> operandUnitResultSet.add(structureIndexAnalysis(operandUnit, ruleCondition.getAtomicIndexId(), atomicIndices, notePrompts, evidenceDirectories, caseEvidences, result)));
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
ruleConditionResultSet.add(CalculationUtil.calculateBooleanSet(operandUnitResultSet, ruleCondition.getLogic()));
|
|
|
|
|
});
|
|
|
|
|
ruleConditionGroupResultList.add(CalculationUtil.calculateBooleanSet(ruleConditionResultSet, ruleConditionGroup.getRowLogic()));
|
|
|
|
@ -378,7 +374,7 @@ public class ModelServiceImpl implements ModelService {
|
|
|
|
|
* 结构化查询指标分析
|
|
|
|
|
*
|
|
|
|
|
* @param operandUnit 操作单元
|
|
|
|
|
* @param modelAtomicIndex 原子指标
|
|
|
|
|
* @param modelAtomicIndexId 原子指标ID
|
|
|
|
|
* @param atomicIndices 原子指标集合
|
|
|
|
|
* @param notePrompts 提示词集合
|
|
|
|
|
* @param evidenceDirectories 证据目录集合
|
|
|
|
@ -386,11 +382,16 @@ public class ModelServiceImpl implements ModelService {
|
|
|
|
|
* @param atomicResult 原子指标结果
|
|
|
|
|
* @return 是否存在
|
|
|
|
|
*/
|
|
|
|
|
private boolean structureIndexAnalysis(OperandUnit operandUnit, ModelAtomicIndex modelAtomicIndex, List<ModelAtomicIndex> atomicIndices, List<NotePrompt> notePrompts, List<EvidenceDirectory> evidenceDirectories, List<CaseEvidence> caseEvidences, ModelAtomicResult atomicResult) {
|
|
|
|
|
private boolean structureIndexAnalysis(OperandUnit operandUnit, String modelAtomicIndexId, List<ModelAtomicIndex> atomicIndices, List<NotePrompt> notePrompts, List<EvidenceDirectory> evidenceDirectories, List<CaseEvidence> caseEvidences, ModelAtomicResult atomicResult) {
|
|
|
|
|
Operand left = operandUnit.getLeftOperand();
|
|
|
|
|
String operator = operandUnit.getOperator();
|
|
|
|
|
Operand right = operandUnit.getRightOperand();
|
|
|
|
|
boolean flag = false;
|
|
|
|
|
ModelAtomicIndex modelAtomicIndex = atomicIndices.stream().filter(atomicIndex -> atomicIndex.getId().equals(modelAtomicIndexId)).findAny().orElse(null);
|
|
|
|
|
if (modelAtomicIndex == null) {
|
|
|
|
|
log.error("原子指标不存在。原子指标ID:{}", modelAtomicIndexId);
|
|
|
|
|
return flag;
|
|
|
|
|
}
|
|
|
|
|
List<CaseEvidence> evidences = getEvidencesByPromptId(modelAtomicIndex.getPromptId(), caseEvidences, evidenceDirectories, notePrompts);
|
|
|
|
|
ModelAtomicIndex rightModelAtomicIndex = null;
|
|
|
|
|
if (OPERAND_TYPE_STRUCTURE.equals(right.getOperandType())) {
|
|
|
|
|