From 8a564a8b292556b4add2c3f432098c6c5032cd0d Mon Sep 17 00:00:00 2001 From: xueqingkun Date: Thu, 1 Aug 2024 17:15:14 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/supervision/constant/DataStatus.java | 20 +++ .../controller/CaseEvidenceController.java | 3 +- .../controller/ModelIndexController.java | 5 +- .../supervision/police/dto/ModelIndexDTO.java | 151 ++++++++++++++++++ .../police/service/CaseEvidenceService.java | 2 +- .../service/ModelAtomicIndexService.java | 9 ++ .../service/impl/CaseEvidenceServiceImpl.java | 4 +- .../impl/ModelAtomicIndexServiceImpl.java | 41 +++++ .../service/impl/ModelIndexServiceImpl.java | 9 +- 9 files changed, 236 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/supervision/constant/DataStatus.java create mode 100644 src/main/java/com/supervision/police/dto/ModelIndexDTO.java diff --git a/src/main/java/com/supervision/constant/DataStatus.java b/src/main/java/com/supervision/constant/DataStatus.java new file mode 100644 index 0000000..439fa4c --- /dev/null +++ b/src/main/java/com/supervision/constant/DataStatus.java @@ -0,0 +1,20 @@ +package com.supervision.constant; + +import lombok.Getter; + +@Getter +public enum DataStatus { + + AVAILABLE("1","生效"), + + NOT_AVAILABLE("2","失效"); + + private final String code; + + private final String msg; + + DataStatus(String code, String msg) { + this.code = code; + this.msg = msg; + } +} diff --git a/src/main/java/com/supervision/police/controller/CaseEvidenceController.java b/src/main/java/com/supervision/police/controller/CaseEvidenceController.java index a68a115..de453ce 100644 --- a/src/main/java/com/supervision/police/controller/CaseEvidenceController.java +++ b/src/main/java/com/supervision/police/controller/CaseEvidenceController.java @@ -58,9 +58,10 @@ public class CaseEvidenceController { @Operation(summary = "分页查询案件证据信息列表") @GetMapping("/pageListEvidence") public R> pageListEvidence(@RequestParam @Parameter(name = "caseId",description = "案件id") String caseId, + @RequestParam @Parameter(name = "evidenceName",description = "证据名") String evidenceName, @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); + IPage pageListEvidence = caseEvidenceService.pageListEvidence(caseId, evidenceName,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 5632311..4fdf6dc 100644 --- a/src/main/java/com/supervision/police/controller/ModelIndexController.java +++ b/src/main/java/com/supervision/police/controller/ModelIndexController.java @@ -8,6 +8,7 @@ import com.supervision.police.dto.CaseAtomicResultWrapper; import com.supervision.police.service.ModelIndexService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -21,10 +22,10 @@ import java.util.List; */ @RestController @RequestMapping("/modelIndex") +@RequiredArgsConstructor public class ModelIndexController { - @Autowired - private ModelIndexService modelIndexService; + private final ModelIndexService modelIndexService; /** * 分页查询所有数据 diff --git a/src/main/java/com/supervision/police/dto/ModelIndexDTO.java b/src/main/java/com/supervision/police/dto/ModelIndexDTO.java new file mode 100644 index 0000000..8e36cf6 --- /dev/null +++ b/src/main/java/com/supervision/police/dto/ModelIndexDTO.java @@ -0,0 +1,151 @@ +package com.supervision.police.dto; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.supervision.common.utils.StringUtils; +import com.supervision.police.domain.ModelIndex; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import javax.imageio.plugins.tiff.TIFFDirectory; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +@Data +@Slf4j +public class ModelIndexDTO { + + @Schema(description = "指标id") + private String id; + + @Schema(description = "指标名称") + private String name; + + @Schema(description = "指标简称") + private String shortName; + + @Schema(description = "指标说明") + private String remark; + + @Schema(description = "指标类别") + private String indexType; + + @Schema(description = "指标分数") + private Integer indexScore; + + @Schema(description = "案件类型") + private String caseType; + + @Schema(description = "判断逻辑字符串") + private String judgeLogic; + + @Schema(description = "判断逻辑list") + private List judgeLogicList; + + public ModelIndexDTO() { + } + + public ModelIndexDTO(ModelIndex modelIndex) { + if (Objects.isNull(modelIndex)){ + return; + } + this.id = modelIndex.getId(); + this.name = modelIndex.getName(); + this.shortName = modelIndex.getShortName(); + this.remark = modelIndex.getRemark(); + this.indexType = modelIndex.getIndexType(); + this.indexScore = modelIndex.getIndexScore(); + this.caseType = modelIndex.getCaseType(); + this.judgeLogic = modelIndex.getJudgeLogic(); + if (StrUtil.isNotEmpty(this.judgeLogic)){ + try { + this.judgeLogicList = JSONUtil.toList(this.judgeLogic, JudgeLogic.class); + } catch (Exception e) { + log.error("ModelIndexDTO: 解析judgeLogic失败:id:{},judgeLogic:{}",this.id,this.judgeLogic,e); + } + } + } + + /** + * 判断逻辑是否包含原子指标 + * @param atomicIndexId 原子指标id + * @return + */ + public boolean logicContainAtomicIndex(String atomicIndexId) { + if (StrUtil.isEmpty(atomicIndexId)){ + return false; + } + if (CollUtil.isEmpty(this.judgeLogicList)) { + return false; + } + + return this.judgeLogicList.stream().anyMatch(logic -> logicContainAtomicIndex(logic, atomicIndexId)); + } + + private boolean logicContainAtomicIndex(JudgeLogic logic,String atomicIndexId) { + + if (Objects.isNull(logic)){ + return false; + } + + List atomicData = logic.getAtomicData(); + if (CollUtil.isEmpty(atomicData)){ + return false; + } + + for (AtomicData atomicDatum : atomicData) { + if (atomicIndexId.equals(atomicDatum.getAtomicIndex())){ + return true; + } + } + return false; + } + + /** + * 清除指定原子指标 + * @param atomicIndexId 原子指标id + * @return + */ + public List judgeLogicExcludeAtomicIndex(String atomicIndexId) { + if (StrUtil.isEmpty(atomicIndexId)){ + return this.judgeLogicList; + } + if (CollUtil.isEmpty(this.judgeLogicList)){ + return CollUtil.newArrayList(); + } + + List result = new ArrayList<>(); + for (JudgeLogic logic : this.judgeLogicList) { + if (Objects.isNull(logic)){ + continue; + } + List atomicDataList = new ArrayList<>(); + for (AtomicData atomicDatum : logic.getAtomicData()) { + if (!atomicIndexId.equals(atomicDatum.getAtomicIndex())){ + atomicDataList.add(atomicDatum); + } + } + JudgeLogic resultLogic = new JudgeLogic(); + resultLogic.setRowLogic(logic.getRowLogic()); + resultLogic.setGroupLogic(logic.getGroupLogic()); + resultLogic.setAtomicData(atomicDataList); + result.add(resultLogic); + } + + return result; + + } + + /** + * 将判断逻辑list转换为json + * @param judgeLogicList + * @return + */ + public String judgeLogicToJson(List judgeLogicList) { + return JSONUtil.toJsonStr(judgeLogicList); + } +} diff --git a/src/main/java/com/supervision/police/service/CaseEvidenceService.java b/src/main/java/com/supervision/police/service/CaseEvidenceService.java index 2880e4e..f2f6844 100644 --- a/src/main/java/com/supervision/police/service/CaseEvidenceService.java +++ b/src/main/java/com/supervision/police/service/CaseEvidenceService.java @@ -44,7 +44,7 @@ public interface CaseEvidenceService { * @param pageSize 当前页码 * @return */ - IPage pageListEvidence(String caseId, Integer pageNum, Integer pageSize); + IPage pageListEvidence(String caseId,String evidenceName, Integer pageNum, Integer pageSize); /** * 查询案件证据信息详情 diff --git a/src/main/java/com/supervision/police/service/ModelAtomicIndexService.java b/src/main/java/com/supervision/police/service/ModelAtomicIndexService.java index 13b8e3c..a78c1f8 100644 --- a/src/main/java/com/supervision/police/service/ModelAtomicIndexService.java +++ b/src/main/java/com/supervision/police/service/ModelAtomicIndexService.java @@ -27,4 +27,13 @@ public interface ModelAtomicIndexService extends IService { * @return */ List listCaseAtomicIndex(List indexIdList, String caseId, String indexSource); + + + + /** + * 当删除原子指标,触发操作 + * @param caseType 案件类型 + * @param atomicIndexId 原子指标id + */ + void whenDeleteAtomicIndex(String caseType,String atomicIndexId); } diff --git a/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java b/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java index 2bbeb38..1d5d6ce 100644 --- a/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/CaseEvidenceServiceImpl.java @@ -1,6 +1,7 @@ package com.supervision.police.service.impl; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; @@ -113,10 +114,11 @@ public class CaseEvidenceServiceImpl implements CaseEvidenceService { @Override @Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class) - public IPage pageListEvidence(String caseId, Integer pageNum, Integer pageSize) { + public IPage pageListEvidence(String caseId,String evidenceName, Integer pageNum, Integer pageSize) { Assert.notEmpty(caseId,"案件id不能为空"); Page caseEvidencePage = caseEvidenceDaoService.lambdaQuery().eq(CaseEvidence::getCaseId, caseId) + .like(StrUtil.isNotEmpty(evidenceName), CaseEvidence::getEvidenceName,evidenceName) .orderBy(true, false,CaseEvidence::getUpdateTime) .page(new Page<>(pageNum, pageSize)); diff --git a/src/main/java/com/supervision/police/service/impl/ModelAtomicIndexServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ModelAtomicIndexServiceImpl.java index bb2076b..6062a55 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelAtomicIndexServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelAtomicIndexServiceImpl.java @@ -1,13 +1,24 @@ package com.supervision.police.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.supervision.constant.DataStatus; import com.supervision.police.domain.ModelAtomicIndex; +import com.supervision.police.domain.ModelIndex; +import com.supervision.police.dto.JudgeLogic; +import com.supervision.police.dto.ModelIndexDTO; import com.supervision.police.mapper.ModelAtomicIndexMapper; import com.supervision.police.service.ModelAtomicIndexService; +import com.supervision.police.service.ModelIndexService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -16,6 +27,9 @@ import java.util.List; @RequiredArgsConstructor public class ModelAtomicIndexServiceImpl extends ServiceImpl implements ModelAtomicIndexService { + @Lazy + @Autowired + private ModelIndexService modelIndexService; @Override public ModelAtomicIndexMapper getMapper() { return super.getBaseMapper(); @@ -40,4 +54,31 @@ public class ModelAtomicIndexServiceImpl extends ServiceImpl listCaseAtomicIndex(List indexIdList, String caseType, String indexSource) { return super.getBaseMapper().listCaseAtomicIndex(indexIdList, caseType, indexSource); } + + @Override + @Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class) + public void whenDeleteAtomicIndex(String caseType,String atomicIndexId) { + if (StrUtil.isEmpty(atomicIndexId)){ + log.warn("whenDeleteAtomicIndex: atomicIndexId is null,停止后续操作.."); + return; + } + // 清理指标中的关联数据 + // 获取指标列表 + List modelIndexList = modelIndexService.list(new LambdaQueryWrapper() + .eq(StrUtil.isNotEmpty(caseType),ModelIndex::getCaseType, caseType) + .eq(ModelIndex::getDataStatus, DataStatus.AVAILABLE.getCode())); + + List modelIndexDTOList = modelIndexList.stream().map(ModelIndexDTO::new) + .filter(modelIndexDTO -> modelIndexDTO.logicContainAtomicIndex(atomicIndexId)).toList(); + + if (CollUtil.isEmpty(modelIndexDTOList)){ + return; + } + + modelIndexDTOList.forEach(modelIndexDTO -> { + List judgeLogicList = modelIndexDTO.judgeLogicExcludeAtomicIndex(atomicIndexId); + modelIndexDTO.setJudgeLogic(modelIndexDTO.judgeLogicToJson(judgeLogicList)); + modelIndexService.lambdaUpdate().eq(ModelIndex::getId, modelIndexDTO.getId()).set(ModelIndex::getJudgeLogic, modelIndexDTO.getJudgeLogic()).update(); + }); + } } 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 b75af08..f5f6918 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelIndexServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelIndexServiceImpl.java @@ -15,6 +15,7 @@ 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.constant.DataStatus; import com.supervision.police.domain.*; import com.supervision.police.dto.AtomicData; import com.supervision.police.dto.CaseAtomicIndexDTO; @@ -119,7 +120,7 @@ public class ModelIndexServiceImpl extends ServiceImpl del(String id) { ModelIndex index = modelIndexMapper.selectById(id); - index.setDataStatus(StringUtils.getUUID()); + index.setDataStatus(DataStatus.NOT_AVAILABLE.getCode()); int i = modelIndexMapper.updateById(index); if (i > 0) { return R.okMsg("删除成功"); @@ -154,7 +155,8 @@ public class ModelIndexServiceImpl extends ServiceImpl delAtomic(String id) { ModelAtomicIndex index = modelAtomicIndexService.getMapper().selectById(id); - index.setDataStatus(StringUtils.getUUID()); + index.setDataStatus(DataStatus.NOT_AVAILABLE.getCode()); int i = modelAtomicIndexService.getMapper().updateById(index); if (i > 0) { + modelAtomicIndexService.whenDeleteAtomicIndex(index.getCaseType(), id); return R.okMsg("删除成功"); } else { return R.fail("删除失败");