diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java index 288f8688..2399b49d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleUserService.java @@ -18,6 +18,7 @@ import cn.axzo.pokonyan.util.KeysUtil; import cn.axzo.tyr.client.common.enums.RoleResourceTypeEnum; import cn.axzo.tyr.client.common.enums.RoleTypeEnum; import cn.axzo.tyr.client.model.BaseWorkspaceModel; +import cn.axzo.tyr.client.model.enums.DictWorkSpaceTypeEnum; import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.client.model.enums.WorkerLeaderRoleEnum; import cn.axzo.tyr.client.model.req.ListRoleReq; @@ -81,7 +82,6 @@ import java.util.Objects; import java.util.Set; import java.util.function.Supplier; import java.util.stream.Collectors; - /** * 角色 * @@ -286,19 +286,22 @@ public class RoleUserService implements SaasRoleUserService { @Transactional(rollbackFor = Exception.class) public void createSuperAdminRole(CreateSuperAdminRoleParam param) { //获取超管角色 - // 因为以前一个项目一个超管,但是上线为了保证兼容,所以这里要根据workspaceId = -1,ouId = -1, - // 不根据code查询,是因为增加一个业务的超管,就需要维护 - ListRoleReq listRoleReq = ListRoleReq.builder() - .roleTypes(Lists.newArrayList(RoleTypeEnum.SUPER_ADMIN.getValue())) - .workspaceType(param.getWorkspaceType()) - .needPresetRole(true) - .build(); - SaasRoleRes superAdmin = roleService.list(listRoleReq).stream() - .findFirst() - .orElse(null); - - AssertUtil.notNull(superAdmin, "超管角色不存在,请联系业务初始化超管角色"); + SaasRole superAdmin = findSuperAdmin(param.getWorkspaceId(), param.getOuId(), param.getWorkspaceType()); + if (superAdmin == null) { + superAdmin = new SaasRole(); + superAdmin.setDescription(RoleTypeEnum.SUPER_ADMIN.getDesc()); + superAdmin.setName(RoleTypeEnum.SUPER_ADMIN.getDesc()); + superAdmin.setWorkspaceId(param.getWorkspaceId()); + superAdmin.setWorkspaceType(param.getWorkspaceType()); + superAdmin.setOwnerOuId(param.getOuId()); + superAdmin.setRoleType(RoleTypeEnum.SUPER_ADMIN.getValue()); + superAdmin.setIsDelete(0L); + DictWorkSpaceTypeEnum dictWorkSpaceTypeEnum = DictWorkSpaceTypeEnum.getByValueWorkspaceType(param.getWorkspaceType()); + superAdmin.setProductUnitType(dictWorkSpaceTypeEnum == null ? 0 : dictWorkSpaceTypeEnum.getSuperAdminProductType()); + checkRoleName(RoleTypeEnum.SUPER_ADMIN.getDesc(), param.getWorkspaceId(), param.getOuId()); + saasRoleDao.save(superAdmin); + } //删除当前超管角色 removeOldSuperAdmin(superAdmin.getId(), param.getWorkspaceId(), param.getOuId()); @@ -345,29 +348,25 @@ public class RoleUserService implements SaasRoleUserService { @Override public List batchSuperAdminList(List param) { - // 兼容上线历史数据还没清洗的间隙,查询超管角色需要根据workspaceId和预设的超管一起 - ListRoleReq listRoleReq = ListRoleReq.builder() - .roleTypes(Lists.newArrayList(RoleTypeEnum.SUPER_ADMIN.getValue())) - .workspaceOuPairs(param.stream() - .map(e -> ListRoleUserRelationParam.WorkspaceOuPair.builder() - .workspaceId(e.getWorkspaceId()) - .ouId(e.getOuId()) - .build()) - .collect(Collectors.toList())) - .needPresetRole(true) - .build(); - List roleList = roleService.list(listRoleReq); + LambdaQueryChainWrapper roleWrapper = saasRoleDao.lambdaQuery(); + roleWrapper.and(w -> + param.forEach(c -> w.or() + .eq(SaasRole::getOwnerOuId, c.getOuId()) + .eq(SaasRole::getWorkspaceId, c.getWorkspaceId()))); + roleWrapper.eq(SaasRole::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .eq(SaasRole::getRoleType, RoleTypeEnum.SUPER_ADMIN.getValue()); + List roleList = roleWrapper.list(); if (CollectionUtils.isEmpty(roleList)) { return Collections.emptyList(); } LambdaQueryChainWrapper userRoleWrapper = roleUserRelationDao.lambdaQuery(); userRoleWrapper.and(w -> - param.forEach(c -> w.or() - .eq(SaasRoleUserRelation::getOuId, c.getOuId()) + roleList.forEach(c -> w.or() + .eq(SaasRoleUserRelation::getOuId, c.getOwnerOuId()) .eq(SaasRoleUserRelation::getWorkspaceId, c.getWorkspaceId()) + .eq(SaasRoleUserRelation::getRoleId, c.getId()) )); - userRoleWrapper.in(SaasRoleUserRelation::getRoleId, roleList.stream().map(SaasRoleRes::getId).collect(Collectors.toList())); userRoleWrapper.eq(SaasRoleUserRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value); List relations = userRoleWrapper.list(); @@ -389,24 +388,15 @@ public class RoleUserService implements SaasRoleUserService { if (param.getWorkspaceId() == null || Objects.isNull(param.getOuId())) { return Collections.emptyList(); } - - // 兼容上线历史数据还没清洗的间隙,查询超管角色需要根据workspaceId和预设的超管一起 - ListRoleReq listRoleReq = ListRoleReq.builder() - .roleTypes(Lists.newArrayList(RoleTypeEnum.SUPER_ADMIN.getValue())) - .workspaceOuPairs(Lists.newArrayList(ListRoleUserRelationParam.WorkspaceOuPair.builder() - .workspaceId(param.getWorkspaceId()) - .ouId(param.getOuId()) - .build())) - .needPresetRole(true) - .build(); - List saasRoles = roleService.list(listRoleReq); - if (CollectionUtils.isEmpty(saasRoles)) { + SaasRole saasRole = saasRoleDao.findRoleByTypeAndWorkspaceIdAndOuId(RoleTypeEnum.SUPER_ADMIN.getValue(), + param.getWorkspaceId(), param.getOuId()); + if (Objects.isNull(saasRole)) { return Collections.emptyList(); } List relations = roleUserRelationDao.lambdaQuery() .eq(SaasRoleUserRelation::getWorkspaceId, param.getWorkspaceId()) .eq(SaasRoleUserRelation::getOuId, param.getOuId()) - .in(SaasRoleUserRelation::getRoleId, saasRoles.stream().map(SaasRoleRes::getId).collect(Collectors.toList())) + .in(SaasRoleUserRelation::getRoleId, saasRole.getId()) .eq(SaasRoleUserRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); if (CollectionUtils.isEmpty(relations)) { return Collections.emptyList();