From dfe3782d67f6c003597e680f99aaed60167f7c60 Mon Sep 17 00:00:00 2001 From: xueqingkun Date: Tue, 18 Feb 2025 09:50:34 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E6=B7=BB=E5=8A=A0=E5=A4=9A=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E6=8E=A5=E5=85=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ModelIndexController.java | 9 ++ .../ScoringModelInfoController.java | 57 ++++++++ .../police/domain/ModelAtomicIndex.java | 3 +- .../police/domain/ScoringModelInfo.java | 68 +++++++++ .../supervision/police/domain/TripleInfo.java | 1 - .../police/dto/AtomicIndexUsedDTO.java | 22 +++ .../police/dto/IndexResultQuery.java | 7 +- .../dto/caseScore/CaseScoreDetailBuilder.java | 4 +- .../police/mapper/ModelAtomicIndexMapper.java | 3 + .../police/mapper/ScoringModelInfoMapper.java | 18 +++ .../service/ModelAtomicIndexService.java | 10 +- .../police/service/ModelCaseService.java | 2 + .../ModelIndexAtomicRelationService.java | 2 +- .../police/service/ModelIndexService.java | 12 ++ .../service/ScoringModelInfoService.java | 28 ++++ .../impl/ModelAtomicIndexServiceImpl.java | 6 + .../service/impl/ModelCaseServiceImpl.java | 11 ++ .../ModelIndexAtomicRelationServiceImpl.java | 9 ++ .../service/impl/ModelIndexServiceImpl.java | 76 +++++++++- .../police/service/impl/ModelServiceImpl.java | 4 +- .../impl/ScoringModelInfoServiceImpl.java | 133 ++++++++++++++++++ .../mapper/ModelAtomicIndexMapper.xml | 42 +++++- src/main/resources/mapper/ModelCaseMapper.xml | 3 +- .../mapper/ScoringModelInfoMapper.xml | 23 +++ 24 files changed, 528 insertions(+), 25 deletions(-) create mode 100644 src/main/java/com/supervision/police/controller/ScoringModelInfoController.java create mode 100644 src/main/java/com/supervision/police/domain/ScoringModelInfo.java create mode 100644 src/main/java/com/supervision/police/dto/AtomicIndexUsedDTO.java create mode 100644 src/main/java/com/supervision/police/mapper/ScoringModelInfoMapper.java create mode 100644 src/main/java/com/supervision/police/service/ScoringModelInfoService.java create mode 100644 src/main/java/com/supervision/police/service/impl/ScoringModelInfoServiceImpl.java create mode 100644 src/main/resources/mapper/ScoringModelInfoMapper.xml diff --git a/src/main/java/com/supervision/police/controller/ModelIndexController.java b/src/main/java/com/supervision/police/controller/ModelIndexController.java index ae05036..5ab9723 100644 --- a/src/main/java/com/supervision/police/controller/ModelIndexController.java +++ b/src/main/java/com/supervision/police/controller/ModelIndexController.java @@ -3,6 +3,7 @@ package com.supervision.police.controller; import com.supervision.common.domain.R; import com.supervision.police.domain.ModelAtomicIndex; import com.supervision.police.domain.ModelIndex; +import com.supervision.police.dto.AtomicIndexUsedDTO; import com.supervision.police.dto.CaseAtomicIndexDTO; import com.supervision.police.dto.CaseAtomicResultWrapper; import com.supervision.police.vo.GraphDebugReqVO; @@ -106,6 +107,14 @@ public class ModelIndexController { } + @Operation(summary = "查询原子指标被使用情况") + @GetMapping("/atomic/used") + public R> atomicUsed(@RequestParam String atomicIndexId) { + List atomicIndexUsedDTOS = modelIndexService.atomicUsed(atomicIndexId); + return R.ok(atomicIndexUsedDTOS); + } + + /** * 查询案件原子指标列表 * @return diff --git a/src/main/java/com/supervision/police/controller/ScoringModelInfoController.java b/src/main/java/com/supervision/police/controller/ScoringModelInfoController.java new file mode 100644 index 0000000..3b67bde --- /dev/null +++ b/src/main/java/com/supervision/police/controller/ScoringModelInfoController.java @@ -0,0 +1,57 @@ +package com.supervision.police.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.supervision.common.domain.R; +import com.supervision.police.domain.ScoringModelInfo; +import com.supervision.police.service.ScoringModelInfoService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +@Tag(name = "赋分模型信息") +@RestController +@RequestMapping("/scoringModel") +@RequiredArgsConstructor +public class ScoringModelInfoController { + + private final ScoringModelInfoService scoringModelInfoService; + + @Operation(summary = "保存赋分模型") + @PostMapping("/save") + public R saveScoringModel(@RequestBody ScoringModelInfo modelInfo) { + String roleId = scoringModelInfoService.saveScoringModel(modelInfo); + return R.ok(roleId); + } + + @Operation(summary = "删除赋分模型") + @PostMapping("/delete") + public R deleteScoringModel(@RequestBody ScoringModelInfo modelInfo) { + scoringModelInfoService.deleteScoringModel(modelInfo.getId()); + return R.ok(); + } + + @Operation(summary = "修改赋分模型") + @PostMapping("/update") + public R updateScoringModel(@RequestBody ScoringModelInfo modelInfo) { + scoringModelInfoService.updateScoringModel(modelInfo); + return R.ok(); + } + + @Operation(summary = "复制赋分模型") + @PostMapping("/copy") + public R copyScoringModel(@RequestBody ScoringModelInfo modelInfo) { + String modelId = scoringModelInfoService.copyScoringModel(modelInfo.getId()); + return R.ok(modelId); + } + + @Operation(summary = "查看赋分模型列表") + @GetMapping("/pageList") + public R> pageList(@RequestParam(required = false) @Parameter(name = "modelName",description = "模型名称") String modelName, + @RequestParam(defaultValue = "1") @Parameter(name = "pageNum",description = "页码") Integer pageNum, + @RequestParam(defaultValue = "10") @Parameter(name = "pageSize",description = "每页数量") Integer pageSize) { + IPage page = scoringModelInfoService.pageList(modelName,pageNum, pageSize); + return R.ok(page); + } +} diff --git a/src/main/java/com/supervision/police/domain/ModelAtomicIndex.java b/src/main/java/com/supervision/police/domain/ModelAtomicIndex.java index 14f2afa..8a437c2 100644 --- a/src/main/java/com/supervision/police/domain/ModelAtomicIndex.java +++ b/src/main/java/com/supervision/police/domain/ModelAtomicIndex.java @@ -35,8 +35,9 @@ public class ModelAtomicIndex implements Serializable { private String remark; /** - * 案件类型 + * 案件类型 由于原子指标可以用于多个模型,此后废弃case_type字段。 */ + @Deprecated(since = "dev_2.3 time:2024-07-05") private String caseType; diff --git a/src/main/java/com/supervision/police/domain/ScoringModelInfo.java b/src/main/java/com/supervision/police/domain/ScoringModelInfo.java new file mode 100644 index 0000000..db773a0 --- /dev/null +++ b/src/main/java/com/supervision/police/domain/ScoringModelInfo.java @@ -0,0 +1,68 @@ +package com.supervision.police.domain; + +import com.baomidou.mybatisplus.annotation.*; + +import java.io.Serializable; +import java.time.LocalDateTime; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * 赋分模型信息表 + * @TableName scoring_model_info + */ +@Data +@TableName(value ="scoring_model_info") +public class ScoringModelInfo implements Serializable { + /** + * 主键 + */ + @TableId + private String id; + + /** + * 模型名 + */ + private String modelName; + + /** + * 模型说明 + */ + private String modelDesc; + + /** + * 模型设置及赋分规则 + */ + private String scoringRules; + + /** + * 创建人id + */ + private String createUserId; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + /** + * 更新人 + */ + private String updateUserId; + + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime updateTime; + + @TableField(exist = false) + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/src/main/java/com/supervision/police/domain/TripleInfo.java b/src/main/java/com/supervision/police/domain/TripleInfo.java index 5d65a8c..9ad42dc 100644 --- a/src/main/java/com/supervision/police/domain/TripleInfo.java +++ b/src/main/java/com/supervision/police/domain/TripleInfo.java @@ -113,7 +113,6 @@ public class TripleInfo implements Serializable { public TripleInfo() { } - // todo public TripleInfo(String startNode, String endNode, String relation,String caseId, String recordId, String recordSplitId, LocalDateTime createTime, String startNodeType, String endNodeType) { this.startNode = startNode; this.endNode = endNode; diff --git a/src/main/java/com/supervision/police/dto/AtomicIndexUsedDTO.java b/src/main/java/com/supervision/police/dto/AtomicIndexUsedDTO.java new file mode 100644 index 0000000..8880bdc --- /dev/null +++ b/src/main/java/com/supervision/police/dto/AtomicIndexUsedDTO.java @@ -0,0 +1,22 @@ +package com.supervision.police.dto; + +import lombok.Data; + +/** + * 原子指标使用情况DTO + */ +@Data +public class AtomicIndexUsedDTO { + + private String atomicIndexId; + + private String atomicIndexName; + + private String indexId; + + private String indexName; + + private String modelName; + + private String modelId; +} diff --git a/src/main/java/com/supervision/police/dto/IndexResultQuery.java b/src/main/java/com/supervision/police/dto/IndexResultQuery.java index 1e2460a..4520ca4 100644 --- a/src/main/java/com/supervision/police/dto/IndexResultQuery.java +++ b/src/main/java/com/supervision/police/dto/IndexResultQuery.java @@ -7,10 +7,13 @@ import lombok.Data; public class IndexResultQuery { @Schema(description = "案件id") - private String caseId; + private String caseId; @Schema(description = "指标类型") - private String indexType; + private String indexType; + + + private String caseType; @Schema(description = "指标名称") private String indexName; diff --git a/src/main/java/com/supervision/police/dto/caseScore/CaseScoreDetailBuilder.java b/src/main/java/com/supervision/police/dto/caseScore/CaseScoreDetailBuilder.java index 0c21963..48ac72a 100644 --- a/src/main/java/com/supervision/police/dto/caseScore/CaseScoreDetailBuilder.java +++ b/src/main/java/com/supervision/police/dto/caseScore/CaseScoreDetailBuilder.java @@ -457,9 +457,7 @@ public class CaseScoreDetailBuilder { new LambdaQueryWrapper().eq(ModelIndexResult::getCaseId, caseId)); // 3.3 获取原子指标信息 - List modelAtomicIndices = modelAtomicIndexMapper.selectList( - new LambdaQueryWrapper().eq(ModelAtomicIndex::getCaseType, modelCase.getCaseType()) - .eq(ModelAtomicIndex::getDataStatus, "1")); + List modelAtomicIndices = modelAtomicIndexMapper.listCaseAtomicIndex(null, modelCase.getCaseType(), "1"); // 3.4 获取原子指标结果 List modelAtomicResults = modelAtomicResultMapper.selectList( diff --git a/src/main/java/com/supervision/police/mapper/ModelAtomicIndexMapper.java b/src/main/java/com/supervision/police/mapper/ModelAtomicIndexMapper.java index 9a6f64a..fd72247 100644 --- a/src/main/java/com/supervision/police/mapper/ModelAtomicIndexMapper.java +++ b/src/main/java/com/supervision/police/mapper/ModelAtomicIndexMapper.java @@ -3,6 +3,7 @@ package com.supervision.police.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.supervision.police.domain.ModelAtomicIndex; +import com.supervision.police.dto.AtomicIndexUsedDTO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -22,5 +23,7 @@ public interface ModelAtomicIndexMapper extends BaseMapper { List listCaseAtomicIndex(@Param("indexIdList") List indexIdList, @Param("caseType") String caseType, @Param("indexSource") String indexSource); + + List atomicUsed(@Param("atomicIndexId") String atomicIndexId); } diff --git a/src/main/java/com/supervision/police/mapper/ScoringModelInfoMapper.java b/src/main/java/com/supervision/police/mapper/ScoringModelInfoMapper.java new file mode 100644 index 0000000..f397eda --- /dev/null +++ b/src/main/java/com/supervision/police/mapper/ScoringModelInfoMapper.java @@ -0,0 +1,18 @@ +package com.supervision.police.mapper; + +import com.supervision.police.domain.ScoringModelInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author Administrator +* @description 针对表【scoring_model_info(赋分模型信息表)】的数据库操作Mapper +* @createDate 2025-02-14 16:27:25 +* @Entity com.supervision.police.domain.ScoringModelInfo +*/ +public interface ScoringModelInfoMapper extends BaseMapper { + +} + + + + diff --git a/src/main/java/com/supervision/police/service/ModelAtomicIndexService.java b/src/main/java/com/supervision/police/service/ModelAtomicIndexService.java index a78c1f8..5bf442c 100644 --- a/src/main/java/com/supervision/police/service/ModelAtomicIndexService.java +++ b/src/main/java/com/supervision/police/service/ModelAtomicIndexService.java @@ -3,6 +3,7 @@ package com.supervision.police.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.supervision.police.domain.ModelAtomicIndex; +import com.supervision.police.dto.AtomicIndexUsedDTO; import com.supervision.police.mapper.ModelAtomicIndexMapper; import java.util.List; @@ -21,12 +22,12 @@ public interface ModelAtomicIndexService extends IService { /** * 根据案件id和指标来源获取案件原子指标 - * @param indexIdList 原子指标id集合 - * @param caseId 案件id + * @param atomicIndexIds 原子指标id集合 + * @param caseType 案件类型 * @param indexSource 指标来源 * @return */ - List listCaseAtomicIndex(List indexIdList, String caseId, String indexSource); + List listCaseAtomicIndex(List atomicIndexIds, String caseType, String indexSource); @@ -36,4 +37,7 @@ public interface ModelAtomicIndexService extends IService { * @param atomicIndexId 原子指标id */ void whenDeleteAtomicIndex(String caseType,String atomicIndexId); + + List atomicUsed(String atomicIndexId); + } diff --git a/src/main/java/com/supervision/police/service/ModelCaseService.java b/src/main/java/com/supervision/police/service/ModelCaseService.java index ec05238..1fd0080 100644 --- a/src/main/java/com/supervision/police/service/ModelCaseService.java +++ b/src/main/java/com/supervision/police/service/ModelCaseService.java @@ -61,5 +61,7 @@ public interface ModelCaseService extends IService { List listCaseFileIds(String caseId); + boolean scoringModelIsUsed(String modelId); + } diff --git a/src/main/java/com/supervision/police/service/ModelIndexAtomicRelationService.java b/src/main/java/com/supervision/police/service/ModelIndexAtomicRelationService.java index 834f4b8..329856c 100644 --- a/src/main/java/com/supervision/police/service/ModelIndexAtomicRelationService.java +++ b/src/main/java/com/supervision/police/service/ModelIndexAtomicRelationService.java @@ -39,6 +39,6 @@ public interface ModelIndexAtomicRelationService extends IService indexIds); } diff --git a/src/main/java/com/supervision/police/service/ModelIndexService.java b/src/main/java/com/supervision/police/service/ModelIndexService.java index f297c00..e97ff9f 100644 --- a/src/main/java/com/supervision/police/service/ModelIndexService.java +++ b/src/main/java/com/supervision/police/service/ModelIndexService.java @@ -4,6 +4,7 @@ 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.AtomicIndexUsedDTO; import com.supervision.police.dto.CaseAtomicIndexDTO; import com.supervision.police.dto.CaseAtomicResultWrapper; import com.supervision.police.dto.ValueCalculateScopeDTO; @@ -28,6 +29,8 @@ public interface ModelIndexService extends IService { R del(String id); + void deleteModelIndexByCaseType(String caseType); + R selectAllAtomic(ModelAtomicIndex modelAtomicIndex, Integer page, Integer size); R addOrUpdAtomic(ModelAtomicIndex modelAtomicIndex); @@ -59,5 +62,14 @@ public interface ModelIndexService extends IService { Map> listAtomicIndexAttributeScope(List atomicIndexIds); GraphDebugResVO graphDebug(GraphDebugReqVO graphDebugDTO); + + /** + * 复制指标 + * @param oldModelId 旧模型id + * @param newModelId 新模型id + */ + void copyIndex(String oldModelId, String newModelId); + + List atomicUsed(String atomicIndexId); } diff --git a/src/main/java/com/supervision/police/service/ScoringModelInfoService.java b/src/main/java/com/supervision/police/service/ScoringModelInfoService.java new file mode 100644 index 0000000..8d3cbb1 --- /dev/null +++ b/src/main/java/com/supervision/police/service/ScoringModelInfoService.java @@ -0,0 +1,28 @@ +package com.supervision.police.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.supervision.police.domain.ScoringModelInfo; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; +import java.util.stream.LongStream; + +/** +* @author Administrator +* @description 针对表【scoring_model_info(赋分模型信息表)】的数据库操作Service +* @createDate 2025-02-14 16:27:25 +*/ +public interface ScoringModelInfoService extends IService { + + String saveScoringModel(ScoringModelInfo modelInfo); + + void deleteScoringModel(String modelId); + + void updateScoringModel(ScoringModelInfo modelInfo); + + String copyScoringModel(String modelId); + + IPage pageList(String modelName, Integer pageNum, Integer pageSize); + + String getScoringModelNameById(String modelId, List modelInfoList); +} 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 6062a55..f9694fe 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelAtomicIndexServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelAtomicIndexServiceImpl.java @@ -8,6 +8,7 @@ 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.AtomicIndexUsedDTO; import com.supervision.police.dto.JudgeLogic; import com.supervision.police.dto.ModelIndexDTO; import com.supervision.police.mapper.ModelAtomicIndexMapper; @@ -81,4 +82,9 @@ public class ModelAtomicIndexServiceImpl extends ServiceImpl atomicUsed(String atomicIndexId) { + return super.getBaseMapper().atomicUsed(atomicIndexId); + } } 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 0edaad1..bafec97 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelCaseServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelCaseServiceImpl.java @@ -373,6 +373,11 @@ public class ModelCaseServiceImpl extends ServiceImpl iPage = modelCaseMapper.pageListIndexResult(query, Page.of(pageNum, pageSize)); List records = iPage.getRecords(); @@ -462,6 +467,12 @@ public class ModelCaseServiceImpl extends ServiceImpl().eq(ModelIndexAtomicRelation::getModelIndexId, modelIndexId)); } + + @Override + public void deleteByIndexIds(List indexIds) { + if (indexIds.isEmpty()){ + log.warn("deleteByIndexIds: indexIds 为空,不删除关联关系....indexIds:{}", JSONUtil.toJsonStr(indexIds)); + return; + } + super.lambdaUpdate().in(ModelIndexAtomicRelation::getModelIndexId, indexIds).remove(); + } } 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 2e77ebd..5e43f43 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelIndexServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelIndexServiceImpl.java @@ -46,11 +46,10 @@ import org.neo4j.driver.internal.InternalNode; import org.neo4j.driver.internal.InternalRelationship; import org.neo4j.driver.types.Node; import org.neo4j.driver.types.Relationship; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - -import java.io.Serializable; import java.util.*; import java.util.stream.Collectors; @@ -92,6 +91,9 @@ public class ModelIndexServiceImpl extends ServiceImpl selectAll(ModelIndexReqVO modelIndex, Integer page, Integer size) { @@ -123,11 +125,12 @@ public class ModelIndexServiceImpl extends ServiceImpl records = iPage.getRecords(); List dicts = comDictionaryService.list(); + List scoringModelInfoList = scoringModelInfoService.list(); // 查询结果拼装 for (ModelIndex index : records) { index.setIndexTypeName(comDictionaryService.getName(dicts, "index_type", index.getIndexType())); - index.setCaseTypeName(comDictionaryService.getName(dicts, "case_type", index.getCaseType())); + index.setCaseTypeName(scoringModelInfoService.getScoringModelNameById(index.getCaseType(), scoringModelInfoList)); //原子指标 String judgeLogic = index.getJudgeLogic(); Set ids = new HashSet<>(); @@ -193,6 +196,20 @@ public class ModelIndexServiceImpl extends ServiceImpl modelIndexList = super.lambdaQuery().eq(ModelIndex::getCaseType, caseType).list(); + if (CollUtil.isEmpty(modelIndexList)) { + log.info("deleteModelIndexByCaseType:未查询到模型类型:{}的指标", caseType); + return; + } + super.lambdaUpdate().eq(ModelIndex::getCaseType, caseType).remove(); + modelIndexAtomicRelationService.deleteByIndexIds(modelIndexList.stream().map(ModelIndex::getId).toList()); + + } + @Override @Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class) public R selectAllAtomic(ModelAtomicIndex modelAtomicIndex, Integer page, Integer size) { @@ -202,8 +219,9 @@ public class ModelIndexServiceImpl extends ServiceImpl dicts = comDictionaryService.list(); String caseType = StrUtil.isNotEmpty(modelAtomicIndex.getCaseType()) ? modelAtomicIndex.getCaseType() : NotePromptConstants.CASE_TYPE_ENGINEERING_CONTRACT_FRAUD; EvidenceCategoryDTO rootCategory = new EvidenceCategoryDTO(evidenceCategoryService.listCategoryTree(caseType)); + List scoringModelInfoList = scoringModelInfoService.list(); for (ModelAtomicIndex index : records) { - index.setCaseTypeName(comDictionaryService.getName(dicts, "case_type", index.getCaseType())); + index.setCaseTypeName(scoringModelInfoService.getScoringModelNameById(index.getCaseType(), scoringModelInfoList)); index.setIndexSourceName(comDictionaryService.getName(dicts, "index_source", index.getIndexSource())); index.setRecordTypeName(comDictionaryService.getName(dicts, "record_type", index.getRecordType())); index.setCategoryIdPath(rootCategory.listCategoryIdPath(index.getCategoryId())); @@ -480,6 +498,56 @@ public class ModelIndexServiceImpl extends ServiceImpl modelIndexList = super.lambdaQuery().eq(ModelIndex::getCaseType, oldModelId).eq(ModelIndex::getDataStatus, "1").list(); + if (CollUtil.isEmpty(modelIndexList)){ + log.info("copyIndex:未查询到原模型id:{}的指标", oldModelId); + return; + } + for (ModelIndex modelIndex : modelIndexList) { + ModelIndex newIndex = modelIndexCopy(modelIndex,newModelId); + modelIndexMapper.insert(newIndex); + modelIndexAtomicRelationService.saveByModelIndex(newIndex); + } + } + + @Override + public List atomicUsed(String atomicIndexId) { + + Assert.notEmpty(atomicIndexId, "原子指标id不能为空"); + List atomicUsed = modelAtomicIndexService.atomicUsed(atomicIndexId); + // 根据指标id和案件类型id进行去重 + return atomicUsed.stream().filter(dto -> StrUtil.isNotEmpty(dto.getIndexId())) + .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> + new TreeSet<>(Comparator.comparing(o -> o.getIndexId() + "-" + o.getModelId()))), ArrayList::new)); + } + + /** + * 复制指标 + * @param modelIndex 指标 + * @param caseType 案件类型 + * @return + */ + private ModelIndex modelIndexCopy(ModelIndex modelIndex,String caseType) { + ModelIndex newIndex = new ModelIndex(); + newIndex.setName(modelIndex.getName()); + newIndex.setShortName(modelIndex.getShortName()); + newIndex.setRemark(modelIndex.getRemark()); + newIndex.setIndexType(modelIndex.getIndexType()); + newIndex.setIndexScore(modelIndex.getIndexScore()); + newIndex.setAtomicIndexNum(modelIndex.getAtomicIndexNum()); + newIndex.setCaseType(caseType); + newIndex.setJudgeLogic(modelIndex.getJudgeLogic()); + newIndex.setIndexRule(modelIndex.getIndexRule()); + newIndex.setDataStatus(modelIndex.getDataStatus()); + return newIndex; + } + private List generateRelations(List records) { 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 06c10a4..dd75247 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelServiceImpl.java @@ -86,7 +86,7 @@ public class ModelServiceImpl implements ModelService { private final ModelIndexAtomicRelationService modelIndexAtomicRelationService; - private final NoteRecordService noteRecordService; + private final ModelAtomicIndexService modelAtomicIndexService; @Autowired private NotePromptService notePromptService; @@ -127,7 +127,7 @@ public class ModelServiceImpl implements ModelService { log.error("未找到指标信息:【{}】", modelCase.getCaseType()); return R.fail("未找到指标信息"); } - List atomicIndices = modelAtomicIndexMapper.selectByCaseType(modelCase.getCaseType()); + List atomicIndices = modelAtomicIndexService.listCaseAtomicIndex(null, modelCase.getCaseType(), null); if (atomicIndices.isEmpty()) { log.error("未找到原子指标信息:【{}】", modelCase.getCaseType()); return R.fail("未找到原子指标信息"); diff --git a/src/main/java/com/supervision/police/service/impl/ScoringModelInfoServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ScoringModelInfoServiceImpl.java new file mode 100644 index 0000000..f99a581 --- /dev/null +++ b/src/main/java/com/supervision/police/service/impl/ScoringModelInfoServiceImpl.java @@ -0,0 +1,133 @@ +package com.supervision.police.service.impl; + +import cn.hutool.core.collection.CollUtil; +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.service.impl.ServiceImpl; +import com.supervision.police.domain.ScoringModelInfo; +import com.supervision.police.service.ModelCaseService; +import com.supervision.police.service.ModelIndexService; +import com.supervision.police.service.ScoringModelInfoService; +import com.supervision.police.mapper.ScoringModelInfoMapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** +* @author Administrator +* @description 针对表【scoring_model_info(赋分模型信息表)】的数据库操作Service实现 +* @createDate 2025-02-14 16:27:25 +*/ +@Slf4j +@Service +@RequiredArgsConstructor +public class ScoringModelInfoServiceImpl extends ServiceImpl + implements ScoringModelInfoService{ + + private final ModelCaseService modelCaseService; + + private final ModelIndexService modelIndexService; + @Override + public String saveScoringModel(ScoringModelInfo modelInfo) { + Assert.notEmpty(modelInfo.getModelName(), "模型名不能为空"); + boolean exists = super.lambdaQuery().eq(ScoringModelInfo::getModelName, modelInfo.getModelName()).exists(); + Assert.isFalse(exists, "模型名已存在"); + super.save(modelInfo); + return modelInfo.getId(); + } + + @Override + @Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class) + public void deleteScoringModel(String modelId) { + Assert.notEmpty(modelId, "模型id不能为空"); + boolean used = modelCaseService.scoringModelIsUsed(modelId); + Assert.isFalse(used, "模型已被使用,无法删除"); + super.removeById(modelId); + modelIndexService.deleteModelIndexByCaseType(modelId); + } + + @Override + public void updateScoringModel(ScoringModelInfo modelInfo) { + Assert.notEmpty(modelInfo.getId(), "模型id不能为空"); + + ScoringModelInfo info = super.getById(modelInfo.getId()); + Assert.notNull(info, "模型不存在"); + Assert.notEmpty(modelInfo.getModelName(), "模型名不能为空"); + if (!StrUtil.equals(info.getModelName(), modelInfo.getModelName())) { + boolean exists = super.lambdaQuery().eq(ScoringModelInfo::getModelName, modelInfo.getModelName()).exists(); + Assert.isFalse(exists, "模型名已存在"); + info.setModelName(modelInfo.getModelName()); + } + info.setModelDesc(modelInfo.getModelDesc()); + info.setScoringRules(modelInfo.getScoringRules()); + super.updateById(modelInfo); + } + + @Override + @Transactional(transactionManager = "dataSourceTransactionManager",rollbackFor = Exception.class) + public String copyScoringModel(String modelId) { + + Assert.notEmpty(modelId, "模型id不能为空!"); + ScoringModelInfo modelInfo = super.getById(modelId); + Assert.notNull(modelInfo, "模型不存在!"); + ScoringModelInfo scoringModelInfo = copyScoringModel(modelInfo); + modelIndexService.copyIndex(modelInfo.getId(), scoringModelInfo.getId()); + return scoringModelInfo.getId(); + } + + + /** + * 复制赋分模型 + * @param modelInfo 模型信息 + * @return 复制后的模型信息 + */ + private ScoringModelInfo copyScoringModel(ScoringModelInfo modelInfo) { + Assert.notNull(modelInfo, "模型信息不能为空!"); + String newModelName = generateModelName(modelInfo.getModelName()); + ScoringModelInfo scoringModelInfo = new ScoringModelInfo(); + scoringModelInfo.setModelName(newModelName); + scoringModelInfo.setModelDesc(modelInfo.getModelDesc()); + scoringModelInfo.setScoringRules(modelInfo.getScoringRules()); + super.save(scoringModelInfo); + return scoringModelInfo; + } + private String generateModelName(String baseName) { + Assert.notEmpty(baseName, "基础名称不能为空!"); + List likedInfo = super.lambdaQuery().likeRight(ScoringModelInfo::getModelName, baseName).list(); + if (likedInfo.isEmpty()) { + return baseName; + } + int suffix = 1; + while (true) { + String newName = baseName + suffix; + boolean exists = likedInfo.stream().anyMatch(info -> StrUtil.equals(info.getModelName(), newName)); + if (!exists) { + return newName; + } + suffix++; + } + } + + @Override + public IPage pageList(String modelName, Integer pageNum, Integer pageSize) { + return super.lambdaQuery().like(StrUtil.isNotEmpty(modelName), ScoringModelInfo::getModelName, modelName).page(new Page<>(pageNum, pageSize)); + } + + @Override + public String getScoringModelNameById(String modelId, List modelInfoList) { + if (CollUtil.isEmpty(modelInfoList) || StrUtil.isEmpty(modelId)) { + return null; + } + return modelInfoList.stream().filter(modelInfo -> StrUtil.equals(modelInfo.getId(), modelId)) + .findFirst().map(ScoringModelInfo::getModelName).orElse(null); + } +} + + + + diff --git a/src/main/resources/mapper/ModelAtomicIndexMapper.xml b/src/main/resources/mapper/ModelAtomicIndexMapper.xml index 6d33597..ee93386 100644 --- a/src/main/resources/mapper/ModelAtomicIndexMapper.xml +++ b/src/main/resources/mapper/ModelAtomicIndexMapper.xml @@ -36,21 +36,49 @@ select * from model_atomic_index where data_status = '1' and case_type = #{caseType} + \ No newline at end of file diff --git a/src/main/resources/mapper/ModelCaseMapper.xml b/src/main/resources/mapper/ModelCaseMapper.xml index c05e565..d24c4ee 100644 --- a/src/main/resources/mapper/ModelCaseMapper.xml +++ b/src/main/resources/mapper/ModelCaseMapper.xml @@ -112,6 +112,7 @@ left join model_index_result mir on (mi.id = mir.index_id and mir.case_id = #{query.caseId}) WHERE mi.data_status = '1' and mi.index_type = #{query.indexType} + and mi.case_type = #{query.caseType} and mi.name like concat('%', #{query.indexName}, '%') @@ -128,7 +129,7 @@ and exists(select 1 from model_atomic_result mar - left join model_index_atomic_relation iar on mar.index_id = iar.model_index_id and mar.atomic_id = iar.atomic_index_id + left join model_index_atomic_relation iar on (mar.index_id = iar.model_index_id and mar.atomic_id = iar.atomic_index_id) left join model_atomic_index mai on mar.atomic_id = mai.id where mar.case_id = #{query.caseId} diff --git a/src/main/resources/mapper/ScoringModelInfoMapper.xml b/src/main/resources/mapper/ScoringModelInfoMapper.xml new file mode 100644 index 0000000..b415db3 --- /dev/null +++ b/src/main/resources/mapper/ScoringModelInfoMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + id,model_name,model_desc, + scoring_rules,create_user_id,create_time, + update_user_id,update_time + +