diff --git a/continew-system/src/main/java/top/continew/admin/system/container/SystemContainer.java b/continew-system/src/main/java/top/continew/admin/system/container/SystemContainer.java new file mode 100644 index 00000000..16bd40ca --- /dev/null +++ b/continew-system/src/main/java/top/continew/admin/system/container/SystemContainer.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2022-present Charles7c Authors. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package top.continew.admin.system.container; + +import cn.crane4j.annotation.ContainerMethod; +import cn.crane4j.annotation.MappingType; +import cn.hutool.core.collection.CollUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import top.continew.admin.common.constant.ContainerConstants; +import top.continew.admin.system.mapper.RoleMapper; +import top.continew.admin.system.mapper.UserRoleMapper; +import top.continew.admin.system.model.entity.RoleDO; +import top.continew.admin.system.model.entity.UserRoleDO; + +import java.util.Collections; +import java.util.List; + +/** + * 系统管理容器(Crane4j 数据填充) + *

不建议复用,Crane4j 对列表填充聚合查询,优化性能

+ * + * @author Charles7c + * @since 2025/6/29 11:51 + */ +@Component +@RequiredArgsConstructor +public class SystemContainer { + + private final UserRoleMapper userRoleMapper; + private final RoleMapper roleMapper; + + /** + * 根据用户 ID 列表获取角色 ID 列表 + * + * @param userIds 用户 ID 列表 + * @return 角色 ID 列表 + */ + @ContainerMethod(namespace = ContainerConstants.USER_ROLE_ID_LIST, resultKey = "userId", resultType = UserRoleDO.class, type = MappingType.ONE_TO_MANY) + public List listRoleIdByUserId(List userIds) { + return userRoleMapper.lambdaQuery() + .select(UserRoleDO::getRoleId, UserRoleDO::getUserId) + .in(UserRoleDO::getUserId, userIds) + .list(); + } + + /** + * 根据角色 ID 列表获取角色名称列表 + * + * @param ids 角色 ID 列表 + * @return 角色名称列表 + */ + @ContainerMethod(namespace = ContainerConstants.USER_ROLE_NAME_LIST, resultType = RoleDO.class) + public List listRoleNameByIds(List ids) { + if (CollUtil.isEmpty(ids)) { + return Collections.emptyList(); + } + return roleMapper.lambdaQuery().select(RoleDO::getName, RoleDO::getId).in(RoleDO::getId, ids).list(); + } +} diff --git a/continew-system/src/main/java/top/continew/admin/system/model/resp/role/RoleUserResp.java b/continew-system/src/main/java/top/continew/admin/system/model/resp/role/RoleUserResp.java index 6e0b010a..dd4f3cbe 100644 --- a/continew-system/src/main/java/top/continew/admin/system/model/resp/role/RoleUserResp.java +++ b/continew-system/src/main/java/top/continew/admin/system/model/resp/role/RoleUserResp.java @@ -19,6 +19,7 @@ package top.continew.admin.system.model.resp.role; import cn.crane4j.annotation.Assemble; import cn.crane4j.annotation.Mapping; import cn.crane4j.core.executor.handler.ManyToManyAssembleOperationHandler; +import cn.crane4j.core.executor.handler.OneToManyAssembleOperationHandler; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import top.continew.admin.common.constant.ContainerConstants; @@ -60,7 +61,7 @@ public class RoleUserResp implements Serializable { * 用户 ID */ @Schema(description = "用户 ID", example = "1") - @Assemble(prop = ":roleIds", sort = 0, container = ContainerConstants.USER_ROLE_ID_LIST) + @Assemble(props = @Mapping(src = "roleId", ref = "roleIds"), sort = 0, container = ContainerConstants.USER_ROLE_ID_LIST, handlerType = OneToManyAssembleOperationHandler.class) private Long userId; /** diff --git a/continew-system/src/main/java/top/continew/admin/system/model/resp/user/UserDetailResp.java b/continew-system/src/main/java/top/continew/admin/system/model/resp/user/UserDetailResp.java index 89204fa2..aa61f3a3 100644 --- a/continew-system/src/main/java/top/continew/admin/system/model/resp/user/UserDetailResp.java +++ b/continew-system/src/main/java/top/continew/admin/system/model/resp/user/UserDetailResp.java @@ -22,6 +22,7 @@ import cn.crane4j.annotation.ContainerMethod; import cn.crane4j.annotation.Mapping; import cn.crane4j.annotation.condition.ConditionOnExpression; import cn.crane4j.core.executor.handler.ManyToManyAssembleOperationHandler; +import cn.crane4j.core.executor.handler.OneToManyAssembleOperationHandler; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; @@ -51,7 +52,7 @@ import java.util.Objects; @Data @ExcelIgnoreUnannotated @Schema(description = "用户详情响应参数") -@Assemble(key = "id", prop = ":roleIds", sort = 0, container = ContainerConstants.USER_ROLE_ID_LIST) +@Assemble(key = "id", props = @Mapping(src = "roleId", ref = "roleIds"), sort = 0, container = ContainerConstants.USER_ROLE_ID_LIST, handlerType = OneToManyAssembleOperationHandler.class) public class UserDetailResp extends BaseDetailResp { @Serial @@ -105,7 +106,7 @@ public class UserDetailResp extends BaseDetailResp { * 角色 ID 列表 */ @Schema(description = "角色 ID 列表", example = "2") - @Assemble(prop = ":roleNames", container = ContainerConstants.USER_ROLE_NAME_LIST, handlerType = ManyToManyAssembleOperationHandler.class) + @Assemble(props = @Mapping(src = "name", ref = "roleNames"), container = ContainerConstants.USER_ROLE_NAME_LIST, handlerType = ManyToManyAssembleOperationHandler.class) @ExcelProperty(value = "角色 ID 列表", converter = ExcelListConverter.class, order = 8) private List roleIds; diff --git a/continew-system/src/main/java/top/continew/admin/system/model/resp/user/UserResp.java b/continew-system/src/main/java/top/continew/admin/system/model/resp/user/UserResp.java index d661a3f8..7fbc9aea 100644 --- a/continew-system/src/main/java/top/continew/admin/system/model/resp/user/UserResp.java +++ b/continew-system/src/main/java/top/continew/admin/system/model/resp/user/UserResp.java @@ -17,7 +17,9 @@ package top.continew.admin.system.model.resp.user; import cn.crane4j.annotation.Assemble; +import cn.crane4j.annotation.Mapping; import cn.crane4j.core.executor.handler.ManyToManyAssembleOperationHandler; +import cn.crane4j.core.executor.handler.OneToManyAssembleOperationHandler; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import top.continew.admin.common.model.resp.BaseDetailResp; @@ -40,7 +42,7 @@ import java.util.Objects; */ @Data @Schema(description = "用户响应参数") -@Assemble(key = "id", prop = ":roleIds", sort = 0, container = ContainerConstants.USER_ROLE_ID_LIST) +@Assemble(key = "id", props = @Mapping(src = "roleId", ref = "roleIds"), sort = 0, container = ContainerConstants.USER_ROLE_ID_LIST, handlerType = OneToManyAssembleOperationHandler.class) public class UserResp extends BaseDetailResp { @Serial @@ -118,7 +120,7 @@ public class UserResp extends BaseDetailResp { * 角色 ID 列表 */ @Schema(description = "角色 ID 列表", example = "2") - @Assemble(prop = ":roleNames", container = ContainerConstants.USER_ROLE_NAME_LIST, handlerType = ManyToManyAssembleOperationHandler.class) + @Assemble(props = @Mapping(src = "name", ref = "roleNames"), container = ContainerConstants.USER_ROLE_NAME_LIST, handlerType = ManyToManyAssembleOperationHandler.class) private List roleIds; /** diff --git a/continew-system/src/main/java/top/continew/admin/system/service/RoleService.java b/continew-system/src/main/java/top/continew/admin/system/service/RoleService.java index 6b94c39f..3ab04120 100644 --- a/continew-system/src/main/java/top/continew/admin/system/service/RoleService.java +++ b/continew-system/src/main/java/top/continew/admin/system/service/RoleService.java @@ -61,14 +61,6 @@ public interface RoleService extends BaseService listPermissionByUserId(Long userId); - /** - * 根据 ID 列表查询 - * - * @param ids ID 列表 - * @return 名称列表 - */ - List listNameByIds(List ids); - /** * 根据用户 ID 查询角色编码 * diff --git a/continew-system/src/main/java/top/continew/admin/system/service/impl/RoleServiceImpl.java b/continew-system/src/main/java/top/continew/admin/system/service/impl/RoleServiceImpl.java index 929b8582..e64b4e7d 100644 --- a/continew-system/src/main/java/top/continew/admin/system/service/impl/RoleServiceImpl.java +++ b/continew-system/src/main/java/top/continew/admin/system/service/impl/RoleServiceImpl.java @@ -16,7 +16,6 @@ package top.continew.admin.system.service.impl; -import cn.crane4j.annotation.ContainerMethod; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.alicp.jetcache.anno.CacheInvalidate; @@ -25,7 +24,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import top.continew.admin.common.constant.CacheConstants; -import top.continew.admin.common.constant.ContainerConstants; import top.continew.admin.common.constant.SysConstants; import top.continew.admin.common.context.RoleContext; import top.continew.admin.common.context.UserContext; @@ -165,15 +163,6 @@ public class RoleServiceImpl extends BaseServiceImpl listNameByIds(List ids) { - if (CollUtil.isEmpty(ids)) { - return Collections.emptyList(); - } - return baseMapper.lambdaQuery().select(RoleDO::getName, RoleDO::getId).in(RoleDO::getId, ids).list(); - } - @Override public Set listCodeByUserId(Long userId) { List roleIdList = userRoleService.listRoleIdByUserId(userId); diff --git a/continew-system/src/main/java/top/continew/admin/system/service/impl/UserRoleServiceImpl.java b/continew-system/src/main/java/top/continew/admin/system/service/impl/UserRoleServiceImpl.java index 9723c636..aec19b39 100644 --- a/continew-system/src/main/java/top/continew/admin/system/service/impl/UserRoleServiceImpl.java +++ b/continew-system/src/main/java/top/continew/admin/system/service/impl/UserRoleServiceImpl.java @@ -17,8 +17,6 @@ package top.continew.admin.system.service.impl; import cn.crane4j.annotation.AutoOperate; -import cn.crane4j.annotation.ContainerMethod; -import cn.crane4j.annotation.MappingType; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -27,7 +25,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import top.continew.admin.common.constant.ContainerConstants; import top.continew.admin.common.constant.SysConstants; import top.continew.admin.system.mapper.UserRoleMapper; import top.continew.admin.system.model.entity.UserRoleDO; @@ -117,7 +114,6 @@ public class UserRoleServiceImpl implements UserRoleService { } @Override - @ContainerMethod(namespace = ContainerConstants.USER_ROLE_ID_LIST, type = MappingType.ORDER_OF_KEYS) public List listRoleIdByUserId(Long userId) { return baseMapper.lambdaQuery() .select(UserRoleDO::getRoleId)