From 6d3f4f5a04ba35a6b7d5073b92d5ec490323e442 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, 22 Nov 2021 02:43:22 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=8A=BD=E8=B1=A1=20DictService=20?= =?UTF-8?q?=E9=80=9A=E7=94=A8=20=E5=AD=97=E5=85=B8=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/service/DictService.java | 57 ++++++++++ .../service/impl/SysDictDataServiceImpl.java | 19 +++- .../service/impl/SysDictTypeServiceImpl.java | 104 ++++++++++++++++-- 3 files changed, 166 insertions(+), 14 deletions(-) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/service/DictService.java diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/service/DictService.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/DictService.java new file mode 100644 index 000000000..b334c82af --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/DictService.java @@ -0,0 +1,57 @@ +package com.ruoyi.common.core.service; + +/** + * 通用 字典服务 + * + * @author Lion Li + */ +public interface DictService { + + /** + * 分隔符 + */ + String SEPARATOR = ","; + + /** + * 根据字典类型和字典值获取字典标签 + * + * @param dictType 字典类型 + * @param dictValue 字典值 + * @return 字典标签 + */ + default String getDictLabel(String dictType, String dictValue) { + return getDictLabel(dictType, dictValue, SEPARATOR); + } + + /** + * 根据字典类型和字典标签获取字典值 + * + * @param dictType 字典类型 + * @param dictLabel 字典标签 + * @return 字典值 + */ + default String getDictValue(String dictType, String dictLabel) { + return getDictValue(dictType, dictLabel, SEPARATOR); + } + + /** + * 根据字典类型和字典值获取字典标签 + * + * @param dictType 字典类型 + * @param dictValue 字典值 + * @param separator 分隔符 + * @return 字典标签 + */ + String getDictLabel(String dictType, String dictValue, String separator); + + /** + * 根据字典类型和字典标签获取字典值 + * + * @param dictType 字典类型 + * @param dictLabel 字典标签 + * @param separator 分隔符 + * @return 字典值 + */ + String getDictValue(String dictType, String dictLabel, String separator); + +} 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 35908e3b1..d2ac2a02e 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 @@ -1,11 +1,12 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.utils.DictUtils; import com.ruoyi.common.utils.PageUtils; +import com.ruoyi.common.utils.RedisUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.mapper.SysDictDataMapper; import com.ruoyi.system.service.ISysDictDataService; @@ -85,7 +86,7 @@ public class SysDictDataServiceImpl extends ServicePlusImpl dictDatas = baseMapper.selectDictDataByType(data.getDictType()); - DictUtils.setDictCache(data.getDictType(), dictDatas); + RedisUtils.setCacheObject(getCacheKey(data.getDictType()), dictDatas); } } @@ -100,7 +101,7 @@ public class SysDictDataServiceImpl extends ServicePlusImpl 0) { List dictDatas = baseMapper.selectDictDataByType(data.getDictType()); - DictUtils.setDictCache(data.getDictType(), dictDatas); + RedisUtils.setCacheObject(getCacheKey(data.getDictType()), dictDatas); } return row; } @@ -116,8 +117,18 @@ public class SysDictDataServiceImpl extends ServicePlusImpl 0) { List dictDatas = baseMapper.selectDictDataByType(data.getDictType()); - DictUtils.setDictCache(data.getDictType(), dictDatas); + RedisUtils.setCacheObject(getCacheKey(data.getDictType()), dictDatas); } return row; } + + /** + * 设置cache key + * + * @param configKey 参数键 + * @return 缓存键key + */ + String getCacheKey(String configKey) { + return Constants.SYS_DICT_KEY + configKey; + } } 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 0cdce84c1..c554abb43 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 @@ -3,14 +3,17 @@ package com.ruoyi.system.service.impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.common.core.domain.entity.SysDictType; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.service.DictService; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.DictUtils; import com.ruoyi.common.utils.PageUtils; +import com.ruoyi.common.utils.RedisUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.mapper.SysDictDataMapper; import com.ruoyi.system.mapper.SysDictTypeMapper; @@ -21,6 +24,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -30,16 +34,21 @@ import java.util.Map; * @author Lion Li */ @Service -public class SysDictTypeServiceImpl extends ServicePlusImpl implements ISysDictTypeService { +public class SysDictTypeServiceImpl extends ServicePlusImpl implements ISysDictTypeService, DictService { @Autowired private SysDictDataMapper dictDataMapper; + @Autowired + private RuoYiConfig ruoyiConfig; /** * 项目启动时,初始化字典到缓存 */ @PostConstruct public void init() { + if (ruoyiConfig.isCacheLazy()){ + return; + } loadingDictCache(); } @@ -98,13 +107,13 @@ public class SysDictTypeServiceImpl extends ServicePlusImpl selectDictDataByType(String dictType) { - List dictDatas = DictUtils.getDictCache(dictType); - if (CollUtil.isNotEmpty(dictDatas)) { + List dictDatas = RedisUtils.getCacheObject(getCacheKey(dictType)); + if (StringUtils.isNotEmpty(dictDatas)) { return dictDatas; } dictDatas = dictDataMapper.selectDictDataByType(dictType); if (CollUtil.isNotEmpty(dictDatas)) { - DictUtils.setDictCache(dictType, dictDatas); + RedisUtils.setCacheObject(getCacheKey(dictType), dictDatas); return dictDatas; } return null; @@ -146,7 +155,7 @@ public class SysDictTypeServiceImpl extends ServicePlusImpl 0) { throw new ServiceException(String.format("%1$s已分配,不能删除", dictType.getDictName())); } - DictUtils.removeDictCache(dictType.getDictType()); + RedisUtils.deleteObject(getCacheKey(dictType.getDictType())); } baseMapper.deleteBatchIds(Arrays.asList(dictIds)); } @@ -159,7 +168,7 @@ public class SysDictTypeServiceImpl extends ServicePlusImpl dictTypeList = list(); for (SysDictType dictType : dictTypeList) { List dictDatas = dictDataMapper.selectDictDataByType(dictType.getDictType()); - DictUtils.setDictCache(dictType.getDictType(), dictDatas); + RedisUtils.setCacheObject(getCacheKey(dictType.getDictType()), dictDatas); } } @@ -168,7 +177,8 @@ public class SysDictTypeServiceImpl extends ServicePlusImpl keys = RedisUtils.keys(Constants.SYS_DICT_KEY + "*"); + RedisUtils.deleteObject(keys); } /** @@ -190,7 +200,7 @@ public class SysDictTypeServiceImpl extends ServicePlusImpl 0) { - DictUtils.setDictCache(dict.getDictType(), null); + RedisUtils.setCacheObject(getCacheKey(dict.getDictType()), null); } return row; } @@ -211,7 +221,7 @@ public class SysDictTypeServiceImpl extends ServicePlusImpl 0) { List dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType()); - DictUtils.setDictCache(dict.getDictType(), dictDatas); + RedisUtils.setCacheObject(getCacheKey(dict.getDictType()), dictDatas); } return row; } @@ -233,4 +243,78 @@ public class SysDictTypeServiceImpl extends ServicePlusImpl datas = selectDictDataByType(dictType); + + if (StringUtils.containsAny(dictValue, separator) && CollUtil.isNotEmpty(datas)) { + for (SysDictData dict : datas) { + for (String value : dictValue.split(separator)) { + if (value.equals(dict.getDictValue())) { + propertyString.append(dict.getDictLabel() + separator); + break; + } + } + } + } else { + for (SysDictData dict : datas) { + if (dictValue.equals(dict.getDictValue())) { + return dict.getDictLabel(); + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 根据字典类型和字典标签获取字典值 + * + * @param dictType 字典类型 + * @param dictLabel 字典标签 + * @param separator 分隔符 + * @return 字典值 + */ + @Override + public String getDictValue(String dictType, String dictLabel, String separator) { + StringBuilder propertyString = new StringBuilder(); + List datas = selectDictDataByType(dictType); + + if (StringUtils.containsAny(dictLabel, separator) && CollUtil.isNotEmpty(datas)) { + for (SysDictData dict : datas) { + for (String label : dictLabel.split(separator)) { + if (label.equals(dict.getDictLabel())) { + propertyString.append(dict.getDictValue() + separator); + break; + } + } + } + } else { + for (SysDictData dict : datas) { + if (dictLabel.equals(dict.getDictLabel())) { + return dict.getDictValue(); + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 设置cache key + * + * @param configKey 参数键 + * @return 缓存键key + */ + String getCacheKey(String configKey) { + return Constants.SYS_DICT_KEY + configKey; + } }