diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java index 68084a42..5438c865 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QuerySaasRoleReq.java @@ -23,6 +23,16 @@ public class QuerySaasRoleReq { */ private String roleType; + /** + * 工作台类型编码 + */ + private List workspaceTypeCode; + + /** + * 单位类型编码 + */ + private List ouTypeCode; + /** * 分组id */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java index 21ca497f..228fe5e6 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/vo/SaasRoleVO.java @@ -63,7 +63,7 @@ public class SaasRoleVO { * @return */ public List getFeature(){ - return permissionGroup.stream().map(SaasPermissionGroupVO::getFeature).flatMap(List::stream).collect(Collectors.toList()); + return this.permissionGroup.stream().map(SaasPermissionGroupVO::getFeature).flatMap(List::stream).collect(Collectors.toList()); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java index 858e933a..06c04774 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java @@ -46,7 +46,7 @@ public class SaasRoleController implements SaasRoleApi { @Override public ApiListResult query(QuerySaasRoleReq req) { - return null; + return ApiListResult.ok(roleService.query(req)); } @Override diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java index 3f9760fd..8d5797f4 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/entity/SaasRoleGroup.java @@ -27,13 +27,13 @@ public class SaasRoleGroup extends BaseEntity implements Serializ * 工作台类型字典code */ @TableField("workspace_type_code") - private Long workspaceTypeCode; + private String workspaceTypeCode; /** * 单位类型字典code */ @TableField("ou_type_code") - private Long ouTypeCode; + private String ouTypeCode; /** * 名称 diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java index f7207a8c..47350d57 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/service/SaasRoleGroupDao.java @@ -1,14 +1,46 @@ package cn.axzo.tyr.server.repository.service; +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; +import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; +import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; +import cn.axzo.tyr.server.repository.entity.SaasRole; import cn.axzo.tyr.server.repository.entity.SaasRoleGroup; import cn.axzo.tyr.server.repository.mapper.SaasPgroupRoleRelationMapper; import cn.axzo.tyr.server.repository.mapper.SaasRoleGroupMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public class SaasRoleGroupDao extends ServiceImpl { + @Autowired + SaasRoleGroupMapper mapper; + + /** + * 通用查询 + */ + public List query(QuerySaasRoleGroupReq req) { + // 构建单位类型查询条件json数组 + StringBuilder condition = new StringBuilder(); + if (CollectionUtils.isNotEmpty(req.getOuTypeCode())) { + condition = new StringBuilder(); + for (String value : req.getOuTypeCode()) { + condition.append(" FIND_IN_SET('" + value + "', ou_type_code) OR"); + } + } + return this.lambdaQuery() + .in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId,req.getIds()) + .in(CollectionUtils.isNotEmpty(req.getWorkspaceTypeCode()),SaasRoleGroup::getWorkspaceTypeCode,req.getWorkspaceTypeCode()) + .last(CollectionUtils.isNotEmpty(req.getOuTypeCode())," AND (" + condition.substring(0, condition.length() - 2) + ")") + .eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .list(); + } + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java index 2b61c289..a6da59e3 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java @@ -1,6 +1,7 @@ package cn.axzo.tyr.server.service; import cn.axzo.framework.domain.web.result.ApiListResult; +import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import java.util.List; @@ -16,4 +17,6 @@ public interface RoleService { List queryByIdentityIdType(Long identityId, Integer identityType); + + List query(QuerySaasRoleReq req); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index 6a2ff181..b68aae2e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -4,20 +4,20 @@ import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.pokonyan.config.mybatisplus.BaseEntity; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; +import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; +import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; import cn.axzo.tyr.client.model.vo.SaasRoleVO; -import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; -import cn.axzo.tyr.server.repository.entity.SaasRole; -import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation; -import cn.axzo.tyr.server.repository.service.SaasPgroupRoleRelationDao; -import cn.axzo.tyr.server.repository.service.SaasRoleDao; -import cn.axzo.tyr.server.repository.service.SaasRoleUserRelationDao; +import cn.axzo.tyr.server.repository.entity.*; +import cn.axzo.tyr.server.repository.service.*; import cn.axzo.tyr.server.service.PermissionGroupService; import cn.axzo.tyr.server.service.RoleService; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -44,11 +44,26 @@ public class RoleServiceImpl implements RoleService { PermissionGroupService permissionGroupService; @Autowired SaasPgroupRoleRelationDao permissionGroupRelation; + @Autowired + SaasRoleGroupDao saasRoleGroupDao; + @Autowired + SaasRoleGroupRelationDao roleGroupRelationDao; @Override public List queryByIdentityIdType(Long identityId, Integer identityType) { // 查询人关联的角色id List roleIds = roleUserRelationDao.queryByIdentityIdType(identityId, identityType).stream().map(SaasRoleUserRelation::getRoleId).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(roleIds)) { + return new ArrayList<>(); + } + return getByIds(roleIds); + } + + /** + * 根据id查询权限详情包含权限组合权限集(底层基础方法) + * @return + */ + public List getByIds(List roleIds) { if (CollectionUtils.isEmpty(roleIds)) { return new ArrayList<>(); } @@ -74,7 +89,7 @@ public class RoleServiceImpl implements RoleService { return roles.stream().map(role -> { // 获取对应的权限集 List pGroup = new ArrayList<>(); - if(finalPgrouRelationMap != null && finalPgrouRelationMap.containsKey(role.getId())) { + if (finalPgrouRelationMap != null && finalPgrouRelationMap.containsKey(role.getId())) { pGroup = finalPgrouRelationMap.get(role.getId()) .stream() .map(SaasPgroupRoleRelation::getGroupId) @@ -89,6 +104,43 @@ public class RoleServiceImpl implements RoleService { }).collect(Collectors.toList()); } + /** + * 通用查询 + * + * @param req + * @return + */ + @Override + public List query(QuerySaasRoleReq req) { + // 根据工作台类型和单位类型查询角色分组 todo 验空值和 1,12 数组匹配问题,传1只有一个结果返回 + List roleGroup = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(req.getWorkspaceTypeCode()) || CollectionUtils.isNotEmpty(req.getOuTypeCode())) { + roleGroup = saasRoleGroupDao.query(QuerySaasRoleGroupReq.builder() + .ids(req.getSassRoleGroupIds()) + .workspaceTypeCode(req.getWorkspaceTypeCode()) + .ouTypeCode(req.getOuTypeCode()) + .build()); + if (CollectionUtils.isEmpty(roleGroup)) { + return new ArrayList<>(); + } + } + // 根据角色分组查询角色分组关联表 + List groupRelation = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(roleGroup)) { + groupRelation = roleGroupRelationDao.lambdaQuery() + .in(SaasRoleGroupRelation::getSaasRoleGroupId, roleGroup.stream().map(BaseEntity::getId).collect(Collectors.toList())) + .list(); + } + // 查询角色 + List list = saasRoleDao.lambdaQuery() + .in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId, req.getIds()) + .in(CollectionUtils.isNotEmpty(groupRelation), BaseEntity::getId, groupRelation.stream().map(SaasRoleGroupRelation::getRoleId).collect(Collectors.toList())) + .eq(StringUtils.isNotBlank(req.getRoleType()),SaasRole::getRoleType,req.getRoleType()) + .orderByDesc(BaseEntity::getId) + .list(); + return getByIds(list.stream().map(BaseEntity::getId).collect(Collectors.toList())); + } + /** * 根据角色id查询权限集关联关系 */