Browse Source

refactor(crm-dict): judgement call #6 #7 — pom version extraction + VO independent fields

#6 mybatis-spring 版本提取到父 pom:
- 父 pom properties 新增 mybatis-spring.version=3.0.3
- 父 pom dependencyManagement 新增 mybatis-spring 依赖声明
- crm-dict/pom.xml 去掉 version 和 scope=compile(由父 pom 统一管理)

#7 VO extends 实体重构为独立字段:
- DictGroupVO:不 extends DictGroup,独立定义 9 个字段(排除审计字段和软删内部字段)
- DictItemVO:不 extends DictItem,独立定义 14 个字段
- DictGroupServiceImpl:DictGroup::getId -> DictGroupVO::getId(fillItemCount)
- DictItemServiceImpl:DictItem::getGroupId -> DictItemVO::getGroupId(enrich)
- DictGroupServiceTest:pageGroups 断言 DictGroup::getCode -> DictGroupVO::getCode

全量 48/48 测试通过。
master
luoweijian 1 month ago
parent
commit
ab9f64483c
  1. 2
      crm-dict/pom.xml
  2. 25
      crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java
  3. 31
      crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java
  4. 2
      crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java
  5. 2
      crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java
  6. 6
      crm-dict/src/test/java/com/crm/dict/service/impl/DictGroupServiceTest.java
  7. 8
      pom.xml

2
crm-dict/pom.xml

@ -50,8 +50,6 @@
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.3</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

25
crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java

@ -1,16 +1,33 @@
package com.crm.dict.domain.dto;
import com.crm.dict.domain.entity.DictGroup;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* 字典分组视图对象分页列表展示用
* <p>独立字段不继承实体只暴露前端需要的业务字段 + createTime
* 排除审计字段creatorId/updaterId/updateTime/deleted和软删内部字段deleteKey</p>
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class DictGroupVO extends DictGroup {
public class DictGroupVO {
private Long id;
private String name;
private String code;
private Integer sortNo;
private Integer status;
private String description;
private Boolean builtin;
private LocalDateTime createTime;
@Schema(description = "分组下未删除的字典项数量(含启用+停用)")
private Long itemCount;

31
crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java

@ -1,18 +1,39 @@
package com.crm.dict.domain.dto;
import com.crm.dict.domain.entity.DictItem;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* 字典项视图对象分页列表展示用
* <p>referenced 读实时引用计数绝不进缓存effectiveSelectable 供前端对
* "自身启用但所属分组已停用"的失活项做视觉标记</p>
* "自身启用但所属分组已停用"的失活项做视觉标记
* 独立字段不继承实体只暴露前端需要的业务字段 + createTime
* 排除审计字段creatorId/updaterId/updateTime/deleted和软删内部字段deleteKey</p>
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class DictItemVO extends DictItem {
public class DictItemVO {
private Long id;
private Long groupId;
private String name;
private String code;
private String value;
private Integer sortNo;
private Integer status;
private String description;
private Boolean builtin;
private LocalDateTime createTime;
@Schema(description = "所属分组名称")
private String groupName;

2
crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java

@ -162,7 +162,7 @@ public class DictGroupServiceImpl extends BaseServiceImpl<DictGroupMapper, DictG
if (CollUtil.isEmpty(vos)) {
return;
}
List<Long> ids = vos.stream().map(DictGroup::getId).collect(Collectors.toList());
List<Long> ids = vos.stream().map(DictGroupVO::getId).collect(Collectors.toList());
List<Map<String, Object>> counts = dictItemMapper.selectMaps(new QueryWrapper<DictItem>()
.select("group_id AS group_id", "COUNT(*) AS item_count")
.in("group_id", ids)

2
crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java

@ -291,7 +291,7 @@ public class DictItemServiceImpl extends BaseServiceImpl<DictItemMapper, DictIte
if (CollUtil.isEmpty(vos)) {
return;
}
Set<Long> groupIds = vos.stream().map(DictItem::getGroupId).collect(Collectors.toSet());
Set<Long> groupIds = vos.stream().map(DictItemVO::getGroupId).collect(Collectors.toSet());
Map<Long, DictGroup> groups = dictGroupMapper.selectBatchIds(groupIds).stream()
.collect(Collectors.toMap(DictGroup::getId, g -> g));
Map<Long, Long> defaultMap = dictGroupDefaultMapper.selectList(

6
crm-dict/src/test/java/com/crm/dict/service/impl/DictGroupServiceTest.java

@ -45,18 +45,18 @@ class DictGroupServiceTest extends AbstractDictH2Test {
GroupPageParam byName = new GroupPageParam();
byName.setKeyword("来源");
assertThat(dictGroupService.pageGroups(byName).getContent()).extracting(DictGroup::getCode)
assertThat(dictGroupService.pageGroups(byName).getContent()).extracting(DictGroupVO::getCode)
.containsExactly("lead_source");
GroupPageParam byCode = new GroupPageParam();
byCode.setKeyword("industry");
assertThat(dictGroupService.pageGroups(byCode).getContent()).extracting(DictGroup::getCode)
assertThat(dictGroupService.pageGroups(byCode).getContent()).extracting(DictGroupVO::getCode)
.containsExactly("industry");
dictGroupService.updateGroupStatus(g1.getId(), DictConstants.STATUS_DISABLED);
GroupPageParam onlyEnabled = new GroupPageParam();
onlyEnabled.setStatus(DictConstants.STATUS_ENABLED);
assertThat(dictGroupService.pageGroups(onlyEnabled).getContent()).extracting(DictGroup::getCode)
assertThat(dictGroupService.pageGroups(onlyEnabled).getContent()).extracting(DictGroupVO::getCode)
.containsExactly("industry");
}

8
pom.xml

@ -41,6 +41,7 @@
<guava.version>33.2.1-jre</guava.version>
<knife4j.version>4.5.0</knife4j.version>
<pdfbox.version>3.0.3</pdfbox.version>
<mybatis-spring.version>3.0.3</mybatis-spring.version>
</properties>
<dependencyManagement>
@ -109,6 +110,13 @@
<version>${knife4j.version}</version>
</dependency>
<!-- MyBatis-Spring(crm-dict 测试手工装配用) -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<!-- PDF 渲染(缩略图第一页) -->
<dependency>
<groupId>org.apache.pdfbox</groupId>

Loading…
Cancel
Save