| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- package com.zsElectric.boot.system.service.impl;
- import cn.hutool.core.collection.CollectionUtil;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.zsElectric.boot.common.constant.RedisConstants;
- import com.zsElectric.boot.system.mapper.RoleMenuMapper;
- import com.zsElectric.boot.system.model.bo.RolePermsBO;
- import com.zsElectric.boot.system.model.entity.RoleMenu;
- import com.zsElectric.boot.system.service.RoleMenuService;
- import jakarta.annotation.PostConstruct;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.stereotype.Service;
- import java.util.List;
- import java.util.Set;
- /**
- * 角色菜单服务实现类
- *
- * @author Ray.Hao
- * @since 2.5.0
- */
- @Service
- @RequiredArgsConstructor
- @Slf4j
- public class RoleMenuServiceImpl extends ServiceImpl<RoleMenuMapper, RoleMenu> implements RoleMenuService {
- private final RedisTemplate<String, Object> redisTemplate;
- /**
- * 初始化权限缓存
- */
- @PostConstruct
- public void initRolePermsCache() {
- log.info("========== 初始化权限缓存开始 ==========");
- refreshRolePermsCache();
- log.info("========== 初始化权限缓存完成 ==========");
- }
- /**
- * 刷新权限缓存
- */
- @Override
- public void refreshRolePermsCache() {
- // 清理权限缓存(删除整个 hash key)
- redisTemplate.delete(RedisConstants.System.ROLE_PERMS);
- log.info("已清理Redis权限缓存, key: {}", RedisConstants.System.ROLE_PERMS);
- List<RolePermsBO> list = this.baseMapper.getRolePermsList(null);
- log.info("从数据库查询到的角色权限数据: {} 条", list != null ? list.size() : 0);
- if (CollectionUtil.isNotEmpty(list)) {
- list.forEach(item -> {
- String roleCode = item.getRoleCode();
- Set<String> perms = item.getPerms();
- log.info("角色[{}]的权限列表: {}", roleCode, perms);
- if (CollectionUtil.isNotEmpty(perms)) {
- redisTemplate.opsForHash().put(RedisConstants.System.ROLE_PERMS, roleCode, perms);
- log.info("已缓存角色[{}]的权限到Redis, 权限数量: {}", roleCode, perms.size());
- }
- });
- } else {
- log.warn("数据库中未查询到任何角色权限数据!请检查 sys_role、sys_menu、sys_role_menu 表数据");
- }
- }
- /**
- * 刷新权限缓存
- */
- @Override
- public void refreshRolePermsCache(String roleCode) {
- // 清理权限缓存
- redisTemplate.opsForHash().delete(RedisConstants.System.ROLE_PERMS, roleCode);
- List<RolePermsBO> list = this.baseMapper.getRolePermsList(roleCode);
- if (CollectionUtil.isNotEmpty(list)) {
- RolePermsBO rolePerms = list.get(0);
- if (rolePerms == null) {
- return;
- }
- Set<String> perms = rolePerms.getPerms();
- if (CollectionUtil.isNotEmpty(perms)) {
- redisTemplate.opsForHash().put(RedisConstants.System.ROLE_PERMS, roleCode, perms);
- }
- }
- }
- /**
- * 刷新权限缓存 (角色编码变更时调用)
- */
- @Override
- public void refreshRolePermsCache(String oldRoleCode, String newRoleCode) {
- // 清理旧角色权限缓存
- redisTemplate.opsForHash().delete(RedisConstants.System.ROLE_PERMS, oldRoleCode);
- // 添加新角色权限缓存
- List<RolePermsBO> list = this.baseMapper.getRolePermsList(newRoleCode);
- if (CollectionUtil.isNotEmpty(list)) {
- RolePermsBO rolePerms = list.get(0);
- if (rolePerms == null) {
- return;
- }
- Set<String> perms = rolePerms.getPerms();
- redisTemplate.opsForHash().put(RedisConstants.System.ROLE_PERMS, newRoleCode, perms);
- }
- }
- /**
- * 获取角色权限集合
- *
- * @param roles 角色编码集合
- * @return 权限集合
- */
- @Override
- public Set<String> getRolePermsByRoleCodes(Set<String> roles) {
- return this.baseMapper.listRolePerms(roles);
- }
- /**
- * 获取角色拥有的菜单ID集合
- *
- * @param roleId 角色ID
- * @return 菜单ID集合
- */
- @Override
- public List<Long> listMenuIdsByRoleId(Long roleId) {
- return this.baseMapper.listMenuIdsByRoleId(roleId);
- }
- }
|