原子指标判断代码提交

topo_dev
liu 10 months ago
parent b2a802d47b
commit 38999a68e0

@ -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 需要的类型自己写");
}
}

@ -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) {

Loading…
Cancel
Save