Merge remote-tracking branch 'origin/dev_1.0.0' into dev_1.0.0

topo_dev
xueqingkun 10 months ago
commit 41d40e53a8

@ -3,10 +3,13 @@ package com.supervision.neo4j.utils;
import com.supervision.neo4j.domain.CaseNode; import com.supervision.neo4j.domain.CaseNode;
import com.supervision.neo4j.domain.Rel; import com.supervision.neo4j.domain.Rel;
import com.supervision.neo4j.dto.ResultDTO; import com.supervision.neo4j.dto.ResultDTO;
import net.sf.jsqlparser.expression.LongValue;
import org.neo4j.driver.Record; import org.neo4j.driver.Record;
import org.neo4j.driver.Result; import org.neo4j.driver.Result;
import org.neo4j.driver.Value; 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.NullValue;
import org.neo4j.driver.internal.value.StringValue;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -84,27 +87,32 @@ public class Neo4jUtils {
while (result.hasNext()) { while (result.hasNext()) {
Record record = result.next(); Record record = result.next();
ResultDTO resultDTO = new ResultDTO(); ResultDTO resultDTO = new ResultDTO();
if (!(record.get("startId") instanceof NullValue)) { resultDTO.setStartId(valueTransportString(record.get("startId")));
resultDTO.setStartId(String.valueOf(record.get("startId"))); resultDTO.setEndId(valueTransportString(record.get("endId")));
} resultDTO.setRelId(valueTransportString(record.get("relId")));
if (!(record.get("endId") instanceof NullValue)) { resultDTO.setRelId(valueTransportString(record.get("relId")));
resultDTO.setEndId(String.valueOf(record.get("endId"))); resultDTO.setRecordId(valueTransportString(record.get("recordId")));
} resultDTO.setRecordId(valueTransportString(record.get("recordsId")));
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")));
}
list.add(resultDTO); list.add(resultDTO);
} }
return list; 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 需要的类型自己写");
}
} }

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

Loading…
Cancel
Save