diff --git a/src/main/java/com/supervision/neo4j/utils/Neo4jUtils.java b/src/main/java/com/supervision/neo4j/utils/Neo4jUtils.java index 59ea1d3..69f91a2 100644 --- a/src/main/java/com/supervision/neo4j/utils/Neo4jUtils.java +++ b/src/main/java/com/supervision/neo4j/utils/Neo4jUtils.java @@ -3,10 +3,13 @@ package com.supervision.neo4j.utils; import com.supervision.neo4j.domain.CaseNode; import com.supervision.neo4j.domain.Rel; import com.supervision.neo4j.dto.ResultDTO; +import net.sf.jsqlparser.expression.LongValue; import org.neo4j.driver.Record; import org.neo4j.driver.Result; import org.neo4j.driver.Value; +import org.neo4j.driver.internal.value.IntegerValue; import org.neo4j.driver.internal.value.NullValue; +import org.neo4j.driver.internal.value.StringValue; import java.util.ArrayList; import java.util.List; @@ -84,27 +87,32 @@ public class Neo4jUtils { while (result.hasNext()) { Record record = result.next(); ResultDTO resultDTO = new ResultDTO(); - if (!(record.get("startId") instanceof NullValue)) { - resultDTO.setStartId(String.valueOf(record.get("startId"))); - } - if (!(record.get("endId") instanceof NullValue)) { - resultDTO.setEndId(String.valueOf(record.get("endId"))); - } - if (!(record.get("relId") instanceof NullValue)) { - resultDTO.setRelId(String.valueOf(record.get("relId"))); - } - if (!(record.get("relId") instanceof NullValue)) { - resultDTO.setRelId(String.valueOf(record.get("relId"))); - } - if (!(record.get("recordId") instanceof NullValue)) { - resultDTO.setRecordId(String.valueOf(record.get("recordId"))); - } - if (!(record.get("recordsId") instanceof NullValue)) { - resultDTO.setRecordId(String.valueOf(record.get("recordsId"))); - } + resultDTO.setStartId(valueTransportString(record.get("startId"))); + resultDTO.setEndId(valueTransportString(record.get("endId"))); + resultDTO.setRelId(valueTransportString(record.get("relId"))); + resultDTO.setRelId(valueTransportString(record.get("relId"))); + resultDTO.setRecordId(valueTransportString(record.get("recordId"))); + resultDTO.setRecordId(valueTransportString(record.get("recordsId"))); list.add(resultDTO); } return list; } + /** + * neo4j类型转换 + */ + private static String valueTransportString(Value value) { + if (value instanceof NullValue) { + return null; + } else if (value instanceof IntegerValue) { + return String.valueOf(value.asInt()); + } else if (value instanceof LongValue) { + return String.valueOf(value.asLong()); + } else if (value instanceof StringValue) { + return value.asString(); + } + throw new RuntimeException("TODO 需要的类型自己写"); + + } + } 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 9e0ea79..efe06f4 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java @@ -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 atomicIndices = modelAtomicIndexMapper.selectByCaseType(modelCase.getCaseType()); - Map atomic = new HashMap<>(); + Map 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 atomicResultMap) { // 计算指标结果 int score = 0; // 根据案件类型获取所有的指标 @@ -106,45 +106,54 @@ public class ModelServiceImpl implements ModelService { if (StringUtils.isNotEmpty(modelIndex.getJudgeLogic())) { List 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 = 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) {