package com.nanjing.water.service.cache; import com.nanjing.water.common.enums.EYesOrNo; import com.nanjing.water.common.util.LocalDateTimeUtil; import com.nanjing.water.common.util.SerializeUtil; import com.nanjing.water.common.util.StringUtil; import com.nanjing.water.entity.enums.EMenuType; import com.nanjing.water.entity.enums.EOperation; import com.nanjing.water.entity.enums.EState; import com.nanjing.water.repository.impl.AdminPermissionMapperImpl; import com.nanjing.water.repository.po.AdminMenuPO; import com.nanjing.water.repository.po.AdminPermissionPO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.function.Function; @Service public class AdminPermissionService { @Autowired private AdminPermissionMapperImpl dao; @Autowired private StringRedisTemplate redisTemplate; /** * 获取所有权限(缓存) */ public List listAllWithCache() { try { if (redisTemplate.hasKey("adminPermissionCache")) { String json = redisTemplate.opsForValue().get("adminPermissionCache"); if (StringUtil.isNotNullOrEmpty(json)) { return SerializeUtil.toListObject(json, AdminPermissionPO.class); } } } catch (Exception e) { // } List list = dao.getList(); redisTemplate.opsForValue().set("adminPermissionCache", SerializeUtil.toJson(list)); return list; } // 删除权限缓存 public void removeListAllCache() { redisTemplate.delete("adminPermissionCache"); } /** * 获取用户拥有的权限(缓存) */ public List listUserAllWithCache(Long id, List listRoleId, Function, List> funcGetUserPermission) { try { if (redisTemplate.hasKey("userMenusCache")) { Object json = redisTemplate.opsForHash().get("userPermissionCache", id); if (Objects.nonNull(json)) { return SerializeUtil.toListObject(json.toString(), AdminPermissionPO.class); } } } catch (Exception e) { // } List list = funcGetUserPermission.apply(listRoleId); redisTemplate.opsForHash().put("userPermissionCache", id, list); return list; } // 删除指定用户拥有的权限缓存 public void removeUserCache(Long id) { redisTemplate.opsForHash().delete("userPermissionCache", id); } // 删除所有用户拥有的权限缓存 public void removeAllUserCache() { redisTemplate.delete("userPermissionCache"); } /** * 给菜单添加默认权限 * @param menu 菜单信息 */ public void createDefaultPermission(AdminMenuPO menu) { if (!Objects.equals(menu.getType(), EMenuType.PAGE.getValue())) { return; } Long now = LocalDateTimeUtil.nowTimeStamp(); List list = new ArrayList<>(); AdminPermissionPO item1 = new AdminPermissionPO(); item1.setSn(menu.getUrl().replaceAll("/", "") + "." + EOperation.LIST.getValue()); item1.setMenuId(menu.getId()); item1.setMenuUrl(menu.getUrl()); item1.setName(menu.getName() + "." + EOperation.LIST.getDesc()); item1.setIcon(""); item1.setType(EOperation.LIST.getValue()); item1.setStatus(EState.NORMAL.getValue()); item1.setCreateTime(now); item1.setIsDelete(EYesOrNo.NO.getValue()); list.add(item1); AdminPermissionPO item2 = new AdminPermissionPO(); item2.setSn(menu.getUrl().replaceAll("/", "") + "." + EOperation.ADD.getValue()); item2.setMenuId(menu.getId()); item2.setMenuUrl(menu.getUrl()); item2.setName(menu.getName() + "." + EOperation.ADD.getDesc()); item2.setIcon(""); item2.setType(EOperation.ADD.getValue()); item2.setStatus(EState.NORMAL.getValue()); item2.setCreateTime(now); item2.setIsDelete(EYesOrNo.NO.getValue()); list.add(item2); AdminPermissionPO item3 = new AdminPermissionPO(); item3.setSn(menu.getUrl().replaceAll("/", "") + "." + EOperation.UPDATE.getValue()); item3.setMenuId(menu.getId()); item3.setMenuUrl(menu.getUrl()); item3.setName(menu.getName() + "." + EOperation.UPDATE.getDesc()); item3.setIcon(""); item3.setType(EOperation.UPDATE.getValue()); item3.setStatus(EState.NORMAL.getValue()); item3.setCreateTime(now); item3.setIsDelete(EYesOrNo.NO.getValue()); list.add(item3); AdminPermissionPO item4 = new AdminPermissionPO(); item4.setSn(menu.getUrl().replaceAll("/", "") + "." + EOperation.DETAIL.getValue()); item4.setMenuId(menu.getId()); item4.setMenuUrl(menu.getUrl()); item4.setName(menu.getName() + "." + EOperation.DETAIL.getDesc()); item4.setIcon(""); item4.setType(EOperation.DETAIL.getValue()); item4.setStatus(EState.NORMAL.getValue()); item4.setCreateTime(now); item4.setIsDelete(EYesOrNo.NO.getValue()); list.add(item4); dao.insert(list); } }