From aba6d1e358c4c9f4563b1af11e009dac5cbe765d Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Sat, 15 Jul 2023 00:38:26 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=908.0=E3=80=91=E3=80=90sys=E3=80=91?= =?UTF-8?q?=E3=80=90menu=E3=80=91=E6=9B=B4=E6=96=B0=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E7=9A=84=E7=BC=93=E5=AD=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modular/menu/cache/MenuClearListener.java | 13 ++++++ .../cache/menucode/MenuCodeMemoryCache.java | 2 + .../cache/menucode/MenuCodeRedisCache.java | 2 + .../modular/menu/constants/MenuConstants.java | 5 +++ .../impl/SysMenuOptionsServiceImpl.java | 42 +++++++++++++++---- 5 files changed, 55 insertions(+), 9 deletions(-) diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/cache/MenuClearListener.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/cache/MenuClearListener.java index 2b4b39d7e..9bae2027b 100644 --- a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/cache/MenuClearListener.java +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/cache/MenuClearListener.java @@ -33,4 +33,17 @@ public class MenuClearListener { } } + /** + * 监听菜单功能的更新 + * + * @author fengshuonan + * @since 2023/7/15 0:37 + */ + @BusinessListener(businessCode = MenuConstants.MENU_OPTIONS_UPDATE_EVENT) + public void updateMenuOptionsCodeCache(Long optionsId) { + if (ObjectUtil.isNotEmpty(optionsId)) { + menuCodeCache.remove(optionsId.toString()); + } + } + } diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/cache/menucode/MenuCodeMemoryCache.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/cache/menucode/MenuCodeMemoryCache.java index b53217144..5894e3505 100644 --- a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/cache/menucode/MenuCodeMemoryCache.java +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/cache/menucode/MenuCodeMemoryCache.java @@ -6,6 +6,8 @@ import cn.stylefeng.roses.kernel.sys.modular.menu.constants.MenuConstants; /** * 菜单编码的缓存 + *

+ * 同时用在,菜单功能编码缓存 * * @author fengshuonan * @since 2023/7/15 0:08 diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/cache/menucode/MenuCodeRedisCache.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/cache/menucode/MenuCodeRedisCache.java index fb592e294..d8dc9b774 100644 --- a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/cache/menucode/MenuCodeRedisCache.java +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/cache/menucode/MenuCodeRedisCache.java @@ -6,6 +6,8 @@ import org.springframework.data.redis.core.RedisTemplate; /** * 菜单编码的缓存 + *

+ * 同时用在,菜单功能编码缓存 * * @author fengshuonan * @since 2023/7/15 0:11 diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/constants/MenuConstants.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/constants/MenuConstants.java index 871abbb57..5bcdec87f 100644 --- a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/constants/MenuConstants.java +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/constants/MenuConstants.java @@ -18,4 +18,9 @@ public interface MenuConstants { */ String MENU_UPDATE_EVENT = "MENU_UPDATE_EVENT"; + /** + * 菜单功能更新的事件 + */ + String MENU_OPTIONS_UPDATE_EVENT = "MENU_OPTIONS_UPDATE_EVENT"; + } diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuOptionsServiceImpl.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuOptionsServiceImpl.java index 1c9547a4e..4ebefec80 100644 --- a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuOptionsServiceImpl.java +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuOptionsServiceImpl.java @@ -3,11 +3,13 @@ package cn.stylefeng.roses.kernel.sys.modular.menu.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.ObjectUtil; +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; import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException; import cn.stylefeng.roses.kernel.sys.api.callback.RemoveMenuCallbackApi; +import cn.stylefeng.roses.kernel.sys.api.constants.SysConstants; import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenuOptions; import cn.stylefeng.roses.kernel.sys.modular.menu.enums.SysMenuOptionsExceptionEnum; import cn.stylefeng.roses.kernel.sys.modular.menu.factory.MenuOptionsValidateFactory; @@ -27,7 +29,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; /** * 菜单下的功能操作业务实现层 @@ -45,6 +46,9 @@ public class SysMenuOptionsServiceImpl extends ServiceImpl menuCodeCache; + @Override public void add(SysMenuOptionsRequest sysMenuOptionsRequest) { @@ -111,20 +115,40 @@ public class SysMenuOptionsServiceImpl extends ServiceImpl getOptionsCodeList(List optionsIdList) { + List result = new ArrayList<>(); + if (ObjectUtil.isEmpty(optionsIdList)) { - return new ArrayList<>(); + return result; } - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(SysMenuOptions::getMenuOptionId, optionsIdList); - queryWrapper.select(SysMenuOptions::getOptionCode); - List sysMenuOptionsList = this.list(queryWrapper); + for (Long optionsId : optionsIdList) { - if (ObjectUtil.isEmpty(sysMenuOptionsList)) { - return new ArrayList<>(); + String optionsIdKey = optionsId.toString(); + + // 先从缓存获取是否有对应的编码 + String cachedCode = menuCodeCache.get(optionsIdKey); + + if (ObjectUtil.isNotEmpty(cachedCode)) { + result.add(cachedCode); + continue; + } + + // 缓存没有,从数据库查询功能的编码 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysMenuOptions::getMenuOptionId, optionsId); + queryWrapper.select(SysMenuOptions::getOptionCode); + SysMenuOptions sysMenuOptions = this.getOne(queryWrapper, false); + + if (sysMenuOptions != null) { + String optionCodeQueryResult = sysMenuOptions.getOptionCode(); + result.add(optionCodeQueryResult); + + // 添加到缓存中一份 + menuCodeCache.put(optionsIdKey, optionCodeQueryResult, SysConstants.DEFAULT_SYS_CACHE_TIMEOUT_SECONDS); + } } - return sysMenuOptionsList.stream().map(SysMenuOptions::getOptionCode).collect(Collectors.toList()); + return result; } @Override