From 93796d3db0f8574bbe7eb637dfe2d28589dfc965 Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Sun, 28 Feb 2021 10:46:45 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=907.0.1=E3=80=91=E3=80=90user=E3=80=91?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0user=E7=BC=93=E5=AD=98=EF=BC=8C=E5=8A=A0?= =?UTF-8?q?=E5=BF=AB=E8=AE=BF=E9=97=AE=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/api/constants/SystemConstants.java | 10 ++++ kernel-s-system/system-business-user/pom.xml | 20 ++++++++ .../user/cache/SysUserMemoryCache.java | 25 ++++++++++ .../modular/user/cache/SysUserRedisCache.java | 25 ++++++++++ .../user/service/impl/SysUserServiceImpl.java | 46 ++++++++++++++++++- .../system-spring-boot-starter/pom.xml | 6 +++ .../GunsUserCacheAutoConfiguration.java | 35 ++++++++++++++ .../main/resources/META-INF/spring.factories | 2 + 8 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/SysUserMemoryCache.java create mode 100644 kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/SysUserRedisCache.java create mode 100644 kernel-s-system/system-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/system/starter/GunsUserCacheAutoConfiguration.java create mode 100644 kernel-s-system/system-spring-boot-starter/src/main/resources/META-INF/spring.factories diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/constants/SystemConstants.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/constants/SystemConstants.java index 9c6a9c2b3..3bfe951f2 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/constants/SystemConstants.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/constants/SystemConstants.java @@ -38,4 +38,14 @@ public interface SystemConstants { */ String DEFAULT_SYSTEM_NAME = "Guns快速开发平台"; + /** + * 用户缓存的前缀 + */ + String USER_CACHE_PREFIX = "user:"; + + /** + * 用户缓存过期时间(1小时) + */ + Long USER_CACHE_TIMEOUT_SECONDS = 3600L; + } diff --git a/kernel-s-system/system-business-user/pom.xml b/kernel-s-system/system-business-user/pom.xml index 8820961f9..bf1d7cce0 100644 --- a/kernel-s-system/system-business-user/pom.xml +++ b/kernel-s-system/system-business-user/pom.xml @@ -62,6 +62,26 @@ 7.0.1 + + + + cn.stylefeng.roses + cache-api + 7.0.1 + + + cn.stylefeng.roses + cache-sdk-memory + 7.0.1 + true + + + cn.stylefeng.roses + cache-sdk-redis + 7.0.1 + true + + diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/SysUserMemoryCache.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/SysUserMemoryCache.java new file mode 100644 index 000000000..9a6df5a32 --- /dev/null +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/SysUserMemoryCache.java @@ -0,0 +1,25 @@ +package cn.stylefeng.roses.kernel.system.modular.user.cache; + +import cn.hutool.cache.impl.TimedCache; +import cn.stylefeng.roses.kernel.cache.memory.AbstractMemoryCacheOperator; +import cn.stylefeng.roses.kernel.system.api.constants.SystemConstants; +import cn.stylefeng.roses.kernel.system.api.pojo.user.SysUserDTO; + +/** + * 用户的缓存 + * + * @author fengshuonan + * @date 2021/2/28 10:23 + */ +public class SysUserMemoryCache extends AbstractMemoryCacheOperator { + + public SysUserMemoryCache(TimedCache timedCache) { + super(timedCache); + } + + @Override + public String getCommonKeyPrefix() { + return SystemConstants.USER_CACHE_PREFIX; + } + +} diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/SysUserRedisCache.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/SysUserRedisCache.java new file mode 100644 index 000000000..06c523e98 --- /dev/null +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/cache/SysUserRedisCache.java @@ -0,0 +1,25 @@ +package cn.stylefeng.roses.kernel.system.modular.user.cache; + +import cn.stylefeng.roses.kernel.cache.redis.AbstractRedisCacheOperator; +import cn.stylefeng.roses.kernel.system.api.constants.SystemConstants; +import cn.stylefeng.roses.kernel.system.api.pojo.user.SysUserDTO; +import org.springframework.data.redis.core.RedisTemplate; + +/** + * 用户的缓存 + * + * @author fengshuonan + * @date 2021/2/28 10:23 + */ +public class SysUserRedisCache extends AbstractRedisCacheOperator { + + public SysUserRedisCache(RedisTemplate redisTemplate) { + super(redisTemplate); + } + + @Override + public String getCommonKeyPrefix() { + return SystemConstants.USER_CACHE_PREFIX; + } + +} diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java index f848c12d8..54b268dd4 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java @@ -11,6 +11,7 @@ import cn.stylefeng.roses.kernel.auth.api.exception.enums.AuthExceptionEnum; import cn.stylefeng.roses.kernel.auth.api.password.PasswordStoredEncryptApi; import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser; import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleUserInfo; +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; @@ -109,6 +110,9 @@ public class SysUserServiceImpl extends ServiceImpl impl @Resource private OrganizationServiceApi organizationServiceApi; + @Resource + private CacheOperatorApi sysUserCacheOperatorApi; + @Override public void register(SysUserRequest sysUserRequest) { SysUser sysUser = new SysUser(); @@ -175,6 +179,9 @@ public class SysUserServiceImpl extends ServiceImpl impl // 删除该用户对应的用户-数据范围表关联信息 sysUserDataScopeService.delByUserId(userId); + + // 清除缓存中的用户信息 + sysUserCacheOperatorApi.remove(String.valueOf(userId)); } @Override @@ -199,6 +206,9 @@ public class SysUserServiceImpl extends ServiceImpl impl // 更新用户员工信息 sysUserOrgService.edit(sysUser.getUserId(), sysUserRequest.getOrgId(), sysUserRequest.getPositionId()); + + // 清除缓存中的用户信息 + sysUserCacheOperatorApi.remove(String.valueOf(sysUser.getUserId())); } @Override @@ -209,6 +219,9 @@ public class SysUserServiceImpl extends ServiceImpl impl SysUserCreateFactory.fillUpdateInfo(sysUserRequest, sysUser); this.updateById(sysUser); + + // 清除缓存中的用户信息 + sysUserCacheOperatorApi.remove(String.valueOf(sysUser.getUserId())); } @Override @@ -236,6 +249,9 @@ public class SysUserServiceImpl extends ServiceImpl impl log.error(SysUserExceptionEnum.UPDATE_USER_STATUS_ERROR.getUserTip()); throw new SystemModularException(SysUserExceptionEnum.UPDATE_USER_STATUS_ERROR); } + + // 清除缓存中的用户信息 + sysUserCacheOperatorApi.remove(String.valueOf(sysUser.getUserId())); } @Override @@ -291,6 +307,9 @@ public class SysUserServiceImpl extends ServiceImpl impl SimpleUserInfo simpleUserInfo = loginUser.getSimpleUserInfo(); simpleUserInfo.setAvatar(fileId); sessionManagerApi.updateSession(LoginContext.me().getToken(), loginUser); + + // 清除缓存中的用户信息 + sysUserCacheOperatorApi.remove(String.valueOf(sysUser.getUserId())); } @Override @@ -569,9 +588,18 @@ public class SysUserServiceImpl extends ServiceImpl impl @Override public SysUserDTO getUserInfoByUserId(Long userId) { + + // 从缓存查询用户 + SysUserDTO sysUserDTO = sysUserCacheOperatorApi.get(String.valueOf(userId)); + if (sysUserDTO != null) { + return sysUserDTO; + } + SysUser sysUser = this.getById(userId); if (ObjectUtil.isNotEmpty(sysUser)) { - return BeanUtil.copyProperties(sysUser, SysUserDTO.class); + SysUserDTO result = BeanUtil.copyProperties(sysUser, SysUserDTO.class); + sysUserCacheOperatorApi.put(String.valueOf(userId), result); + return result; } return null; } @@ -618,10 +646,26 @@ public class SysUserServiceImpl extends ServiceImpl impl * @date 2020/3/26 9:54 */ private SysUser querySysUser(SysUserRequest sysUserRequest) { + + // 先从缓存中获取用户信息 + String userIdKey = String.valueOf(sysUserRequest.getUserId()); + SysUserDTO sysUserDTO = sysUserCacheOperatorApi.get(userIdKey); + if (sysUserDTO != null) { + SysUser tempUser = new SysUser(); + BeanUtil.copyProperties(sysUserDTO, tempUser); + return tempUser; + } + SysUser sysUser = this.getById(sysUserRequest.getUserId()); if (ObjectUtil.isNull(sysUser)) { throw new SystemModularException(SysUserExceptionEnum.USER_NOT_EXIST, sysUserRequest.getUserId()); } + + // 放入缓存 + SysUserDTO sysUserDTOCache = new SysUserDTO(); + BeanUtil.copyProperties(sysUser, sysUserDTOCache); + sysUserCacheOperatorApi.put(userIdKey, sysUserDTOCache); + return sysUser; } diff --git a/kernel-s-system/system-spring-boot-starter/pom.xml b/kernel-s-system/system-spring-boot-starter/pom.xml index dcc8f1f2a..c41fd0973 100644 --- a/kernel-s-system/system-spring-boot-starter/pom.xml +++ b/kernel-s-system/system-spring-boot-starter/pom.xml @@ -53,11 +53,17 @@ + cn.stylefeng.roses system-business-user 7.0.1 + + cn.stylefeng.roses + cache-sdk-memory + 7.0.1 + 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/GunsUserCacheAutoConfiguration.java new file mode 100644 index 000000000..f19bc28a8 --- /dev/null +++ b/kernel-s-system/system-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/system/starter/GunsUserCacheAutoConfiguration.java @@ -0,0 +1,35 @@ +package cn.stylefeng.roses.kernel.system.starter; + +import cn.hutool.cache.CacheUtil; +import cn.hutool.cache.impl.TimedCache; +import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi; +import cn.stylefeng.roses.kernel.system.api.constants.SystemConstants; +import cn.stylefeng.roses.kernel.system.api.pojo.user.SysUserDTO; +import cn.stylefeng.roses.kernel.system.modular.user.cache.SysUserMemoryCache; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 用户缓存的自动配置 + * + * @author fengshuonan + * @date 2021/2/28 10:29 + */ +@Configuration +public class GunsUserCacheAutoConfiguration { + + /** + * 用户的缓存 + * + * @author fengshuonan + * @date 2021/2/28 10:30 + */ + @Bean + @ConditionalOnMissingBean(name = "sysUserCacheOperatorApi") + public CacheOperatorApi sysUserCacheOperatorApi() { + TimedCache sysUserTimedCache = CacheUtil.newTimedCache(SystemConstants.USER_CACHE_TIMEOUT_SECONDS * 1000); + return new SysUserMemoryCache(sysUserTimedCache); + } + +} 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 new file mode 100644 index 000000000..c00e2a177 --- /dev/null +++ b/kernel-s-system/system-spring-boot-starter/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + cn.stylefeng.roses.kernel.system.starter.GunsUserCacheAutoConfiguration