package com.terra.system.service.all; import com.terra.common.entity.all.RedisCacheKey; import com.terra.common.entity.all.SettingData; import com.terra.common.entity.all.StaticData; import com.terra.common.service.RedisService; import com.terra.system.entity.all.*; import com.terra.system.entity.sys.MenuEntity; import com.terra.system.entity.sys.ResEntity; import com.terra.system.mapper.all.PermsMapper; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; import java.util.concurrent.TimeUnit; /** * 授权服务 * @author WWW */ @Service @SuppressWarnings("ALL") public class PermsService implements PermsMapper { @Resource PermsMapper permsMapper; @Resource RedisService redisService; @Override public List selectRes(String uid) { return selectResByUid(uid, false); } @Override public List selectAllRes() { return selectResByUid(StaticData.ADMIN, true); } private List selectResByUid(String uid, boolean isAll) { String key = RedisCacheKey.permsResKey(uid); Object obj = redisService.get(key); if (obj instanceof List) { return (List) obj; } List list = isAll ? permsMapper.selectAllRes() : permsMapper.selectRes(uid); if (list != null && list.size() > 0) { redisService.put(key, list, SettingData.CACHE_EXPIRE, TimeUnit.MINUTES); } return list; } @Override public List selectMenus(String uid) { String key = RedisCacheKey.permsMenusKey(uid); Object obj = redisService.get(key); if (obj instanceof List) { return (List) obj; } List list = permsMapper.selectMenus(uid); if (list != null && !list.isEmpty()) { redisService.put(key, list, SettingData.CACHE_EXPIRE, TimeUnit.MINUTES); } return list; } @Override public List selectPerms(String uid) { String key = RedisCacheKey.permsPermsKey(uid); Object obj = redisService.get(key); if (obj instanceof List) { return (List) obj; } List list = permsMapper.selectPerms(uid); if (list != null && !list.isEmpty()) { redisService.put(key, list, SettingData.CACHE_EXPIRE, TimeUnit.MINUTES); } return list; } @Override public List selectPermsEntity(String uid) { String key = RedisCacheKey.permsPermsEntityKey(uid); Object obj = redisService.get(key); if (obj instanceof List) { return (List) obj; } List list = permsMapper.selectPermsEntity(uid); if (list != null && !list.isEmpty()) { redisService.put(key, list, SettingData.CACHE_EXPIRE, TimeUnit.MINUTES); } return list; } @Override public List selectRoles(String uid) { return permsMapper.selectRoles(uid); } @Override public List selectMenuRecursive(int id, String uid) { return permsMapper.selectMenuRecursive(id, uid); } /** * 清除授权缓存 */ public void clearPermsCache() { redisService.clearKeys(RedisCacheKey.permsRootKey()); } /** * 清除所有缓存 */ public void clearAllCache() { redisService.clearAll(); } }