diff --git a/src/main/java/com/supervision/police/dto/AtomicIndexDTO.java b/src/main/java/com/supervision/police/dto/AtomicIndexDTO.java index 42b9a9a..a473421 100644 --- a/src/main/java/com/supervision/police/dto/AtomicIndexDTO.java +++ b/src/main/java/com/supervision/police/dto/AtomicIndexDTO.java @@ -1,11 +1,11 @@ package com.supervision.police.dto; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; -import com.supervision.constant.JudgeResultEnum; -import com.supervision.constant.ScoreEnum; +import com.supervision.police.domain.NoteRecordSplit; import lombok.Data; -import java.util.Objects; +import java.util.*; @Data public class AtomicIndexDTO { @@ -34,6 +34,11 @@ public class AtomicIndexDTO { */ private String record; + + private String recordSplitId; + + private List recordSegmentationList = new ArrayList<>(); + /** * 原子指标结果 */ @@ -58,4 +63,20 @@ public class AtomicIndexDTO { } + public void setSegmentation(Map nodeRecordSpliteMap) { + if (StrUtil.isEmpty(this.recordSplitId)){ + return; + } + + this.recordSegmentationList = Arrays.stream(this.recordSplitId.split(",")) + .map(nodeRecordSpliteMap::get).filter(Objects::nonNull).toList(); + } + + public void setRecordIfSegmentationAbsent(String record){ + + if (CollUtil.isEmpty(this.recordSegmentationList)){ + this.record = record; + } + } + } diff --git a/src/main/java/com/supervision/police/dto/IndexDetail.java b/src/main/java/com/supervision/police/dto/IndexDetail.java index 3a4b7bd..f93b49e 100644 --- a/src/main/java/com/supervision/police/dto/IndexDetail.java +++ b/src/main/java/com/supervision/police/dto/IndexDetail.java @@ -1,5 +1,7 @@ package com.supervision.police.dto; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import lombok.Data; import java.util.List; @@ -51,4 +53,18 @@ public class IndexDetail { */ private String judgeLogic; + public void setRecordValue() { + if (CollUtil.isEmpty(this.children)){ + this.setRecord("无"); + } + // 遍历,atomic的record字段存在不为空,且不是无的,如果有,就是有 + boolean recordHasFlag = this.children.stream().anyMatch(atomic -> + CollUtil.isNotEmpty(atomic.getRecordSegmentationList()) && !StrUtil.equals("无", atomic.getRecord())); + this.setRecord(recordHasFlag ? "有" : "无"); + } + + public void setNewFlagValue() { + this.newFlag = !StrUtil.equals(this.getIndexResult(), this.getPreResult()); + } + } diff --git a/src/main/java/com/supervision/police/service/impl/ModelCaseServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ModelCaseServiceImpl.java index 4b556b6..c6808c6 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelCaseServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelCaseServiceImpl.java @@ -19,23 +19,18 @@ import com.supervision.common.domain.R; import com.supervision.common.enums.ResultStatusEnum; import com.supervision.common.exception.CustomException; import com.supervision.common.utils.ExcelReader; -import com.supervision.common.utils.IPages; import com.supervision.common.utils.StringUtils; import com.supervision.config.BusinessException; import com.supervision.constant.DataStatus; -import com.supervision.police.domain.CasePerson; -import com.supervision.police.domain.ComDictionary; +import com.supervision.police.domain.*; import com.supervision.police.dto.*; import com.supervision.police.mapper.ModelCaseMapper; -import com.supervision.police.domain.ModelCase; -import com.supervision.police.service.CasePersonService; -import com.supervision.police.service.CaseStatusManageService; -import com.supervision.police.service.ComDictionaryService; -import com.supervision.police.service.ModelCaseService; +import com.supervision.police.service.*; import com.supervision.police.vo.ModelCaseVO; import com.supervision.utils.JudgeLogicUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -67,6 +62,11 @@ public class ModelCaseServiceImpl extends ServiceImpl getIndexDetail(IndexResultQuery query, Integer page, Integer size) { + public IPage getIndexDetail(IndexResultQuery query, Integer pageNum, Integer pageSize) { Assert.notEmpty(query.getCaseId(), "案件id不能为空"); Assert.notEmpty(query.getIndexType(), "指标类型不能为空"); - IPage iPage = new Page<>(page, size); - iPage = modelCaseMapper.pageListIndexResult(query,iPage); + IPage iPage = modelCaseMapper.pageListIndexResult(query,Page.of(pageNum, pageSize)); List records = iPage.getRecords(); // 添加 附属内容 - for (IndexDetail record : records) { - String judgeLogic = record.getJudgeLogic(); - if (StringUtils.isEmpty(judgeLogic)) { + attachRecord(query.getCaseId(), records); + + return iPage; + } + + + /** + * 添加 指标结果附属内容 + * @param caseId 案件id + * @param indexDetails 指标结果 + */ + private void attachRecord(String caseId,List indexDetails) { + if (CollUtil.isEmpty(indexDetails)){ + return; + } + + // indexDetails中涉及到的原子指标结果数据 + List indexIdList = indexDetails.stream().map(IndexDetail::getIndexId).toList(); + List modelAtomicResultList = modelAtomicResultService.lambdaQuery() + .eq(ModelAtomicResult::getCaseId, caseId) + .in(CollUtil.isNotEmpty(indexIdList), ModelAtomicResult::getIndexId, indexIdList).list(); + + // records中涉及到的笔录片段id + Set recordSegmentList = modelAtomicResultList.stream() + .filter(atomic -> StrUtil.isNotEmpty(atomic.getRecordSplitId())) + .flatMap(atomic -> Arrays.stream(atomic.getRecordSplitId().split(","))).collect(Collectors.toSet()); + List nodeRecordSpliteList = noteRecordSplitService.lambdaQuery().in(NoteRecordSplit::getId, recordSegmentList).list(); + Map nodeRecordSpliteMap = nodeRecordSpliteList.stream().collect(Collectors.toMap(NoteRecordSplit::getId, v -> v)); + + for (IndexDetail record : indexDetails) { + if (StringUtils.isEmpty(record.getJudgeLogic())) { continue; } // 是否是新的结果 - record.setNewFlag(!StrUtil.equals(record.getIndexResult(), record.getPreResult())); - // 获取原子指标的判断规则 + record.setNewFlagValue(); - // 配置的指标的逻辑 - Map indexJundgeLogicMap = parseLogicMap(judgeLogic); - List atomicIds = JudgeLogicUtil.pickAtomicIndexIds(judgeLogic); - List atomics = modelCaseMapper.getAtomicDetail(query.getCaseId(), record.getIndexId(), atomicIds); + List atomicIds = JudgeLogicUtil.pickAtomicIndexIds(record.getJudgeLogic()); + List atomics = modelCaseMapper.getAtomicDetail(caseId, record.getIndexId(), atomicIds); for (AtomicIndexDTO atomic : atomics) { + // 获取原子指标的判断规则 + // 配置的指标的逻辑 + Map indexJundgeLogicMap = parseLogicMap(record.getJudgeLogic()); // 需要和原子指标的规则判断是否一致(解决出罪和入罪冲突的问题) - String s = indexJundgeLogicMap.get(atomic.getAtomicIndexId()); - atomic.judgeWithIndexResult(s); - if (StrUtil.isBlank(atomic.getRecord())) { - atomic.setRecord("无"); - } - } - record.setRecord("无"); - // 遍历,atomic的record字段存在不为空,且不是无的,如果有,就是有 - if (atomics.stream().anyMatch(atomic -> StrUtil.isNotBlank(atomic.getRecord()) && !StrUtil.equals("无", atomic.getRecord()))) { - record.setRecord("有"); + String relationalSymbol = indexJundgeLogicMap.get(atomic.getAtomicIndexId()); + + atomic.judgeWithIndexResult(relationalSymbol); + atomic.setSegmentation(nodeRecordSpliteMap); + atomic.setRecordIfSegmentationAbsent("无"); } + record.setChildren(atomics); + record.setRecordValue(); } - return iPage; } private Map parseLogicMap(String judgeLogic) { 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 3be8f69..a20b212 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java @@ -42,6 +42,7 @@ import java.io.InputStream; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.*; +import java.util.stream.Collectors; @Slf4j @Service @@ -367,8 +368,14 @@ public class ModelServiceImpl implements ModelService { if (StringUtils.isNotEmpty(resultDTO.getRelId())) { //存在关系 result.setAtomicResult(JudgeResultEnum.EXIST.getCode()); - result.setRecordSplitId(resultDTO.getRecordSplitId()); result.setRecordId(resultDTO.getRecordId()); + + // 在退出循环之前先合并相关文本分片id + String recordSplitIdJoin = res.stream().filter(r -> + StringUtils.isNotEmpty(r.getRelId()) + && StringUtils.isNotEmpty(r.getRecordSplitId())) + .map(ResultDTO::getRecordSplitId).collect(Collectors.joining(",")); + result.setRecordSplitId(recordSplitIdJoin); // 如果只要存在,就不进行校验了,直接跳出循环 break judge; } diff --git a/src/main/resources/mapper/ModelCaseMapper.xml b/src/main/resources/mapper/ModelCaseMapper.xml index 85db81c..559fcdb 100644 --- a/src/main/resources/mapper/ModelCaseMapper.xml +++ b/src/main/resources/mapper/ModelCaseMapper.xml @@ -60,12 +60,15 @@ and mi.index_type = #{indexType}