|
|
|
@ -2,8 +2,10 @@ package com.supervision.police.dto.caseScore;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
import com.supervision.constant.ScoreEnum;
|
|
|
|
|
import com.supervision.police.domain.*;
|
|
|
|
|
import com.supervision.police.mapper.*;
|
|
|
|
|
import io.swagger.v3.oas.annotations.media.Schema;
|
|
|
|
|
import lombok.Data;
|
|
|
|
|
import org.springframework.ai.ollama.OllamaChatClient;
|
|
|
|
@ -37,6 +39,33 @@ public class CaseScoreDetailBuilder {
|
|
|
|
|
*/
|
|
|
|
|
private OllamaChatClient chatClient;
|
|
|
|
|
|
|
|
|
|
private ModelCaseMapper modelCaseMapper;
|
|
|
|
|
private CasePersonMapper casePersonMapper;
|
|
|
|
|
private ModelAtomicIndexMapper modelAtomicIndexMapper;
|
|
|
|
|
private ModelIndexResultMapper modelIndexResultMapper;
|
|
|
|
|
private ModelIndexMapper modelIndexMapper;
|
|
|
|
|
private ModelAtomicResultMapper modelAtomicResultMapper;
|
|
|
|
|
|
|
|
|
|
public CaseScoreDetailBuilder() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public CaseScoreDetailBuilder setOllamaChatClient(OllamaChatClient chatClient) {
|
|
|
|
|
this.chatClient = chatClient;
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public CaseScoreDetailBuilder setMapper(ModelCaseMapper modelCaseMapper, CasePersonMapper casePersonMapper,
|
|
|
|
|
ModelAtomicIndexMapper modelAtomicIndexMapper,ModelIndexResultMapper modelIndexResultMapper,
|
|
|
|
|
ModelIndexMapper modelIndexMapper,ModelAtomicResultMapper modelAtomicResultMapper) {
|
|
|
|
|
this.modelCaseMapper = modelCaseMapper;
|
|
|
|
|
this.casePersonMapper = casePersonMapper;
|
|
|
|
|
this.modelAtomicIndexMapper = modelAtomicIndexMapper;
|
|
|
|
|
this.modelIndexResultMapper = modelIndexResultMapper;
|
|
|
|
|
this.modelIndexMapper = modelIndexMapper;
|
|
|
|
|
this.modelAtomicResultMapper = modelAtomicResultMapper;
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 共性指标分数
|
|
|
|
@ -136,12 +165,31 @@ public class CaseScoreDetailBuilder {
|
|
|
|
|
caseScoreDetailDTO.setCommonIndexHitCount(this.countIndexGroup("1",res->res.getActualScore() > 0).intValue());
|
|
|
|
|
|
|
|
|
|
if (crimeScore < crimeOutScore){
|
|
|
|
|
caseScoreDetailDTO.setCrimeIndexCount(this.countIndexGroup("3",res->true).intValue());
|
|
|
|
|
caseScoreDetailDTO.setCrimeIndexHitCount(this.countIndexGroup("3",res->res.getActualScore() > 0).intValue());
|
|
|
|
|
caseScoreDetailDTO.setCrimeOrOut(1);
|
|
|
|
|
caseScoreDetailDTO.setSpecificCrimeIndexCount(this.countIndexGroup("3", res->true).intValue());
|
|
|
|
|
caseScoreDetailDTO.setSpecificCrimeIndexHitCount(this.countIndexGroup("3", res->res.getActualScore() > 0).intValue());
|
|
|
|
|
}else {
|
|
|
|
|
caseScoreDetailDTO.setCrimeIndexCount(this.countIndexGroup("2",res->true).intValue());
|
|
|
|
|
caseScoreDetailDTO.setCrimeIndexHitCount(this.countIndexGroup("2",res->res.getActualScore() > 0).intValue());
|
|
|
|
|
caseScoreDetailDTO.setCrimeOrOut(0);
|
|
|
|
|
caseScoreDetailDTO.setSpecificCrimeIndexCount(this.countIndexGroup("2", res->true).intValue());
|
|
|
|
|
caseScoreDetailDTO.setSpecificCrimeIndexHitCount(this.countIndexGroup("2", res->res.getActualScore() > 0).intValue());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 构建指标描述
|
|
|
|
|
// 命中的公共指标数据
|
|
|
|
|
List<IndexResult> commonIndexResultList = this.listCommonIndexResult();
|
|
|
|
|
caseScoreDetailDTO.setCommonIndexDescList(
|
|
|
|
|
commonIndexResultList.stream().map(indexResult -> indexResult.buildDesc(this.chatClient)).collect(Collectors.toList()));
|
|
|
|
|
// 命中的入罪或者出罪指标数据
|
|
|
|
|
List<IndexResult> specialCirimeIndexResultList = Integer.valueOf(0).equals(caseScoreDetailDTO.getCrimeOrOut()) ?
|
|
|
|
|
this.listCrimeIndexResult():this.listOutCrimeIndexResult();
|
|
|
|
|
caseScoreDetailDTO.setSpecificCrimeIndexDescList(
|
|
|
|
|
specialCirimeIndexResultList.stream().map(indexResult -> indexResult.buildDesc(this.chatClient)).collect(Collectors.toList())
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
caseScoreDetailDTO.setMissAtomicIndexCount(
|
|
|
|
|
this.indexResultList.stream().filter(indexResult -> indexResult.getActualScore() == 0)
|
|
|
|
|
.mapToInt(index -> CollUtil.size(index.getAtomicResults())).sum()
|
|
|
|
|
);
|
|
|
|
|
return caseScoreDetailDTO;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -166,4 +214,72 @@ public class CaseScoreDetailBuilder {
|
|
|
|
|
&& function.apply(indexResult)).count();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取共性指标
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public List<IndexResult> listCommonIndexResult() {
|
|
|
|
|
return listIndexGroup("1",res->res.getActualScore() > 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取入罪指标
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public List<IndexResult> listCrimeIndexResult() {
|
|
|
|
|
return listIndexGroup("2",res->res.getActualScore() > 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取出罪指标
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public List<IndexResult> listOutCrimeIndexResult() {
|
|
|
|
|
return listIndexGroup("3",res->res.getActualScore() > 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<IndexResult> listIndexGroup(String indexGroup, Function<IndexResult, Boolean> function) {
|
|
|
|
|
if (CollUtil.isEmpty(this.indexResultList)){
|
|
|
|
|
return new ArrayList<>();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return this.indexResultList.stream()
|
|
|
|
|
.filter(indexResult -> StrUtil.equals(indexGroup,indexResult.getIndexGroup())
|
|
|
|
|
&& function.apply(indexResult)).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public CaseScoreDetailBuilder loadCaseScoreDetail(String caseId) {
|
|
|
|
|
|
|
|
|
|
// 1 设置案件基本信息
|
|
|
|
|
ModelCase modelCase = modelCaseMapper.selectById(caseId);
|
|
|
|
|
this.setCaseId(modelCase.getId());
|
|
|
|
|
this.setCaseName(modelCase.getCaseName());
|
|
|
|
|
|
|
|
|
|
// 2 设置当事人人员信息
|
|
|
|
|
List<CasePerson> casePersonList = casePersonMapper.selectList(new LambdaQueryWrapper<CasePerson>().eq(CasePerson::getCaseId, caseId));
|
|
|
|
|
this.setLawActor(casePersonList);
|
|
|
|
|
|
|
|
|
|
// 3 设置指标结果信息
|
|
|
|
|
|
|
|
|
|
// 3.1 获取指标信息
|
|
|
|
|
List<ModelIndex> modelIndices = modelIndexMapper.selectList(new LambdaQueryWrapper<ModelIndex>().eq(ModelIndex::getCaseType, modelCase.getCaseType()));
|
|
|
|
|
|
|
|
|
|
// 3.2 获取指标结果信息 后面需要根据行人人id进行过滤
|
|
|
|
|
List<ModelIndexResult> modelIndexResults = modelIndexResultMapper.selectList(
|
|
|
|
|
new LambdaQueryWrapper<ModelIndexResult>().eq(ModelIndexResult::getCaseId, caseId));
|
|
|
|
|
|
|
|
|
|
// 3.3 获取原子指标信息
|
|
|
|
|
List<ModelAtomicIndex> modelAtomicIndices = modelAtomicIndexMapper.selectList(new LambdaQueryWrapper<ModelAtomicIndex>().eq(ModelAtomicIndex::getCaseType, modelCase.getCaseType()));
|
|
|
|
|
|
|
|
|
|
// 3.4 获取原子指标结果
|
|
|
|
|
List<ModelAtomicResult> modelAtomicResults = modelAtomicResultMapper.selectList(
|
|
|
|
|
new LambdaQueryWrapper<ModelAtomicResult>().eq(ModelAtomicResult::getCaseId, caseId));
|
|
|
|
|
|
|
|
|
|
this.setIndexResultList(modelIndices, modelIndexResults, modelAtomicIndices, modelAtomicResults);
|
|
|
|
|
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|