Skip to content

Commit b7a5a41

Browse files
committed
refactor(system): 优化角色和用户相关查询数据填充
Closes #ICIK3X
1 parent b514c9e commit b7a5a41

File tree

7 files changed

+83
-28
lines changed

7 files changed

+83
-28
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*
2+
* Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package top.continew.admin.system.container;
18+
19+
import cn.crane4j.annotation.ContainerMethod;
20+
import cn.crane4j.annotation.MappingType;
21+
import cn.hutool.core.collection.CollUtil;
22+
import lombok.RequiredArgsConstructor;
23+
import org.springframework.stereotype.Component;
24+
import top.continew.admin.common.constant.ContainerConstants;
25+
import top.continew.admin.system.mapper.RoleMapper;
26+
import top.continew.admin.system.mapper.UserRoleMapper;
27+
import top.continew.admin.system.model.entity.RoleDO;
28+
import top.continew.admin.system.model.entity.UserRoleDO;
29+
30+
import java.util.Collections;
31+
import java.util.List;
32+
33+
/**
34+
* 系统管理容器(Crane4j 数据填充)
35+
* <p>不建议复用,Crane4j 对列表填充聚合查询,优化性能</p>
36+
*
37+
* @author Charles7c
38+
* @since 2025/6/29 11:51
39+
*/
40+
@Component
41+
@RequiredArgsConstructor
42+
public class SystemContainer {
43+
44+
private final UserRoleMapper userRoleMapper;
45+
private final RoleMapper roleMapper;
46+
47+
/**
48+
* 根据用户 ID 列表获取角色 ID 列表
49+
*
50+
* @param userIds 用户 ID 列表
51+
* @return 角色 ID 列表
52+
*/
53+
@ContainerMethod(namespace = ContainerConstants.USER_ROLE_ID_LIST, resultKey = "userId", resultType = UserRoleDO.class, type = MappingType.ONE_TO_MANY)
54+
public List<UserRoleDO> listRoleIdByUserId(List<Long> userIds) {
55+
return userRoleMapper.lambdaQuery()
56+
.select(UserRoleDO::getRoleId, UserRoleDO::getUserId)
57+
.in(UserRoleDO::getUserId, userIds)
58+
.list();
59+
}
60+
61+
/**
62+
* 根据角色 ID 列表获取角色名称列表
63+
*
64+
* @param ids 角色 ID 列表
65+
* @return 角色名称列表
66+
*/
67+
@ContainerMethod(namespace = ContainerConstants.USER_ROLE_NAME_LIST, resultType = RoleDO.class)
68+
public List<RoleDO> listRoleNameByIds(List<Long> ids) {
69+
if (CollUtil.isEmpty(ids)) {
70+
return Collections.emptyList();
71+
}
72+
return roleMapper.lambdaQuery().select(RoleDO::getName, RoleDO::getId).in(RoleDO::getId, ids).list();
73+
}
74+
}

continew-system/src/main/java/top/continew/admin/system/model/resp/role/RoleUserResp.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import cn.crane4j.annotation.Assemble;
2020
import cn.crane4j.annotation.Mapping;
2121
import cn.crane4j.core.executor.handler.ManyToManyAssembleOperationHandler;
22+
import cn.crane4j.core.executor.handler.OneToManyAssembleOperationHandler;
2223
import io.swagger.v3.oas.annotations.media.Schema;
2324
import lombok.Data;
2425
import top.continew.admin.common.constant.ContainerConstants;
@@ -60,7 +61,7 @@ public class RoleUserResp implements Serializable {
6061
* 用户 ID
6162
*/
6263
@Schema(description = "用户 ID", example = "1")
63-
@Assemble(prop = ":roleIds", sort = 0, container = ContainerConstants.USER_ROLE_ID_LIST)
64+
@Assemble(props = @Mapping(src = "roleId", ref = "roleIds"), sort = 0, container = ContainerConstants.USER_ROLE_ID_LIST, handlerType = OneToManyAssembleOperationHandler.class)
6465
private Long userId;
6566

6667
/**

continew-system/src/main/java/top/continew/admin/system/model/resp/user/UserDetailResp.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import cn.crane4j.annotation.Mapping;
2323
import cn.crane4j.annotation.condition.ConditionOnExpression;
2424
import cn.crane4j.core.executor.handler.ManyToManyAssembleOperationHandler;
25+
import cn.crane4j.core.executor.handler.OneToManyAssembleOperationHandler;
2526
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
2627
import com.alibaba.excel.annotation.ExcelProperty;
2728
import io.swagger.v3.oas.annotations.media.Schema;
@@ -51,7 +52,7 @@
5152
@Data
5253
@ExcelIgnoreUnannotated
5354
@Schema(description = "用户详情响应参数")
54-
@Assemble(key = "id", prop = ":roleIds", sort = 0, container = ContainerConstants.USER_ROLE_ID_LIST)
55+
@Assemble(key = "id", props = @Mapping(src = "roleId", ref = "roleIds"), sort = 0, container = ContainerConstants.USER_ROLE_ID_LIST, handlerType = OneToManyAssembleOperationHandler.class)
5556
public class UserDetailResp extends BaseDetailResp {
5657

5758
@Serial
@@ -105,7 +106,7 @@ public class UserDetailResp extends BaseDetailResp {
105106
* 角色 ID 列表
106107
*/
107108
@Schema(description = "角色 ID 列表", example = "2")
108-
@Assemble(prop = ":roleNames", container = ContainerConstants.USER_ROLE_NAME_LIST, handlerType = ManyToManyAssembleOperationHandler.class)
109+
@Assemble(props = @Mapping(src = "name", ref = "roleNames"), container = ContainerConstants.USER_ROLE_NAME_LIST, handlerType = ManyToManyAssembleOperationHandler.class)
109110
@ExcelProperty(value = "角色 ID 列表", converter = ExcelListConverter.class, order = 8)
110111
private List<Long> roleIds;
111112

continew-system/src/main/java/top/continew/admin/system/model/resp/user/UserResp.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717
package top.continew.admin.system.model.resp.user;
1818

1919
import cn.crane4j.annotation.Assemble;
20+
import cn.crane4j.annotation.Mapping;
2021
import cn.crane4j.core.executor.handler.ManyToManyAssembleOperationHandler;
22+
import cn.crane4j.core.executor.handler.OneToManyAssembleOperationHandler;
2123
import io.swagger.v3.oas.annotations.media.Schema;
2224
import lombok.Data;
2325
import top.continew.admin.common.model.resp.BaseDetailResp;
@@ -40,7 +42,7 @@
4042
*/
4143
@Data
4244
@Schema(description = "用户响应参数")
43-
@Assemble(key = "id", prop = ":roleIds", sort = 0, container = ContainerConstants.USER_ROLE_ID_LIST)
45+
@Assemble(key = "id", props = @Mapping(src = "roleId", ref = "roleIds"), sort = 0, container = ContainerConstants.USER_ROLE_ID_LIST, handlerType = OneToManyAssembleOperationHandler.class)
4446
public class UserResp extends BaseDetailResp {
4547

4648
@Serial
@@ -118,7 +120,7 @@ public class UserResp extends BaseDetailResp {
118120
* 角色 ID 列表
119121
*/
120122
@Schema(description = "角色 ID 列表", example = "2")
121-
@Assemble(prop = ":roleNames", container = ContainerConstants.USER_ROLE_NAME_LIST, handlerType = ManyToManyAssembleOperationHandler.class)
123+
@Assemble(props = @Mapping(src = "name", ref = "roleNames"), container = ContainerConstants.USER_ROLE_NAME_LIST, handlerType = ManyToManyAssembleOperationHandler.class)
122124
private List<Long> roleIds;
123125

124126
/**

continew-system/src/main/java/top/continew/admin/system/service/RoleService.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,6 @@ public interface RoleService extends BaseService<RoleResp, RoleDetailResp, RoleQ
6161
*/
6262
Set<String> listPermissionByUserId(Long userId);
6363

64-
/**
65-
* 根据 ID 列表查询
66-
*
67-
* @param ids ID 列表
68-
* @return 名称列表
69-
*/
70-
List<RoleDO> listNameByIds(List<Long> ids);
71-
7264
/**
7365
* 根据用户 ID 查询角色编码
7466
*

continew-system/src/main/java/top/continew/admin/system/service/impl/RoleServiceImpl.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package top.continew.admin.system.service.impl;
1818

19-
import cn.crane4j.annotation.ContainerMethod;
2019
import cn.hutool.core.collection.CollUtil;
2120
import cn.hutool.core.util.ObjectUtil;
2221
import com.alicp.jetcache.anno.CacheInvalidate;
@@ -25,7 +24,6 @@
2524
import org.springframework.stereotype.Service;
2625
import org.springframework.transaction.annotation.Transactional;
2726
import top.continew.admin.common.constant.CacheConstants;
28-
import top.continew.admin.common.constant.ContainerConstants;
2927
import top.continew.admin.common.constant.SysConstants;
3028
import top.continew.admin.common.context.RoleContext;
3129
import top.continew.admin.common.context.UserContext;
@@ -165,15 +163,6 @@ public Set<String> listPermissionByUserId(Long userId) {
165163
return menuService.listPermissionByUserId(userId);
166164
}
167165

168-
@Override
169-
@ContainerMethod(namespace = ContainerConstants.USER_ROLE_NAME_LIST, resultType = RoleDO.class)
170-
public List<RoleDO> listNameByIds(List<Long> ids) {
171-
if (CollUtil.isEmpty(ids)) {
172-
return Collections.emptyList();
173-
}
174-
return baseMapper.lambdaQuery().select(RoleDO::getName, RoleDO::getId).in(RoleDO::getId, ids).list();
175-
}
176-
177166
@Override
178167
public Set<String> listCodeByUserId(Long userId) {
179168
List<Long> roleIdList = userRoleService.listRoleIdByUserId(userId);

continew-system/src/main/java/top/continew/admin/system/service/impl/UserRoleServiceImpl.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
package top.continew.admin.system.service.impl;
1818

1919
import cn.crane4j.annotation.AutoOperate;
20-
import cn.crane4j.annotation.ContainerMethod;
21-
import cn.crane4j.annotation.MappingType;
2220
import cn.hutool.core.collection.CollUtil;
2321
import cn.hutool.core.util.StrUtil;
2422
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -27,7 +25,6 @@
2725
import lombok.RequiredArgsConstructor;
2826
import org.springframework.stereotype.Service;
2927
import org.springframework.transaction.annotation.Transactional;
30-
import top.continew.admin.common.constant.ContainerConstants;
3128
import top.continew.admin.common.constant.SysConstants;
3229
import top.continew.admin.system.mapper.UserRoleMapper;
3330
import top.continew.admin.system.model.entity.UserRoleDO;
@@ -117,7 +114,6 @@ public void saveBatch(List<UserRoleDO> list) {
117114
}
118115

119116
@Override
120-
@ContainerMethod(namespace = ContainerConstants.USER_ROLE_ID_LIST, type = MappingType.ORDER_OF_KEYS)
121117
public List<Long> listRoleIdByUserId(Long userId) {
122118
return baseMapper.lambdaQuery()
123119
.select(UserRoleDO::getRoleId)

0 commit comments

Comments
 (0)