From 10b43563aa23ed19eaa9d6ed1e0846bdec2778a1 Mon Sep 17 00:00:00 2001 From: Jie Zheng <201507802@qq.com> Date: Thu, 16 Jan 2025 09:41:47 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E6=B3=A8=E8=A7=A3=EF=BC=8C=E4=BC=98=E5=8C=96Redis?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/QuartzJobServiceImpl.java | 1 + .../system/service/impl/DataServiceImpl.java | 49 ++++++++------- .../system/service/impl/DeptServiceImpl.java | 19 +++--- .../service/impl/DictDetailServiceImpl.java | 14 +++-- .../system/service/impl/DictServiceImpl.java | 2 - .../system/service/impl/JobServiceImpl.java | 26 +++++--- .../system/service/impl/MenuServiceImpl.java | 63 ++++++++++++------- .../system/service/impl/RoleServiceImpl.java | 47 ++++++++------ .../system/service/impl/UserServiceImpl.java | 14 +++-- 9 files changed, 142 insertions(+), 93 deletions(-) diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/quartz/service/impl/QuartzJobServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/quartz/service/impl/QuartzJobServiceImpl.java index b85ef111..20707f07 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/quartz/service/impl/QuartzJobServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/quartz/service/impl/QuartzJobServiceImpl.java @@ -103,6 +103,7 @@ public class QuartzJobServiceImpl implements QuartzJobService { @Override public void updateIsPause(QuartzJob quartzJob) { + // 置换暂停状态 if (quartzJob.getIsPause()) { quartzManage.resumeJob(quartzJob); quartzJob.setIsPause(false); diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DataServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DataServiceImpl.java index 98fe4fdd..66daee94 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DataServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DataServiceImpl.java @@ -23,23 +23,23 @@ import me.zhengjie.modules.system.service.DeptService; import me.zhengjie.modules.system.service.RoleService; import me.zhengjie.modules.system.service.dto.RoleSmallDto; import me.zhengjie.modules.system.service.dto.UserDto; +import me.zhengjie.utils.CacheKey; +import me.zhengjie.utils.RedisUtils; import me.zhengjie.utils.enums.DataScopeEnum; -import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.util.*; +import java.util.concurrent.TimeUnit; /** * @author Zheng Jie - * @website https://eladmin.vip * @description 数据权限服务实现 * @date 2020-05-07 **/ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "data", keyGenerator = "keyGenerator") public class DataServiceImpl implements DataService { + private final RedisUtils redisUtils; private final RoleService roleService; private final DeptService deptService; @@ -49,27 +49,32 @@ public class DataServiceImpl implements DataService { * @return / */ @Override - @Cacheable(key = "'user:' + #p0.id") public List getDeptIds(UserDto user) { - // 用于存储部门id - Set deptIds = new HashSet<>(); - // 查询用户角色 - List roleSet = roleService.findByUsersId(user.getId()); - // 获取对应的部门ID - for (RoleSmallDto role : roleSet) { - DataScopeEnum dataScopeEnum = DataScopeEnum.find(role.getDataScope()); - switch (Objects.requireNonNull(dataScopeEnum)) { - case THIS_LEVEL: - deptIds.add(user.getDept().getId()); - break; - case CUSTOMIZE: - deptIds.addAll(getCustomize(deptIds, role)); - break; - default: - return new ArrayList<>(); + String key = CacheKey.DATA_USER + user.getId(); + List ids = redisUtils.getList(key, Long.class); + if (CollUtil.isEmpty(ids)) { + // 用于存储部门id + Set deptIds = new HashSet<>(); + // 查询用户角色 + List roleSet = roleService.findByUsersId(user.getId()); + // 获取对应的部门ID + for (RoleSmallDto role : roleSet) { + DataScopeEnum dataScopeEnum = DataScopeEnum.find(role.getDataScope()); + switch (Objects.requireNonNull(dataScopeEnum)) { + case THIS_LEVEL: + deptIds.add(user.getDept().getId()); + break; + case CUSTOMIZE: + deptIds.addAll(getCustomize(deptIds, role)); + break; + default: + return new ArrayList<>(); + } } + ids = new ArrayList<>(deptIds); + redisUtils.set(key, ids, 1, TimeUnit.DAYS); } - return new ArrayList<>(deptIds); + return new ArrayList<>(ids); } /** diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java index d15e1a2d..0847dd9b 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java @@ -15,6 +15,7 @@ */ package me.zhengjie.modules.system.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import lombok.RequiredArgsConstructor; @@ -30,8 +31,6 @@ import me.zhengjie.modules.system.repository.DeptRepository; import me.zhengjie.modules.system.service.DeptService; import me.zhengjie.modules.system.service.mapstruct.DeptMapper; import me.zhengjie.utils.enums.DataScopeEnum; -import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -39,6 +38,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.Field; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -47,7 +47,6 @@ import java.util.stream.Collectors; */ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "dept", keyGenerator = "keyGenerator") public class DeptServiceImpl implements DeptService { private final DeptRepository deptRepository; @@ -88,10 +87,14 @@ public class DeptServiceImpl implements DeptService { } @Override - @Cacheable(key = "'id:' + #p0") public DeptDto findById(Long id) { - Dept dept = deptRepository.findById(id).orElseGet(Dept::new); - ValidationUtil.isNull(dept.getId(),"Dept","id",id); + String key = CacheKey.DEPT_ID + id; + Dept dept = redisUtils.get(key, Dept.class); + if(dept == null){ + dept = deptRepository.findById(id).orElseGet(Dept::new); + ValidationUtil.isNull(dept.getId(),"Dept","id",id); + redisUtils.set(key, dept, 1, TimeUnit.DAYS); + } return deptMapper.toDto(dept); } @@ -166,7 +169,7 @@ public class DeptServiceImpl implements DeptService { for (Dept dept : menuList) { deptDtos.add(deptMapper.toDto(dept)); List depts = deptRepository.findByPid(dept.getId()); - if(depts!=null && depts.size()!=0){ + if(CollUtil.isNotEmpty(depts)){ getDeleteDepts(depts, deptDtos); } } @@ -179,7 +182,7 @@ public class DeptServiceImpl implements DeptService { deptList.forEach(dept -> { if (dept!=null && dept.getEnabled()) { List depts = deptRepository.findByPid(dept.getId()); - if (depts.size() != 0) { + if (CollUtil.isNotEmpty(depts)) { list.addAll(getDeptChildren(depts)); } list.add(dept.getId()); diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DictDetailServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DictDetailServiceImpl.java index 7044585c..2a008457 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DictDetailServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DictDetailServiceImpl.java @@ -15,6 +15,7 @@ */ package me.zhengjie.modules.system.service.impl; +import cn.hutool.core.collection.CollUtil; import lombok.RequiredArgsConstructor; import me.zhengjie.utils.PageResult; import me.zhengjie.modules.system.domain.Dict; @@ -26,13 +27,12 @@ import me.zhengjie.modules.system.repository.DictDetailRepository; import me.zhengjie.modules.system.service.DictDetailService; import me.zhengjie.modules.system.service.dto.DictDetailDto; import me.zhengjie.modules.system.service.mapstruct.DictDetailMapper; -import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.concurrent.TimeUnit; /** * @author Zheng Jie @@ -40,7 +40,6 @@ import java.util.List; */ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "dict", keyGenerator = "keyGenerator") public class DictDetailServiceImpl implements DictDetailService { private final DictRepository dictRepository; @@ -74,9 +73,14 @@ public class DictDetailServiceImpl implements DictDetailService { } @Override - @Cacheable(key = "'name:' + #p0") public List getDictByName(String name) { - return dictDetailMapper.toDto(dictDetailRepository.findByDictName(name)); + String key = CacheKey.DICT_NAME + name; + List dictDetails = redisUtils.getList(key, DictDetail.class); + if(CollUtil.isEmpty(dictDetails)){ + dictDetails = dictDetailRepository.findByDictName(name); + redisUtils.set(key, dictDetails, 1 , TimeUnit.DAYS); + } + return dictDetailMapper.toDto(dictDetails); } @Override diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DictServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DictServiceImpl.java index 6ec08713..042200d0 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DictServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DictServiceImpl.java @@ -26,7 +26,6 @@ import me.zhengjie.modules.system.repository.DictRepository; import me.zhengjie.modules.system.service.DictService; import me.zhengjie.modules.system.service.dto.DictDto; import me.zhengjie.modules.system.service.mapstruct.DictMapper; -import org.springframework.cache.annotation.CacheConfig; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -41,7 +40,6 @@ import java.util.*; */ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "dict", keyGenerator = "keyGenerator") public class DictServiceImpl implements DictService { private final DictRepository dictRepository; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/JobServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/JobServiceImpl.java index 20cdb7db..e6646c29 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/JobServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/JobServiceImpl.java @@ -27,9 +27,6 @@ import me.zhengjie.modules.system.repository.JobRepository; import me.zhengjie.modules.system.service.JobService; import me.zhengjie.modules.system.service.dto.JobDto; import me.zhengjie.modules.system.service.mapstruct.JobMapper; -import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -37,6 +34,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; +import java.util.concurrent.TimeUnit; /** * @author Zheng Jie @@ -44,7 +42,6 @@ import java.util.*; */ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "job", keyGenerator = "keyGenerator") public class JobServiceImpl implements JobService { private final JobRepository jobRepository; @@ -65,10 +62,14 @@ public class JobServiceImpl implements JobService { } @Override - @Cacheable(key = "'id:' + #p0") public JobDto findById(Long id) { - Job job = jobRepository.findById(id).orElseGet(Job::new); - ValidationUtil.isNull(job.getId(),"Job","id",id); + String key = CacheKey.JOB_ID + id; + Job job = redisUtils.get(key, Job.class); + if(job == null){ + job = jobRepository.findById(id).orElseGet(Job::new); + ValidationUtil.isNull(job.getId(),"Job","id",id); + redisUtils.set(key, job, 1, TimeUnit.DAYS); + } return jobMapper.toDto(job); } @@ -83,7 +84,6 @@ public class JobServiceImpl implements JobService { } @Override - @CacheEvict(key = "'id:' + #p0.id") @Transactional(rollbackFor = Exception.class) public void update(Job resources) { Job job = jobRepository.findById(resources.getId()).orElseGet(Job::new); @@ -94,6 +94,8 @@ public class JobServiceImpl implements JobService { ValidationUtil.isNull( job.getId(),"Job","id",resources.getId()); resources.setId(job.getId()); jobRepository.save(resources); + // 删除缓存 + delCaches(resources.getId()); } @Override @@ -123,4 +125,12 @@ public class JobServiceImpl implements JobService { throw new BadRequestException("所选的岗位中存在用户关联,请解除关联再试!"); } } + + /** + * 删除缓存 + * @param id / + */ + public void delCaches(Long id){ + redisUtils.del(CacheKey.JOB_ID + id); + } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java index b23bf58f..ae328c02 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java @@ -15,6 +15,7 @@ */ package me.zhengjie.modules.system.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import lombok.RequiredArgsConstructor; @@ -34,8 +35,6 @@ import me.zhengjie.modules.system.service.dto.MenuQueryCriteria; import me.zhengjie.modules.system.service.dto.RoleSmallDto; import me.zhengjie.modules.system.service.mapstruct.MenuMapper; import me.zhengjie.utils.*; -import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -43,6 +42,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.Field; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -50,7 +50,6 @@ import java.util.stream.Collectors; */ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "menu", keyGenerator = "keyGenerator") public class MenuServiceImpl implements MenuService { private final MenuRepository menuRepository; @@ -88,10 +87,14 @@ public class MenuServiceImpl implements MenuService { } @Override - @Cacheable(key = "'id:' + #p0") public MenuDto findById(long id) { - Menu menu = menuRepository.findById(id).orElseGet(Menu::new); - ValidationUtil.isNull(menu.getId(),"Menu","id",id); + String key = CacheKey.MENU_ID + id; + Menu menu = redisUtils.get(key, Menu.class); + if(menu == null){ + menu = menuRepository.findById(id).orElseGet(Menu::new); + ValidationUtil.isNull(menu.getId(),"Menu","id",id); + redisUtils.set(key, menu, 1, TimeUnit.DAYS); + } return menuMapper.toDto(menu); } @@ -101,11 +104,16 @@ public class MenuServiceImpl implements MenuService { * @return / */ @Override - @Cacheable(key = "'user:' + #p0") public List findByUser(Long currentUserId) { - List roles = roleService.findByUsersId(currentUserId); - Set roleIds = roles.stream().map(RoleSmallDto::getId).collect(Collectors.toSet()); - LinkedHashSet menus = menuRepository.findByRoleIdsAndTypeNot(roleIds, 2); + String key = CacheKey.MENU_USER + currentUserId; + List menus = redisUtils.getList(key, Menu.class); + if (CollUtil.isEmpty(menus)){ + List roles = roleService.findByUsersId(currentUserId); + Set roleIds = roles.stream().map(RoleSmallDto::getId).collect(Collectors.toSet()); + LinkedHashSet data = menuRepository.findByRoleIdsAndTypeNot(roleIds, 2); + menus = new ArrayList<>(data); + redisUtils.set(key, menus, 1, TimeUnit.DAYS); + } return menus.stream().map(menuMapper::toDto).collect(Collectors.toList()); } @@ -194,7 +202,7 @@ public class MenuServiceImpl implements MenuService { for (Menu menu : menuList) { menuSet.add(menu); List menus = menuRepository.findByPidOrderByMenuSort(menu.getId()); - if(menus!=null && menus.size()!=0){ + if(CollUtil.isNotEmpty(menus)){ getChildMenus(menus, menuSet); } } @@ -252,7 +260,7 @@ public class MenuServiceImpl implements MenuService { } } } - if(trees.size() == 0){ + if(trees.isEmpty()){ trees = menuDtos.stream().filter(s -> !ids.contains(s.getId())).collect(Collectors.toList()); } return trees; @@ -287,16 +295,7 @@ public class MenuServiceImpl implements MenuService { menuVo.setChildren(buildMenus(menuDtoList)); // 处理是一级菜单并且没有子菜单的情况 } else if(menuDTO.getPid() == null){ - MenuVo menuVo1 = new MenuVo(); - menuVo1.setMeta(menuVo.getMeta()); - // 非外链 - if(!menuDTO.getIFrame()){ - menuVo1.setPath("index"); - menuVo1.setName(menuVo.getName()); - menuVo1.setComponent(menuVo.getComponent()); - } else { - menuVo1.setPath(menuDTO.getPath()); - } + MenuVo menuVo1 = getMenuVo(menuDTO, menuVo); menuVo.setName(null); menuVo.setMeta(null); menuVo.setComponent("Layout"); @@ -356,4 +355,24 @@ public class MenuServiceImpl implements MenuService { }}); redisUtils.delByKeys(CacheKey.ROLE_ID, roles.stream().map(Role::getId).collect(Collectors.toSet())); } + + /** + * 构建前端路由 + * @param menuDTO / + * @param menuVo / + * @return / + */ + private static MenuVo getMenuVo(MenuDto menuDTO, MenuVo menuVo) { + MenuVo menuVo1 = new MenuVo(); + menuVo1.setMeta(menuVo.getMeta()); + // 非外链 + if(!menuDTO.getIFrame()){ + menuVo1.setPath("index"); + menuVo1.setName(menuVo.getName()); + menuVo1.setComponent(menuVo.getComponent()); + } else { + menuVo1.setPath(menuDTO.getPath()); + } + return menuVo1; + } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java index 39a42aeb..f43096f4 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java @@ -15,6 +15,7 @@ */ package me.zhengjie.modules.system.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import lombok.RequiredArgsConstructor; import me.zhengjie.exception.BadRequestException; @@ -34,8 +35,6 @@ import me.zhengjie.modules.system.service.dto.UserDto; import me.zhengjie.modules.system.service.mapstruct.RoleMapper; import me.zhengjie.modules.system.service.mapstruct.RoleSmallMapper; import me.zhengjie.utils.*; -import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -44,6 +43,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -52,7 +52,6 @@ import java.util.stream.Collectors; */ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "role", keyGenerator = "keyGenerator") public class RoleServiceImpl implements RoleService { private final RoleRepository roleRepository; @@ -80,11 +79,14 @@ public class RoleServiceImpl implements RoleService { } @Override - @Cacheable(key = "'id:' + #p0") - @Transactional(rollbackFor = Exception.class) public RoleDto findById(long id) { - Role role = roleRepository.findById(id).orElseGet(Role::new); - ValidationUtil.isNull(role.getId(), "Role", "id", id); + String key = CacheKey.ROLE_ID + id; + Role role = redisUtils.get(key, Role.class); + if (role == null) { + role = roleRepository.findById(id).orElseGet(Role::new); + ValidationUtil.isNull(role.getId(), "Role", "id", id); + redisUtils.set(key, role, 1, TimeUnit.DAYS); + } return roleMapper.toDto(role); } @@ -152,7 +154,7 @@ public class RoleServiceImpl implements RoleService { @Override public Integer findByRoles(Set roles) { - if (roles.size() == 0) { + if (roles.isEmpty()) { return Integer.MAX_VALUE; } Set roleDtos = new HashSet<>(); @@ -163,21 +165,26 @@ public class RoleServiceImpl implements RoleService { } @Override - @Cacheable(key = "'auth:' + #p0.id") public List buildAuthorities(UserDto user) { - Set permissions = new HashSet<>(); - // 如果是管理员直接返回 - if (user.getIsAdmin()) { - permissions.add("admin"); - return permissions.stream().map(AuthorityDto::new) + String key = CacheKey.ROLE_AUTH + user.getId(); + List authorityDtos = redisUtils.getList(key, AuthorityDto.class); + if (CollUtil.isEmpty(authorityDtos)) { + Set permissions = new HashSet<>(); + // 如果是管理员直接返回 + if (user.getIsAdmin()) { + permissions.add("admin"); + return permissions.stream().map(AuthorityDto::new) + .collect(Collectors.toList()); + } + Set roles = roleRepository.findByUserId(user.getId()); + permissions = roles.stream().flatMap(role -> role.getMenus().stream()) + .map(Menu::getPermission) + .filter(StringUtils::isNotBlank).collect(Collectors.toSet()); + authorityDtos = permissions.stream().map(AuthorityDto::new) .collect(Collectors.toList()); + redisUtils.set(key, authorityDtos, 1, TimeUnit.HOURS); } - Set roles = roleRepository.findByUserId(user.getId()); - permissions = roles.stream().flatMap(role -> role.getMenus().stream()) - .map(Menu::getPermission) - .filter(StringUtils::isNotBlank).collect(Collectors.toSet()); - return permissions.stream().map(AuthorityDto::new) - .collect(Collectors.toList()); + return authorityDtos; } @Override diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java index 2b286067..d4a3d4a7 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java @@ -30,8 +30,6 @@ import me.zhengjie.modules.system.service.dto.*; import me.zhengjie.modules.system.service.mapstruct.UserLoginMapper; import me.zhengjie.modules.system.service.mapstruct.UserMapper; import me.zhengjie.utils.*; -import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -42,6 +40,7 @@ import javax.validation.constraints.NotBlank; import java.io.File; import java.io.IOException; import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -50,7 +49,6 @@ import java.util.stream.Collectors; */ @Service @RequiredArgsConstructor -@CacheConfig(cacheNames = "user", keyGenerator = "keyGenerator") public class UserServiceImpl implements UserService { private final UserRepository userRepository; @@ -74,11 +72,15 @@ public class UserServiceImpl implements UserService { } @Override - @Cacheable(key = "'id:' + #p0") @Transactional(rollbackFor = Exception.class) public UserDto findById(long id) { - User user = userRepository.findById(id).orElseGet(User::new); - ValidationUtil.isNull(user.getId(), "User", "id", id); + String key = CacheKey.USER_ID + id; + User user = redisUtils.get(key, User.class); + if (user == null) { + user = userRepository.findById(id).orElseGet(User::new); + ValidationUtil.isNull(user.getId(), "User", "id", id); + redisUtils.set(key, user, 1, TimeUnit.DAYS); + } return userMapper.toDto(user); }