From 1ebb3075ba5d11162fd5b797ebc92e6f070ad592 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Wed, 18 Mar 2020 15:03:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=97=E5=85=B8=E7=AE=A1=E7=90=86=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=BC=93=E5=AD=98=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/SysDictTypeController.java | 22 +++-- .../main/resources/ehcache/ehcache-shiro.xml | 18 +++- .../templates/system/config/config.html | 1 + .../templates/system/dict/type/type.html | 8 ++ .../com/ruoyi/common/constant/Constants.java | 10 +++ .../com/ruoyi/common/utils/StringUtils.java | 6 ++ .../framework/web/service/DictService.java | 6 +- .../system/service/ISysDictDataService.java | 16 ---- .../system/service/ISysDictTypeService.java | 24 ++++-- .../service/impl/SysDictDataServiceImpl.java | 46 +++++------ .../service/impl/SysDictTypeServiceImpl.java | 82 +++++++++++++++---- .../com/ruoyi/system/utils/DictUtils.java | 72 ++++++++++++++++ 12 files changed, 233 insertions(+), 78 deletions(-) create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/utils/DictUtils.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java index bc8950d7..cde8ae79 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java @@ -125,14 +125,20 @@ public class SysDictTypeController extends BaseController @ResponseBody public AjaxResult remove(String ids) { - try - { - return toAjax(dictTypeService.deleteDictTypeByIds(ids)); - } - catch (Exception e) - { - return error(e.getMessage()); - } + return toAjax(dictTypeService.deleteDictTypeByIds(ids)); + } + + /** + * 清空缓存 + */ + @RequiresPermissions("system:dict:remove") + @Log(title = "字典类型", businessType = BusinessType.CLEAN) + @GetMapping("/clearCache") + @ResponseBody + public AjaxResult clearCache() + { + dictTypeService.clearCache(); + return success(); } /** diff --git a/ruoyi-admin/src/main/resources/ehcache/ehcache-shiro.xml b/ruoyi-admin/src/main/resources/ehcache/ehcache-shiro.xml index 1c028892..72469e13 100644 --- a/ruoyi-admin/src/main/resources/ehcache/ehcache-shiro.xml +++ b/ruoyi-admin/src/main/resources/ehcache/ehcache-shiro.xml @@ -41,7 +41,15 @@ timeToIdleSeconds="0" statistics="true"> - + + + + + + + + + 导出 + + 清理缓存 +
@@ -132,6 +135,11 @@ var url = prefix + '/detail/' + dictId; $.modal.openTab("字典数据", url); } + + /** 清理字典缓存 */ + function clearCache() { + $.operate.get(prefix + "/clearCache"); + } \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java index 98f2f62c..f7627fb2 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java @@ -67,6 +67,16 @@ public class Constants */ public static final String SYS_CONFIG_KEY = "sys_config:"; + /** + * 字典管理 cache name + */ + public static final String SYS_DICT_CACHE = "sys-dict"; + + /** + * 字典管理 cache key + */ + public static final String SYS_DICT_KEY = "sys_dict:"; + /** * 资源映射路径 前缀 */ diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java index 86dee8a8..2022489f 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java @@ -395,4 +395,10 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils } return sb.toString(); } + + @SuppressWarnings("unchecked") + public static T cast(Object obj) + { + return (T) obj; + } } \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/DictService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/DictService.java index 64e7c8a0..cd37e3eb 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/DictService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/DictService.java @@ -5,6 +5,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.system.domain.SysDictData; import com.ruoyi.system.service.ISysDictDataService; +import com.ruoyi.system.service.ISysDictTypeService; /** * RuoYi首创 html调用 thymeleaf 实现字典读取 @@ -14,6 +15,9 @@ import com.ruoyi.system.service.ISysDictDataService; @Service("dict") public class DictService { + @Autowired + private ISysDictTypeService dictTypeService; + @Autowired private ISysDictDataService dictDataService; @@ -25,7 +29,7 @@ public class DictService */ public List getType(String dictType) { - return dictDataService.selectDictDataByType(dictType); + return dictTypeService.selectDictDataByType(dictType); } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java index 68d68d81..857e4366 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java @@ -18,14 +18,6 @@ public interface ISysDictDataService */ public List selectDictDataList(SysDictData dictData); - /** - * 根据字典类型查询字典数据 - * - * @param dictType 字典类型 - * @return 字典数据集合信息 - */ - public List selectDictDataByType(String dictType); - /** * 根据字典类型和字典键值查询字典数据信息 * @@ -43,14 +35,6 @@ public interface ISysDictDataService */ public SysDictData selectDictDataById(Long dictCode); - /** - * 通过字典ID删除字典数据信息 - * - * @param dictCode 字典数据ID - * @return 结果 - */ - public int deleteDictDataById(Long dictCode); - /** * 批量删除字典数据 * diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java index dc22381d..e0294622 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java @@ -2,6 +2,7 @@ package com.ruoyi.system.service; import java.util.List; import com.ruoyi.common.core.domain.Ztree; +import com.ruoyi.system.domain.SysDictData; import com.ruoyi.system.domain.SysDictType; /** @@ -26,6 +27,14 @@ public interface ISysDictTypeService */ public List selectDictTypeAll(); + /** + * 根据字典类型查询字典数据 + * + * @param dictType 字典类型 + * @return 字典数据集合信息 + */ + public List selectDictDataByType(String dictType); + /** * 根据字典类型ID查询信息 * @@ -42,14 +51,6 @@ public interface ISysDictTypeService */ public SysDictType selectDictTypeByType(String dictType); - /** - * 通过字典ID删除字典信息 - * - * @param dictId 字典ID - * @return 结果 - */ - public int deleteDictTypeById(Long dictId); - /** * 批量删除字典类型 * @@ -57,7 +58,12 @@ public interface ISysDictTypeService * @return 结果 * @throws Exception 异常 */ - public int deleteDictTypeByIds(String ids) throws Exception; + public int deleteDictTypeByIds(String ids); + + /** + * 清空缓存数据 + */ + public void clearCache(); /** * 新增保存字典类型信息 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java index 502e03f4..67858799 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java @@ -7,6 +7,7 @@ import com.ruoyi.common.core.text.Convert; import com.ruoyi.system.domain.SysDictData; import com.ruoyi.system.mapper.SysDictDataMapper; import com.ruoyi.system.service.ISysDictDataService; +import com.ruoyi.system.utils.DictUtils; /** * 字典 业务层处理 @@ -31,18 +32,6 @@ public class SysDictDataServiceImpl implements ISysDictDataService return dictDataMapper.selectDictDataList(dictData); } - /** - * 根据字典类型查询字典数据 - * - * @param dictType 字典类型 - * @return 字典数据集合信息 - */ - @Override - public List selectDictDataByType(String dictType) - { - return dictDataMapper.selectDictDataByType(dictType); - } - /** * 根据字典类型和字典键值查询字典数据信息 * @@ -68,18 +57,6 @@ public class SysDictDataServiceImpl implements ISysDictDataService return dictDataMapper.selectDictDataById(dictCode); } - /** - * 通过字典ID删除字典数据信息 - * - * @param dictCode 字典数据ID - * @return 结果 - */ - @Override - public int deleteDictDataById(Long dictCode) - { - return dictDataMapper.deleteDictDataById(dictCode); - } - /** * 批量删除字典数据 * @@ -89,7 +66,12 @@ public class SysDictDataServiceImpl implements ISysDictDataService @Override public int deleteDictDataByIds(String ids) { - return dictDataMapper.deleteDictDataByIds(Convert.toStrArray(ids)); + int row = dictDataMapper.deleteDictDataByIds(Convert.toStrArray(ids)); + if (row > 0) + { + DictUtils.clearDictCache(); + } + return row; } /** @@ -101,7 +83,12 @@ public class SysDictDataServiceImpl implements ISysDictDataService @Override public int insertDictData(SysDictData dictData) { - return dictDataMapper.insertDictData(dictData); + int row = dictDataMapper.insertDictData(dictData); + if (row > 0) + { + DictUtils.clearDictCache(); + } + return row; } /** @@ -113,6 +100,11 @@ public class SysDictDataServiceImpl implements ISysDictDataService @Override public int updateDictData(SysDictData dictData) { - return dictDataMapper.updateDictData(dictData); + int row = dictDataMapper.updateDictData(dictData); + if (row > 0) + { + DictUtils.clearDictCache(); + } + return row; } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java index 34ca02ba..3ab17362 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java @@ -2,6 +2,7 @@ package com.ruoyi.system.service.impl; import java.util.ArrayList; import java.util.List; +import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -10,10 +11,12 @@ import com.ruoyi.common.core.domain.Ztree; import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.exception.BusinessException; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.SysDictData; import com.ruoyi.system.domain.SysDictType; import com.ruoyi.system.mapper.SysDictDataMapper; import com.ruoyi.system.mapper.SysDictTypeMapper; import com.ruoyi.system.service.ISysDictTypeService; +import com.ruoyi.system.utils.DictUtils; /** * 字典 业务层处理 @@ -29,6 +32,20 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService @Autowired private SysDictDataMapper dictDataMapper; + /** + * 项目启动时,初始化字典到缓存 + */ + @PostConstruct + public void init() + { + List dictTypeList = dictTypeMapper.selectDictTypeAll(); + for (SysDictType dictType : dictTypeList) + { + List dictDatas = dictDataMapper.selectDictDataByType(dictType.getDictType()); + DictUtils.setDictCache(dictType.getDictType(), dictDatas); + } + } + /** * 根据条件分页查询字典类型 * @@ -52,6 +69,29 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService return dictTypeMapper.selectDictTypeAll(); } + /** + * 根据字典类型查询字典数据 + * + * @param dictType 字典类型 + * @return 字典数据集合信息 + */ + @Override + public List selectDictDataByType(String dictType) + { + List dictDatas = DictUtils.getDictCache(dictType); + if (StringUtils.isNotNull(dictDatas)) + { + return dictDatas; + } + dictDatas = dictDataMapper.selectDictDataByType(dictType); + if (StringUtils.isNotNull(dictDatas)) + { + DictUtils.setDictCache(dictType, dictDatas); + return dictDatas; + } + return null; + } + /** * 根据字典类型ID查询信息 * @@ -75,18 +115,6 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService return dictTypeMapper.selectDictTypeByType(dictType); } - /** - * 通过字典ID删除字典信息 - * - * @param dictId 字典ID - * @return 结果 - */ - @Override - public int deleteDictTypeById(Long dictId) - { - return dictTypeMapper.deleteDictTypeById(dictId); - } - /** * 批量删除字典类型 * @@ -94,7 +122,7 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService * @return 结果 */ @Override - public int deleteDictTypeByIds(String ids) throws BusinessException + public int deleteDictTypeByIds(String ids) { Long[] dictIds = Convert.toLongArray(ids); for (Long dictId : dictIds) @@ -105,8 +133,20 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService throw new BusinessException(String.format("%1$s已分配,不能删除", dictType.getDictName())); } } + int count = dictTypeMapper.deleteDictTypeByIds(dictIds); + if (count > 0) + { + DictUtils.clearDictCache(); + } + return count; + } - return dictTypeMapper.deleteDictTypeByIds(dictIds); + /** + * 清空缓存数据 + */ + public void clearCache() + { + DictUtils.clearDictCache(); } /** @@ -118,7 +158,12 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService @Override public int insertDictType(SysDictType dictType) { - return dictTypeMapper.insertDictType(dictType); + int row = dictTypeMapper.insertDictType(dictType); + if (row > 0) + { + DictUtils.clearDictCache(); + } + return row; } /** @@ -133,7 +178,12 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService { SysDictType oldDict = dictTypeMapper.selectDictTypeById(dictType.getDictId()); dictDataMapper.updateDictDataType(oldDict.getDictType(), dictType.getDictType()); - return dictTypeMapper.updateDictType(dictType); + int row = dictTypeMapper.updateDictType(dictType); + if (row > 0) + { + DictUtils.clearDictCache(); + } + return row; } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/DictUtils.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/DictUtils.java new file mode 100644 index 00000000..9562d193 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/DictUtils.java @@ -0,0 +1,72 @@ +package com.ruoyi.system.utils; + +import java.util.List; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.utils.CacheUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.SysDictData; + +/** + * 字典工具类 + * + * @author ruoyi + */ +public class DictUtils +{ + /** + * 设置字典缓存 + * + * @param key 参数键 + * @param dictDatas 字典数据列表 + */ + public static void setDictCache(String key, List dictDatas) + { + CacheUtils.put(getCacheName(), getCacheKey(key), dictDatas); + } + + /** + * 获取字典缓存 + * + * @param key 参数键 + * @return dictDatas 字典数据列表 + */ + public static List getDictCache(String key) + { + Object cacheObj = CacheUtils.get(getCacheName(), getCacheKey(key)); + if (StringUtils.isNotNull(cacheObj)) + { + List DictDatas = StringUtils.cast(cacheObj); + return DictDatas; + } + return null; + } + + /** + * 清空字典缓存 + */ + public static void clearDictCache() + { + CacheUtils.removeAll(getCacheName()); + } + + /** + * 获取cache name + * + * @return 缓存名 + */ + public static String getCacheName() + { + return Constants.SYS_DICT_CACHE; + } + + /** + * 设置cache key + * + * @param configKey 参数键 + * @return 缓存键key + */ + public static String getCacheKey(String configKey) + { + return Constants.SYS_DICT_KEY + configKey; + } +}