From 74e075b4d3dfe141f2af1c540141affd902f3f19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Mon, 15 Aug 2022 10:59:20 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=20spring-cache=20=E6=B3=A8=E8=A7=A3=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/listener/UserActionListener.java | 19 +++-- .../common/oss/constant/OssConstant.java | 14 +--- .../ruoyi/common/oss/factory/OssFactory.java | 12 +-- .../ruoyi/common/redis/utils/CacheUtils.java | 75 +++++++++++++++++++ .../resource/controller/SysOssController.java | 2 +- .../resource/service/ISysOssService.java | 2 +- .../service/impl/SysOssConfigServiceImpl.java | 30 +++----- .../service/impl/SysOssServiceImpl.java | 19 ++--- .../controller/SysConfigController.java | 9 ++- .../controller/SysDictDataController.java | 6 +- .../controller/SysDictTypeController.java | 6 +- .../controller/SysUserOnlineController.java | 6 +- .../system/service/ISysConfigService.java | 4 +- .../system/service/ISysDictDataService.java | 4 +- .../system/service/ISysDictTypeService.java | 4 +- .../service/impl/SysConfigServiceImpl.java | 47 +++++------- .../service/impl/SysDictDataServiceImpl.java | 24 +++--- .../service/impl/SysDictTypeServiceImpl.java | 43 ++++++----- 18 files changed, 189 insertions(+), 137 deletions(-) create mode 100644 ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/utils/CacheUtils.java diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/listener/UserActionListener.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/listener/UserActionListener.java index 39fad0ad2..c434eca4f 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/listener/UserActionListener.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/listener/UserActionListener.java @@ -6,11 +6,11 @@ import cn.dev33.satoken.stp.SaLoginModel; import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.useragent.UserAgent; import cn.hutool.http.useragent.UserAgentUtil; -import com.ruoyi.common.core.constant.CacheConstants; +import com.ruoyi.common.core.constant.CacheNames; import com.ruoyi.common.core.enums.UserType; import com.ruoyi.common.core.utils.ServletUtils; import com.ruoyi.common.core.utils.ip.AddressUtils; -import com.ruoyi.common.redis.utils.RedisUtils; +import com.ruoyi.common.redis.utils.CacheUtils; import com.ruoyi.common.satoken.utils.LoginHelper; import com.ruoyi.system.api.domain.SysUserOnline; import com.ruoyi.system.api.model.LoginUser; @@ -18,8 +18,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import java.time.Duration; - /** * 用户行为 侦听器的实现 * @@ -53,7 +51,12 @@ public class UserActionListener implements SaTokenListener { if (ObjectUtil.isNotNull(user.getDeptName())) { userOnline.setDeptName(user.getDeptName()); } - RedisUtils.setCacheObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue, userOnline, Duration.ofSeconds(tokenConfig.getTimeout())); + String cacheNames = CacheNames.ONLINE_TOKEN; + if (tokenConfig.getTimeout() > 0) { + // 增加 ttl 过期时间 单位秒 + cacheNames = CacheNames.ONLINE_TOKEN + "#" + tokenConfig.getTimeout() + "s"; + } + CacheUtils.put(cacheNames, tokenValue, userOnline); log.info("user doLogin, useId:{}, token:{}", loginId, tokenValue); } else if (userType == UserType.APP_USER) { // app端 自行根据业务编写 @@ -65,7 +68,7 @@ public class UserActionListener implements SaTokenListener { */ @Override public void doLogout(String loginType, Object loginId, String tokenValue) { - RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue); + CacheUtils.evict(CacheNames.ONLINE_TOKEN, tokenValue); log.info("user doLogout, useId:{}, token:{}", loginId, tokenValue); } @@ -74,7 +77,7 @@ public class UserActionListener implements SaTokenListener { */ @Override public void doKickout(String loginType, Object loginId, String tokenValue) { - RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue); + CacheUtils.evict(CacheNames.ONLINE_TOKEN, tokenValue); log.info("user doLogoutByLoginId, useId:{}, token:{}", loginId, tokenValue); } @@ -83,7 +86,7 @@ public class UserActionListener implements SaTokenListener { */ @Override public void doReplaced(String loginType, Object loginId, String tokenValue) { - RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue); + CacheUtils.evict(CacheNames.ONLINE_TOKEN, tokenValue); log.info("user doReplaced, useId:{}, token:{}", loginId, tokenValue); } diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/constant/OssConstant.java b/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/constant/OssConstant.java index 8566ec58c..830c72699 100644 --- a/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/constant/OssConstant.java +++ b/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/constant/OssConstant.java @@ -11,19 +11,9 @@ import java.util.List; public interface OssConstant { /** - * OSS模块KEY + * 默认配置KEY */ - String SYS_OSS_KEY = "sys_oss:"; - - /** - * 对象存储配置KEY - */ - String OSS_CONFIG_KEY = "OssConfig"; - - /** - * 缓存配置KEY - */ - String CACHE_CONFIG_KEY = SYS_OSS_KEY + OSS_CONFIG_KEY; + String DEFAULT_CONFIG_KEY = "sys_oss:default_config"; /** * 预览列表资源开关Key diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/factory/OssFactory.java b/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/factory/OssFactory.java index c609ced31..a47e94959 100644 --- a/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/factory/OssFactory.java +++ b/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/factory/OssFactory.java @@ -1,11 +1,13 @@ package com.ruoyi.common.oss.factory; +import com.ruoyi.common.core.constant.CacheNames; import com.ruoyi.common.core.utils.JsonUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.oss.constant.OssConstant; import com.ruoyi.common.oss.core.OssClient; import com.ruoyi.common.oss.exception.OssException; import com.ruoyi.common.oss.properties.OssProperties; +import com.ruoyi.common.redis.utils.CacheUtils; import com.ruoyi.common.redis.utils.RedisUtils; import lombok.extern.slf4j.Slf4j; @@ -27,7 +29,7 @@ public class OssFactory { */ public static void init() { log.info("初始化OSS工厂"); - RedisUtils.subscribe(OssConstant.CACHE_CONFIG_KEY, String.class, configKey -> { + RedisUtils.subscribe(OssConstant.DEFAULT_CONFIG_KEY, String.class, configKey -> { OssClient client = getClient(configKey); // 未初始化不处理 if (client != null) { @@ -42,7 +44,7 @@ public class OssFactory { */ public static OssClient instance() { // 获取redis 默认类型 - String configKey = RedisUtils.getCacheObject(OssConstant.CACHE_CONFIG_KEY); + String configKey = RedisUtils.getCacheObject(OssConstant.DEFAULT_CONFIG_KEY); if (StringUtils.isEmpty(configKey)) { throw new OssException("文件存储服务类型无法找到!"); } @@ -62,11 +64,11 @@ public class OssFactory { } private static void refresh(String configKey) { - Object json = RedisUtils.getCacheObject(OssConstant.SYS_OSS_KEY + configKey); - OssProperties properties = JsonUtils.parseObject(json.toString(), OssProperties.class); - if (properties == null) { + String json = CacheUtils.get(CacheNames.SYS_OSS_CONFIG, configKey); + if (json == null) { throw new OssException("系统异常, '" + configKey + "'配置信息不存在!"); } + OssProperties properties = JsonUtils.parseObject(json, OssProperties.class); CLIENT_CACHE.put(configKey, new OssClient(configKey, properties)); } diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/utils/CacheUtils.java b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/utils/CacheUtils.java new file mode 100644 index 000000000..e953d03a8 --- /dev/null +++ b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/utils/CacheUtils.java @@ -0,0 +1,75 @@ +package com.ruoyi.common.redis.utils; + +import com.ruoyi.common.core.utils.SpringUtils; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.redisson.api.RMap; +import org.springframework.cache.Cache; +import org.springframework.cache.CacheManager; + +import java.util.Set; + +/** + * 缓存操作工具类 {@link } + * + * @author Michelle.Chung + * @date 2022/8/13 + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@SuppressWarnings(value = {"unchecked"}) +public class CacheUtils { + + private static final CacheManager CACHE_MANAGER = SpringUtils.getBean(CacheManager.class); + + /** + * 获取缓存组内所有的KEY + * + * @param cacheNames 缓存组名称 + */ + public static Set keys(String cacheNames) { + RMap rmap = (RMap) CACHE_MANAGER.getCache(cacheNames).getNativeCache(); + return rmap.keySet(); + } + + /** + * 获取缓存值 + * + * @param cacheNames 缓存组名称 + * @param key 缓存key + */ + public static T get(String cacheNames, Object key) { + Cache.ValueWrapper wrapper = CACHE_MANAGER.getCache(cacheNames).get(key); + return wrapper != null ? (T) wrapper.get() : null; + } + + /** + * 保存缓存值 + * + * @param cacheNames 缓存组名称 + * @param key 缓存key + * @param value 缓存值 + */ + public static void put(String cacheNames, Object key, Object value) { + CACHE_MANAGER.getCache(cacheNames).put(key, value); + } + + /** + * 删除缓存值 + * + * @param cacheNames 缓存组名称 + * @param key 缓存key + */ + public static void evict(String cacheNames, Object key) { + CACHE_MANAGER.getCache(cacheNames).evict(key); + } + + /** + * 清空缓存值 + * + * @param cacheNames 缓存组名称 + */ + public static void clear(String cacheNames) { + CACHE_MANAGER.getCache(cacheNames).clear(); + } + +} diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/controller/SysOssController.java b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/controller/SysOssController.java index 80148d61b..724e160ce 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/controller/SysOssController.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/controller/SysOssController.java @@ -95,7 +95,7 @@ public class SysOssController extends BaseController { @SaCheckPermission("system:oss:download") @GetMapping("/download/{ossId}") public void download(@PathVariable Long ossId, HttpServletResponse response) throws IOException { - SysOss sysOss = iSysOssService.getById(ossId); + SysOssVo sysOss = iSysOssService.getById(ossId); if (ObjectUtil.isNull(sysOss)) { throw new ServiceException("文件数据不存在!"); } diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/ISysOssService.java b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/ISysOssService.java index 2cfdcad10..cbac3e152 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/ISysOssService.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/ISysOssService.java @@ -21,7 +21,7 @@ public interface ISysOssService { List listByIds(Collection ossIds); - SysOss getById(Long ossId); + SysOssVo getById(Long ossId); SysOss upload(MultipartFile file); diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssConfigServiceImpl.java b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssConfigServiceImpl.java index c8d0bf57e..1178503e8 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssConfigServiceImpl.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssConfigServiceImpl.java @@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.google.common.collect.Lists; +import com.ruoyi.common.core.constant.CacheNames; import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.JsonUtils; @@ -16,6 +16,7 @@ import com.ruoyi.common.mybatis.core.page.PageQuery; import com.ruoyi.common.mybatis.core.page.TableDataInfo; import com.ruoyi.common.oss.constant.OssConstant; import com.ruoyi.common.oss.factory.OssFactory; +import com.ruoyi.common.redis.utils.CacheUtils; import com.ruoyi.common.redis.utils.RedisUtils; import com.ruoyi.resource.domain.SysOssConfig; import com.ruoyi.resource.domain.bo.SysOssConfigBo; @@ -54,7 +55,7 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService { for (SysOssConfig config : list) { String configKey = config.getConfigKey(); if ("0".equals(config.getStatus())) { - RedisUtils.setCacheObject(OssConstant.CACHE_CONFIG_KEY, configKey); + RedisUtils.setCacheObject(OssConstant.DEFAULT_CONFIG_KEY, configKey); } setConfigCache(true, config); } @@ -120,16 +121,15 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService { throw new ServiceException("系统内置, 不可删除!"); } } - List list = Lists.newArrayList(); + List list = CollUtil.newArrayList(); for (Long configId : ids) { SysOssConfig config = baseMapper.selectById(configId); list.add(config); } boolean flag = baseMapper.deleteBatchIds(ids) > 0; if (flag) { - list.forEach(sysOssConfig -> { - RedisUtils.deleteObject(getCacheKey(sysOssConfig.getConfigKey())); - }); + list.forEach(sysOssConfig -> + CacheUtils.evict(CacheNames.SYS_OSS_CONFIG, sysOssConfig.getConfigKey())); } return flag; } @@ -159,21 +159,11 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService { .set(SysOssConfig::getStatus, "1")); row += baseMapper.updateById(sysOssConfig); if (row > 0) { - RedisUtils.setCacheObject(OssConstant.CACHE_CONFIG_KEY, sysOssConfig.getConfigKey()); + RedisUtils.setCacheObject(OssConstant.DEFAULT_CONFIG_KEY, sysOssConfig.getConfigKey()); } return row; } - /** - * 设置cache key - * - * @param configKey 参数键 - * @return 缓存键key - */ - private String getCacheKey(String configKey) { - return OssConstant.SYS_OSS_KEY + configKey; - } - /** * 如果操作成功 则更新缓存 * @@ -183,10 +173,8 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService { */ private boolean setConfigCache(boolean flag, SysOssConfig config) { if (flag) { - RedisUtils.setCacheObject( - getCacheKey(config.getConfigKey()), - JsonUtils.toJsonString(config)); - RedisUtils.publish(OssConstant.CACHE_CONFIG_KEY, config.getConfigKey(), msg -> { + CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config)); + RedisUtils.publish(OssConstant.DEFAULT_CONFIG_KEY, config.getConfigKey(), msg -> { log.info("发布刷新OSS配置 => " + msg); }); } diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssServiceImpl.java b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssServiceImpl.java index eb14fe685..72fc713cf 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssServiceImpl.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssServiceImpl.java @@ -4,26 +4,25 @@ import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.constant.CacheNames; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.mybatis.core.page.PageQuery; import com.ruoyi.common.mybatis.core.page.TableDataInfo; -import com.ruoyi.common.oss.constant.OssConstant; import com.ruoyi.common.oss.core.OssClient; import com.ruoyi.common.oss.entity.UploadResult; import com.ruoyi.common.oss.factory.OssFactory; -import com.ruoyi.common.redis.utils.RedisUtils; import com.ruoyi.resource.domain.SysOss; import com.ruoyi.resource.domain.bo.SysOssBo; import com.ruoyi.resource.domain.vo.SysOssVo; import com.ruoyi.resource.mapper.SysOssMapper; import com.ruoyi.resource.service.ISysOssService; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; -import java.time.Duration; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -51,13 +50,10 @@ public class SysOssServiceImpl implements ISysOssService { public List listByIds(Collection ossIds) { List list = new ArrayList<>(); for (Long id : ossIds) { - String key = OssConstant.SYS_OSS_KEY + id; - SysOssVo vo = RedisUtils.getCacheObject(key); - if (ObjectUtil.isNull(vo)) { - vo = baseMapper.selectVoById(id); - RedisUtils.setCacheObject(key, vo, Duration.ofDays(30)); + SysOssVo vo = getById(id); + if (ObjectUtil.isNotNull(vo)) { + list.add(vo); } - list.add(vo); } return list; } @@ -76,9 +72,10 @@ public class SysOssServiceImpl implements ISysOssService { return lqw; } + @Cacheable(cacheNames = CacheNames.SYS_OSS, key = "#ossId") @Override - public SysOss getById(Long ossId) { - return baseMapper.selectById(ossId); + public SysOssVo getById(Long ossId) { + return baseMapper.selectVoById(ossId); } @Override diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysConfigController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysConfigController.java index ef5782764..a848b4ae4 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysConfigController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysConfigController.java @@ -81,7 +81,8 @@ public class SysConfigController extends BaseController { if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) { return R.fail("新增参数'" + config.getConfigName() + "'失败,参数键名已存在"); } - return toAjax(configService.insertConfig(config)); + configService.insertConfig(config); + return R.ok(); } /** @@ -94,7 +95,8 @@ public class SysConfigController extends BaseController { if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) { return R.fail("修改参数'" + config.getConfigName() + "'失败,参数键名已存在"); } - return toAjax(configService.updateConfig(config)); + configService.updateConfig(config); + return R.ok(); } /** @@ -104,7 +106,8 @@ public class SysConfigController extends BaseController { @Log(title = "参数管理", businessType = BusinessType.UPDATE) @PutMapping("/updateByKey") public R updateByKey(@RequestBody SysConfig config) { - return toAjax(configService.updateConfig(config)); + configService.updateConfig(config); + return R.ok(); } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictDataController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictDataController.java index 361cb4a51..c81481498 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictDataController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictDataController.java @@ -86,7 +86,8 @@ public class SysDictDataController extends BaseController { @Log(title = "字典数据", businessType = BusinessType.INSERT) @PostMapping public R add(@Validated @RequestBody SysDictData dict) { - return toAjax(dictDataService.insertDictData(dict)); + dictDataService.insertDictData(dict); + return R.ok(); } /** @@ -96,7 +97,8 @@ public class SysDictDataController extends BaseController { @Log(title = "字典数据", businessType = BusinessType.UPDATE) @PutMapping public R edit(@Validated @RequestBody SysDictData dict) { - return toAjax(dictDataService.updateDictData(dict)); + dictDataService.updateDictData(dict); + return R.ok(); } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictTypeController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictTypeController.java index b5599ebb2..0eed5a891 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictTypeController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictTypeController.java @@ -72,7 +72,8 @@ public class SysDictTypeController extends BaseController { if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) { return R.fail("新增字典'" + dict.getDictName() + "'失败,字典类型已存在"); } - return toAjax(dictTypeService.insertDictType(dict)); + dictTypeService.insertDictType(dict); + return R.ok(); } /** @@ -85,7 +86,8 @@ public class SysDictTypeController extends BaseController { if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) { return R.fail("修改字典'" + dict.getDictName() + "'失败,字典类型已存在"); } - return toAjax(dictTypeService.updateDictType(dict)); + dictTypeService.updateDictType(dict); + return R.ok(); } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserOnlineController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserOnlineController.java index eb721c5a0..d4af40ccf 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserOnlineController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserOnlineController.java @@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.exception.NotLoginException; import cn.dev33.satoken.stp.StpUtil; import com.ruoyi.common.core.constant.CacheConstants; +import com.ruoyi.common.core.constant.CacheNames; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StreamUtils; import com.ruoyi.common.core.utils.StringUtils; @@ -11,7 +12,7 @@ import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.mybatis.core.page.TableDataInfo; -import com.ruoyi.common.redis.utils.RedisUtils; +import com.ruoyi.common.redis.utils.CacheUtils; import com.ruoyi.system.api.domain.SysUserOnline; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -48,7 +49,8 @@ public class SysUserOnlineController extends BaseController { if (StpUtil.stpLogic.getTokenActivityTimeoutByToken(token) < 0) { continue; } - userOnlineList.add(RedisUtils.getCacheObject(CacheConstants.ONLINE_TOKEN_KEY + token)); + SysUserOnline dto = CacheUtils.get(CacheNames.ONLINE_TOKEN, token); + userOnlineList.add(dto); } if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) { userOnlineList = StreamUtils.filter(userOnlineList, userOnline -> diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java index dea1cbf7e..e50812fba 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java @@ -45,7 +45,7 @@ public interface ISysConfigService { * @param config 参数配置信息 * @return 结果 */ - int insertConfig(SysConfig config); + String insertConfig(SysConfig config); /** * 修改参数配置 @@ -53,7 +53,7 @@ public interface ISysConfigService { * @param config 参数配置信息 * @return 结果 */ - int updateConfig(SysConfig config); + String updateConfig(SysConfig config); /** * 批量删除参数信息 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java index feb16a9f1..d12573948 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java @@ -53,7 +53,7 @@ public interface ISysDictDataService { * @param dictData 字典数据信息 * @return 结果 */ - int insertDictData(SysDictData dictData); + List insertDictData(SysDictData dictData); /** * 修改保存字典数据信息 @@ -61,5 +61,5 @@ public interface ISysDictDataService { * @param dictData 字典数据信息 * @return 结果 */ - int updateDictData(SysDictData dictData); + List updateDictData(SysDictData dictData); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java index facf9f752..7c3047423 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java @@ -83,7 +83,7 @@ public interface ISysDictTypeService { * @param dictType 字典类型信息 * @return 结果 */ - int insertDictType(SysDictType dictType); + List insertDictType(SysDictType dictType); /** * 修改保存字典类型信息 @@ -91,7 +91,7 @@ public interface ISysDictTypeService { * @param dictType 字典类型信息 * @return 结果 */ - int updateDictType(SysDictType dictType); + List updateDictType(SysDictType dictType); /** * 校验字典类型称是否唯一 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java index 38c52675b..f0938246f 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java @@ -1,24 +1,24 @@ package com.ruoyi.system.service.impl; -import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.ruoyi.common.core.constant.CacheConstants; +import com.ruoyi.common.core.constant.CacheNames; import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.mybatis.core.page.PageQuery; import com.ruoyi.common.mybatis.core.page.TableDataInfo; -import com.ruoyi.common.redis.utils.RedisUtils; +import com.ruoyi.common.redis.utils.CacheUtils; import com.ruoyi.system.domain.SysConfig; import com.ruoyi.system.mapper.SysConfigMapper; import com.ruoyi.system.service.ISysConfigService; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CachePut; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.util.Arrays; -import java.util.Collection; import java.util.List; import java.util.Map; @@ -63,16 +63,12 @@ public class SysConfigServiceImpl implements ISysConfigService { * @param configKey 参数key * @return 参数键值 */ + @Cacheable(cacheNames = CacheNames.SYS_CONFIG, key = "#configKey") @Override public String selectConfigByKey(String configKey) { - String configValue = Convert.toStr(RedisUtils.getCacheObject(getCacheKey(configKey))); - if (StringUtils.isNotEmpty(configValue)) { - return configValue; - } SysConfig retConfig = baseMapper.selectOne(new LambdaQueryWrapper() .eq(SysConfig::getConfigKey, configKey)); if (ObjectUtil.isNotNull(retConfig)) { - RedisUtils.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue()); return retConfig.getConfigValue(); } return StringUtils.EMPTY; @@ -102,13 +98,14 @@ public class SysConfigServiceImpl implements ISysConfigService { * @param config 参数配置信息 * @return 结果 */ + @CachePut(cacheNames = CacheNames.SYS_CONFIG, key = "#config.configKey") @Override - public int insertConfig(SysConfig config) { + public String insertConfig(SysConfig config) { int row = baseMapper.insert(config); if (row > 0) { - RedisUtils.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + return config.getConfigValue(); } - return row; + throw new ServiceException("操作失败"); } /** @@ -117,8 +114,9 @@ public class SysConfigServiceImpl implements ISysConfigService { * @param config 参数配置信息 * @return 结果 */ + @CachePut(cacheNames = CacheNames.SYS_CONFIG, key = "#config.configKey") @Override - public int updateConfig(SysConfig config) { + public String updateConfig(SysConfig config) { int row = 0; if (config.getConfigId() != null) { row = baseMapper.updateById(config); @@ -127,9 +125,9 @@ public class SysConfigServiceImpl implements ISysConfigService { .eq(SysConfig::getConfigKey, config.getConfigKey())); } if (row > 0) { - RedisUtils.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + return config.getConfigValue(); } - return row; + throw new ServiceException("操作失败"); } /** @@ -144,7 +142,7 @@ public class SysConfigServiceImpl implements ISysConfigService { if (StringUtils.equals(UserConstants.YES, config.getConfigType())) { throw new ServiceException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey())); } - RedisUtils.deleteObject(getCacheKey(config.getConfigKey())); + CacheUtils.evict(CacheNames.SYS_CONFIG, config.getConfigKey()); } baseMapper.deleteBatchIds(Arrays.asList(configIds)); } @@ -155,9 +153,8 @@ public class SysConfigServiceImpl implements ISysConfigService { @Override public void loadingConfigCache() { List configsList = selectConfigList(new SysConfig()); - for (SysConfig config : configsList) { - RedisUtils.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); - } + configsList.forEach(config -> + CacheUtils.put(CacheNames.SYS_CONFIG, config.getConfigKey(), config.getConfigValue())); } /** @@ -165,8 +162,7 @@ public class SysConfigServiceImpl implements ISysConfigService { */ @Override public void clearConfigCache() { - Collection keys = RedisUtils.keys(CacheConstants.SYS_CONFIG_KEY + "*"); - RedisUtils.deleteObject(keys); + CacheUtils.clear(CacheNames.SYS_CONFIG); } /** @@ -194,13 +190,4 @@ public class SysConfigServiceImpl implements ISysConfigService { return UserConstants.UNIQUE; } - /** - * 设置cache key - * - * @param configKey 参数键 - * @return 缓存键key - */ - private String getCacheKey(String configKey) { - return CacheConstants.SYS_CONFIG_KEY + configKey; - } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java index ccaf2145f..fcf862e7d 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java @@ -2,14 +2,17 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.constant.CacheNames; +import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; -import com.ruoyi.common.dict.utils.DictUtils; import com.ruoyi.common.mybatis.core.page.PageQuery; import com.ruoyi.common.mybatis.core.page.TableDataInfo; +import com.ruoyi.common.redis.utils.CacheUtils; import com.ruoyi.system.api.domain.SysDictData; import com.ruoyi.system.mapper.SysDictDataMapper; import com.ruoyi.system.service.ISysDictDataService; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CachePut; import org.springframework.stereotype.Service; import java.util.List; @@ -88,8 +91,7 @@ public class SysDictDataServiceImpl implements ISysDictDataService { for (Long dictCode : dictCodes) { SysDictData data = selectDictDataById(dictCode); baseMapper.deleteById(dictCode); - List dictDatas = baseMapper.selectDictDataByType(data.getDictType()); - DictUtils.setDictCache(data.getDictType(), dictDatas); + CacheUtils.evict(CacheNames.SYS_DICT, data.getDictType()); } } @@ -99,14 +101,14 @@ public class SysDictDataServiceImpl implements ISysDictDataService { * @param data 字典数据信息 * @return 结果 */ + @CachePut(cacheNames = CacheNames.SYS_DICT, key = "#data.dictType") @Override - public int insertDictData(SysDictData data) { + public List insertDictData(SysDictData data) { int row = baseMapper.insert(data); if (row > 0) { - List dictDatas = baseMapper.selectDictDataByType(data.getDictType()); - DictUtils.setDictCache(data.getDictType(), dictDatas); + return baseMapper.selectDictDataByType(data.getDictType()); } - return row; + throw new ServiceException("操作失败"); } /** @@ -115,13 +117,13 @@ public class SysDictDataServiceImpl implements ISysDictDataService { * @param data 字典数据信息 * @return 结果 */ + @CachePut(cacheNames = CacheNames.SYS_DICT, key = "#data.dictType") @Override - public int updateDictData(SysDictData data) { + public List updateDictData(SysDictData data) { int row = baseMapper.updateById(data); if (row > 0) { - List dictDatas = baseMapper.selectDictDataByType(data.getDictType()); - DictUtils.setDictCache(data.getDictType(), dictDatas); + return baseMapper.selectDictDataByType(data.getDictType()); } - return row; + throw new ServiceException("操作失败"); } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java index 2ae3e8ddf..03c90810b 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java @@ -5,26 +5,26 @@ import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.constant.CacheNames; import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StreamUtils; import com.ruoyi.common.core.utils.StringUtils; -import com.ruoyi.common.dict.utils.DictUtils; import com.ruoyi.common.mybatis.core.page.PageQuery; import com.ruoyi.common.mybatis.core.page.TableDataInfo; +import com.ruoyi.common.redis.utils.CacheUtils; import com.ruoyi.system.api.domain.SysDictData; import com.ruoyi.system.api.domain.SysDictType; import com.ruoyi.system.mapper.SysDictDataMapper; import com.ruoyi.system.mapper.SysDictTypeMapper; import com.ruoyi.system.service.ISysDictTypeService; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CachePut; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 字典 业务层处理 @@ -84,17 +84,13 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService { * @param dictType 字典类型 * @return 字典数据集合信息 */ + @Cacheable(cacheNames = CacheNames.SYS_DICT, key = "#dictType") @Override public List selectDictDataByType(String dictType) { - List dictDatas = DictUtils.getDictCache(dictType); + List dictDatas = dictDataMapper.selectDictDataByType(dictType); if (CollUtil.isNotEmpty(dictDatas)) { return dictDatas; } - dictDatas = dictDataMapper.selectDictDataByType(dictType); - if (CollUtil.isNotEmpty(dictDatas)) { - DictUtils.setDictCache(dictType, dictDatas); - return dictDatas; - } return null; } @@ -115,6 +111,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService { * @param dictType 字典类型 * @return 字典类型 */ + @Cacheable(cacheNames = CacheNames.SYS_DICT, key = "#dictType") @Override public SysDictType selectDictTypeByType(String dictType) { return baseMapper.selectById(new LambdaQueryWrapper().eq(SysDictType::getDictType, dictType)); @@ -133,7 +130,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService { .eq(SysDictData::getDictType, dictType.getDictType()))) { throw new ServiceException(String.format("%1$s已分配,不能删除", dictType.getDictName())); } - DictUtils.removeDictCache(dictType.getDictType()); + CacheUtils.evict(CacheNames.SYS_DICT, dictType.getDictType()); } baseMapper.deleteBatchIds(Arrays.asList(dictIds)); } @@ -146,9 +143,9 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService { List dictDataList = dictDataMapper.selectList( new LambdaQueryWrapper().eq(SysDictData::getStatus, UserConstants.DICT_NORMAL)); Map> dictDataMap = StreamUtils.groupByKey(dictDataList, SysDictData::getDictType); - dictDataMap.forEach((k, v) -> { + dictDataMap.forEach((k,v) -> { List dictList = StreamUtils.sorted(v, Comparator.comparing(SysDictData::getDictSort)); - DictUtils.setDictCache(k, dictList); + CacheUtils.put(CacheNames.SYS_DICT, k, dictList); }); } @@ -157,7 +154,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService { */ @Override public void clearDictCache() { - DictUtils.clearDictCache(); + CacheUtils.clear(CacheNames.SYS_DICT); } /** @@ -175,13 +172,14 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService { * @param dict 字典类型信息 * @return 结果 */ + @CachePut(cacheNames = CacheNames.SYS_DICT, key = "#dict.dictType") @Override - public int insertDictType(SysDictType dict) { + public List insertDictType(SysDictType dict) { int row = baseMapper.insert(dict); if (row > 0) { - DictUtils.setDictCache(dict.getDictType(), null); + return new ArrayList<>(); } - return row; + throw new ServiceException("操作失败"); } /** @@ -190,19 +188,20 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService { * @param dict 字典类型信息 * @return 结果 */ + @CachePut(cacheNames = CacheNames.SYS_DICT, key = "#dict.dictType") @Override @Transactional(rollbackFor = Exception.class) - public int updateDictType(SysDictType dict) { + public List updateDictType(SysDictType dict) { SysDictType oldDict = baseMapper.selectById(dict.getDictId()); dictDataMapper.update(null, new LambdaUpdateWrapper() .set(SysDictData::getDictType, dict.getDictType()) .eq(SysDictData::getDictType, oldDict.getDictType())); int row = baseMapper.updateById(dict); if (row > 0) { - List dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType()); - DictUtils.setDictCache(dict.getDictType(), dictDatas); + CacheUtils.evict(CacheNames.SYS_DICT, oldDict.getDictType()); + return dictDataMapper.selectDictDataByType(dict.getDictType()); } - return row; + throw new ServiceException("操作失败"); } /**