update 优化 使用 spring-cache 注解优化缓存
parent
32cd07d9a2
commit
74e075b4d3
|
|
@ -6,11 +6,11 @@ import cn.dev33.satoken.stp.SaLoginModel;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.http.useragent.UserAgent;
|
import cn.hutool.http.useragent.UserAgent;
|
||||||
import cn.hutool.http.useragent.UserAgentUtil;
|
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.enums.UserType;
|
||||||
import com.ruoyi.common.core.utils.ServletUtils;
|
import com.ruoyi.common.core.utils.ServletUtils;
|
||||||
import com.ruoyi.common.core.utils.ip.AddressUtils;
|
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.common.satoken.utils.LoginHelper;
|
||||||
import com.ruoyi.system.api.domain.SysUserOnline;
|
import com.ruoyi.system.api.domain.SysUserOnline;
|
||||||
import com.ruoyi.system.api.model.LoginUser;
|
import com.ruoyi.system.api.model.LoginUser;
|
||||||
|
|
@ -18,8 +18,6 @@ import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.time.Duration;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户行为 侦听器的实现
|
* 用户行为 侦听器的实现
|
||||||
*
|
*
|
||||||
|
|
@ -53,7 +51,12 @@ public class UserActionListener implements SaTokenListener {
|
||||||
if (ObjectUtil.isNotNull(user.getDeptName())) {
|
if (ObjectUtil.isNotNull(user.getDeptName())) {
|
||||||
userOnline.setDeptName(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);
|
log.info("user doLogin, useId:{}, token:{}", loginId, tokenValue);
|
||||||
} else if (userType == UserType.APP_USER) {
|
} else if (userType == UserType.APP_USER) {
|
||||||
// app端 自行根据业务编写
|
// app端 自行根据业务编写
|
||||||
|
|
@ -65,7 +68,7 @@ public class UserActionListener implements SaTokenListener {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void doLogout(String loginType, Object loginId, String tokenValue) {
|
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);
|
log.info("user doLogout, useId:{}, token:{}", loginId, tokenValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -74,7 +77,7 @@ public class UserActionListener implements SaTokenListener {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void doKickout(String loginType, Object loginId, String tokenValue) {
|
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);
|
log.info("user doLogoutByLoginId, useId:{}, token:{}", loginId, tokenValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -83,7 +86,7 @@ public class UserActionListener implements SaTokenListener {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void doReplaced(String loginType, Object loginId, String tokenValue) {
|
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);
|
log.info("user doReplaced, useId:{}, token:{}", loginId, tokenValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,19 +11,9 @@ import java.util.List;
|
||||||
public interface OssConstant {
|
public interface OssConstant {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* OSS模块KEY
|
* 默认配置KEY
|
||||||
*/
|
*/
|
||||||
String SYS_OSS_KEY = "sys_oss:";
|
String DEFAULT_CONFIG_KEY = "sys_oss:default_config";
|
||||||
|
|
||||||
/**
|
|
||||||
* 对象存储配置KEY
|
|
||||||
*/
|
|
||||||
String OSS_CONFIG_KEY = "OssConfig";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 缓存配置KEY
|
|
||||||
*/
|
|
||||||
String CACHE_CONFIG_KEY = SYS_OSS_KEY + OSS_CONFIG_KEY;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 预览列表资源开关Key
|
* 预览列表资源开关Key
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,13 @@
|
||||||
package com.ruoyi.common.oss.factory;
|
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.JsonUtils;
|
||||||
import com.ruoyi.common.core.utils.StringUtils;
|
import com.ruoyi.common.core.utils.StringUtils;
|
||||||
import com.ruoyi.common.oss.constant.OssConstant;
|
import com.ruoyi.common.oss.constant.OssConstant;
|
||||||
import com.ruoyi.common.oss.core.OssClient;
|
import com.ruoyi.common.oss.core.OssClient;
|
||||||
import com.ruoyi.common.oss.exception.OssException;
|
import com.ruoyi.common.oss.exception.OssException;
|
||||||
import com.ruoyi.common.oss.properties.OssProperties;
|
import com.ruoyi.common.oss.properties.OssProperties;
|
||||||
|
import com.ruoyi.common.redis.utils.CacheUtils;
|
||||||
import com.ruoyi.common.redis.utils.RedisUtils;
|
import com.ruoyi.common.redis.utils.RedisUtils;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
|
@ -27,7 +29,7 @@ public class OssFactory {
|
||||||
*/
|
*/
|
||||||
public static void init() {
|
public static void init() {
|
||||||
log.info("初始化OSS工厂");
|
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);
|
OssClient client = getClient(configKey);
|
||||||
// 未初始化不处理
|
// 未初始化不处理
|
||||||
if (client != null) {
|
if (client != null) {
|
||||||
|
|
@ -42,7 +44,7 @@ public class OssFactory {
|
||||||
*/
|
*/
|
||||||
public static OssClient instance() {
|
public static OssClient instance() {
|
||||||
// 获取redis 默认类型
|
// 获取redis 默认类型
|
||||||
String configKey = RedisUtils.getCacheObject(OssConstant.CACHE_CONFIG_KEY);
|
String configKey = RedisUtils.getCacheObject(OssConstant.DEFAULT_CONFIG_KEY);
|
||||||
if (StringUtils.isEmpty(configKey)) {
|
if (StringUtils.isEmpty(configKey)) {
|
||||||
throw new OssException("文件存储服务类型无法找到!");
|
throw new OssException("文件存储服务类型无法找到!");
|
||||||
}
|
}
|
||||||
|
|
@ -62,11 +64,11 @@ public class OssFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void refresh(String configKey) {
|
private static void refresh(String configKey) {
|
||||||
Object json = RedisUtils.getCacheObject(OssConstant.SYS_OSS_KEY + configKey);
|
String json = CacheUtils.get(CacheNames.SYS_OSS_CONFIG, configKey);
|
||||||
OssProperties properties = JsonUtils.parseObject(json.toString(), OssProperties.class);
|
if (json == null) {
|
||||||
if (properties == null) {
|
|
||||||
throw new OssException("系统异常, '" + configKey + "'配置信息不存在!");
|
throw new OssException("系统异常, '" + configKey + "'配置信息不存在!");
|
||||||
}
|
}
|
||||||
|
OssProperties properties = JsonUtils.parseObject(json, OssProperties.class);
|
||||||
CLIENT_CACHE.put(configKey, new OssClient(configKey, properties));
|
CLIENT_CACHE.put(configKey, new OssClient(configKey, properties));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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<Object> keys(String cacheNames) {
|
||||||
|
RMap<Object, Object> rmap = (RMap<Object, Object>) CACHE_MANAGER.getCache(cacheNames).getNativeCache();
|
||||||
|
return rmap.keySet();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取缓存值
|
||||||
|
*
|
||||||
|
* @param cacheNames 缓存组名称
|
||||||
|
* @param key 缓存key
|
||||||
|
*/
|
||||||
|
public static <T> 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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -95,7 +95,7 @@ public class SysOssController extends BaseController {
|
||||||
@SaCheckPermission("system:oss:download")
|
@SaCheckPermission("system:oss:download")
|
||||||
@GetMapping("/download/{ossId}")
|
@GetMapping("/download/{ossId}")
|
||||||
public void download(@PathVariable Long ossId, HttpServletResponse response) throws IOException {
|
public void download(@PathVariable Long ossId, HttpServletResponse response) throws IOException {
|
||||||
SysOss sysOss = iSysOssService.getById(ossId);
|
SysOssVo sysOss = iSysOssService.getById(ossId);
|
||||||
if (ObjectUtil.isNull(sysOss)) {
|
if (ObjectUtil.isNull(sysOss)) {
|
||||||
throw new ServiceException("文件数据不存在!");
|
throw new ServiceException("文件数据不存在!");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ public interface ISysOssService {
|
||||||
|
|
||||||
List<SysOssVo> listByIds(Collection<Long> ossIds);
|
List<SysOssVo> listByIds(Collection<Long> ossIds);
|
||||||
|
|
||||||
SysOss getById(Long ossId);
|
SysOssVo getById(Long ossId);
|
||||||
|
|
||||||
SysOss upload(MultipartFile file);
|
SysOss upload(MultipartFile file);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
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.constant.UserConstants;
|
||||||
import com.ruoyi.common.core.exception.ServiceException;
|
import com.ruoyi.common.core.exception.ServiceException;
|
||||||
import com.ruoyi.common.core.utils.JsonUtils;
|
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.mybatis.core.page.TableDataInfo;
|
||||||
import com.ruoyi.common.oss.constant.OssConstant;
|
import com.ruoyi.common.oss.constant.OssConstant;
|
||||||
import com.ruoyi.common.oss.factory.OssFactory;
|
import com.ruoyi.common.oss.factory.OssFactory;
|
||||||
|
import com.ruoyi.common.redis.utils.CacheUtils;
|
||||||
import com.ruoyi.common.redis.utils.RedisUtils;
|
import com.ruoyi.common.redis.utils.RedisUtils;
|
||||||
import com.ruoyi.resource.domain.SysOssConfig;
|
import com.ruoyi.resource.domain.SysOssConfig;
|
||||||
import com.ruoyi.resource.domain.bo.SysOssConfigBo;
|
import com.ruoyi.resource.domain.bo.SysOssConfigBo;
|
||||||
|
|
@ -54,7 +55,7 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
|
||||||
for (SysOssConfig config : list) {
|
for (SysOssConfig config : list) {
|
||||||
String configKey = config.getConfigKey();
|
String configKey = config.getConfigKey();
|
||||||
if ("0".equals(config.getStatus())) {
|
if ("0".equals(config.getStatus())) {
|
||||||
RedisUtils.setCacheObject(OssConstant.CACHE_CONFIG_KEY, configKey);
|
RedisUtils.setCacheObject(OssConstant.DEFAULT_CONFIG_KEY, configKey);
|
||||||
}
|
}
|
||||||
setConfigCache(true, config);
|
setConfigCache(true, config);
|
||||||
}
|
}
|
||||||
|
|
@ -120,16 +121,15 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
|
||||||
throw new ServiceException("系统内置, 不可删除!");
|
throw new ServiceException("系统内置, 不可删除!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
List<SysOssConfig> list = Lists.newArrayList();
|
List<SysOssConfig> list = CollUtil.newArrayList();
|
||||||
for (Long configId : ids) {
|
for (Long configId : ids) {
|
||||||
SysOssConfig config = baseMapper.selectById(configId);
|
SysOssConfig config = baseMapper.selectById(configId);
|
||||||
list.add(config);
|
list.add(config);
|
||||||
}
|
}
|
||||||
boolean flag = baseMapper.deleteBatchIds(ids) > 0;
|
boolean flag = baseMapper.deleteBatchIds(ids) > 0;
|
||||||
if (flag) {
|
if (flag) {
|
||||||
list.forEach(sysOssConfig -> {
|
list.forEach(sysOssConfig ->
|
||||||
RedisUtils.deleteObject(getCacheKey(sysOssConfig.getConfigKey()));
|
CacheUtils.evict(CacheNames.SYS_OSS_CONFIG, sysOssConfig.getConfigKey()));
|
||||||
});
|
|
||||||
}
|
}
|
||||||
return flag;
|
return flag;
|
||||||
}
|
}
|
||||||
|
|
@ -159,21 +159,11 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
|
||||||
.set(SysOssConfig::getStatus, "1"));
|
.set(SysOssConfig::getStatus, "1"));
|
||||||
row += baseMapper.updateById(sysOssConfig);
|
row += baseMapper.updateById(sysOssConfig);
|
||||||
if (row > 0) {
|
if (row > 0) {
|
||||||
RedisUtils.setCacheObject(OssConstant.CACHE_CONFIG_KEY, sysOssConfig.getConfigKey());
|
RedisUtils.setCacheObject(OssConstant.DEFAULT_CONFIG_KEY, sysOssConfig.getConfigKey());
|
||||||
}
|
}
|
||||||
return row;
|
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) {
|
private boolean setConfigCache(boolean flag, SysOssConfig config) {
|
||||||
if (flag) {
|
if (flag) {
|
||||||
RedisUtils.setCacheObject(
|
CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config));
|
||||||
getCacheKey(config.getConfigKey()),
|
RedisUtils.publish(OssConstant.DEFAULT_CONFIG_KEY, config.getConfigKey(), msg -> {
|
||||||
JsonUtils.toJsonString(config));
|
|
||||||
RedisUtils.publish(OssConstant.CACHE_CONFIG_KEY, config.getConfigKey(), msg -> {
|
|
||||||
log.info("发布刷新OSS配置 => " + msg);
|
log.info("发布刷新OSS配置 => " + msg);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,26 +4,25 @@ import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
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.exception.ServiceException;
|
||||||
import com.ruoyi.common.core.utils.StringUtils;
|
import com.ruoyi.common.core.utils.StringUtils;
|
||||||
import com.ruoyi.common.mybatis.core.page.PageQuery;
|
import com.ruoyi.common.mybatis.core.page.PageQuery;
|
||||||
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
|
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.core.OssClient;
|
||||||
import com.ruoyi.common.oss.entity.UploadResult;
|
import com.ruoyi.common.oss.entity.UploadResult;
|
||||||
import com.ruoyi.common.oss.factory.OssFactory;
|
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.SysOss;
|
||||||
import com.ruoyi.resource.domain.bo.SysOssBo;
|
import com.ruoyi.resource.domain.bo.SysOssBo;
|
||||||
import com.ruoyi.resource.domain.vo.SysOssVo;
|
import com.ruoyi.resource.domain.vo.SysOssVo;
|
||||||
import com.ruoyi.resource.mapper.SysOssMapper;
|
import com.ruoyi.resource.mapper.SysOssMapper;
|
||||||
import com.ruoyi.resource.service.ISysOssService;
|
import com.ruoyi.resource.service.ISysOssService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.cache.annotation.Cacheable;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.time.Duration;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -51,14 +50,11 @@ public class SysOssServiceImpl implements ISysOssService {
|
||||||
public List<SysOssVo> listByIds(Collection<Long> ossIds) {
|
public List<SysOssVo> listByIds(Collection<Long> ossIds) {
|
||||||
List<SysOssVo> list = new ArrayList<>();
|
List<SysOssVo> list = new ArrayList<>();
|
||||||
for (Long id : ossIds) {
|
for (Long id : ossIds) {
|
||||||
String key = OssConstant.SYS_OSS_KEY + id;
|
SysOssVo vo = getById(id);
|
||||||
SysOssVo vo = RedisUtils.getCacheObject(key);
|
if (ObjectUtil.isNotNull(vo)) {
|
||||||
if (ObjectUtil.isNull(vo)) {
|
|
||||||
vo = baseMapper.selectVoById(id);
|
|
||||||
RedisUtils.setCacheObject(key, vo, Duration.ofDays(30));
|
|
||||||
}
|
|
||||||
list.add(vo);
|
list.add(vo);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -76,9 +72,10 @@ public class SysOssServiceImpl implements ISysOssService {
|
||||||
return lqw;
|
return lqw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Cacheable(cacheNames = CacheNames.SYS_OSS, key = "#ossId")
|
||||||
@Override
|
@Override
|
||||||
public SysOss getById(Long ossId) {
|
public SysOssVo getById(Long ossId) {
|
||||||
return baseMapper.selectById(ossId);
|
return baseMapper.selectVoById(ossId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,8 @@ public class SysConfigController extends BaseController {
|
||||||
if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) {
|
if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) {
|
||||||
return R.fail("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
|
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))) {
|
if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) {
|
||||||
return R.fail("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
|
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)
|
@Log(title = "参数管理", businessType = BusinessType.UPDATE)
|
||||||
@PutMapping("/updateByKey")
|
@PutMapping("/updateByKey")
|
||||||
public R<Void> updateByKey(@RequestBody SysConfig config) {
|
public R<Void> updateByKey(@RequestBody SysConfig config) {
|
||||||
return toAjax(configService.updateConfig(config));
|
configService.updateConfig(config);
|
||||||
|
return R.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,8 @@ public class SysDictDataController extends BaseController {
|
||||||
@Log(title = "字典数据", businessType = BusinessType.INSERT)
|
@Log(title = "字典数据", businessType = BusinessType.INSERT)
|
||||||
@PostMapping
|
@PostMapping
|
||||||
public R<Void> add(@Validated @RequestBody SysDictData dict) {
|
public R<Void> 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)
|
@Log(title = "字典数据", businessType = BusinessType.UPDATE)
|
||||||
@PutMapping
|
@PutMapping
|
||||||
public R<Void> edit(@Validated @RequestBody SysDictData dict) {
|
public R<Void> edit(@Validated @RequestBody SysDictData dict) {
|
||||||
return toAjax(dictDataService.updateDictData(dict));
|
dictDataService.updateDictData(dict);
|
||||||
|
return R.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,8 @@ public class SysDictTypeController extends BaseController {
|
||||||
if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) {
|
if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) {
|
||||||
return R.fail("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
|
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))) {
|
if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) {
|
||||||
return R.fail("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
|
return R.fail("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
|
||||||
}
|
}
|
||||||
return toAjax(dictTypeService.updateDictType(dict));
|
dictTypeService.updateDictType(dict);
|
||||||
|
return R.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
import cn.dev33.satoken.exception.NotLoginException;
|
import cn.dev33.satoken.exception.NotLoginException;
|
||||||
import cn.dev33.satoken.stp.StpUtil;
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
import com.ruoyi.common.core.constant.CacheConstants;
|
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.domain.R;
|
||||||
import com.ruoyi.common.core.utils.StreamUtils;
|
import com.ruoyi.common.core.utils.StreamUtils;
|
||||||
import com.ruoyi.common.core.utils.StringUtils;
|
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.annotation.Log;
|
||||||
import com.ruoyi.common.log.enums.BusinessType;
|
import com.ruoyi.common.log.enums.BusinessType;
|
||||||
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
|
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 com.ruoyi.system.api.domain.SysUserOnline;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
@ -48,7 +49,8 @@ public class SysUserOnlineController extends BaseController {
|
||||||
if (StpUtil.stpLogic.getTokenActivityTimeoutByToken(token) < 0) {
|
if (StpUtil.stpLogic.getTokenActivityTimeoutByToken(token) < 0) {
|
||||||
continue;
|
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)) {
|
if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) {
|
||||||
userOnlineList = StreamUtils.filter(userOnlineList, userOnline ->
|
userOnlineList = StreamUtils.filter(userOnlineList, userOnline ->
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ public interface ISysConfigService {
|
||||||
* @param config 参数配置信息
|
* @param config 参数配置信息
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
int insertConfig(SysConfig config);
|
String insertConfig(SysConfig config);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改参数配置
|
* 修改参数配置
|
||||||
|
|
@ -53,7 +53,7 @@ public interface ISysConfigService {
|
||||||
* @param config 参数配置信息
|
* @param config 参数配置信息
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
int updateConfig(SysConfig config);
|
String updateConfig(SysConfig config);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量删除参数信息
|
* 批量删除参数信息
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ public interface ISysDictDataService {
|
||||||
* @param dictData 字典数据信息
|
* @param dictData 字典数据信息
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
int insertDictData(SysDictData dictData);
|
List<SysDictData> insertDictData(SysDictData dictData);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改保存字典数据信息
|
* 修改保存字典数据信息
|
||||||
|
|
@ -61,5 +61,5 @@ public interface ISysDictDataService {
|
||||||
* @param dictData 字典数据信息
|
* @param dictData 字典数据信息
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
int updateDictData(SysDictData dictData);
|
List<SysDictData> updateDictData(SysDictData dictData);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,7 @@ public interface ISysDictTypeService {
|
||||||
* @param dictType 字典类型信息
|
* @param dictType 字典类型信息
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
int insertDictType(SysDictType dictType);
|
List<SysDictData> insertDictType(SysDictType dictType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改保存字典类型信息
|
* 修改保存字典类型信息
|
||||||
|
|
@ -91,7 +91,7 @@ public interface ISysDictTypeService {
|
||||||
* @param dictType 字典类型信息
|
* @param dictType 字典类型信息
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
int updateDictType(SysDictType dictType);
|
List<SysDictData> updateDictType(SysDictType dictType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验字典类型称是否唯一
|
* 校验字典类型称是否唯一
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,24 @@
|
||||||
package com.ruoyi.system.service.impl;
|
package com.ruoyi.system.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.convert.Convert;
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
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.constant.UserConstants;
|
||||||
import com.ruoyi.common.core.exception.ServiceException;
|
import com.ruoyi.common.core.exception.ServiceException;
|
||||||
import com.ruoyi.common.core.utils.StringUtils;
|
import com.ruoyi.common.core.utils.StringUtils;
|
||||||
import com.ruoyi.common.mybatis.core.page.PageQuery;
|
import com.ruoyi.common.mybatis.core.page.PageQuery;
|
||||||
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
|
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.domain.SysConfig;
|
||||||
import com.ruoyi.system.mapper.SysConfigMapper;
|
import com.ruoyi.system.mapper.SysConfigMapper;
|
||||||
import com.ruoyi.system.service.ISysConfigService;
|
import com.ruoyi.system.service.ISysConfigService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.cache.annotation.CachePut;
|
||||||
|
import org.springframework.cache.annotation.Cacheable;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
@ -63,16 +63,12 @@ public class SysConfigServiceImpl implements ISysConfigService {
|
||||||
* @param configKey 参数key
|
* @param configKey 参数key
|
||||||
* @return 参数键值
|
* @return 参数键值
|
||||||
*/
|
*/
|
||||||
|
@Cacheable(cacheNames = CacheNames.SYS_CONFIG, key = "#configKey")
|
||||||
@Override
|
@Override
|
||||||
public String selectConfigByKey(String configKey) {
|
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<SysConfig>()
|
SysConfig retConfig = baseMapper.selectOne(new LambdaQueryWrapper<SysConfig>()
|
||||||
.eq(SysConfig::getConfigKey, configKey));
|
.eq(SysConfig::getConfigKey, configKey));
|
||||||
if (ObjectUtil.isNotNull(retConfig)) {
|
if (ObjectUtil.isNotNull(retConfig)) {
|
||||||
RedisUtils.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue());
|
|
||||||
return retConfig.getConfigValue();
|
return retConfig.getConfigValue();
|
||||||
}
|
}
|
||||||
return StringUtils.EMPTY;
|
return StringUtils.EMPTY;
|
||||||
|
|
@ -102,13 +98,14 @@ public class SysConfigServiceImpl implements ISysConfigService {
|
||||||
* @param config 参数配置信息
|
* @param config 参数配置信息
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
|
@CachePut(cacheNames = CacheNames.SYS_CONFIG, key = "#config.configKey")
|
||||||
@Override
|
@Override
|
||||||
public int insertConfig(SysConfig config) {
|
public String insertConfig(SysConfig config) {
|
||||||
int row = baseMapper.insert(config);
|
int row = baseMapper.insert(config);
|
||||||
if (row > 0) {
|
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 参数配置信息
|
* @param config 参数配置信息
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
|
@CachePut(cacheNames = CacheNames.SYS_CONFIG, key = "#config.configKey")
|
||||||
@Override
|
@Override
|
||||||
public int updateConfig(SysConfig config) {
|
public String updateConfig(SysConfig config) {
|
||||||
int row = 0;
|
int row = 0;
|
||||||
if (config.getConfigId() != null) {
|
if (config.getConfigId() != null) {
|
||||||
row = baseMapper.updateById(config);
|
row = baseMapper.updateById(config);
|
||||||
|
|
@ -127,9 +125,9 @@ public class SysConfigServiceImpl implements ISysConfigService {
|
||||||
.eq(SysConfig::getConfigKey, config.getConfigKey()));
|
.eq(SysConfig::getConfigKey, config.getConfigKey()));
|
||||||
}
|
}
|
||||||
if (row > 0) {
|
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())) {
|
if (StringUtils.equals(UserConstants.YES, config.getConfigType())) {
|
||||||
throw new ServiceException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey()));
|
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));
|
baseMapper.deleteBatchIds(Arrays.asList(configIds));
|
||||||
}
|
}
|
||||||
|
|
@ -155,9 +153,8 @@ public class SysConfigServiceImpl implements ISysConfigService {
|
||||||
@Override
|
@Override
|
||||||
public void loadingConfigCache() {
|
public void loadingConfigCache() {
|
||||||
List<SysConfig> configsList = selectConfigList(new SysConfig());
|
List<SysConfig> configsList = selectConfigList(new SysConfig());
|
||||||
for (SysConfig config : configsList) {
|
configsList.forEach(config ->
|
||||||
RedisUtils.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
|
CacheUtils.put(CacheNames.SYS_CONFIG, config.getConfigKey(), config.getConfigValue()));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -165,8 +162,7 @@ public class SysConfigServiceImpl implements ISysConfigService {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void clearConfigCache() {
|
public void clearConfigCache() {
|
||||||
Collection<String> keys = RedisUtils.keys(CacheConstants.SYS_CONFIG_KEY + "*");
|
CacheUtils.clear(CacheNames.SYS_CONFIG);
|
||||||
RedisUtils.deleteObject(keys);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -194,13 +190,4 @@ public class SysConfigServiceImpl implements ISysConfigService {
|
||||||
return UserConstants.UNIQUE;
|
return UserConstants.UNIQUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 设置cache key
|
|
||||||
*
|
|
||||||
* @param configKey 参数键
|
|
||||||
* @return 缓存键key
|
|
||||||
*/
|
|
||||||
private String getCacheKey(String configKey) {
|
|
||||||
return CacheConstants.SYS_CONFIG_KEY + configKey;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,17 @@ package com.ruoyi.system.service.impl;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
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.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.PageQuery;
|
||||||
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
|
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.SysDictData;
|
||||||
import com.ruoyi.system.mapper.SysDictDataMapper;
|
import com.ruoyi.system.mapper.SysDictDataMapper;
|
||||||
import com.ruoyi.system.service.ISysDictDataService;
|
import com.ruoyi.system.service.ISysDictDataService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.cache.annotation.CachePut;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -88,8 +91,7 @@ public class SysDictDataServiceImpl implements ISysDictDataService {
|
||||||
for (Long dictCode : dictCodes) {
|
for (Long dictCode : dictCodes) {
|
||||||
SysDictData data = selectDictDataById(dictCode);
|
SysDictData data = selectDictDataById(dictCode);
|
||||||
baseMapper.deleteById(dictCode);
|
baseMapper.deleteById(dictCode);
|
||||||
List<SysDictData> dictDatas = baseMapper.selectDictDataByType(data.getDictType());
|
CacheUtils.evict(CacheNames.SYS_DICT, data.getDictType());
|
||||||
DictUtils.setDictCache(data.getDictType(), dictDatas);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -99,14 +101,14 @@ public class SysDictDataServiceImpl implements ISysDictDataService {
|
||||||
* @param data 字典数据信息
|
* @param data 字典数据信息
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
|
@CachePut(cacheNames = CacheNames.SYS_DICT, key = "#data.dictType")
|
||||||
@Override
|
@Override
|
||||||
public int insertDictData(SysDictData data) {
|
public List<SysDictData> insertDictData(SysDictData data) {
|
||||||
int row = baseMapper.insert(data);
|
int row = baseMapper.insert(data);
|
||||||
if (row > 0) {
|
if (row > 0) {
|
||||||
List<SysDictData> dictDatas = baseMapper.selectDictDataByType(data.getDictType());
|
return baseMapper.selectDictDataByType(data.getDictType());
|
||||||
DictUtils.setDictCache(data.getDictType(), dictDatas);
|
|
||||||
}
|
}
|
||||||
return row;
|
throw new ServiceException("操作失败");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -115,13 +117,13 @@ public class SysDictDataServiceImpl implements ISysDictDataService {
|
||||||
* @param data 字典数据信息
|
* @param data 字典数据信息
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
|
@CachePut(cacheNames = CacheNames.SYS_DICT, key = "#data.dictType")
|
||||||
@Override
|
@Override
|
||||||
public int updateDictData(SysDictData data) {
|
public List<SysDictData> updateDictData(SysDictData data) {
|
||||||
int row = baseMapper.updateById(data);
|
int row = baseMapper.updateById(data);
|
||||||
if (row > 0) {
|
if (row > 0) {
|
||||||
List<SysDictData> dictDatas = baseMapper.selectDictDataByType(data.getDictType());
|
return baseMapper.selectDictDataByType(data.getDictType());
|
||||||
DictUtils.setDictCache(data.getDictType(), dictDatas);
|
|
||||||
}
|
}
|
||||||
return row;
|
throw new ServiceException("操作失败");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,26 +5,26 @@ import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
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.constant.UserConstants;
|
||||||
import com.ruoyi.common.core.exception.ServiceException;
|
import com.ruoyi.common.core.exception.ServiceException;
|
||||||
import com.ruoyi.common.core.utils.StreamUtils;
|
import com.ruoyi.common.core.utils.StreamUtils;
|
||||||
import com.ruoyi.common.core.utils.StringUtils;
|
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.PageQuery;
|
||||||
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
|
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.SysDictData;
|
||||||
import com.ruoyi.system.api.domain.SysDictType;
|
import com.ruoyi.system.api.domain.SysDictType;
|
||||||
import com.ruoyi.system.mapper.SysDictDataMapper;
|
import com.ruoyi.system.mapper.SysDictDataMapper;
|
||||||
import com.ruoyi.system.mapper.SysDictTypeMapper;
|
import com.ruoyi.system.mapper.SysDictTypeMapper;
|
||||||
import com.ruoyi.system.service.ISysDictTypeService;
|
import com.ruoyi.system.service.ISysDictTypeService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.cache.annotation.CachePut;
|
||||||
|
import org.springframework.cache.annotation.Cacheable;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.*;
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 字典 业务层处理
|
* 字典 业务层处理
|
||||||
|
|
@ -84,17 +84,13 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService {
|
||||||
* @param dictType 字典类型
|
* @param dictType 字典类型
|
||||||
* @return 字典数据集合信息
|
* @return 字典数据集合信息
|
||||||
*/
|
*/
|
||||||
|
@Cacheable(cacheNames = CacheNames.SYS_DICT, key = "#dictType")
|
||||||
@Override
|
@Override
|
||||||
public List<SysDictData> selectDictDataByType(String dictType) {
|
public List<SysDictData> selectDictDataByType(String dictType) {
|
||||||
List<SysDictData> dictDatas = DictUtils.getDictCache(dictType);
|
List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dictType);
|
||||||
if (CollUtil.isNotEmpty(dictDatas)) {
|
if (CollUtil.isNotEmpty(dictDatas)) {
|
||||||
return dictDatas;
|
return dictDatas;
|
||||||
}
|
}
|
||||||
dictDatas = dictDataMapper.selectDictDataByType(dictType);
|
|
||||||
if (CollUtil.isNotEmpty(dictDatas)) {
|
|
||||||
DictUtils.setDictCache(dictType, dictDatas);
|
|
||||||
return dictDatas;
|
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -115,6 +111,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService {
|
||||||
* @param dictType 字典类型
|
* @param dictType 字典类型
|
||||||
* @return 字典类型
|
* @return 字典类型
|
||||||
*/
|
*/
|
||||||
|
@Cacheable(cacheNames = CacheNames.SYS_DICT, key = "#dictType")
|
||||||
@Override
|
@Override
|
||||||
public SysDictType selectDictTypeByType(String dictType) {
|
public SysDictType selectDictTypeByType(String dictType) {
|
||||||
return baseMapper.selectById(new LambdaQueryWrapper<SysDictType>().eq(SysDictType::getDictType, dictType));
|
return baseMapper.selectById(new LambdaQueryWrapper<SysDictType>().eq(SysDictType::getDictType, dictType));
|
||||||
|
|
@ -133,7 +130,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService {
|
||||||
.eq(SysDictData::getDictType, dictType.getDictType()))) {
|
.eq(SysDictData::getDictType, dictType.getDictType()))) {
|
||||||
throw new ServiceException(String.format("%1$s已分配,不能删除", dictType.getDictName()));
|
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));
|
baseMapper.deleteBatchIds(Arrays.asList(dictIds));
|
||||||
}
|
}
|
||||||
|
|
@ -146,9 +143,9 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService {
|
||||||
List<SysDictData> dictDataList = dictDataMapper.selectList(
|
List<SysDictData> dictDataList = dictDataMapper.selectList(
|
||||||
new LambdaQueryWrapper<SysDictData>().eq(SysDictData::getStatus, UserConstants.DICT_NORMAL));
|
new LambdaQueryWrapper<SysDictData>().eq(SysDictData::getStatus, UserConstants.DICT_NORMAL));
|
||||||
Map<String, List<SysDictData>> dictDataMap = StreamUtils.groupByKey(dictDataList, SysDictData::getDictType);
|
Map<String, List<SysDictData>> dictDataMap = StreamUtils.groupByKey(dictDataList, SysDictData::getDictType);
|
||||||
dictDataMap.forEach((k, v) -> {
|
dictDataMap.forEach((k,v) -> {
|
||||||
List<SysDictData> dictList = StreamUtils.sorted(v, Comparator.comparing(SysDictData::getDictSort));
|
List<SysDictData> 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
|
@Override
|
||||||
public void clearDictCache() {
|
public void clearDictCache() {
|
||||||
DictUtils.clearDictCache();
|
CacheUtils.clear(CacheNames.SYS_DICT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -175,13 +172,14 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService {
|
||||||
* @param dict 字典类型信息
|
* @param dict 字典类型信息
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
|
@CachePut(cacheNames = CacheNames.SYS_DICT, key = "#dict.dictType")
|
||||||
@Override
|
@Override
|
||||||
public int insertDictType(SysDictType dict) {
|
public List<SysDictData> insertDictType(SysDictType dict) {
|
||||||
int row = baseMapper.insert(dict);
|
int row = baseMapper.insert(dict);
|
||||||
if (row > 0) {
|
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 字典类型信息
|
* @param dict 字典类型信息
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
|
@CachePut(cacheNames = CacheNames.SYS_DICT, key = "#dict.dictType")
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public int updateDictType(SysDictType dict) {
|
public List<SysDictData> updateDictType(SysDictType dict) {
|
||||||
SysDictType oldDict = baseMapper.selectById(dict.getDictId());
|
SysDictType oldDict = baseMapper.selectById(dict.getDictId());
|
||||||
dictDataMapper.update(null, new LambdaUpdateWrapper<SysDictData>()
|
dictDataMapper.update(null, new LambdaUpdateWrapper<SysDictData>()
|
||||||
.set(SysDictData::getDictType, dict.getDictType())
|
.set(SysDictData::getDictType, dict.getDictType())
|
||||||
.eq(SysDictData::getDictType, oldDict.getDictType()));
|
.eq(SysDictData::getDictType, oldDict.getDictType()));
|
||||||
int row = baseMapper.updateById(dict);
|
int row = baseMapper.updateById(dict);
|
||||||
if (row > 0) {
|
if (row > 0) {
|
||||||
List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType());
|
CacheUtils.evict(CacheNames.SYS_DICT, oldDict.getDictType());
|
||||||
DictUtils.setDictCache(dict.getDictType(), dictDatas);
|
return dictDataMapper.selectDictDataByType(dict.getDictType());
|
||||||
}
|
}
|
||||||
return row;
|
throw new ServiceException("操作失败");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue