From fb2bd510b176078a681dc29d484d26cf930abb6c Mon Sep 17 00:00:00 2001 From: irving Date: Fri, 31 Oct 2025 23:59:52 -0400 Subject: [PATCH] =?UTF-8?q?fix=20=E7=AE=A1=E7=90=86=E5=91=98=E7=9C=8B?= =?UTF-8?q?=E4=B8=8D=E5=88=B0=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PlayPersonnelGroupInfoServiceImpl.java | 13 ++++- .../starry/common/enums/TenantRoleEnum.java | 53 +++++++++++++++++++ 2 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 play-common/src/main/java/com/starry/common/enums/TenantRoleEnum.java diff --git a/play-admin/src/main/java/com/starry/admin/modules/personnel/service/impl/PlayPersonnelGroupInfoServiceImpl.java b/play-admin/src/main/java/com/starry/admin/modules/personnel/service/impl/PlayPersonnelGroupInfoServiceImpl.java index b9ad852..d851b52 100644 --- a/play-admin/src/main/java/com/starry/admin/modules/personnel/service/impl/PlayPersonnelGroupInfoServiceImpl.java +++ b/play-admin/src/main/java/com/starry/admin/modules/personnel/service/impl/PlayPersonnelGroupInfoServiceImpl.java @@ -10,18 +10,21 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.starry.admin.common.domain.LoginUser; import com.starry.admin.modules.clerk.module.entity.PlayClerkUserInfoEntity; +import com.starry.admin.modules.clerk.module.enums.ClerkRoleStatus; import com.starry.admin.modules.clerk.service.IPlayClerkUserInfoService; import com.starry.admin.modules.personnel.mapper.PlayPersonnelGroupInfoMapper; import com.starry.admin.modules.personnel.module.entity.PlayPersonnelGroupInfoEntity; import com.starry.admin.modules.personnel.module.vo.PlayPersonnelGroupInfoQueryVo; import com.starry.admin.modules.personnel.module.vo.PlayPersonnelGroupInfoReturnVo; import com.starry.admin.modules.personnel.service.IPlayPersonnelGroupInfoService; +import com.starry.common.enums.TenantRoleEnum; import com.starry.common.utils.IdUtils; import com.starry.common.utils.StringUtils; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; import javax.annotation.Resource; import org.springframework.stereotype.Service; @@ -130,7 +133,13 @@ public class PlayPersonnelGroupInfoServiceImpl @Override public List getValidClerkIdList(LoginUser loginUser, String clerkNickName) { List idList; - PlayPersonnelGroupInfoEntity groupInfoEntity = this.selectByUserId(loginUser.getUserId()); + Set roleKeys = loginUser != null && loginUser.getRoles() != null ? loginUser.getRoles() + : Collections.emptySet(); + boolean hasOperatorRole = TenantRoleEnum.contains(roleKeys, TenantRoleEnum.OPERATOR); + PlayPersonnelGroupInfoEntity groupInfoEntity = null; + if (!hasOperatorRole && loginUser != null) { + groupInfoEntity = this.selectByUserId(loginUser.getUserId()); + } if (Objects.nonNull(groupInfoEntity)) { List list = clerkUserInfoService .list(Wrappers.lambdaQuery(PlayClerkUserInfoEntity.class) @@ -147,7 +156,7 @@ public class PlayPersonnelGroupInfoServiceImpl // 返回所有的clerkId idList = clerkUserInfoService .list(Wrappers.lambdaQuery(PlayClerkUserInfoEntity.class).select(PlayClerkUserInfoEntity::getId) - .eq(PlayClerkUserInfoEntity::getClerkState, "1")) + .eq(PlayClerkUserInfoEntity::getClerkState, ClerkRoleStatus.CLERK.getCode())) .stream().map(PlayClerkUserInfoEntity::getId).collect(Collectors.toList()); } diff --git a/play-common/src/main/java/com/starry/common/enums/TenantRoleEnum.java b/play-common/src/main/java/com/starry/common/enums/TenantRoleEnum.java new file mode 100644 index 0000000..b62d23d --- /dev/null +++ b/play-common/src/main/java/com/starry/common/enums/TenantRoleEnum.java @@ -0,0 +1,53 @@ +package com.starry.common.enums; + +import java.util.Locale; +import java.util.Objects; +import java.util.Set; + +/** + * 租户后台角色枚举,集中维护角色标识,避免散落的魔法字符串。 + */ +public enum TenantRoleEnum { + + /** + * 管理员(运营)角色,拥有全量数据视图。 + */ + OPERATOR("operator"), + + /** + * 组长角色,只能查看所在小组的数据。 + */ + LEADER("leader"), + + /** + * 客服角色。 + */ + WAITER("waiter"); + + private final String roleKey; + + TenantRoleEnum(String roleKey) { + this.roleKey = roleKey.toLowerCase(Locale.ROOT); + } + + public String getRoleKey() { + return roleKey; + } + + /** + * 判断角色集合中是否包含目标角色。 + * + * @param roles 当前角色集合 + * @param targetRole 目标角色 + * @return true 表示包含 + */ + public static boolean contains(Set roles, TenantRoleEnum targetRole) { + if (roles == null || targetRole == null) { + return false; + } + return roles.stream() + .filter(Objects::nonNull) + .map(role -> role.toLowerCase(Locale.ROOT)) + .anyMatch(role -> role.equals(targetRole.getRoleKey())); + } +}