From c9a3c8b3d265ed20ab2cc0c39ffcb026513c9d4c Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Fri, 14 Jul 2023 22:12:42 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=908.0=E3=80=91=E3=80=90sys=E3=80=91?= =?UTF-8?q?=E3=80=90user=E3=80=91=E6=9B=B4=E6=96=B0=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E7=9A=84=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/modular/user/cache/package-info.java | 1 + .../cache/userrole/UserRoleMemoryCache.java | 26 ++++++ .../cache/userrole/UserRoleRedisCache.java | 26 ++++++ .../userrole/clear/UserRoleClearListener.java | 38 +++++++++ .../modular/user/constants/UserConstants.java | 21 +++++ .../user/service/SysUserRoleService.java | 59 -------------- .../service/impl/SysUserRoleServiceImpl.java | 81 ++++++------------- 7 files changed, 138 insertions(+), 114 deletions(-) create mode 100644 kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/cache/package-info.java create mode 100644 kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/cache/userrole/UserRoleMemoryCache.java create mode 100644 kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/cache/userrole/UserRoleRedisCache.java create mode 100644 kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/cache/userrole/clear/UserRoleClearListener.java create mode 100644 kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/constants/UserConstants.java diff --git a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/cache/package-info.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/cache/package-info.java new file mode 100644 index 000000000..d69a0fdb9 --- /dev/null +++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/cache/package-info.java @@ -0,0 +1 @@ +package cn.stylefeng.roses.kernel.sys.modular.user.cache; \ No newline at end of file diff --git a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/cache/userrole/UserRoleMemoryCache.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/cache/userrole/UserRoleMemoryCache.java new file mode 100644 index 000000000..61d2112e6 --- /dev/null +++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/cache/userrole/UserRoleMemoryCache.java @@ -0,0 +1,26 @@ +package cn.stylefeng.roses.kernel.sys.modular.user.cache.userrole; + +import cn.hutool.cache.impl.TimedCache; +import cn.stylefeng.roses.kernel.cache.memory.AbstractMemoryCacheOperator; +import cn.stylefeng.roses.kernel.sys.modular.user.constants.UserConstants; + +import java.util.List; + +/** + * 用户绑定角色的缓存 + * + * @author fengshuonan + * @since 2023/7/14 22:00 + */ +public class UserRoleMemoryCache extends AbstractMemoryCacheOperator> { + + public UserRoleMemoryCache(TimedCache> timedCache) { + super(timedCache); + } + + @Override + public String getCommonKeyPrefix() { + return UserConstants.USER_ROLE_CACHE_PREFIX; + } + +} \ No newline at end of file diff --git a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/cache/userrole/UserRoleRedisCache.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/cache/userrole/UserRoleRedisCache.java new file mode 100644 index 000000000..47e528fe6 --- /dev/null +++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/cache/userrole/UserRoleRedisCache.java @@ -0,0 +1,26 @@ +package cn.stylefeng.roses.kernel.sys.modular.user.cache.userrole; + +import cn.stylefeng.roses.kernel.cache.redis.AbstractRedisCacheOperator; +import cn.stylefeng.roses.kernel.sys.modular.user.constants.UserConstants; +import org.springframework.data.redis.core.RedisTemplate; + +import java.util.List; + +/** + * 用户绑定角色的缓存 + * + * @author fengshuonan + * @since 2023/7/14 21:58 + */ +public class UserRoleRedisCache extends AbstractRedisCacheOperator> { + + public UserRoleRedisCache(RedisTemplate> redisTemplate) { + super(redisTemplate); + } + + @Override + public String getCommonKeyPrefix() { + return UserConstants.USER_ROLE_CACHE_PREFIX; + } + +} diff --git a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/cache/userrole/clear/UserRoleClearListener.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/cache/userrole/clear/UserRoleClearListener.java new file mode 100644 index 000000000..8603afdc6 --- /dev/null +++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/cache/userrole/clear/UserRoleClearListener.java @@ -0,0 +1,38 @@ +package cn.stylefeng.roses.kernel.sys.modular.user.cache.userrole.clear; + +import cn.hutool.core.util.ObjectUtil; +import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi; +import cn.stylefeng.roses.kernel.event.api.annotation.BusinessListener; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +import static cn.stylefeng.roses.kernel.sys.modular.user.constants.UserConstants.UPDATE_USER_ROLE_EVENT; + +/** + * 监听用户绑定角色的事件,清空相关缓存 + * + * @author fengshuonan + * @since 2023/7/14 22:05 + */ +@Service +public class UserRoleClearListener { + + @Resource(name = "userRoleCache") + private CacheOperatorApi> userRoleCache; + + /** + * 监听更新用户角色 + * + * @author fengshuonan + * @since 2023/7/14 22:10 + */ + @BusinessListener(businessCode = UPDATE_USER_ROLE_EVENT) + public void updateUserRole(Long userId) { + if (ObjectUtil.isNotEmpty(userId)) { + userRoleCache.remove(String.valueOf(userId)); + } + } + +} diff --git a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/constants/UserConstants.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/constants/UserConstants.java new file mode 100644 index 000000000..dc3da8f82 --- /dev/null +++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/constants/UserConstants.java @@ -0,0 +1,21 @@ +package cn.stylefeng.roses.kernel.sys.modular.user.constants; + +/** + * 用户相关的常量 + * + * @author fengshuonan + * @since 2023/7/14 22:06 + */ +public interface UserConstants { + + /** + * 缓存前缀:用户绑定的角色 + */ + String USER_ROLE_CACHE_PREFIX = "SYS:USER_ROLE:"; + + /** + * 修改用户绑定角色的事件 + */ + String UPDATE_USER_ROLE_EVENT = "UPDATE_USER_ROLE_EVENT"; + +} diff --git a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysUserRoleService.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysUserRoleService.java index 5edb093f2..07f82f917 100644 --- a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysUserRoleService.java +++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/SysUserRoleService.java @@ -1,13 +1,10 @@ package cn.stylefeng.roses.kernel.sys.modular.user.service; -import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; import cn.stylefeng.roses.kernel.sys.api.SysUserRoleServiceApi; import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUserRole; import cn.stylefeng.roses.kernel.sys.modular.user.pojo.request.SysUserRoleRequest; import com.baomidou.mybatisplus.extension.service.IService; -import java.util.List; - /** * 用户角色关联 服务类 * @@ -16,62 +13,6 @@ import java.util.List; */ public interface SysUserRoleService extends IService, SysUserRoleServiceApi { - /** - * 新增 - * - * @param sysUserRoleRequest 请求参数 - * @author fengshuonan - * @date 2023/06/10 21:26 - */ - void add(SysUserRoleRequest sysUserRoleRequest); - - /** - * 删除 - * - * @param sysUserRoleRequest 请求参数 - * @author fengshuonan - * @date 2023/06/10 21:26 - */ - void del(SysUserRoleRequest sysUserRoleRequest); - - /** - * 编辑 - * - * @param sysUserRoleRequest 请求参数 - * @author fengshuonan - * @date 2023/06/10 21:26 - */ - void edit(SysUserRoleRequest sysUserRoleRequest); - - /** - * 查询详情 - * - * @param sysUserRoleRequest 请求参数 - * @author fengshuonan - * @date 2023/06/10 21:26 - */ - SysUserRole detail(SysUserRoleRequest sysUserRoleRequest); - - /** - * 获取列表 - * - * @param sysUserRoleRequest 请求参数 - * @return List 返回结果 - * @author fengshuonan - * @date 2023/06/10 21:26 - */ - List findList(SysUserRoleRequest sysUserRoleRequest); - - /** - * 获取列表(带分页) - * - * @param sysUserRoleRequest 请求参数 - * @return PageResult 返回结果 - * @author fengshuonan - * @date 2023/06/10 21:26 - */ - PageResult findPage(SysUserRoleRequest sysUserRoleRequest); - /** * 绑定用户角色 * diff --git a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserRoleServiceImpl.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserRoleServiceImpl.java index 4540ae1f5..db2df5241 100644 --- a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserRoleServiceImpl.java +++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserRoleServiceImpl.java @@ -1,23 +1,19 @@ package cn.stylefeng.roses.kernel.sys.modular.user.service.impl; -import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; -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; +import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi; +import cn.stylefeng.roses.kernel.event.sdk.publish.BusinessEventPublisher; import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException; import cn.stylefeng.roses.kernel.sys.api.SysRoleServiceApi; import cn.stylefeng.roses.kernel.sys.api.callback.RemoveRoleCallbackApi; import cn.stylefeng.roses.kernel.sys.api.callback.RemoveUserCallbackApi; import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUserRole; import cn.stylefeng.roses.kernel.sys.modular.user.enums.SysUserExceptionEnum; -import cn.stylefeng.roses.kernel.sys.modular.user.enums.SysUserRoleExceptionEnum; import cn.stylefeng.roses.kernel.sys.modular.user.mapper.SysUserRoleMapper; import cn.stylefeng.roses.kernel.sys.modular.user.pojo.request.SysUserRoleRequest; import cn.stylefeng.roses.kernel.sys.modular.user.service.SysUserRoleService; import cn.stylefeng.roses.kernel.sys.modular.user.service.SysUserService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -28,6 +24,8 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import static cn.stylefeng.roses.kernel.sys.modular.user.constants.UserConstants.UPDATE_USER_ROLE_EVENT; + /** * 用户角色关联业务实现层 * @@ -44,37 +42,8 @@ public class SysUserRoleServiceImpl extends ServiceImpl findPage(SysUserRoleRequest sysUserRoleRequest) { - LambdaQueryWrapper wrapper = createWrapper(sysUserRoleRequest); - Page sysRolePage = this.page(PageFactory.defaultPage(), wrapper); - return PageResultFactory.createPageResult(sysRolePage); - } + @Resource(name = "userRoleCache") + private CacheOperatorApi> userRoleCache; @Override @Transactional(rollbackFor = Exception.class) @@ -100,6 +69,10 @@ public class SysUserRoleServiceImpl extends ServiceImpl findList(SysUserRoleRequest sysUserRoleRequest) { - LambdaQueryWrapper wrapper = this.createWrapper(sysUserRoleRequest); - return this.list(wrapper); + // 发布修改用户绑定角色的事件 + BusinessEventPublisher.publishEvent(UPDATE_USER_ROLE_EVENT, userId); + } @Override @@ -151,26 +122,26 @@ public class SysUserRoleServiceImpl extends ServiceImpl(); } + // 先从缓存查找用户的角色 + List cachedRoleIds = userRoleCache.get(userId.toString()); + if (cachedRoleIds != null) { + return cachedRoleIds; + } + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(SysUserRole::getUserId, userId); wrapper.select(SysUserRole::getRoleId); List sysUserRoleList = this.list(wrapper); - return sysUserRoleList.stream().map(SysUserRole::getRoleId).collect(Collectors.toList()); - } + List userRoleQueryResult = sysUserRoleList.stream().map(SysUserRole::getRoleId).collect(Collectors.toList()); - /** - * 获取信息 - * - * @author fengshuonan - * @date 2023/06/10 21:26 - */ - private SysUserRole querySysUserRole(SysUserRoleRequest sysUserRoleRequest) { - SysUserRole sysUserRole = this.getById(sysUserRoleRequest.getUserRoleId()); - if (ObjectUtil.isEmpty(sysUserRole)) { - throw new ServiceException(SysUserRoleExceptionEnum.SYS_USER_ROLE_NOT_EXISTED); + // 查询结果缓存起来 + if (ObjectUtil.isNotEmpty(userRoleQueryResult)) { + userRoleCache.put(userId.toString(), userRoleQueryResult); + return userRoleQueryResult; } - return sysUserRole; + + return userRoleQueryResult; } /**