diff --git a/kernel-s-system/system-business-role/pom.xml b/kernel-s-system/system-business-role/pom.xml index b205c0d3d..64bdaa4c8 100644 --- a/kernel-s-system/system-business-role/pom.xml +++ b/kernel-s-system/system-business-role/pom.xml @@ -54,6 +54,26 @@ spring-boot-starter-web + + + + cn.stylefeng.roses + cache-api + ${roses.version} + + + cn.stylefeng.roses + cache-sdk-memory + ${roses.version} + true + + + cn.stylefeng.roses + cache-sdk-redis + ${roses.version} + true + + diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/RoleMemoryCache.java b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/cache/RoleMemoryCache.java similarity index 88% rename from kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/RoleMemoryCache.java rename to kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/cache/RoleMemoryCache.java index 3f52f901f..7edfbd020 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/RoleMemoryCache.java +++ b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/cache/RoleMemoryCache.java @@ -22,12 +22,12 @@ * 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns * 6.若您的项目无法满足以上几点,可申请商业授权 */ -package cn.stylefeng.roses.kernel.system.modular.user.cache; +package cn.stylefeng.roses.kernel.system.modular.role.cache; import cn.hutool.cache.impl.TimedCache; import cn.stylefeng.roses.kernel.cache.memory.AbstractMemoryCacheOperator; import cn.stylefeng.roses.kernel.system.api.constants.SystemCachesConstants; -import cn.stylefeng.roses.kernel.system.api.pojo.role.dto.SysRoleDTO; +import cn.stylefeng.roses.kernel.system.modular.role.entity.SysRole; /** * 角色信息的缓存 @@ -35,9 +35,9 @@ import cn.stylefeng.roses.kernel.system.api.pojo.role.dto.SysRoleDTO; * @author fengshuonan * @date 2021/7/29 23:28 */ -public class RoleMemoryCache extends AbstractMemoryCacheOperator { +public class RoleMemoryCache extends AbstractMemoryCacheOperator { - public RoleMemoryCache(TimedCache timedCache) { + public RoleMemoryCache(TimedCache timedCache) { super(timedCache); } diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/RoleRedisCache.java b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/cache/RoleRedisCache.java similarity index 88% rename from kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/RoleRedisCache.java rename to kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/cache/RoleRedisCache.java index 32767fedb..d3e3dbab8 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/RoleRedisCache.java +++ b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/cache/RoleRedisCache.java @@ -22,11 +22,11 @@ * 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns * 6.若您的项目无法满足以上几点,可申请商业授权 */ -package cn.stylefeng.roses.kernel.system.modular.user.cache; +package cn.stylefeng.roses.kernel.system.modular.role.cache; import cn.stylefeng.roses.kernel.cache.redis.AbstractRedisCacheOperator; import cn.stylefeng.roses.kernel.system.api.constants.SystemCachesConstants; -import cn.stylefeng.roses.kernel.system.api.pojo.role.dto.SysRoleDTO; +import cn.stylefeng.roses.kernel.system.modular.role.entity.SysRole; import org.springframework.data.redis.core.RedisTemplate; /** @@ -35,9 +35,9 @@ import org.springframework.data.redis.core.RedisTemplate; * @author fengshuonan * @date 2021/7/29 23:29 */ -public class RoleRedisCache extends AbstractRedisCacheOperator { +public class RoleRedisCache extends AbstractRedisCacheOperator { - public RoleRedisCache(RedisTemplate redisTemplate) { + public RoleRedisCache(RedisTemplate redisTemplate) { super(redisTemplate); } diff --git a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/impl/SysRoleServiceImpl.java b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/impl/SysRoleServiceImpl.java index 8b1efcb1d..2565e59a6 100644 --- a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/impl/SysRoleServiceImpl.java +++ b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/impl/SysRoleServiceImpl.java @@ -32,6 +32,7 @@ import cn.stylefeng.roses.kernel.auth.api.enums.DataScopeTypeEnum; import cn.stylefeng.roses.kernel.auth.api.exception.AuthException; import cn.stylefeng.roses.kernel.auth.api.exception.enums.AuthExceptionEnum; import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo; +import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi; import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; @@ -45,9 +46,6 @@ import cn.stylefeng.roses.kernel.system.api.UserServiceApi; import cn.stylefeng.roses.kernel.system.api.constants.SystemConstants; import cn.stylefeng.roses.kernel.system.api.exception.SystemModularException; import cn.stylefeng.roses.kernel.system.api.exception.enums.role.SysRoleExceptionEnum; -import cn.stylefeng.roses.kernel.system.modular.role.entity.*; -import cn.stylefeng.roses.kernel.system.modular.role.mapper.SysRoleMapper; -import cn.stylefeng.roses.kernel.system.modular.role.service.*; import cn.stylefeng.roses.kernel.system.api.pojo.role.dto.SysRoleDTO; import cn.stylefeng.roses.kernel.system.api.pojo.role.dto.SysRoleMenuButtonDTO; import cn.stylefeng.roses.kernel.system.api.pojo.role.dto.SysRoleMenuDTO; @@ -55,6 +53,9 @@ import cn.stylefeng.roses.kernel.system.api.pojo.role.dto.SysRoleResourceDTO; import cn.stylefeng.roses.kernel.system.api.pojo.role.request.SysRoleMenuButtonRequest; import cn.stylefeng.roses.kernel.system.api.pojo.role.request.SysRoleRequest; import cn.stylefeng.roses.kernel.system.api.util.DataScopeUtil; +import cn.stylefeng.roses.kernel.system.modular.role.entity.*; +import cn.stylefeng.roses.kernel.system.modular.role.mapper.SysRoleMapper; +import cn.stylefeng.roses.kernel.system.modular.role.service.*; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -96,6 +97,9 @@ public class SysRoleServiceImpl extends ServiceImpl impl @Resource private MenuServiceApi menuServiceApi; + @Resource + private CacheOperatorApi roleInfoCacheApi; + @Override public void add(SysRoleRequest sysRoleRequest) { @@ -139,9 +143,13 @@ public class SysRoleServiceImpl extends ServiceImpl impl // 级联删除该角色对应的角色-菜单表关联信息 sysRoleResourceService.deleteRoleResourceListByRoleId(roleId); + + // 删除角色缓存信息 + roleInfoCacheApi.remove(String.valueOf(roleId)); } @Override + @Transactional(rollbackFor = Exception.class) public void edit(SysRoleRequest sysRoleRequest) { SysRole sysRole = this.querySysRole(sysRoleRequest); @@ -159,6 +167,9 @@ public class SysRoleServiceImpl extends ServiceImpl impl sysRole.setStatusFlag(null); this.updateById(sysRole); + + // 删除角色缓存信息 + roleInfoCacheApi.remove(String.valueOf(sysRoleRequest.getRoleId())); } @Override @@ -342,24 +353,13 @@ public class SysRoleServiceImpl extends ServiceImpl impl @Override public List getRolesByIds(List roleIds) { - ArrayList sysRoleResponses = new ArrayList<>(); - - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(SysRole::getRoleId, roleIds); - List sysRoles = this.list(queryWrapper); - - // 角色列表不为空,角色信息转化为SysRoleResponse - if (!sysRoles.isEmpty()) { - for (SysRole sysRole : sysRoles) { - SysRoleDTO sysRoleResponse = new SysRoleDTO(); - BeanUtil.copyProperties(sysRole, sysRoleResponse); - // 填充数据范围类型枚举 - sysRoleResponse.setDataScopeTypeEnum(DataScopeTypeEnum.codeToEnum(sysRole.getDataScopeType())); - sysRoleResponses.add(sysRoleResponse); - } + for (Long roleId : roleIds) { + SysRoleRequest sysRoleRequest = new SysRoleRequest(); + sysRoleRequest.setRoleId(roleId); + SysRoleDTO detail = this.detail(sysRoleRequest); + sysRoleResponses.add(detail); } - return sysRoleResponses; } @@ -446,10 +446,22 @@ public class SysRoleServiceImpl extends ServiceImpl impl * @date 2020/11/5 下午4:12 */ private SysRole querySysRole(SysRoleRequest sysRoleRequest) { + + // 从缓存中获取角色信息 + String key = String.valueOf(sysRoleRequest.getRoleId()); + SysRole sysRoleCache = roleInfoCacheApi.get(key); + if (sysRoleCache != null) { + return sysRoleCache; + } + SysRole sysRole = this.getById(sysRoleRequest.getRoleId()); if (ObjectUtil.isNull(sysRole)) { throw new SystemModularException(SysRoleExceptionEnum.ROLE_NOT_EXIST); } + + // 加入缓存 + roleInfoCacheApi.put(key, sysRole); + return sysRole; } diff --git a/kernel-s-system/system-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/system/starter/GunsUserCacheAutoConfiguration.java b/kernel-s-system/system-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/system/starter/GunsSystemCacheAutoConfiguration.java similarity index 75% rename from kernel-s-system/system-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/system/starter/GunsUserCacheAutoConfiguration.java rename to kernel-s-system/system-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/system/starter/GunsSystemCacheAutoConfiguration.java index 0c7e1d873..525005c05 100644 --- a/kernel-s-system/system-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/system/starter/GunsUserCacheAutoConfiguration.java +++ b/kernel-s-system/system-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/system/starter/GunsSystemCacheAutoConfiguration.java @@ -29,6 +29,8 @@ import cn.hutool.cache.impl.TimedCache; import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi; import cn.stylefeng.roses.kernel.system.api.constants.SystemCachesConstants; import cn.stylefeng.roses.kernel.system.api.pojo.user.SysUserDTO; +import cn.stylefeng.roses.kernel.system.modular.role.cache.RoleMemoryCache; +import cn.stylefeng.roses.kernel.system.modular.role.entity.SysRole; import cn.stylefeng.roses.kernel.system.modular.user.cache.SysUserMemoryCache; import cn.stylefeng.roses.kernel.system.modular.user.cache.UserRoleMemoryCache; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -38,13 +40,13 @@ import org.springframework.context.annotation.Configuration; import java.util.List; /** - * 用户缓存的自动配置 + * 系统管理缓存的自动配置(默认内存缓存) * * @author fengshuonan * @date 2021/2/28 10:29 */ @Configuration -public class GunsUserCacheAutoConfiguration { +public class GunsSystemCacheAutoConfiguration { /** * 用户的缓存,非在线用户缓存,此缓存为了加快查看用户相关操作 @@ -68,8 +70,21 @@ public class GunsUserCacheAutoConfiguration { @Bean @ConditionalOnMissingBean(name = "userRoleCacheApi") public CacheOperatorApi> userRoleCacheApi() { - TimedCache> sysUserTimedCache = CacheUtil.newTimedCache(SystemCachesConstants.USER_CACHE_TIMEOUT_SECONDS * 1000); - return new UserRoleMemoryCache(sysUserTimedCache); + TimedCache> userRoleCache = CacheUtil.newTimedCache(SystemCachesConstants.USER_CACHE_TIMEOUT_SECONDS * 1000); + return new UserRoleMemoryCache(userRoleCache); + } + + /** + * 角色信息对应的缓存 + * + * @author fengshuonan + * @date 2021/7/29 23:00 + */ + @Bean + @ConditionalOnMissingBean(name = "roleInfoCacheApi") + public CacheOperatorApi roleInfoCacheApi() { + TimedCache roleCache = CacheUtil.newTimedCache(SystemCachesConstants.USER_CACHE_TIMEOUT_SECONDS * 1000); + return new RoleMemoryCache(roleCache); } } diff --git a/kernel-s-system/system-spring-boot-starter/src/main/resources/META-INF/spring.factories b/kernel-s-system/system-spring-boot-starter/src/main/resources/META-INF/spring.factories index 8c4e02ba8..b4085758a 100644 --- a/kernel-s-system/system-spring-boot-starter/src/main/resources/META-INF/spring.factories +++ b/kernel-s-system/system-spring-boot-starter/src/main/resources/META-INF/spring.factories @@ -1,3 +1,3 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ - cn.stylefeng.roses.kernel.system.starter.GunsUserCacheAutoConfiguration,\ + cn.stylefeng.roses.kernel.system.starter.GunsSystemCacheAutoConfiguration,\ cn.stylefeng.roses.kernel.system.starter.GunsResourceCacheAutoConfiguration