package com.youlai.admin.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.youlai.admin.mapper.SysPermissionMapper; import com.youlai.admin.pojo.entity.SysPermission; import com.youlai.admin.service.ISysPermissionService; import com.youlai.common.constant.GlobalConstants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; @Service public class SysPermissionServiceImpl extends ServiceImpl implements ISysPermissionService { @Autowired private RedisTemplate redisTemplate; @Override public List listPermRoles() { return this.baseMapper.listPermRoles(); } @Override public IPage list(Page page, SysPermission permission) { List list = this.baseMapper.list(page, permission); page.setRecords(list); return page; } @Override public boolean refreshPermRolesRules() { redisTemplate.delete(Arrays.asList(GlobalConstants.URL_PERM_ROLES_KEY,GlobalConstants.BTN_PERM_ROLES_KEY)); List permissions = this.listPermRoles(); if (CollectionUtil.isNotEmpty(permissions)) { // 初始化URL【权限->角色(集合)】规则 List urlPermList = permissions.stream() .filter(item -> StrUtil.isNotBlank(item.getUrlPerm())) .collect(Collectors.toList()); if (CollectionUtil.isNotEmpty(urlPermList)) { Map> urlPermRoles = new HashMap<>(); urlPermList.stream().forEach(item -> { String perm = item.getUrlPerm(); List roles = item.getRoles(); urlPermRoles.put(perm, roles); }); redisTemplate.opsForHash().putAll(GlobalConstants.URL_PERM_ROLES_KEY, urlPermRoles); } // 初始化URL【按钮->角色(集合)】规则 List btnPermList = permissions.stream() .filter(item -> StrUtil.isNotBlank(item.getBtnPerm())) .collect(Collectors.toList()); if (CollectionUtil.isNotEmpty(btnPermList)) { Map> btnPermRoles = CollectionUtil.newHashMap(); btnPermList.stream().forEach(item -> { String perm = item.getUrlPerm(); List roles = item.getRoles(); btnPermRoles.put(perm, roles); }); redisTemplate.opsForHash().putAll(GlobalConstants.BTN_PERM_ROLES_KEY, btnPermRoles); } } return true; } @Override public List listBtnPermByRoles(List roles) { List perms = this.baseMapper.listBtnPermByRoles(roles); return perms; } }