diff --git a/src/main/java/com/supervision/police/mapper/ModelAtomicResultMapper.java b/src/main/java/com/supervision/police/mapper/ModelAtomicResultMapper.java index db133e8..9e83658 100644 --- a/src/main/java/com/supervision/police/mapper/ModelAtomicResultMapper.java +++ b/src/main/java/com/supervision/police/mapper/ModelAtomicResultMapper.java @@ -14,6 +14,7 @@ public interface ModelAtomicResultMapper extends BaseMapper { ModelAtomicResult selectByCaseIdAndAtomicId(@Param("caseId") String caseId, @Param("casePersonId") String casePersonId, + @Param("indexId") String indexId, @Param("atomicId") String atomicId); } 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 2c89cd9..613037a 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java @@ -26,10 +26,7 @@ import com.supervision.police.dto.caseScore.CaseScoreDetailBuilder; import com.supervision.police.dto.caseScore.CaseScoreDetailDTO; import com.supervision.police.mapper.*; import com.supervision.police.mybatis.RowSqlMapper; -import com.supervision.police.service.CaseStatusManageService; -import com.supervision.police.service.ModelIndexService; -import com.supervision.police.service.ModelService; -import com.supervision.police.service.NoteRecordService; +import com.supervision.police.service.*; import com.supervision.utils.SqlParserUtil; import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServletResponse; @@ -41,6 +38,7 @@ import org.neo4j.driver.Session; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.io.InputStream; @@ -75,9 +73,12 @@ public class ModelServiceImpl implements ModelService { private final CaseStatusManageService caseStatusManageService; + private final ModelIndexAtomicRelationService modelIndexAtomicRelationService; + private final NoteRecordService noteRecordService; @Override + @Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class) public R analyseCase(AnalyseCaseDTO analyseCaseDTO) { CaseStatus caseDateStatus = this.getCaseDateStatus(analyseCaseDTO.getCaseId()); @@ -98,7 +99,8 @@ public class ModelServiceImpl implements ModelService { modelIndexResultMapper.updatePreResult(analyseCaseDTO.getCaseId()); //原子指标 List atomicIndices = modelAtomicIndexMapper.selectByCaseType(modelCase.getCaseType()); - Map atomicResultMap = new HashMap<>(); + // 存放原子指标的结果,key:原子指标ID,value:(key大指标ID,value:结果) + Map> atomicResultMap = new HashMap<>(); for (ModelAtomicIndex atomicIndex : atomicIndices) { //原子指标结果 ModelAtomicResult result = new ModelAtomicResult(); @@ -110,10 +112,6 @@ public class ModelServiceImpl implements ModelService { //原子指标结果表 try { - // index_source==1 - // List list = analyseCaseDTO.getAtomicIndexList(); - //index_source==3 - //查询图谱 index_source: 1人工定义 2数据库查询 3图谱生成 4大模型 if ("1".equals(atomicIndex.getIndexSource())) { // list @@ -130,21 +128,30 @@ public class ModelServiceImpl implements ModelService { } catch (Exception e) { log.error(e.getMessage(), e); } - // 非人工填写的,需要进行更新结果,人工填写的不更新(人工填写的编码,需要进行特殊处理) - //保存原子指标结果表 - ModelAtomicResult exist = modelAtomicResultMapper.selectByCaseIdAndAtomicId(analyseCaseDTO.getCaseId(), casePerson.getId(), atomicIndex.getId()); - if (exist == null) { - modelAtomicResultMapper.insert(result); - } else { - result.setId(exist.getId()); - modelAtomicResultMapper.updateById(result); + // 根据原子指标ID查model_index_atomic_relation表所有的指标ID + List relationList = modelIndexAtomicRelationService.lambdaQuery().eq(ModelIndexAtomicRelation::getAtomicIndexId, atomicIndex.getId()).list(); + for (ModelIndexAtomicRelation relation : relationList) { + // 保存或更新原子指标结果表 + ModelAtomicResult exist = modelAtomicResultMapper.selectByCaseIdAndAtomicId(analyseCaseDTO.getCaseId(), casePerson.getId(),relation.getModelIndexId(), atomicIndex.getId()); + result.setIndexId(relation.getModelIndexId()); + if (exist == null) { + modelAtomicResultMapper.insert(result); + } else { + result.setId(exist.getId()); + modelAtomicResultMapper.updateById(result); + } + Map indexMap = atomicResultMap.computeIfAbsent( + result.getAtomicId(), + k -> new HashMap<>() // 如果不存在则创建一个新的 HashMap + ); + indexMap.put(relation.getModelIndexId(), result.getAtomicResult()); } - atomicResultMap.put(result.getAtomicId(), result.getAtomicResult()); + } // 最终计算得分 calculateFinalScore(analyseCaseDTO, modelCase, atomicResultMap); caseStatusManageService.whenAnalyseCaseSuccess(analyseCaseDTO.getCaseId(), modelCase.getTotalScore()); - // TODO 计算完成之后,把所有的笔录异步上传到模型 + // 计算完成之后,把所有的笔录上传到模型 noteRecordService.uploadFileToLangChainChat(analyseCaseDTO.getCaseId()); return R.ok(); } @@ -229,7 +236,7 @@ public class ModelServiceImpl implements ModelService { /** * 最终计算得分 */ - private void calculateFinalScore(AnalyseCaseDTO analyseCaseDTO, ModelCase modelCase, Map atomicResultMap) { + private void calculateFinalScore(AnalyseCaseDTO analyseCaseDTO, ModelCase modelCase, Map> atomicResultMap) { // 计算指标结果 int score = 0; // 根据案件类型获取所有的指标 @@ -257,8 +264,10 @@ public class ModelServiceImpl implements ModelService { for (int j = 0; j < atomicData.size(); j++) { AtomicData data = atomicData.get(j); atomicIds.add(data.getAtomicIndex()); + // 先找到原子指标对应的大指标的结果 + Map atomicIndexMap = atomicResultMap.get(data.getAtomicIndex()); // 这里可能不存在,如果未找到,就默认为false - String atomicIndexResult = atomicResultMap.getOrDefault(data.getAtomicIndex(), JudgeResultEnum.UNKNOWN.getCode()); + String atomicIndexResult = atomicIndexMap.getOrDefault(modelIndex.getId(), JudgeResultEnum.UNKNOWN.getCode()); String relationalSymbol = data.getRelationalSymbol(); JudgeResultEnum instance = JudgeResultEnum.getInstance(relationalSymbol); boolean ato = StrUtil.equals(atomicIndexResult, instance.getCode()); diff --git a/src/main/resources/mapper/ModelAtomicResultMapper.xml b/src/main/resources/mapper/ModelAtomicResultMapper.xml index 98a55ba..ab0b50c 100644 --- a/src/main/resources/mapper/ModelAtomicResultMapper.xml +++ b/src/main/resources/mapper/ModelAtomicResultMapper.xml @@ -10,6 +10,9 @@ and atomic_id = #{atomicId} + + and index_id = #{indexId} + and case_person_id = #{casePersonId}