diff --git a/src/main/java/com/supervision/police/controller/ModelIndexController.java b/src/main/java/com/supervision/police/controller/ModelIndexController.java index 4fdf6dc..c03b93b 100644 --- a/src/main/java/com/supervision/police/controller/ModelIndexController.java +++ b/src/main/java/com/supervision/police/controller/ModelIndexController.java @@ -6,6 +6,7 @@ import com.supervision.police.domain.ModelIndex; import com.supervision.police.dto.CaseAtomicIndexDTO; import com.supervision.police.dto.CaseAtomicResultWrapper; import com.supervision.police.service.ModelIndexService; +import com.supervision.police.vo.ModelIndexReqVO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import lombok.RequiredArgsConstructor; @@ -35,7 +36,7 @@ public class ModelIndexController { * @return 所有数据 */ @PostMapping("/selectAll") - public R selectAll(@RequestBody ModelIndex modelIndex, + public R selectAll(@RequestBody ModelIndexReqVO modelIndex, @RequestParam(required = false, defaultValue = "1") Integer page, @RequestParam(required = false, defaultValue = "20") Integer size) { return modelIndexService.selectAll(modelIndex, page, size); diff --git a/src/main/java/com/supervision/police/domain/ModelIndexAtomicRelation.java b/src/main/java/com/supervision/police/domain/ModelIndexAtomicRelation.java index baa4513..15010de 100644 --- a/src/main/java/com/supervision/police/domain/ModelIndexAtomicRelation.java +++ b/src/main/java/com/supervision/police/domain/ModelIndexAtomicRelation.java @@ -1,11 +1,11 @@ package com.supervision.police.domain; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.*; + import java.io.Serializable; import java.time.LocalDateTime; + +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; /** @@ -18,6 +18,7 @@ public class ModelIndexAtomicRelation implements Serializable { /** * 主键id */ + @TableId private String id; /** @@ -38,6 +39,8 @@ public class ModelIndexAtomicRelation implements Serializable { /** * 创建时间 */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") private LocalDateTime createTime; /** @@ -48,6 +51,8 @@ public class ModelIndexAtomicRelation implements Serializable { /** * 更新时间 */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") private LocalDateTime updateTime; @TableField(exist = false) diff --git a/src/main/java/com/supervision/police/dto/ModelIndexAtomicRelationDTO.java b/src/main/java/com/supervision/police/dto/ModelIndexAtomicRelationDTO.java new file mode 100644 index 0000000..252650c --- /dev/null +++ b/src/main/java/com/supervision/police/dto/ModelIndexAtomicRelationDTO.java @@ -0,0 +1,24 @@ +package com.supervision.police.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class ModelIndexAtomicRelationDTO { + + @Schema(description = "主键") + private String id; + + @Schema(description = "指标id") + private String modelIndexId; + + @Schema(description = "指标名称") + private String modelIndexName; + + @Schema(description = "原子id") + private String atomicIndexId; + + @Schema(description = "原子关系名称") + private String atomicIndexName; + +} diff --git a/src/main/java/com/supervision/police/mapper/ModelIndexAtomicRelationMapper.java b/src/main/java/com/supervision/police/mapper/ModelIndexAtomicRelationMapper.java index 75a7d51..0f850b8 100644 --- a/src/main/java/com/supervision/police/mapper/ModelIndexAtomicRelationMapper.java +++ b/src/main/java/com/supervision/police/mapper/ModelIndexAtomicRelationMapper.java @@ -2,6 +2,9 @@ package com.supervision.police.mapper; import com.supervision.police.domain.ModelIndexAtomicRelation; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.supervision.police.dto.ModelIndexAtomicRelationDTO; + +import java.util.List; /** * @author Administrator @@ -11,6 +14,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface ModelIndexAtomicRelationMapper extends BaseMapper { + List listByAtomicIndexName(String atomicIndexName); } diff --git a/src/main/java/com/supervision/police/service/ModelIndexAtomicRelationService.java b/src/main/java/com/supervision/police/service/ModelIndexAtomicRelationService.java index 793f8b1..834f4b8 100644 --- a/src/main/java/com/supervision/police/service/ModelIndexAtomicRelationService.java +++ b/src/main/java/com/supervision/police/service/ModelIndexAtomicRelationService.java @@ -1,7 +1,11 @@ package com.supervision.police.service; +import com.supervision.police.domain.ModelIndex; import com.supervision.police.domain.ModelIndexAtomicRelation; import com.baomidou.mybatisplus.extension.service.IService; +import com.supervision.police.dto.ModelIndexAtomicRelationDTO; + +import java.util.List; /** * @author Administrator @@ -10,4 +14,31 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface ModelIndexAtomicRelationService extends IService { + /** + * 根据原子指标名称查询关联关系 + * @param atomicIndexName 原子指标名称 + * @return + */ + List listByAtomicIndexName(String atomicIndexName); + + /** + * 根据模型指标信息保存关联关系 + * @param modelIndex 模型指标信息 + */ + void saveByModelIndex(ModelIndex modelIndex); + + /** + * 根据模型指标信息更新关联关系 + * @param modelIndex 模型指标信息 + */ + void updateByModelIndex(ModelIndex modelIndex); + + /** + * 根据模型指标id删除关联关系 + * @param modelIndexId 模型指标id + */ + void deleteByModelIndex(String modelIndexId); + + + } diff --git a/src/main/java/com/supervision/police/service/ModelIndexService.java b/src/main/java/com/supervision/police/service/ModelIndexService.java index b46d481..0b1668a 100644 --- a/src/main/java/com/supervision/police/service/ModelIndexService.java +++ b/src/main/java/com/supervision/police/service/ModelIndexService.java @@ -6,6 +6,7 @@ import com.supervision.police.domain.ModelAtomicIndex; import com.supervision.police.domain.ModelIndex; import com.supervision.police.dto.CaseAtomicIndexDTO; import com.supervision.police.dto.CaseAtomicResultWrapper; +import com.supervision.police.vo.ModelIndexReqVO; import java.util.List; @@ -17,7 +18,7 @@ import java.util.List; */ public interface ModelIndexService extends IService { - R selectAll(ModelIndex modelIndex, Integer page, Integer size); + R selectAll(ModelIndexReqVO modelIndex, Integer page, Integer size); R addOrUpd(ModelIndex modelIndex); diff --git a/src/main/java/com/supervision/police/service/impl/ModelIndexAtomicRelationServiceImpl.java b/src/main/java/com/supervision/police/service/impl/ModelIndexAtomicRelationServiceImpl.java index 5927b87..e9d77c8 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelIndexAtomicRelationServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelIndexAtomicRelationServiceImpl.java @@ -1,20 +1,89 @@ package com.supervision.police.service.impl; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.supervision.police.domain.ModelIndex; import com.supervision.police.domain.ModelIndexAtomicRelation; +import com.supervision.police.dto.ModelIndexAtomicRelationDTO; import com.supervision.police.service.ModelIndexAtomicRelationService; import com.supervision.police.mapper.ModelIndexAtomicRelationMapper; +import com.supervision.utils.JudgeLogicUtil; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Objects; /** * @author Administrator * @description 针对表【model_index_atomic_relation(指标与原子指标的关联关系)】的数据库操作Service实现 * @createDate 2024-08-07 10:52:56 */ +@Slf4j @Service public class ModelIndexAtomicRelationServiceImpl extends ServiceImpl implements ModelIndexAtomicRelationService{ + @Override + public List listByAtomicIndexName(String atomicIndexName) { + + return super.baseMapper.listByAtomicIndexName(atomicIndexName); + } + + @Override + @Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class) + public void saveByModelIndex(ModelIndex modelIndex) { + if (Objects.isNull(modelIndex.getId())){ + log.warn("saveByModelIndex: modelIndexId 为空,不保存关联关系...."); + return; + } + if (StrUtil.isEmpty(modelIndex.getId())){ + log.warn("saveByModelIndex: modelIndexId 为空,不保存关联关系....modelIndex:{}", JSONUtil.toJsonStr(modelIndex)); + return; + } + String judgeLogic = modelIndex.getJudgeLogic(); + if (StrUtil.isEmpty(judgeLogic)){ + log.info("saveByModelIndex: modelIndex judgeLogic 为空,不保存关联关系....modelIndex:{}", JSONUtil.toJsonStr(modelIndex)); + return; + } + List atomicIndexIds = JudgeLogicUtil.pickAtomicIndexIds(judgeLogic); + atomicIndexIds.forEach(atomicIndexId -> { + ModelIndexAtomicRelation modelIndexAtomicRelation = new ModelIndexAtomicRelation(); + modelIndexAtomicRelation.setModelIndexId(modelIndex.getId()); + modelIndexAtomicRelation.setAtomicIndexId(atomicIndexId); + super.save(modelIndexAtomicRelation); + }); + } + + @Override + @Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class) + public void updateByModelIndex(ModelIndex modelIndex) { + + if (Objects.isNull(modelIndex.getId())){ + log.warn("updateByModelIndex: modelIndexId 为空,不保存关联关系...."); + return; + } + if (StrUtil.isEmpty(modelIndex.getId())){ + log.warn("updateByModelIndex: modelIndexId 为空,不保存关联关系....modelIndex:{}", JSONUtil.toJsonStr(modelIndex)); + return; + } + + deleteByModelIndex(modelIndex.getId()); + saveByModelIndex(modelIndex); + } + + @Override + public void deleteByModelIndex(String modelIndexId) { + + if (StrUtil.isEmpty(modelIndexId)){ + log.warn("deleteModelIndex: modelIndexId 为空,不删除关联关系....modelIndexId:{}", modelIndexId); + return; + } + super.remove(new LambdaQueryWrapper().eq(ModelIndexAtomicRelation::getModelIndexId, modelIndexId)); + } } 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 8aeafa0..23ab7a6 100644 --- a/src/main/java/com/supervision/police/service/impl/ModelIndexServiceImpl.java +++ b/src/main/java/com/supervision/police/service/impl/ModelIndexServiceImpl.java @@ -17,14 +17,13 @@ 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; -import com.supervision.police.dto.CaseAtomicResultWrapper; -import com.supervision.police.dto.JudgeLogic; +import com.supervision.police.dto.*; import com.supervision.police.mapper.CasePersonMapper; import com.supervision.police.mapper.ModelAtomicResultMapper; import com.supervision.police.mapper.ModelIndexMapper; import com.supervision.police.service.*; +import com.supervision.police.vo.ModelIndexReqVO; +import com.supervision.utils.JudgeLogicUtil; import com.supervision.utils.SqlParserUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -60,12 +59,16 @@ public class ModelIndexServiceImpl extends ServiceImpl allowedTables; @Override @Transactional(transactionManager = "dataSourceTransactionManager", rollbackFor = Exception.class) - public R selectAll(ModelIndex modelIndex, Integer page, Integer size) { + public R selectAll(ModelIndexReqVO modelIndex, Integer page, Integer size) { + + // 构建查询条件 IPage iPage = new Page<>(page, size); LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.like(modelIndex.getName() != null, ModelIndex::getName, modelIndex.getName()) @@ -74,9 +77,22 @@ public class ModelIndexServiceImpl extends ServiceImpl modelIndexAtomicDTOS = modelIndexAtomicRelationService.listByAtomicIndexName(modelIndex.getAtomicIndexName()); + List indexIdList = modelIndexAtomicDTOS.stream().map(ModelIndexAtomicRelationDTO::getModelIndexId).distinct().toList(); + wrapper.in(CollUtil.isNotEmpty(indexIdList),ModelIndex::getId, indexIdList); + } + iPage = modelIndexMapper.selectPage(iPage, wrapper); + + // 分页查询 List records = iPage.getRecords(); List dicts = comDictionaryService.list(); + + // 查询结果拼装 for (ModelIndex index : records) { index.setIndexTypeName(comDictionaryService.getName(dicts, "index_type", index.getIndexType())); index.setCaseTypeName(comDictionaryService.getName(dicts, "case_type", index.getCaseType())); @@ -106,8 +122,10 @@ public class ModelIndexServiceImpl extends ServiceImpl 0) { return R.okMsg("保存成功"); @@ -123,6 +141,7 @@ public class ModelIndexServiceImpl extends ServiceImpl 0) { + modelIndexAtomicRelationService.deleteByModelIndex(id); return R.okMsg("删除成功"); } else { return R.fail("删除失败"); @@ -209,7 +228,7 @@ public class ModelIndexServiceImpl extends ServiceImpl atomicIndexIds = modelIndexList.stream().filter(modelIndex -> StrUtil.isNotEmpty(modelIndex.getJudgeLogic())) - .map(modelIndex -> pickAtomicIndexIds(modelIndex.getJudgeLogic())) + .map(modelIndex -> JudgeLogicUtil.pickAtomicIndexIds(modelIndex.getJudgeLogic())) .flatMap(Collection::stream).distinct().toList(); if (CollUtil.isEmpty(atomicIndexIds)) { @@ -321,25 +340,6 @@ public class ModelIndexServiceImpl extends ServiceImpl 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; - } private Map> groupModelIndexByAtomicIndexId(List modelIndexList) { Map> groupMap = new HashMap<>(); diff --git a/src/main/java/com/supervision/police/vo/ModelIndexReqVO.java b/src/main/java/com/supervision/police/vo/ModelIndexReqVO.java new file mode 100644 index 0000000..eecbdac --- /dev/null +++ b/src/main/java/com/supervision/police/vo/ModelIndexReqVO.java @@ -0,0 +1,38 @@ +package com.supervision.police.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import java.time.LocalDateTime; + +@Data +public class ModelIndexReqVO { + + @Schema(description = "指标名称") + private String name; + + @Schema(description = "指标简称") + private String shortName; + + @Schema(description = "原子指标名称") + private String atomicIndexName; + + @Schema(description = "指标类型") + private String indexType; + + @Schema(description = "案件类型") + private String caseType; + + @Schema(description = "备注") + private String remark; + + + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private LocalDateTime updateStartTime; + + + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private LocalDateTime updateEndTime; + + +} diff --git a/src/main/java/com/supervision/utils/JudgeLogicUtil.java b/src/main/java/com/supervision/utils/JudgeLogicUtil.java new file mode 100644 index 0000000..ae4dfb4 --- /dev/null +++ b/src/main/java/com/supervision/utils/JudgeLogicUtil.java @@ -0,0 +1,37 @@ +package com.supervision.utils; + +import cn.hutool.json.JSONUtil; +import com.supervision.police.dto.AtomicData; +import com.supervision.police.dto.JudgeLogic; +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class JudgeLogicUtil { + + public static List parse(String logic) { + return JSONUtil.toList(logic, JudgeLogic.class); + } + + /** + * 从逻辑中获取原子指标id + * + * @param judgeLogic 判断逻辑json字符串 + * @return 原子指标id(不重复) + */ + public static List pickAtomicIndexIds(String judgeLogic) { + List ids = new ArrayList<>(); + List logic = parse(judgeLogic); + 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/ModelIndexAtomicRelationMapper.xml b/src/main/resources/mapper/ModelIndexAtomicRelationMapper.xml index e78ed41..e13487e 100644 --- a/src/main/resources/mapper/ModelIndexAtomicRelationMapper.xml +++ b/src/main/resources/mapper/ModelIndexAtomicRelationMapper.xml @@ -19,4 +19,13 @@ create_user_id,create_time,update_user_id, update_time + diff --git a/src/test/java/com/supervision/demo/ModelIndexTest.java b/src/test/java/com/supervision/demo/ModelIndexTest.java index d8e91d9..3294817 100644 --- a/src/test/java/com/supervision/demo/ModelIndexTest.java +++ b/src/test/java/com/supervision/demo/ModelIndexTest.java @@ -5,6 +5,7 @@ import cn.hutool.core.lang.UUID; import cn.hutool.json.JSONUtil; import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.supervision.police.domain.ModelAtomicIndex; import com.supervision.police.domain.ModelIndex; import com.supervision.police.dto.AtomicData; @@ -12,6 +13,7 @@ import com.supervision.police.dto.JudgeLogic; import com.supervision.police.mapper.ModelAtomicIndexMapper; import com.supervision.police.mapper.ModelIndexMapper; import com.supervision.police.mybatis.RowSqlMapper; +import com.supervision.police.service.ModelIndexAtomicRelationService; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.mapping.BoundSql; @@ -35,6 +37,9 @@ public class ModelIndexTest { @Autowired private ModelAtomicIndexMapper modelAtomicIndexMapper; + @Autowired + private ModelIndexAtomicRelationService modelIndexAtomicRelationService; + @Autowired private RowSqlMapper rowSqlMapper; //@Test @@ -50,6 +55,15 @@ public class ModelIndexTest { } } + //@Test + public void modelIndexRelationGenerate() { + + List modelIndexList = modelIndexMapper.selectList(new LambdaQueryWrapper<>()); + for (ModelIndex modelIndex : modelIndexList) { + modelIndexAtomicRelationService.updateByModelIndex(modelIndex); + } + } + @Test public void modelAtomicIndexGenerate() {