|
|
|
@ -12,6 +12,7 @@ import com.supervision.police.dto.AtomicData;
|
|
|
|
|
import com.supervision.police.dto.JudgeLogic;
|
|
|
|
|
import com.supervision.police.mapper.*;
|
|
|
|
|
import com.supervision.police.service.ModelService;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.neo4j.driver.Driver;
|
|
|
|
|
import org.neo4j.driver.Result;
|
|
|
|
@ -23,36 +24,27 @@ import java.util.*;
|
|
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
|
@Service
|
|
|
|
|
@RequiredArgsConstructor
|
|
|
|
|
public class ModelServiceImpl implements ModelService {
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private ModelCaseMapper modelCaseMapper;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private ModelAtomicIndexMapper modelAtomicIndexMapper;
|
|
|
|
|
|
|
|
|
|
private final Driver driver;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private ModelServiceImpl(Driver driver) {
|
|
|
|
|
this.driver = driver;
|
|
|
|
|
}
|
|
|
|
|
private final ModelCaseMapper modelCaseMapper;
|
|
|
|
|
|
|
|
|
|
private final ModelAtomicIndexMapper modelAtomicIndexMapper;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private ModelAtomicResultMapper modelAtomicResultMapper;
|
|
|
|
|
private final ModelAtomicResultMapper modelAtomicResultMapper;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private ModelIndexMapper modelIndexMapper;
|
|
|
|
|
private final ModelIndexMapper modelIndexMapper;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private ModelIndexResultMapper modelIndexResultMapper;
|
|
|
|
|
private final ModelIndexResultMapper modelIndexResultMapper;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public R<?> analyseCase(AnalyseCaseDTO analyseCaseDTO) {
|
|
|
|
|
ModelCase modelCase = modelCaseMapper.selectById(analyseCaseDTO.getCaseId());
|
|
|
|
|
//原子指标
|
|
|
|
|
List<ModelAtomicIndex> atomicIndices = modelAtomicIndexMapper.selectByCaseType(modelCase.getCaseType());
|
|
|
|
|
Map<String, Boolean> atomic = new HashMap<>();
|
|
|
|
|
Map<String, Boolean> atomicResultMap = new HashMap<>();
|
|
|
|
|
for (ModelAtomicIndex atomicIndex : atomicIndices) {
|
|
|
|
|
//原子指标结果
|
|
|
|
|
ModelAtomicResult result = new ModelAtomicResult();
|
|
|
|
@ -89,10 +81,18 @@ public class ModelServiceImpl implements ModelService {
|
|
|
|
|
result.setId(exist.getId());
|
|
|
|
|
modelAtomicResultMapper.updateById(result);
|
|
|
|
|
}
|
|
|
|
|
// 所有原子指标id
|
|
|
|
|
atomic.put(result.getAtomicId(), "1".equals(result.getAtomicResult()));
|
|
|
|
|
// 所有原子指标id,判断结果是否为1,如果为1,则符合,为true
|
|
|
|
|
atomicResultMap.put(result.getAtomicId(), "1".equals(result.getAtomicResult()));
|
|
|
|
|
}
|
|
|
|
|
// 最终计算得分
|
|
|
|
|
calculateFinalScore(analyseCaseDTO, modelCase, atomicResultMap);
|
|
|
|
|
return R.ok();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 最终计算得分
|
|
|
|
|
*/
|
|
|
|
|
private void calculateFinalScore(AnalyseCaseDTO analyseCaseDTO, ModelCase modelCase, Map<String, Boolean> atomicResultMap) {
|
|
|
|
|
// 计算指标结果
|
|
|
|
|
int score = 0;
|
|
|
|
|
// 根据案件类型获取所有的指标
|
|
|
|
@ -106,45 +106,54 @@ public class ModelServiceImpl implements ModelService {
|
|
|
|
|
if (StringUtils.isNotEmpty(modelIndex.getJudgeLogic())) {
|
|
|
|
|
List<JudgeLogic> judgeLogics = JSONUtil.toList(modelIndex.getJudgeLogic(), JudgeLogic.class);
|
|
|
|
|
if (CollUtil.isNotEmpty(judgeLogics)) {
|
|
|
|
|
boolean res = false;
|
|
|
|
|
boolean finalJudgeResult = false;
|
|
|
|
|
// 遍历组
|
|
|
|
|
for (int i = 0; i < judgeLogics.size(); i++) {
|
|
|
|
|
boolean group = false;
|
|
|
|
|
// 组内结果
|
|
|
|
|
boolean innerGroupJudge = false;
|
|
|
|
|
JudgeLogic logic = judgeLogics.get(i);
|
|
|
|
|
// 获取组之间的的判断逻辑
|
|
|
|
|
String rowLogic = logic.getRowLogic();
|
|
|
|
|
// 首先对组内进行判断,判断组内的结果
|
|
|
|
|
List<AtomicData> atomicData = logic.getAtomicData();
|
|
|
|
|
for (int j = 0; j < atomicData.size(); j++) {
|
|
|
|
|
AtomicData data = atomicData.get(j);
|
|
|
|
|
atomicIds.add(data.getAtomicIndex());
|
|
|
|
|
Boolean ato = atomic.get(data.getAtomicIndex());
|
|
|
|
|
// 这里可能不存在,如果不存在,就默认为false
|
|
|
|
|
Boolean ato = atomicResultMap.getOrDefault(data.getAtomicIndex(), false);
|
|
|
|
|
String relationalSymbol = data.getRelationalSymbol();
|
|
|
|
|
// 判断,如果是2 虚构,4不存在 ,5 未知,则取反,即判断结果为false
|
|
|
|
|
if ("2".equals(relationalSymbol) || "4".equals(relationalSymbol) || "5".equals(relationalSymbol)) {
|
|
|
|
|
ato = !ato;
|
|
|
|
|
}
|
|
|
|
|
if (j == 0) {
|
|
|
|
|
group = ato;
|
|
|
|
|
innerGroupJudge = ato;
|
|
|
|
|
} else {
|
|
|
|
|
if ("1".equals(rowLogic)) {
|
|
|
|
|
group = group && ato;
|
|
|
|
|
innerGroupJudge = innerGroupJudge && ato;
|
|
|
|
|
} else if ("2".equals(rowLogic)) {
|
|
|
|
|
group = group || ato;
|
|
|
|
|
innerGroupJudge = innerGroupJudge || ato;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
String groupLogic = logic.getGroupLogic();
|
|
|
|
|
if (i == 0) {
|
|
|
|
|
res = group;
|
|
|
|
|
finalJudgeResult = innerGroupJudge;
|
|
|
|
|
} else {
|
|
|
|
|
// 如果组间判断为1 与,则进行与操作
|
|
|
|
|
if ("1".equals(groupLogic)) {
|
|
|
|
|
res = res && group;
|
|
|
|
|
finalJudgeResult = finalJudgeResult && innerGroupJudge;
|
|
|
|
|
// 如果组间判断为或,则进行或操作
|
|
|
|
|
} else if ("2".equals(groupLogic)) {
|
|
|
|
|
res = res || group;
|
|
|
|
|
finalJudgeResult = finalJudgeResult || innerGroupJudge;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
result.setIndexResult(res ? "true" : "false");
|
|
|
|
|
result.setIndexResult(finalJudgeResult ? "true" : "false");
|
|
|
|
|
result.setAtomicIds(StringUtils.join(atomicIds, ","));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 最后保存结果
|
|
|
|
|
ModelIndexResult exist = modelIndexResultMapper.selectByCaseIdAndIndexId(analyseCaseDTO.getCaseId(), modelIndex.getId());
|
|
|
|
|
if (exist == null) {
|
|
|
|
|
modelIndexResultMapper.insert(result);
|
|
|
|
@ -159,7 +168,6 @@ public class ModelServiceImpl implements ModelService {
|
|
|
|
|
}
|
|
|
|
|
modelCase.setTotalScore(score);
|
|
|
|
|
modelCaseMapper.updateById(modelCase);
|
|
|
|
|
return R.ok();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void analyseGraphCase(AnalyseCaseDTO analyseCaseDTO, ModelAtomicResult result, String ql, Session session) {
|
|
|
|
@ -181,7 +189,7 @@ public class ModelServiceImpl implements ModelService {
|
|
|
|
|
if (split.length > 0) {
|
|
|
|
|
params.put("lawParty", split[j]);
|
|
|
|
|
}
|
|
|
|
|
Result run = null;
|
|
|
|
|
Result run;
|
|
|
|
|
try {
|
|
|
|
|
run = session.run(ql, params);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|