1. 增加字典数据的缓存与 util

2. 引入 Excel 组件
This commit is contained in:
YunaiV
2021-01-13 01:09:26 +08:00
parent ec00936532
commit fc444728c9
22 changed files with 277 additions and 98 deletions

View File

@@ -1,6 +1,7 @@
package cn.iocoder.dashboard.modules.system.service.dict;
import cn.iocoder.dashboard.common.pojo.PageResult;
import cn.iocoder.dashboard.framework.dict.core.service.DictDataFrameworkService;
import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataCreateReqVO;
import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataPageReqVO;
import cn.iocoder.dashboard.modules.system.controller.dict.vo.data.SysDictDataUpdateReqVO;
@@ -13,8 +14,18 @@ import java.util.List;
*
* @author ruoyi
*/
public interface SysDictDataService {
public interface SysDictDataService extends DictDataFrameworkService {
/**
* 初始化,主要是初始化缓存
*/
void init();
/**
* 获得字典数据列表
*
* @return 字典数据全列表
*/
List<SysDictDataDO> listDictDatas();
/**

View File

@@ -12,9 +12,11 @@ import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictData
import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dict.SysDictTypeDO;
import cn.iocoder.dashboard.modules.system.service.dict.SysDictDataService;
import cn.iocoder.dashboard.modules.system.service.dict.SysDictTypeService;
import com.google.common.collect.ImmutableTable;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
@@ -32,12 +34,42 @@ public class SysDictDataServiceImpl implements SysDictDataService {
.comparing(SysDictDataDO::getDictType)
.thenComparingInt(SysDictDataDO::getSort);
/**
* 字典数据缓存,第二个 key 使用 label
*
* key1字典类型 dictType
* key2字典标签 label
*/
private ImmutableTable<String, String, SysDictDataDO> labelDictDataCache;
/**
* 字典数据缓存,第二个 key 使用 value
*
* key1字典类型 dictType
* key2字典值 value
*/
private ImmutableTable<String, String, SysDictDataDO> valueDictDataCache;
@Resource
private SysDictTypeService dictTypeService;
@Resource
private SysDictDataMapper dictDataMapper;
@Override
public void init() {
// 获得字典数据
List<SysDictDataDO> list = this.listDictDatas();
// 构建缓存
ImmutableTable.Builder<String, String, SysDictDataDO> labelDictDataBuilder = ImmutableTable.builder();
ImmutableTable.Builder<String, String, SysDictDataDO> valueDictDataBuilder = ImmutableTable.builder();
list.forEach(dictData -> {
labelDictDataBuilder.put(dictData.getDictType(), dictData.getLabel(), dictData);
valueDictDataBuilder.put(dictData.getDictType(), dictData.getValue(), dictData);
});
labelDictDataCache = labelDictDataBuilder.build();
valueDictDataCache = valueDictDataBuilder.build();
}
@Override
public List<SysDictDataDO> listDictDatas() {
List<SysDictDataDO> list = dictDataMapper.selectList();
@@ -130,4 +162,19 @@ public class SysDictDataServiceImpl implements SysDictDataService {
}
}
@Override
public SysDictDataDO getDictDataFromCache(String type, String value) {
return valueDictDataCache.get(type, value);
}
@Override
public SysDictDataDO parseDictDataFromCache(String type, String label) {
return labelDictDataCache.get(type, label);
}
@Override
public List<SysDictDataDO> listDictDatasFromCache(String type) {
return new ArrayList<>(labelDictDataCache.row(type).values());
}
}