数据字典
章节简介
此章节介绍系统中对于数据字典的维护、使用、扩展
维护
系统提供了数据字典维护功能,字典的增删改查都在数据字典菜单中进行。
如图所示,先点击新增的父级字典中的查看下级按钮,进入下级菜单页面后,系统提供了以下快捷方式进行批量新增子级字典。
如果使用批量新增的话需要以'名称<英文空格>code<回车符号>'格式提交
例如:
缺少物料 materials_missing
需外包维修 outsource_repair
一行一个。如需要单个新增,可以点击新增按钮,选择建好的父级字典。
提示
注意:字典的code全局唯一,否则会报错。故一般会在子集字典中加入父集字典的code。例如:审核状态的数据字典 audit_status 审核通过的为audit_status_pass。
字典转换
使用场景中经常需要数据字典code转中文,系统已经提供数据字典转换功能,可以直接使用。
数据字典转换在使用的时候,两个地方需要修改
1、你所使用的vo类中需要转换的字段需要加上注解@DictTrans(transTo = "feeCategoryText")列如
@ApiModelProperty(value = "费用类型")
@DictTrans(transTo = "feeCategoryText")
private String feeCategory;
@ApiModelProperty(value = "费用类型-字典值")
private String feeCategoryText;
transTo 指的是转义过后的字段名,默认为字段名+Text 或 字段名+Name,具体根据技术经理的要求而定。
高级方法
splitMark 指的是数据库内字段里的分割符,默认为逗号。
delimiter 指的是转换成中文的分隔符,默认为逗号。
dictName 指的是具体使用的那本字典的名字,默认为框架自带的单本字典名 dict-cache。
join 参数 boolean 值表示是否需要拼接成中文字符串,默认为 true。如果为 false,则返回 List<String> 类型。
2、使用 DictTransUtil.trans(result) 进行转换。result 可以是单个对象,也可以是集合,转换过后会将你所标注的字段进行转换。
@ApiOperation("账单分页查询")
@PostMapping("/pageQuery")
public Result pageQuery(@RequestBody(required = false) BlBillInfoParams params) {
if (params == null) {
params = new BlBillInfoParams();
}
IPage<BlBillInfoPageQueryResultVO> result = baseService.pageQuery(params);
// 转换数据字典
DictTransUtil.trans(result.getRecords());
return new JsonResult<>(result);
}
多本字典支持
当发现系统自带的字典满足不了,需要单独建表处理字典(如省市区数据),但是又想要使用字典转换功能。此时可以将自定义的字典加载进框架中,并通过指定字典的方式去调用
- 首先在
DictCacheInitConfig中,新增方法,加载你的字典 - 然后在
DictTrans注解中,指定dictName
package com.fykj.scaffold.config;
/**
* 项目启动完成后初始化数据字典到缓存
* 可以自定义各种字典
*/
@Component
@Slf4j
public class DictCacheInitConfig {
@Autowired
private DictCacheHelper dictCacheHelper;
@Autowired
private IOtherDictService otherService;
@PostConstruct
public void initSysDict() {
//系统本身的字典初始化,略...
}
@PostConstruct
public void initOtherDict() {
log.info("初始化自定义字典名称数据到缓存");
// 自定义字典初始化 示例
Map<String, String> dictMap = otherService
.list()
.stream()
.collect(Collectors.toMap(Dict::getCode, Dict::getName));
dictCacheHelper.reloadDict(dictMap, "自定义字典名称");
log.info("系统字典加载成功");
}
}
使用方法如下
//非系统数据字典的字典,需要用dictName指定字典名称
@ApiModelProperty(value = "费用类型")
@DictTrans(transTo = "feeCategoryText", dictName="自定义字典名称")
private String feeCategory;
