Commit 1e2058bdfbbb0cce1a85f46b9c2b4a5238de04fb

Authored by RuoYi
1 parent 0d546e4b

字典管理添加缓存读取

ruoyi-ui/src/api/system/dict/data.js
... ... @@ -20,7 +20,7 @@ export function getData(dictCode) {
20 20 // 根据字典类型查询字典数据信息
21 21 export function getDicts(dictType) {
22 22 return request({
23   - url: '/system/dict/data/dictType/' + dictType,
  23 + url: '/system/dict/data/type/' + dictType,
24 24 method: 'get'
25 25 })
26 26 }
... ...
ruoyi-ui/src/api/system/dict/type.js
... ... @@ -43,6 +43,14 @@ export function delType(dictId) {
43 43 })
44 44 }
45 45  
  46 +// 清理参数缓存
  47 +export function clearCache() {
  48 + return request({
  49 + url: '/system/dict/type/clearCache',
  50 + method: 'delete'
  51 + })
  52 +}
  53 +
46 54 // 导出字典类型
47 55 export function exportType(query) {
48 56 return request({
... ...
ruoyi-ui/src/views/system/config/index.vue
... ... @@ -352,7 +352,6 @@ export default {
352 352 },
353 353 /** 清理缓存按钮操作 */
354 354 handleClearCache() {
355   - const queryParams = this.queryParams;
356 355 clearCache().then(response => {
357 356 if (response.code === 200) {
358 357 this.msgSuccess("清理成功");
... ...
ruoyi-ui/src/views/system/dict/index.vue
... ... @@ -94,6 +94,15 @@
94 94 v-hasPermi="['system:dict:export']"
95 95 >导出</el-button>
96 96 </el-col>
  97 + <el-col :span="1.5">
  98 + <el-button
  99 + type="danger"
  100 + icon="el-icon-refresh"
  101 + size="mini"
  102 + @click="handleClearCache"
  103 + v-hasPermi="['system:dict:remove']"
  104 + >清理缓存</el-button>
  105 + </el-col>
97 106 </el-row>
98 107  
99 108 <el-table v-loading="loading" :data="typeList" @selection-change="handleSelectionChange">
... ... @@ -173,7 +182,7 @@
173 182 </template>
174 183  
175 184 <script>
176   -import { listType, getType, delType, addType, updateType, exportType } from "@/api/system/dict/type";
  185 +import { listType, getType, delType, addType, updateType, exportType, clearCache } from "@/api/system/dict/type";
177 186  
178 187 export default {
179 188 name: "Dict",
... ... @@ -344,6 +353,16 @@ export default {
344 353 }).then(response => {
345 354 this.download(response.msg);
346 355 }).catch(function() {});
  356 + },
  357 + /** 清理缓存按钮操作 */
  358 + handleClearCache() {
  359 + clearCache().then(response => {
  360 + if (response.code === 200) {
  361 + this.msgSuccess("清理成功");
  362 + } else {
  363 + this.msgError(response.msg);
  364 + }
  365 + });
347 366 }
348 367 }
349 368 };
... ...
ruoyi/src/main/java/com/ruoyi/common/constant/Constants.java
... ... @@ -115,6 +115,11 @@ public class Constants
115 115 public static final String SYS_CONFIG_KEY = "sys_config:";
116 116  
117 117 /**
  118 + * 字典管理 cache key
  119 + */
  120 + public static final String SYS_DICT_KEY = "sys_dict:";
  121 +
  122 + /**
118 123 * 资源映射路径 前缀
119 124 */
120 125 public static final String RESOURCE_PREFIX = "/profile";
... ...
ruoyi/src/main/java/com/ruoyi/common/utils/DictUtils.java 0 → 100644
  1 +package com.ruoyi.common.utils;
  2 +
  3 +import java.util.Collection;
  4 +import java.util.List;
  5 +import com.ruoyi.common.constant.Constants;
  6 +import com.ruoyi.common.utils.spring.SpringUtils;
  7 +import com.ruoyi.framework.redis.RedisCache;
  8 +import com.ruoyi.project.system.domain.SysDictData;
  9 +
  10 +/**
  11 + * 字典工具类
  12 + *
  13 + * @author ruoyi
  14 + */
  15 +public class DictUtils
  16 +{
  17 + /**
  18 + * 设置字典缓存
  19 + *
  20 + * @param key 参数键
  21 + * @param dictDatas 字典数据列表
  22 + */
  23 + public static void setDictCache(String key, List<SysDictData> dictDatas)
  24 + {
  25 + SpringUtils.getBean(RedisCache.class).setCacheObject(getCacheKey(key), dictDatas);
  26 + }
  27 +
  28 + /**
  29 + * 获取字典缓存
  30 + *
  31 + * @param key 参数键
  32 + * @return dictDatas 字典数据列表
  33 + */
  34 + public static List<SysDictData> getDictCache(String key)
  35 + {
  36 + Object cacheObj = SpringUtils.getBean(RedisCache.class).getCacheObject(getCacheKey(key));
  37 + if (StringUtils.isNotNull(cacheObj))
  38 + {
  39 + List<SysDictData> DictDatas = StringUtils.cast(cacheObj);
  40 + return DictDatas;
  41 + }
  42 + return null;
  43 + }
  44 +
  45 + /**
  46 + * 清空字典缓存
  47 + */
  48 + public static void clearDictCache()
  49 + {
  50 + Collection<String> keys = SpringUtils.getBean(RedisCache.class).keys(Constants.SYS_DICT_KEY + "*");
  51 + SpringUtils.getBean(RedisCache.class).deleteObject(keys);
  52 + }
  53 +
  54 + /**
  55 + * 设置cache key
  56 + *
  57 + * @param configKey 参数键
  58 + * @return 缓存键key
  59 + */
  60 + public static String getCacheKey(String configKey)
  61 + {
  62 + return Constants.SYS_DICT_KEY + configKey;
  63 + }
  64 +}
... ...
ruoyi/src/main/java/com/ruoyi/common/utils/StringUtils.java
... ... @@ -450,4 +450,10 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils
450 450 }
451 451 return sb.toString();
452 452 }
  453 +
  454 + @SuppressWarnings("unchecked")
  455 + public static <T> T cast(Object obj)
  456 + {
  457 + return (T) obj;
  458 + }
453 459 }
454 460 \ No newline at end of file
... ...
ruoyi/src/main/java/com/ruoyi/project/system/controller/SysDictDataController.java
... ... @@ -21,6 +21,7 @@ import com.ruoyi.framework.web.domain.AjaxResult;
21 21 import com.ruoyi.framework.web.page.TableDataInfo;
22 22 import com.ruoyi.project.system.domain.SysDictData;
23 23 import com.ruoyi.project.system.service.ISysDictDataService;
  24 +import com.ruoyi.project.system.service.ISysDictTypeService;
24 25  
25 26 /**
26 27 * 数据字典信息
... ... @@ -34,6 +35,9 @@ public class SysDictDataController extends BaseController
34 35 @Autowired
35 36 private ISysDictDataService dictDataService;
36 37  
  38 + @Autowired
  39 + private ISysDictTypeService dictTypeService;
  40 +
37 41 @PreAuthorize("@ss.hasPermi('system:dict:list')")
38 42 @GetMapping("/list")
39 43 public TableDataInfo list(SysDictData dictData)
... ... @@ -66,10 +70,10 @@ public class SysDictDataController extends BaseController
66 70 /**
67 71 * 根据字典类型查询字典数据信息
68 72 */
69   - @GetMapping(value = "/dictType/{dictType}")
  73 + @GetMapping(value = "/type/{dictType}")
70 74 public AjaxResult dictType(@PathVariable String dictType)
71 75 {
72   - return AjaxResult.success(dictDataService.selectDictDataByType(dictType));
  76 + return AjaxResult.success(dictTypeService.selectDictDataByType(dictType));
73 77 }
74 78  
75 79 /**
... ...
ruoyi/src/main/java/com/ruoyi/project/system/controller/SysDictTypeController.java
... ... @@ -108,6 +108,18 @@ public class SysDictTypeController extends BaseController
108 108 }
109 109  
110 110 /**
  111 + * 清空缓存
  112 + */
  113 + @PreAuthorize("@ss.hasPermi('system:dict:remove')")
  114 + @Log(title = "字典类型", businessType = BusinessType.CLEAN)
  115 + @DeleteMapping("/clearCache")
  116 + public AjaxResult clearCache()
  117 + {
  118 + dictTypeService.clearCache();
  119 + return AjaxResult.success();
  120 + }
  121 +
  122 + /**
111 123 * 获取字典选择框列表
112 124 */
113 125 @GetMapping("/optionselect")
... ...
ruoyi/src/main/java/com/ruoyi/project/system/service/ISysDictDataService.java
... ... @@ -19,14 +19,6 @@ public interface ISysDictDataService
19 19 public List<SysDictData> selectDictDataList(SysDictData dictData);
20 20  
21 21 /**
22   - * 根据字典类型查询字典数据
23   - *
24   - * @param dictType 字典类型
25   - * @return 字典数据集合信息
26   - */
27   - public List<SysDictData> selectDictDataByType(String dictType);
28   -
29   - /**
30 22 * 根据字典类型和字典键值查询字典数据信息
31 23 *
32 24 * @param dictType 字典类型
... ... @@ -44,14 +36,6 @@ public interface ISysDictDataService
44 36 public SysDictData selectDictDataById(Long dictCode);
45 37  
46 38 /**
47   - * 通过字典ID删除字典数据信息
48   - *
49   - * @param dictCode 字典数据ID
50   - * @return 结果
51   - */
52   - public int deleteDictDataById(Long dictCode);
53   -
54   - /**
55 39 * 批量删除字典数据信息
56 40 *
57 41 * @param dictCodes 需要删除的字典数据ID
... ...
ruoyi/src/main/java/com/ruoyi/project/system/service/ISysDictTypeService.java
1 1 package com.ruoyi.project.system.service;
2 2  
3 3 import java.util.List;
  4 +import com.ruoyi.project.system.domain.SysDictData;
4 5 import com.ruoyi.project.system.domain.SysDictType;
5 6  
6 7 /**
... ... @@ -26,6 +27,14 @@ public interface ISysDictTypeService
26 27 public List<SysDictType> selectDictTypeAll();
27 28  
28 29 /**
  30 + * 根据字典类型查询字典数据
  31 + *
  32 + * @param dictType 字典类型
  33 + * @return 字典数据集合信息
  34 + */
  35 + public List<SysDictData> selectDictDataByType(String dictType);
  36 +
  37 + /**
29 38 * 根据字典类型ID查询信息
30 39 *
31 40 * @param dictId 字典类型ID
... ... @@ -42,14 +51,6 @@ public interface ISysDictTypeService
42 51 public SysDictType selectDictTypeByType(String dictType);
43 52  
44 53 /**
45   - * 通过字典ID删除字典信息
46   - *
47   - * @param dictId 字典ID
48   - * @return 结果
49   - */
50   - public int deleteDictTypeById(Long dictId);
51   -
52   - /**
53 54 * 批量删除字典信息
54 55 *
55 56 * @param dictIds 需要删除的字典ID
... ... @@ -58,6 +59,11 @@ public interface ISysDictTypeService
58 59 public int deleteDictTypeByIds(Long[] dictIds);
59 60  
60 61 /**
  62 + * 清空缓存数据
  63 + */
  64 + public void clearCache();
  65 +
  66 + /**
61 67 * 新增保存字典类型信息
62 68 *
63 69 * @param dictType 字典类型信息
... ...
ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysDictDataServiceImpl.java
... ... @@ -3,6 +3,7 @@ package com.ruoyi.project.system.service.impl;
3 3 import java.util.List;
4 4 import org.springframework.beans.factory.annotation.Autowired;
5 5 import org.springframework.stereotype.Service;
  6 +import com.ruoyi.common.utils.DictUtils;
6 7 import com.ruoyi.project.system.domain.SysDictData;
7 8 import com.ruoyi.project.system.mapper.SysDictDataMapper;
8 9 import com.ruoyi.project.system.service.ISysDictDataService;
... ... @@ -31,18 +32,6 @@ public class SysDictDataServiceImpl implements ISysDictDataService
31 32 }
32 33  
33 34 /**
34   - * 根据字典类型查询字典数据
35   - *
36   - * @param dictType 字典类型
37   - * @return 字典数据集合信息
38   - */
39   - @Override
40   - public List<SysDictData> selectDictDataByType(String dictType)
41   - {
42   - return dictDataMapper.selectDictDataByType(dictType);
43   - }
44   -
45   - /**
46 35 * 根据字典类型和字典键值查询字典数据信息
47 36 *
48 37 * @param dictType 字典类型
... ... @@ -68,18 +57,6 @@ public class SysDictDataServiceImpl implements ISysDictDataService
68 57 }
69 58  
70 59 /**
71   - * 通过字典ID删除字典数据信息
72   - *
73   - * @param dictCode 字典数据ID
74   - * @return 结果
75   - */
76   - @Override
77   - public int deleteDictDataById(Long dictCode)
78   - {
79   - return dictDataMapper.deleteDictDataById(dictCode);
80   - }
81   -
82   - /**
83 60 * 批量删除字典数据信息
84 61 *
85 62 * @param dictCodes 需要删除的字典数据ID
... ... @@ -87,7 +64,12 @@ public class SysDictDataServiceImpl implements ISysDictDataService
87 64 */
88 65 public int deleteDictDataByIds(Long[] dictCodes)
89 66 {
90   - return dictDataMapper.deleteDictDataByIds(dictCodes);
  67 + int row = dictDataMapper.deleteDictDataByIds(dictCodes);
  68 + if (row > 0)
  69 + {
  70 + DictUtils.clearDictCache();
  71 + }
  72 + return row;
91 73 }
92 74  
93 75 /**
... ... @@ -99,7 +81,12 @@ public class SysDictDataServiceImpl implements ISysDictDataService
99 81 @Override
100 82 public int insertDictData(SysDictData dictData)
101 83 {
102   - return dictDataMapper.insertDictData(dictData);
  84 + int row = dictDataMapper.insertDictData(dictData);
  85 + if (row > 0)
  86 + {
  87 + DictUtils.clearDictCache();
  88 + }
  89 + return row;
103 90 }
104 91  
105 92 /**
... ... @@ -111,6 +98,11 @@ public class SysDictDataServiceImpl implements ISysDictDataService
111 98 @Override
112 99 public int updateDictData(SysDictData dictData)
113 100 {
114   - return dictDataMapper.updateDictData(dictData);
  101 + int row = dictDataMapper.updateDictData(dictData);
  102 + if (row > 0)
  103 + {
  104 + DictUtils.clearDictCache();
  105 + }
  106 + return row;
115 107 }
116 108 }
... ...
ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysDictTypeServiceImpl.java
1 1 package com.ruoyi.project.system.service.impl;
2 2  
3 3 import java.util.List;
  4 +import javax.annotation.PostConstruct;
4 5 import org.springframework.beans.factory.annotation.Autowired;
5 6 import org.springframework.stereotype.Service;
6 7 import org.springframework.transaction.annotation.Transactional;
7 8 import com.ruoyi.common.constant.UserConstants;
  9 +import com.ruoyi.common.exception.CustomException;
  10 +import com.ruoyi.common.utils.DictUtils;
8 11 import com.ruoyi.common.utils.StringUtils;
  12 +import com.ruoyi.project.system.domain.SysDictData;
9 13 import com.ruoyi.project.system.domain.SysDictType;
10 14 import com.ruoyi.project.system.mapper.SysDictDataMapper;
11 15 import com.ruoyi.project.system.mapper.SysDictTypeMapper;
... ... @@ -26,6 +30,20 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService
26 30 private SysDictDataMapper dictDataMapper;
27 31  
28 32 /**
  33 + * 项目启动时,初始化字典到缓存
  34 + */
  35 + @PostConstruct
  36 + public void init()
  37 + {
  38 + List<SysDictType> dictTypeList = dictTypeMapper.selectDictTypeAll();
  39 + for (SysDictType dictType : dictTypeList)
  40 + {
  41 + List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dictType.getDictType());
  42 + DictUtils.setDictCache(dictType.getDictType(), dictDatas);
  43 + }
  44 + }
  45 +
  46 + /**
29 47 * 根据条件分页查询字典类型
30 48 *
31 49 * @param dictType 字典类型信息
... ... @@ -49,6 +67,29 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService
49 67 }
50 68  
51 69 /**
  70 + * 根据字典类型查询字典数据
  71 + *
  72 + * @param dictType 字典类型
  73 + * @return 字典数据集合信息
  74 + */
  75 + @Override
  76 + public List<SysDictData> selectDictDataByType(String dictType)
  77 + {
  78 + List<SysDictData> dictDatas = DictUtils.getDictCache(dictType);
  79 + if (StringUtils.isNotNull(dictDatas))
  80 + {
  81 + return dictDatas;
  82 + }
  83 + dictDatas = dictDataMapper.selectDictDataByType(dictType);
  84 + if (StringUtils.isNotNull(dictDatas))
  85 + {
  86 + DictUtils.setDictCache(dictType, dictDatas);
  87 + return dictDatas;
  88 + }
  89 + return null;
  90 + }
  91 +
  92 + /**
52 93 * 根据字典类型ID查询信息
53 94 *
54 95 * @param dictId 字典类型ID
... ... @@ -72,26 +113,35 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService
72 113 }
73 114  
74 115 /**
75   - * 通过字典ID删除字典信息
  116 + * 批量删除字典类型信息
76 117 *
77   - * @param dictId 字典ID
  118 + * @param dictIds 需要删除的字典ID
78 119 * @return 结果
79 120 */
80   - @Override
81   - public int deleteDictTypeById(Long dictId)
  121 + public int deleteDictTypeByIds(Long[] dictIds)
82 122 {
83   - return dictTypeMapper.deleteDictTypeById(dictId);
  123 + for (Long dictId : dictIds)
  124 + {
  125 + SysDictType dictType = selectDictTypeById(dictId);
  126 + if (dictDataMapper.countDictDataByType(dictType.getDictType()) > 0)
  127 + {
  128 + throw new CustomException(String.format("%1$s已分配,不能删除", dictType.getDictName()));
  129 + }
  130 + }
  131 + int count = dictTypeMapper.deleteDictTypeByIds(dictIds);
  132 + if (count > 0)
  133 + {
  134 + DictUtils.clearDictCache();
  135 + }
  136 + return count;
84 137 }
85 138  
86 139 /**
87   - * 批量删除字典类型信息
88   - *
89   - * @param dictIds 需要删除的字典ID
90   - * @return 结果
  140 + * 清空缓存数据
91 141 */
92   - public int deleteDictTypeByIds(Long[] dictIds)
  142 + public void clearCache()
93 143 {
94   - return dictTypeMapper.deleteDictTypeByIds(dictIds);
  144 + DictUtils.clearDictCache();
95 145 }
96 146  
97 147 /**
... ... @@ -103,7 +153,12 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService
103 153 @Override
104 154 public int insertDictType(SysDictType dictType)
105 155 {
106   - return dictTypeMapper.insertDictType(dictType);
  156 + int row = dictTypeMapper.insertDictType(dictType);
  157 + if (row > 0)
  158 + {
  159 + DictUtils.clearDictCache();
  160 + }
  161 + return row;
107 162 }
108 163  
109 164 /**
... ... @@ -118,7 +173,12 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService
118 173 {
119 174 SysDictType oldDict = dictTypeMapper.selectDictTypeById(dictType.getDictId());
120 175 dictDataMapper.updateDictDataType(oldDict.getDictType(), dictType.getDictType());
121   - return dictTypeMapper.updateDictType(dictType);
  176 + int row = dictTypeMapper.updateDictType(dictType);
  177 + if (row > 0)
  178 + {
  179 + DictUtils.clearDictCache();
  180 + }
  181 + return row;
122 182 }
123 183  
124 184 /**
... ...