对比新文件 |
| | |
| | | package com.iailab.framework.dict.core; |
| | | |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import com.iailab.framework.common.core.KeyValue; |
| | | import com.iailab.framework.common.util.cache.CacheUtils; |
| | | import com.iailab.module.system.api.dict.DictDataApi; |
| | | import com.iailab.module.system.api.dict.dto.DictDataRespDTO; |
| | | import com.google.common.cache.CacheLoader; |
| | | import com.google.common.cache.LoadingCache; |
| | | import lombok.SneakyThrows; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import java.time.Duration; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 字典工具类 |
| | | * |
| | | * @author iailab |
| | | */ |
| | | @Slf4j |
| | | public class DictFrameworkUtils { |
| | | |
| | | private static DictDataApi dictDataApi; |
| | | |
| | | private static final DictDataRespDTO DICT_DATA_NULL = new DictDataRespDTO(); |
| | | |
| | | // TODO @puhui999:GET_DICT_DATA_CACHE、GET_DICT_DATA_LIST_CACHE、PARSE_DICT_DATA_CACHE 这 3 个缓存是有点重叠,可以思考下,有没可能减少 1 个。微信讨论好私聊,再具体改哈 |
| | | /** |
| | | * 针对 {@link #getDictDataLabel(String, String)} 的缓存 |
| | | */ |
| | | private static final LoadingCache<KeyValue<String, String>, DictDataRespDTO> GET_DICT_DATA_CACHE = CacheUtils.buildAsyncReloadingCache( |
| | | Duration.ofMinutes(1L), // 过期时间 1 分钟 |
| | | new CacheLoader<KeyValue<String, String>, DictDataRespDTO>() { |
| | | |
| | | @Override |
| | | public DictDataRespDTO load(KeyValue<String, String> key) { |
| | | return ObjectUtil.defaultIfNull(dictDataApi.getDictData(key.getKey(), key.getValue()).getCheckedData(), DICT_DATA_NULL); |
| | | } |
| | | |
| | | }); |
| | | |
| | | /** |
| | | * 针对 {@link #getDictDataLabelList(String)} 的缓存 |
| | | */ |
| | | private static final LoadingCache<String, List<String>> GET_DICT_DATA_LIST_CACHE = CacheUtils.buildAsyncReloadingCache( |
| | | Duration.ofMinutes(1L), // 过期时间 1 分钟 |
| | | new CacheLoader<String, List<String>>() { |
| | | |
| | | @Override |
| | | public List<String> load(String dictType) { |
| | | return dictDataApi.getDictDataLabelList(dictType); |
| | | } |
| | | |
| | | }); |
| | | |
| | | /** |
| | | * 针对 {@link #parseDictDataValue(String, String)} 的缓存 |
| | | */ |
| | | private static final LoadingCache<KeyValue<String, String>, DictDataRespDTO> PARSE_DICT_DATA_CACHE = CacheUtils.buildAsyncReloadingCache( |
| | | Duration.ofMinutes(1L), // 过期时间 1 分钟 |
| | | new CacheLoader<KeyValue<String, String>, DictDataRespDTO>() { |
| | | |
| | | @Override |
| | | public DictDataRespDTO load(KeyValue<String, String> key) { |
| | | return ObjectUtil.defaultIfNull(dictDataApi.parseDictData(key.getKey(), key.getValue()).getCheckedData(), DICT_DATA_NULL); |
| | | } |
| | | |
| | | }); |
| | | |
| | | public static void init(DictDataApi dictDataApi) { |
| | | DictFrameworkUtils.dictDataApi = dictDataApi; |
| | | log.info("[init][初始化 DictFrameworkUtils 成功]"); |
| | | } |
| | | |
| | | @SneakyThrows |
| | | public static String getDictDataLabel(String dictType, Integer value) { |
| | | return GET_DICT_DATA_CACHE.get(new KeyValue<>(dictType, String.valueOf(value))).getLabel(); |
| | | } |
| | | |
| | | @SneakyThrows |
| | | public static String getDictDataLabel(String dictType, String value) { |
| | | return GET_DICT_DATA_CACHE.get(new KeyValue<>(dictType, value)).getLabel(); |
| | | } |
| | | |
| | | @SneakyThrows |
| | | public static List<String> getDictDataLabelList(String dictType) { |
| | | return GET_DICT_DATA_LIST_CACHE.get(dictType); |
| | | } |
| | | |
| | | @SneakyThrows |
| | | public static String parseDictDataValue(String dictType, String label) { |
| | | return PARSE_DICT_DATA_CACHE.get(new KeyValue<>(dictType, label)).getValue(); |
| | | } |
| | | |
| | | } |