diff --git a/src/main/java/com/supervision/police/controller/CaseEvidenceController.java b/src/main/java/com/supervision/police/controller/CaseEvidenceController.java index b5a74b7..a68a115 100644 --- a/src/main/java/com/supervision/police/controller/CaseEvidenceController.java +++ b/src/main/java/com/supervision/police/controller/CaseEvidenceController.java @@ -1,8 +1,10 @@ package com.supervision.police.controller; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Assert; import com.supervision.common.domain.R; import com.supervision.police.dto.CaseEvidenceDetailDTO; +import com.supervision.police.dto.EvidenceIdWrapper; import com.supervision.police.service.CaseEvidenceService; import com.supervision.police.dto.CaseEvidenceDTO; import io.swagger.v3.oas.annotations.Operation; @@ -41,8 +43,9 @@ public class CaseEvidenceController { @Operation(summary = "删除案件证据信息") @DeleteMapping("/deleteEvidence") - public R deleteEvidence(String evidenceId) { - boolean success = caseEvidenceService.deleteEvidence(evidenceId); + public R deleteEvidence(@RequestBody EvidenceIdWrapper evidenceIdWrapper) { + Assert.notEmpty(evidenceIdWrapper.getEvidenceId(), "证据id不能为空"); + boolean success = caseEvidenceService.deleteEvidence(evidenceIdWrapper.getEvidenceId()); return R.ok(success); } @@ -55,9 +58,9 @@ public class CaseEvidenceController { @Operation(summary = "分页查询案件证据信息列表") @GetMapping("/pageListEvidence") public R> pageListEvidence(@RequestParam @Parameter(name = "caseId",description = "案件id") String caseId, - @RequestParam(defaultValue = "1") @Parameter(name = "page",description = "页码") Integer page, - @RequestParam(defaultValue = "10") @Parameter(name = "size",description = "每页数量") Integer size) { - IPage pageListEvidence = caseEvidenceService.pageListEvidence(caseId, page, size); + @RequestParam(defaultValue = "1") @Parameter(name = "pageNum",description = "页码") Integer pageNum, + @RequestParam(defaultValue = "10") @Parameter(name = "pageSize",description = "每页数量") Integer pageSize) { + IPage pageListEvidence = caseEvidenceService.pageListEvidence(caseId, pageNum, pageSize); return R.ok(pageListEvidence); } } diff --git a/src/main/java/com/supervision/police/controller/ModelIndexController.java b/src/main/java/com/supervision/police/controller/ModelIndexController.java index 8014714..afbd2b3 100644 --- a/src/main/java/com/supervision/police/controller/ModelIndexController.java +++ b/src/main/java/com/supervision/police/controller/ModelIndexController.java @@ -1,11 +1,11 @@ package com.supervision.police.controller; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.supervision.common.domain.R; import com.supervision.police.domain.ModelAtomicIndex; import com.supervision.police.domain.ModelIndex; +import com.supervision.police.dto.CaseAtomicIndexDTO; import com.supervision.police.service.ModelIndexService; +import io.swagger.v3.oas.annotations.Parameter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -98,5 +98,19 @@ public class ModelIndexController { return modelIndexService.delAtomic(id); } + + /** + * 分页查询案件原子指标数据 + * @return + */ + @GetMapping("/listCaseAtomicIndex") + public R> pageListCaseAtomicIndex( + @RequestParam @Parameter(name = "caseId",description = "案件id") String caseId, + @RequestParam(defaultValue = "1") + @Parameter(name = "indexSource",description = "指标来源 1:人工定义 2:数据库查询 3:图谱生成 4:大模型") String indexSource) { + + List list = modelIndexService.listCaseAtomicIndex(caseId, indexSource); + return R.ok(list); + } } diff --git a/src/main/java/com/supervision/police/dto/CaseAtomicIndexDTO.java b/src/main/java/com/supervision/police/dto/CaseAtomicIndexDTO.java index c785bbe..946ddd4 100644 --- a/src/main/java/com/supervision/police/dto/CaseAtomicIndexDTO.java +++ b/src/main/java/com/supervision/police/dto/CaseAtomicIndexDTO.java @@ -1,25 +1,68 @@ package com.supervision.police.dto; +import com.supervision.police.domain.ModelAtomicIndex; +import com.supervision.police.domain.ModelAtomicResult; +import com.supervision.police.domain.ModelIndex; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.util.Objects; + /** * 案件原子指标DTO */ @Data public class CaseAtomicIndexDTO { + @Schema(description = "原子评估结果id") + private String atomicResultId; + @Schema(description = "案件id") private String caseId; - @Schema(description = "原子指标名称") - private String indexName; - @Schema(description = "原子指标id") - private String automicIndex; + private String atomicIndexId; @Schema(description = "原子指标名") private String automicIndexName; + @Schema(description = "指标id") + private String indexId; + + @Schema(description = "指标名") + private String indexName; + + @Schema(description = "案件类型") + private String caseType; + + @Schema(description = "指标来源 1:人工定义 2:数据库查询 3:图谱生成 4:大模型") + private String indexSource; + + @Schema(description = "评估结果") + private String atomicResult; + + @Schema(description = "备注") + private String remark; + + public CaseAtomicIndexDTO() { + } + + public CaseAtomicIndexDTO(ModelAtomicIndex modelAtomicIndex, ModelIndex modelIndex, ModelAtomicResult modelAtomicResult) { + if (Objects.nonNull(modelAtomicIndex)){ + this.atomicIndexId = modelAtomicIndex.getId(); + this.automicIndexName = modelAtomicIndex.getName(); + } + if (Objects.nonNull(modelIndex)){ + this.caseType = modelIndex.getCaseType(); + this.indexName = modelIndex.getName(); + this.indexId = modelIndex.getId(); + } + if (Objects.nonNull(modelAtomicResult)){ + this.atomicResult = modelAtomicResult.getAtomicResult(); + this.atomicResultId = modelAtomicResult.getId(); + this.caseId = modelAtomicResult.getCaseId(); +// todo: this.remark = modelAtomicResult.getRemark(); + } + } } diff --git a/src/main/java/com/supervision/police/mapper/ModelAtomicIndexMapper.java b/src/main/java/com/supervision/police/mapper/ModelAtomicIndexMapper.java index c61cf4d..9a6f64a 100644 --- a/src/main/java/com/supervision/police/mapper/ModelAtomicIndexMapper.java +++ b/src/main/java/com/supervision/police/mapper/ModelAtomicIndexMapper.java @@ -19,5 +19,8 @@ public interface ModelAtomicIndexMapper extends BaseMapper { List selectByCaseType(@Param("caseType") String caseType); + List listCaseAtomicIndex(@Param("indexIdList") List indexIdList, + @Param("caseType") String caseType, + @Param("indexSource") String indexSource); } diff --git a/src/main/java/com/supervision/police/service/ModelAtomicIndexService.java b/src/main/java/com/supervision/police/service/ModelAtomicIndexService.java new file mode 100644 index 0000000..f107545 --- /dev/null +++ b/src/main/java/com/supervision/police/service/ModelAtomicIndexService.java @@ -0,0 +1,22 @@ +package com.supervision.police.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.supervision.police.domain.ModelAtomicIndex; +import com.supervision.police.mapper.ModelAtomicIndexMapper; + +import java.util.List; + +public interface ModelAtomicIndexService { + + ModelAtomicIndexMapper getMapper(); + + IPage selectAll(IPage iPage,ModelAtomicIndex index); + + List selectByCaseType(String caseType); + + + List selectBatchIds(List ids); + + + List listCaseAtomicIndex(List indexIdList, String caseId, String indexSource); +} diff --git a/src/main/java/com/supervision/police/service/ModelIndexService.java b/src/main/java/com/supervision/police/service/ModelIndexService.java index 94dce4e..f62b196 100644 --- a/src/main/java/com/supervision/police/service/ModelIndexService.java +++ b/src/main/java/com/supervision/police/service/ModelIndexService.java @@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.supervision.common.domain.R; import com.supervision.police.domain.ModelAtomicIndex; import com.supervision.police.domain.ModelIndex; +import com.supervision.police.dto.CaseAtomicIndexDTO; + +import java.util.List; /** * 指标表(ModelIndex)表服务接口 @@ -25,5 +28,6 @@ public interface ModelIndexService extends IService { R delAtomic(String id); + List listCaseAtomicIndex(String caseId, String indexSource); } diff --git a/src/main/java/com/supervision/police/service/impl/ModelAtomicIndexServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ModelAtomicIndexServiceImpl.java new file mode 100644 index 0000000..bb2076b --- /dev/null +++ b/src/main/java/com/supervision/police/service/impl/ModelAtomicIndexServiceImpl.java @@ -0,0 +1,43 @@ +package com.supervision.police.service.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.supervision.police.domain.ModelAtomicIndex; +import com.supervision.police.mapper.ModelAtomicIndexMapper; +import com.supervision.police.service.ModelAtomicIndexService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Slf4j +@Service +@RequiredArgsConstructor +public class ModelAtomicIndexServiceImpl extends ServiceImpl implements ModelAtomicIndexService { + + @Override + public ModelAtomicIndexMapper getMapper() { + return super.getBaseMapper(); + } + + @Override + public IPage selectAll(IPage iPage, ModelAtomicIndex index) { + return super.getBaseMapper().selectAll(iPage, index); + } + + @Override + public List selectByCaseType(String caseType) { + return super.getBaseMapper().selectByCaseType(caseType); + } + + @Override + public List selectBatchIds(List ids) { + return super.getBaseMapper().selectBatchIds(ids); + } + + @Override + public List listCaseAtomicIndex(List indexIdList, String caseType, String indexSource) { + return super.getBaseMapper().listCaseAtomicIndex(indexIdList, caseType, indexSource); + } +} diff --git a/src/main/java/com/supervision/police/service/impl/ModelIndexServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ModelIndexServiceImpl.java index bccd2e8..02bd03e 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelIndexServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelIndexServiceImpl.java @@ -1,32 +1,36 @@ package com.supervision.police.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Assert; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.supervision.common.domain.R; import com.supervision.common.utils.IPages; import com.supervision.common.utils.StringUtils; -import com.supervision.police.domain.ComDictionary; -import com.supervision.police.domain.ModelAtomicIndex; +import com.supervision.police.domain.*; import com.supervision.police.dto.AtomicData; +import com.supervision.police.dto.CaseAtomicIndexDTO; import com.supervision.police.dto.JudgeLogic; -import com.supervision.police.mapper.ModelAtomicIndexMapper; +import com.supervision.police.mapper.ModelAtomicResultMapper; import com.supervision.police.mapper.ModelIndexMapper; -import com.supervision.police.domain.ModelIndex; import com.supervision.police.service.ComDictionaryService; +import com.supervision.police.service.ModelAtomicIndexService; +import com.supervision.police.service.ModelCaseService; import com.supervision.police.service.ModelIndexService; -import com.supervision.springaidemo.dto.MetricResultDTO; -import org.springframework.beans.factory.annotation.Autowired; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.Collection; import java.util.List; -import java.util.UUID; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import java.util.Map; +import java.util.stream.Collectors; /** * 指标表(ModelIndex)表服务实现类 @@ -34,18 +38,20 @@ import java.util.regex.Pattern; * @author qmy * @since 2024-07-05 09:20:10 */ +@Slf4j @Service +@RequiredArgsConstructor public class ModelIndexServiceImpl extends ServiceImpl implements ModelIndexService { - @Autowired - private ComDictionaryService comDictionaryService; + private final ComDictionaryService comDictionaryService; - @Autowired - private ModelIndexMapper modelIndexMapper; + private final ModelIndexMapper modelIndexMapper; - @Autowired - private ModelAtomicIndexMapper modelAtomicIndexMapper; + private final ModelAtomicIndexService modelAtomicIndexService; + private final ModelCaseService modelCaseService; + + private final ModelAtomicResultMapper modelAtomicResultMapper; @Override public R selectAll(ModelIndex modelIndex, Integer page, Integer size) { IPage iPage = new Page<>(page, size); @@ -73,7 +79,7 @@ public class ModelIndexServiceImpl extends ServiceImpl atomicIndexList = modelAtomicIndexMapper.selectBatchIds(ids); + List atomicIndexList = modelAtomicIndexService.selectBatchIds(ids); index.setAtomicIndexList(atomicIndexList); } index.setAtomicIndexNum(ids.size()); @@ -112,7 +118,7 @@ public class ModelIndexServiceImpl extends ServiceImpl selectAllAtomic(ModelAtomicIndex modelAtomicIndex, Integer page, Integer size) { IPage iPage = new Page<>(page, size); - iPage = modelAtomicIndexMapper.selectAll(iPage, modelAtomicIndex); + iPage = modelAtomicIndexService.selectAll(iPage, modelAtomicIndex); List records = iPage.getRecords(); List dicts = comDictionaryService.list(); for (ModelAtomicIndex index : records) { @@ -128,9 +134,9 @@ public class ModelIndexServiceImpl extends ServiceImpl addOrUpdAtomic(ModelAtomicIndex modelAtomicIndex) { int i = 0; if (StringUtils.isEmpty(modelAtomicIndex.getId())) { - i = modelAtomicIndexMapper.insert(modelAtomicIndex); + i = modelAtomicIndexService.getMapper().insert(modelAtomicIndex); } else { - i = modelAtomicIndexMapper.updateById(modelAtomicIndex); + i = modelAtomicIndexService.getMapper().updateById(modelAtomicIndex); } if (i > 0) { return R.okMsg("保存成功"); @@ -141,14 +147,73 @@ public class ModelIndexServiceImpl extends ServiceImpl delAtomic(String id) { - ModelAtomicIndex index = modelAtomicIndexMapper.selectById(id); + ModelAtomicIndex index = modelAtomicIndexService.getMapper().selectById(id); index.setDataStatus(StringUtils.getUUID()); - int i = modelAtomicIndexMapper.updateById(index); + int i = modelAtomicIndexService.getMapper().updateById(index); if (i > 0) { return R.okMsg("删除成功"); } else { return R.fail("删除失败"); } } + + @Override + public List listCaseAtomicIndex(String caseId, String indexSource) { + + Assert.notEmpty(caseId, "案件id不能为空"); + ModelCase modelCase = modelCaseService.getById(caseId); + Assert.notNull(modelCase, "案件不存在"); + String caseType = modelCase.getCaseType(); + Assert.notEmpty(caseType, "案件类型不能为空"); + + // 获取案件类型对应的指标 + List modelIndexList = modelIndexMapper.selectByCaseType(caseType); + if (CollUtil.isEmpty(modelIndexList)){ + return new ArrayList<>(1); + } + + // 从指标中计算出所有原子指标id + List automicIndexIds = modelIndexList.stream().filter(modelIndex -> StrUtil.isNotEmpty(modelIndex.getJudgeLogic())) + .map(modelIndex -> pickAtomicIndexIds(modelIndex.getJudgeLogic())) + .flatMap(Collection::stream).distinct().toList(); + + if (CollUtil.isEmpty(automicIndexIds)){ + return new ArrayList<>(1); + } + + // 查询原子指标相关信息 + List modelAtomicIndexList = modelAtomicIndexService.listCaseAtomicIndex(automicIndexIds, caseType, indexSource); + if (CollUtil.isEmpty(modelAtomicIndexList)){ + return new ArrayList<>(1); + } + Map modelAtomicIndexMap = modelAtomicIndexList.stream().collect(Collectors.toMap(ModelAtomicIndex::getId, v -> v, (v1, v2) -> v1)); + + // 查询判定结果数据 + List modelAtomicResults = modelAtomicResultMapper.selectList(Wrappers.lambdaQuery(ModelAtomicResult.class).eq(ModelAtomicResult::getCaseId, caseId)); + + Map modelAtomicResultMap = modelAtomicResults.stream() + .filter(modelAtomicResult -> StrUtil.isEmpty(modelAtomicResult.getAtomicId())).collect(Collectors.toMap(ModelAtomicResult::getAtomicId, v -> v, (v1, v2) -> v1)); + // 以指标为基础数据,组装原子指标的值。然后把数据进行平铺 + return modelIndexList.stream().flatMap(modelIndex -> { + String judgeLogic = modelIndex.getJudgeLogic(); + List indexIds = pickAtomicIndexIds(judgeLogic); + return indexIds.stream().map(id -> + new CaseAtomicIndexDTO(modelAtomicIndexMap.get(id), modelIndex, modelAtomicResultMap.get(id))).toList().stream(); + }).toList(); + } + + private List pickAtomicIndexIds(String judgeLogic) { + List ids = new ArrayList<>(); + List logic = JSONUtil.toList(judgeLogic, JudgeLogic.class); + for (JudgeLogic judge : logic) { + List atomicData = judge.getAtomicData(); + for (AtomicData atomic : atomicData) { + if (!ids.contains(atomic.getAtomicIndex())){ + ids.add(atomic.getAtomicIndex()); + } + } + } + return ids; + } } diff --git a/src/main/resources/mapper/ModelAtomicIndexMapper.xml b/src/main/resources/mapper/ModelAtomicIndexMapper.xml index eb96b7b..015e39f 100644 --- a/src/main/resources/mapper/ModelAtomicIndexMapper.xml +++ b/src/main/resources/mapper/ModelAtomicIndexMapper.xml @@ -1,6 +1,8 @@ + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/ModelAtomicResultMapper.xml b/src/main/resources/mapper/ModelAtomicResultMapper.xml index 28f2641..8a65d28 100644 --- a/src/main/resources/mapper/ModelAtomicResultMapper.xml +++ b/src/main/resources/mapper/ModelAtomicResultMapper.xml @@ -3,6 +3,13 @@ \ No newline at end of file