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