From 1e5991c88a5effcca47d921daec1298dab4914fe Mon Sep 17 00:00:00 2001 From: zuoqinbo Date: Wed, 6 Dec 2023 17:13:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20REQ-1650=20=20=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/service/impl/RoleServiceImpl.java | 54 +++++++++++++++---- 1 file changed, 45 insertions(+), 9 deletions(-) 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 4ce193be..2f114806 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 @@ -38,9 +38,12 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; +import static org.codehaus.groovy.runtime.DefaultGroovyMethods.collect; + /** * 角色 * @@ -262,16 +265,49 @@ public class RoleServiceImpl implements RoleService { } private void validRoleName(SaveOrUpdateRoleVO saveOrUpdateRole) { - List roles = saasRoleDao.lambdaQuery() - .eq(SaasRole::getWorkspaceId, saveOrUpdateRole.getWorkspaceId()) - .eq(SaasRole::getOwnerOuId, saveOrUpdateRole.getOwnerOuId()) - .eq(SaasRole::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); - if (CollectionUtils.isNotEmpty(roles)) { - Optional repeatGroupName = roles.stream() - .filter(g -> !Objects.equals(g.getId(), saveOrUpdateRole.getId()) && StringUtils.equalsIgnoreCase(g.getName(), saveOrUpdateRole.getName())).findFirst(); - if (repeatGroupName.isPresent()) { - throw new ServiceException("同一个单位、同一工作台类型内,角色名称不能重复!"); + List groupTrees = saveOrUpdateRole.getGroupTree(); + if (CollectionUtil.isEmpty(groupTrees)) { + return; + } + String currentWorkspaceCode = groupTrees.get(0).getWorkspaceTypeCode(); + List roleGroups = saasRoleGroupDao.lambdaQuery() + .in(SaasRoleGroup::getWorkspaceTypeCode, currentWorkspaceCode) + .eq(SaasRoleGroup::getWorkspaceId, saveOrUpdateRole.getWorkspaceId()) + .eq(SaasRoleGroup::getOuId, saveOrUpdateRole.getOwnerOuId()) + .eq(SaasRoleGroup::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + List roleGroupIds = roleGroups.stream().map(SaasRoleGroup::getId).collect(Collectors.toList()); + if (CollectionUtil.isEmpty(roleGroupIds)) { + return; + } + List roleGroupRelations = roleGroupRelationDao.lambdaQuery() + .in(SaasRoleGroupRelation::getSaasRoleGroupId, roleGroupIds) + .eq(SaasRoleGroupRelation::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + if (CollectionUtil.isNotEmpty(roleGroupRelations)) { + List saasRoleIds = roleGroupRelations.stream().map(SaasRoleGroupRelation::getRoleId).collect(Collectors.toList()); + //确保这些角色id 都是正常使用的 + List roles = saasRoleDao.lambdaQuery() + .eq(SaasRole::getWorkspaceId, saveOrUpdateRole.getWorkspaceId()) + .eq(SaasRole::getId, saasRoleIds) + .eq(SaasRole::getName, saveOrUpdateRole.getName()) + .eq(SaasRole::getOwnerOuId, saveOrUpdateRole.getOwnerOuId()) + .eq(SaasRole::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + if (CollectionUtil.isNotEmpty(roles)) { + //新增角色 判断角色名称重复 + if (Objects.isNull(saveOrUpdateRole.getId())) { + throw new ServiceException("同一企业单位、同一工作台类型,角色名称不能重复!"); + } else { + //如果是更新角色,必须是当前角色 + if (!(roles.size() == 1 && (roles.get(0).getId().equals(saveOrUpdateRole.getId())))) { + throw new ServiceException("同一企业单位、同一工作台类型,角色名称不能重复!"); + } + } } + +// Optional repeatGroupName = roles.stream() +// .filter(g -> !Objects.equals(g.getId(), saveOrUpdateRole.getId()) && StringUtils.equalsIgnoreCase(g.getName(), saveOrUpdateRole.getName())).findFirst(); +// if (repeatGroupName.isPresent()) { +// throw new ServiceException("同一个单位、同一工作台类型内,角色名称不能重复!"); +// } } }