Skip to content

数据字典管理 PRD

文档信息

项目内容
产品名称PMForge - 数据字典管理
文档版本v2.0
创建日期2026-09-14
最后更新2026-09-24
文档状态评审中
优先级P0

一、功能概述

1.1 功能定位

数据字典是 PMForge 平台的"翻译词典"——它把系统里所有"只能选、不能填"的数据(比如下拉框里的选项、状态标签的颜色、单选框里的值)统一收拢到一个地方管理。

举个例子:用户性别这个字段,前端下拉框要展示"男""女",数据库里存的是"1""2"——这层对应关系就写在数据字典里。如果将来要加一个"未知"选项,只需要在字典里加一条记录,不需要改代码、不需要重新发布。

数据字典采用两级管理结构:

  • 第一级:字典类型 — 相当于"词典的目录",比如"用户性别""订单状态""通知类型"
  • 第二级:字典数据 — 相当于"词典的条目",比如"用户性别"下面有"男""女"两个条目

1.2 目标用户

用户类型核心诉求典型操作
系统管理员维护字典类型与字典数据的增删改查,保证数据准确性新增"订单状态"字典类型,配置"待支付/已支付/已发货/已完成/已取消"5 个选项
前端开发者快速拿到字典数据,渲染下拉框、标签、单选框页面加载时一次性拉取全部字典数据缓存到本地,后续直接使用
后端开发者通过接口或 Service 获取字典值,避免在代码里写死枚举保存订单时调用字典校验接口,确认"订单状态"值合法
运营人员查看与导出字典配置,进行数据核查导出所有字典数据 Excel,线下审计配置是否正确

1.3 业务价值

价值点说明举例
消除硬编码所有枚举值集中在字典里管理,代码里不再出现"魔法数字"过去代码里写 if (status == 1),现在改为 if (status == dict("order_status", "已支付"))
运行时可改修改字典值不需要重启服务或重新部署紧急停用某个选项,管理员在后台点一下"停用"即可生效
高性能读取Redis 缓存保证字典数据毫秒级响应前端加载字典数据 50ms 内返回,不影响页面渲染速度
标准化接口为前端提供统一的字典数据获取方式所有下拉框都走同一个接口获取数据,前端只需对接一次
可导出可审计支持导出 Excel,满足合规审查需求审计人员导出全部字典配置,逐项核查系统参数是否合规

1.4 功能范围

功能分类优先级说明
字典类型 CRUDP0字典类型的创建、查询、编辑、删除
字典数据 CRUDP0字典数据的创建、查询、编辑、删除
字典数据排序P0字典数据按 sort 字段升序展示,值越小排越前
字典状态管理P0字典类型和字典数据都支持启用/停用
字典缓存自动刷新P0数据变更后自动刷新 Redis 缓存,无需人工干预
字典精简列表P0前端一次性获取全部字典数据并本地缓存
字典数据导出P1导出字典类型与字典数据 Excel
字典批量删除P1批量删除字典类型与字典数据
前台字典查询P0App 端通过字典类型直接获取字典数据列表
字典数据校验P0业务模块保存数据时校验字典值是否合法

二、用户场景

2.1 用户角色

角色描述核心诉求
系统管理员小王后台管理人员,负责字典配置维护字典类型和数据的增删改查准确无误,缓存自动同步
前端开发小李应用前端开发人员接口简单好用,一次拿到全部字典数据,减少请求次数
后端开发小张后端开发人员通过 Service 获取字典数据,校验业务数据的字典值合法性
运营人员小陈运营分析人员导出字典数据 Excel,进行数据核查与审计

2.2 使用场景

场景1:管理员新增字典类型并配置数据项

  • 用户:系统管理员小王
  • 背景:产品经理说新增了一个"项目优先级"字段,需要在下拉框里让用户选择"紧急/高/中/低"四个等级
  • 操作步骤
    1. 登录后台 → 进入"数据字典"页面
    2. 点击"新增字典类型" → 填写字典名称"项目优先级"、字典类型编码"project_priority"、状态"正常"、备注"项目管理的优先级选项"
    3. 保存后,在字典类型列表找到"项目优先级",点击右侧"字典数据"进入数据管理
    4. 依次新增 4 条字典数据:
      • 标签"紧急"、值"1"、排序 0、颜色 danger(红色)
      • 标签"高"、值"2"、排序 1、颜色 warning(橙色)
      • 标签"中"、值"3"、排序 2、颜色 primary(蓝色)
      • 标签"低"、值"4"、排序 3、颜色 info(灰色)
  • 期望结果:字典类型创建成功,4 条数据按排序值展示,前端通过字典类型编码"project_priority"即可获取这 4 个选项
  • 异常处理:如果字典类型编码已存在(如之前已创建过"project_priority"),系统提示"字典类型编码已存在,请修改"

场景2:前端开发者一次性缓存字典数据

  • 用户:前端开发小李
  • 背景:小李在开发项目管理页面,页面上有"优先级""状态""类型"等多个下拉框,都需要字典数据
  • 操作步骤
    1. 页面加载时,调用"字典数据精简列表"接口(/admin-api/system/dict-data/simple-list),一次性拿到全部启用状态的字典数据
    2. 前端按 dictType 字段分组,构建本地字典缓存 Map:{ "project_priority": [{label:"紧急", value:"1"}, ...], ... }
    3. 渲染下拉框时,直接从本地 Map 中按字典类型取出选项列表,无需再发请求
  • 期望结果:页面加载只发一次字典请求,后续所有下拉框渲染都走本地缓存,页面切换也不重新请求
  • 为什么这样设计:字典数据总量通常不超过 1000 条,一次全量拉取的数据量很小(几十 KB),但能避免每个下拉框都发一次请求,大幅减少网络开销

场景3:管理员停用字典数据并自动刷新缓存

  • 用户:系统管理员小王
  • 背景:业务方说"已取消"这个订单状态暂时不用了,先在下拉框里隐藏掉
  • 操作步骤
    1. 进入字典数据管理 → 筛选字典类型"order_status"
    2. 找到"已取消"这一条 → 点击"编辑" → 状态改为"停用" → 保存
    3. 系统自动清除"order_status"对应的 Redis 缓存
    4. 下次前端刷新字典缓存时,拿到的"order_status"数据里不再包含"已取消"
  • 期望结果:缓存自动刷新,前端重新请求后"已取消"不再出现在下拉框中
  • 注意:已使用"已取消"值的存量订单数据不受影响,字典停用只影响前端下拉框的可选项

场景4:后端开发校验字典值合法性

  • 用户:后端开发小张
  • 背景:小张在写订单创建接口,需要校验前端传过来的"订单状态"值是否合法
  • 操作步骤
    1. 在订单创建 Service 中调用 dictDataService.validateDictDataList("order_status", ["1", "2"])
    2. 系统查询"order_status"下所有启用状态的字典数据
    3. 校验传入的值是否全部存在于字典数据中
    4. 如果存在非法值(如传了一个已停用的状态值),抛出异常:"字典数据不存在或已停用"
  • 期望结果:非法字典值被拦截,不会写入数据库

场景5:运营人员导出字典数据

  • 用户:运营人员小陈
  • 背景:年底审计,需要核查系统里所有字典配置是否合规
  • 操作步骤
    1. 进入字典数据管理页面
    2. 不设置筛选条件(即导出全部)或按字典类型筛选
    3. 点击"导出"按钮 → 下载 Excel 文件
    4. Excel 包含:字典编码、字典排序、字典标签、字典键值、字典类型、状态、创建时间
  • 期望结果:导出的 Excel 包含筛选条件下所有字典数据,状态列显示"正常/停用"而非数字

场景6:管理员修改字典类型编码

  • 用户:系统管理员小王
  • 背景:发现字典类型编码命名不规范,"usersex"应该改为"system_user_sex"
  • 操作步骤
    1. 编辑字典类型 → 将字典类型编码从"usersex"改为"system_user_sex" → 保存
    2. 系统自动同步更新所有关联字典数据的 dict_type 字段
    3. 系统自动清除全部字典缓存
  • 期望结果:字典类型编码更新成功,所有关联的字典数据自动跟随更新,缓存自动刷新
  • 风险提示:修改字典类型编码是一个影响面较大的操作,所有引用旧编码的业务代码和前端缓存都需要同步更新

场景7:App 端用户获取字典数据

  • 用户:手机端用户
  • 背景:用户在 App 里提交表单,需要加载"用户性别"下拉选项
  • 操作步骤
    1. App 调用 /app-api/system/dict-data/type?type=system_user_sex
    2. 系统优先从 Redis 缓存读取,命中则直接返回
    3. 缓存未命中则查询数据库,写入缓存后返回
    4. 返回结果按 sort 升序排列,只包含启用状态的数据
  • 期望结果:App 端 50ms 内拿到字典数据,渲染下拉框

2.3 用户故事

编号用户故事优先级验收标准
US-01作为系统管理员,我希望能创建和管理字典类型,以便统一定义系统中的枚举数据P0① 创建字典类型后列表中立即可见 ② 字典类型编码全局唯一,重复时提示错误 ③ 创建成功后缓存自动刷新
US-02作为系统管理员,我希望能管理字典类型下的字典数据项,以便配置具体的可选值P0① 同一字典类型下字典值不可重复 ② 字典数据必须关联已存在的字典类型 ③ 创建后缓存自动刷新
US-03作为系统管理员,我希望能对字典数据进行排序,以便控制前端展示顺序P0① sort 值越小排越前 ② 默认按 sort 升序展示 ③ 前端精简列表也按 sort 排序
US-04作为系统管理员,我希望能启用/停用字典类型与字典数据,以便灵活控制数据可见性P0① 停用的字典数据不出现在精简列表中 ② 停用字典类型后其下数据仅返回启用项 ③ 停用操作即时生效
US-05作为前端开发者,我希望能通过接口一次性获取全部字典数据并缓存到本地P0① 精简列表接口返回全部启用状态的字典数据 ② 响应时间 < 50ms(命中缓存) ③ 无需权限校验
US-06作为后端开发者,我希望能校验字典数据的合法性,防止业务端使用无效字典值P0① 校验不通过时抛出明确异常 ② 只校验启用状态的字典数据 ③ 支持批量校验
US-07作为系统管理员,我希望能导出字典类型与字典数据,以便进行数据核查与审计P1① 导出当前筛选条件下的全部数据 ② 状态列显示中文而非数字 ③ 文件格式为 Excel
US-08作为系统管理员,我希望能批量删除不需要的字典类型或字典数据P1① 勾选多条后可一键删除 ② 删除前有二次确认 ③ 字典类型下有数据时阻止删除该类型
US-09作为系统,我需要在字典数据变更后自动刷新 Redis 缓存P0① 增删改操作完成后缓存同步刷新 ② 字典数据变更刷新对应 dictType 缓存 ③ 字典类型变更刷新全部缓存
US-10作为 App 端用户,我希望能通过字典类型直接获取字典数据列表P0① 无需登录即可访问 ② 只返回启用状态数据 ③ 按 sort 升序排列

三、功能需求

3.1 后台管理端 - 字典类型管理

3.1.1 功能清单

功能优先级权限标识说明
字典类型列表(分页)P0system:dict:query分页展示字典类型,支持搜索筛选
字典类型详情P0system:dict:query查看字典类型详细信息
创建字典类型P0system:dict:create创建新的字典类型
编辑字典类型P0system:dict:update修改字典类型信息
删除字典类型P0system:dict:delete逻辑删除字典类型
批量删除字典类型P1system:dict:delete批量逻辑删除字典类型
导出字典类型 ExcelP1system:dict:query导出字典类型列表 Excel
字典类型精简列表P0免鉴权(前端全局需要)获取全部字典类型列表,用于前端下拉选择

3.1.2 字典类型列表(分页查询)

页面描述:

字典类型列表页面线框图

业务规则:

规则编号规则描述为什么这样设计
R-01默认按创建时间倒序排列最新创建的排在前面,方便管理员快速找到刚创建的内容
R-02支持按字典名称模糊搜索管理员可能只记得大概名称,模糊搜索降低记忆负担
R-03支持按字典类型编码模糊搜索开发者更熟悉编码,方便快速定位
R-04支持按状态筛选(正常 0 / 停用 1)快速过滤掉停用的字典类型
R-05支持按创建时间范围筛选审计场景下按时间段查找变更记录
R-06字典类型编码(type)全局唯一,不可重复编码是字典的唯一标识,重复会导致数据混乱
R-07字典类型名称(name)建议唯一,但不强制名称主要用于展示,允许同名但不同编码的字典类型存在

数据字段:

字段名类型说明
idLong字典类型编号
nameString字典名称(展示用)
typeString字典类型编码(唯一标识)
statusInteger状态(0-正常 1-停用)
remarkString备注
createTimeLocalDateTime创建时间

接口设计:

接口名称请求方式接口路径说明
获取字典类型分页GET/admin-api/system/dict-type/page获取字典类型分页列表
获取字典类型详情GET/admin-api/system/dict-type/get获取字典类型详细信息

请求参数(分页查询):

参数名类型必填说明
nameString字典名称(模糊匹配)
typeString字典类型编码(模糊匹配)
statusInteger状态(0-正常 1-停用)
createTimeDateTime[]创建时间范围
pageNoInteger页码
pageSizeInteger每页条数

返回结果(分页):

字段名类型说明
list[]DictTypeRespVO字典类型列表
totalLong总记录数

3.1.3 创建字典类型

页面描述:

创建字典类型对话框

业务规则:

规则编号规则描述为什么这样设计
R-01字典类型编码(type)全局唯一,创建时校验是否已存在编码是字典数据的索引键,重复会导致数据错乱
R-02字典类型名称(name)不能为空名称是管理员识别字典的主要依据
R-03创建成功后自动刷新字典缓存保证后续接口能立即获取到新字典类型
R-04字典类型编码建议使用"模块_业务_字段"的命名规范统一命名规范便于团队协作和后期维护,如 system_user_sexorder_status

接口设计:

接口名称请求方式接口路径说明
创建字典类型POST/admin-api/system/dict-type/create创建字典类型

请求参数:

参数名类型必填说明
nameString字典名称,最大 100 字符
typeString字典类型编码,最大 100 字符
statusInteger状态(0-正常 1-停用)
remarkString备注

返回结果:

字段名类型说明
dataLong新创建的字典类型编号

3.1.4 编辑字典类型

业务规则:

规则编号规则描述为什么这样设计
R-01字典类型编码(type)不可与其他字典类型重复(排除自身)防止编码冲突
R-02修改字典类型编码时,需同步更新关联字典数据的 dictType 字段字典数据通过 dictType 字段关联字典类型,编码变了必须同步,否则数据断裂
R-03修改字典类型信息后自动刷新字典缓存保证缓存与数据库一致
R-04停用字典类型后,前端精简列表仍包含该类型,但该类型下的字典数据仅返回启用状态的项前端需要知道这个字典类型存在(否则下拉框标签都显示不出来),只是选项变少了

接口设计:

接口名称请求方式接口路径说明
更新字典类型PUT/admin-api/system/dict-type/update更新字典类型

请求参数:

参数名类型必填说明
idLong字典类型编号
nameString字典名称
typeString字典类型编码
statusInteger状态
remarkString备注

返回结果:

字段名类型说明
dataBoolean是否成功

3.1.5 删除字典类型

业务规则:

规则编号规则描述为什么这样设计
R-01逻辑删除,不物理删除保留数据可追溯,避免误删导致不可恢复
R-02删除前需二次确认防止误操作
R-03删除字典类型时,需检查该类型下是否存在字典数据项。若存在则提示"该字典类型下有 N 条字典数据,请先清空后再删除",阻止删除防止产生"孤儿"字典数据——类型没了但数据还在
R-04删除后自动刷新字典缓存保证缓存一致性
R-05系统内置字典类型(如 common_status)不建议删除,前端可给予警告提示内置字典被多个模块引用,删除可能导致系统异常

接口设计:

接口名称请求方式接口路径说明
删除字典类型DELETE/admin-api/system/dict-type/delete删除单个字典类型
批量删除字典类型DELETE/admin-api/system/dict-type/delete-list批量删除字典类型

请求参数(删除):

参数名类型必填说明
idLong字典类型编号

请求参数(批量删除):

参数名类型必填说明
idsList<Long>字典类型编号列表

3.1.6 字典类型导出

业务规则:

规则编号规则描述
R-01支持 xls 格式
R-02导出当前筛选条件下的全部字典类型(不分页)
R-03导出字段包含:字典主键、字典名称、字典类型、状态、创建时间
R-04状态字段使用字典转换显示(正常/停用),不显示数字

接口设计:

接口名称请求方式接口路径说明
导出字典类型 ExcelGET/admin-api/system/dict-type/export-excel导出字典类型列表

请求参数:

参数名类型必填说明
nameString字典名称筛选
typeString字典类型编码筛选
statusInteger状态筛选
createTimeDateTime[]创建时间范围

3.1.7 字典类型精简列表

业务规则:

规则编号规则描述为什么这样设计
R-01返回全部字典类型(包括启用和停用的)前端需要知道所有字典类型的存在,停用的类型标签仍然要展示
R-02无需权限校验前端全局需要,登录后就应该能拿到全部字典类型
R-03返回字段仅包含 id、name、type 三个字段精简传输体积,其他字段(如备注)前端不需要

接口设计:

接口名称请求方式接口路径说明
字典类型精简列表GET/admin-api/system/dict-type/simple-list获取全部字典类型精简列表
字典类型精简列表(别名)GET/admin-api/system/dict-type/list-all-simple同上(兼容旧接口)

返回结果:

字段名类型说明
idLong字典类型编号
nameString字典名称
typeString字典类型编码

3.2 后台管理端 - 字典数据管理

3.2.1 功能清单

功能优先级权限标识说明
字典数据列表(分页)P0system:dict:query分页展示字典数据,支持搜索筛选
字典数据详情P0system:dict:query查看字典数据详细信息
创建字典数据P0system:dict:create创建新的字典数据项
编辑字典数据P0system:dict:update修改字典数据项信息
删除字典数据P0system:dict:delete逻辑删除字典数据项
批量删除字典数据P1system:dict:delete批量逻辑删除字典数据
导出字典数据 ExcelP1system:dict:export导出字典数据列表 Excel
字典数据精简列表P0免鉴权(前端全局需要)获取全部启用状态的字典数据,用于前端缓存

3.2.2 字典数据列表(分页查询)

页面描述:

字典数据列表页面线框图

业务规则:

规则编号规则描述为什么这样设计
R-01默认按 sort 字段升序排列(sort 值越小越靠前)字典数据的展示顺序由管理员控制,比如"男"排在"女"前面
R-02支持按字典标签模糊搜索快速找到某个具体选项
R-03支持按字典类型模糊搜索查看某个字典类型下的所有数据项
R-04支持按状态筛选(正常 0 / 停用 1)快速过滤掉已停用的选项
R-05同一字典类型下的 value 应唯一,创建/编辑时校验同一个下拉框里不能出现两个值相同的选项
R-06字典数据需关联已有字典类型不允许创建没有"归属"的字典数据

数据字段:

字段名类型说明
idLong字典数据编号
sortInteger字典排序(升序,值越小越靠前)
labelString字典标签(显示文本,如"男")
valueString字典值(存储值,如"1")
dictTypeString字典类型(关联字典类型编码)
statusInteger状态(0-正常 1-停用)
colorTypeString颜色类型(前端标签渲染用)
cssClassStringCSS 自定义样式
remarkString备注
createTimeLocalDateTime创建时间

接口设计:

接口名称请求方式接口路径说明
获取字典数据分页GET/admin-api/system/dict-data/page获取字典数据分页列表
获取字典数据详情GET/admin-api/system/dict-data/get获取字典数据详细信息

请求参数(分页查询):

参数名类型必填说明
labelString字典标签(模糊匹配)
dictTypeString字典类型编码(模糊匹配)
statusInteger状态(0-正常 1-停用)
pageNoInteger页码
pageSizeInteger每页条数

返回结果(分页):

字段名类型说明
list[]DictDataRespVO字典数据列表
totalLong总记录数

3.2.3 创建字典数据

页面描述:

创建字典数据对话框

业务规则:

规则编号规则描述为什么这样设计
R-01同一字典类型(dictType)下,字典值(value)不可重复同一个下拉框里不能有两个选项对应同一个值
R-02字典类型必须已存在字典数据必须归属于一个已定义的字典类型
R-03创建成功后自动刷新字典缓存保证前端立即能拿到新数据
R-04颜色类型用于前端标签展示时的颜色渲染比如"成功"用绿色、"失败"用红色,让状态一目了然
R-05CSS 样式用于前端自定义展示样式当预设颜色不够用时,允许通过 CSS class 自定义样式

接口设计:

接口名称请求方式接口路径说明
创建字典数据POST/admin-api/system/dict-data/create创建字典数据

请求参数:

参数名类型必填说明
sortInteger排序值
labelString字典标签,最大 100 字符
valueString字典值,最大 100 字符
dictTypeString字典类型编码,最大 100 字符
statusInteger状态(0-正常 1-停用)
colorTypeString颜色类型
cssClassStringCSS 样式
remarkString备注

返回结果:

字段名类型说明
dataLong新创建的字典数据编号

3.2.4 编辑字典数据

业务规则:

规则编号规则描述为什么这样设计
R-01同一字典类型下,字典值(value)不可与其他项重复(排除自身)防止值冲突
R-02修改字典数据后自动刷新字典缓存保证缓存与数据库一致
R-03CSS 样式字段支持清空(updateStrategy = ALWAYS)有些场景需要移除自定义样式,编辑时清空 CSS 样式应能正常保存空值

接口设计:

接口名称请求方式接口路径说明
更新字典数据PUT/admin-api/system/dict-data/update更新字典数据

请求参数:

参数名类型必填说明
idLong字典数据编号
sortInteger排序值
labelString字典标签
valueString字典值
dictTypeString字典类型编码
statusInteger状态
colorTypeString颜色类型
cssClassStringCSS 样式
remarkString备注

返回结果:

字段名类型说明
dataBoolean是否成功

3.2.5 删除字典数据

业务规则:

规则编号规则描述为什么这样设计
R-01逻辑删除,不物理删除保留数据可追溯
R-02删除前需二次确认防止误操作
R-03删除后自动刷新字典缓存保证缓存一致性
R-04批量删除时需确认提示"确定删除选中的 N 条字典数据吗?"批量操作影响面大,需明确告知用户

接口设计:

接口名称请求方式接口路径说明
删除字典数据DELETE/admin-api/system/dict-data/delete删除单个字典数据
批量删除字典数据DELETE/admin-api/system/dict-data/delete-list批量删除字典数据

请求参数(删除):

参数名类型必填说明
idLong字典数据编号

请求参数(批量删除):

参数名类型必填说明
idsList<Long>字典数据编号列表

3.2.6 字典数据导出

业务规则:

规则编号规则描述
R-01支持 xls 格式
R-02导出当前筛选条件下的全部字典数据(不分页)
R-03导出字段包含:字典编码、字典排序、字典标签、字典键值、字典类型、状态、创建时间
R-04状态字段使用字典转换显示(正常/停用)

接口设计:

接口名称请求方式接口路径说明
导出字典数据 ExcelGET/admin-api/system/dict-data/export-excel导出字典数据列表

请求参数:

参数名类型必填说明
labelString字典标签筛选
dictTypeString字典类型编码筛选
statusInteger状态筛选

3.2.7 字典数据精简列表

业务规则:

规则编号规则描述为什么这样设计
R-01仅返回状态为启用(status = 0)的字典数据停用的选项不应出现在前端下拉框中
R-02返回全部启用状态的字典数据(不限字典类型)前端一次请求拿到所有字典数据,后续按 dictType 分组使用,避免每个下拉框都发一次请求
R-03无需权限校验前端全局需要,登录后就应该能拿到全部字典数据
R-04返回字段包含:dictType、value、label、colorType、cssClass只返回前端渲染需要的字段,减少传输体积
R-05前端可根据 dictType 分组,按 sort 排序展示前端在本地完成分组和排序,无需后端额外处理

接口设计:

接口名称请求方式接口路径说明
字典数据精简列表GET/admin-api/system/dict-data/simple-list获取全部启用字典数据精简列表
字典数据精简列表(别名)GET/admin-api/system/dict-data/list-all-simple同上(兼容旧接口)

返回结果:

字段名类型说明
dictTypeString字典类型
valueString字典值
labelString字典标签
colorTypeString颜色类型
cssClassStringCSS 样式

3.3 后台管理端 - 字典缓存机制

3.3.1 功能说明

字典缓存是数据字典模块的"加速器"。字典数据被频繁读取但很少修改(典型的"读多写少"场景),所以用 Redis 缓存起来,让每次读取都能在毫秒级完成。

缓存策略:

策略项说明
缓存介质Redis
缓存粒度按字典类型(dictType)缓存对应的字典数据列表。比如"system_user_sex"对应的"男""女"两条数据作为一个整体缓存
缓存写入时机服务启动时预加载、字典数据增删改时、字典类型增删改时
缓存失效策略主动失效:数据变更时主动清除缓存,下次请求时自动重建
缓存穿透防护缓存未命中时回源数据库查询,查询后回填缓存

缓存刷新流程:

场景一:字典数据变更(创建/更新/删除)
    ① 执行数据库操作(写入/更新/删除字典数据)
    ② 清除该 dictType 对应的 Redis 缓存
    ③ 下次有请求查询该 dictType 时,自动从数据库重新加载并写入缓存

场景二:字典类型变更(创建/更新/删除)
    ① 执行数据库操作(写入/更新/删除字典类型)
    ② 清除全部字典数据缓存
       (因为字典类型变更可能影响字典类型的有效性,为安全起见全量刷新)
    ③ 下次有请求时自动从数据库重新加载

业务规则:

规则编号规则描述为什么这样设计
R-01服务启动时自动预加载全部字典数据到 Redis 缓存避免服务刚启动时大量请求穿透到数据库("缓存预热")
R-02字典数据的增删改操作完成后,自动刷新对应 dictType 的缓存只刷新受影响的那一组缓存,而不是全量刷新,减少 Redis 压力
R-03字典类型的增删改操作完成后,自动刷新全部字典缓存字典类型变更影响面大(可能改了编码),全量刷新最安全
R-04缓存刷新为同步操作保证接口返回时缓存已经更新,前端立即能拿到最新数据
R-05如果 Redis 不可用,降级为直接查询数据库缓存是加速手段,不能因为缓存挂了就让整个系统不可用

3.4 前台使用 - App 端字典数据查询

3.4.1 功能说明

前台 App 端提供通过字典类型直接查询字典数据列表的接口,用于移动端或第三方系统获取字典数据。

3.4.2 根据字典类型查询字典数据

业务规则:

规则编号规则描述为什么这样设计
R-01仅返回启用状态的字典数据停用的选项不应出现在 App 端的下拉框中
R-02返回结果按 sort 字段升序排列保持与后台管理端一致的展示顺序
R-03无需登录鉴权(@PermitAll)字典数据是公开的配置信息,不需要登录就能获取
R-04传入的字典类型不存在时返回空列表不报错,让调用方自行处理空数据
R-05优先从 Redis 缓存中读取保证高性能响应

接口设计:

接口名称请求方式接口路径说明
按字典类型查询字典数据GET/app-api/system/dict-data/type根据字典类型获取字典数据列表

请求参数:

参数名类型必填说明
typeString字典类型编码,如"common_status"

返回结果:

字段名类型说明
idLong字典数据编号
sortInteger排序
labelString字典标签
valueString字典值
dictTypeString字典类型
colorTypeString颜色类型
cssClassStringCSS 样式

3.5 字典数据校验

3.5.1 功能说明

在服务端提供字典数据合法性校验能力,供业务模块在保存数据时调用,确保引用的字典值合法有效。

校验规则:

规则编号规则描述为什么这样设计
R-01校验字典数据是否存在于指定字典类型下防止前端传了一个不存在的字典值进来
R-02校验字典数据是否处于启用状态已停用的字典值不应再被使用
R-03不满足条件时抛出业务异常,阻止保存在数据写入数据库之前拦截非法值

校验流程:

业务模块调用:validateDictDataList("order_status", ["1", "2", "5"])
    ① 查询"order_status"下所有启用状态的字典数据
       → 得到合法值列表:["1", "2", "3", "4"]
    ② 逐一校验传入的值
       → "1" ✓ 存在且启用
       → "2" ✓ 存在且启用
       → "5" ✗ 不存在
    ③ 发现非法值"5",抛出异常:"字典数据[order_status]的值[5]不存在或已停用"

四、非功能需求

4.1 性能要求

指标要求说明
字典类型分页查询< 200ms包含搜索筛选场景
字典数据分页查询< 200ms包含搜索筛选场景
字典类型精简列表< 100ms数据量小,应快速返回
字典数据精简列表(命中缓存)< 50ms前端全局缓存的核心接口,必须足够快
App 端按类型查询(命中缓存)< 50ms移动端对延迟更敏感
字典缓存刷新< 100ms同步刷新不能让用户等太久
服务启动预加载< 2s(1000 条以内)不能因为加载字典拖慢服务启动速度

4.2 安全要求

要求说明
权限控制字典管理接口严格按权限标识(system:dict:create/update/delete/query/export)控制访问
操作日志所有字典管理操作(创建、编辑、删除、导出)记录操作日志,便于审计追溯
参数校验所有输入参数进行合法性校验(长度、格式、非空),防止 SQL 注入与 XSS 攻击
数据一致性字典数据变更与缓存刷新保证最终一致性——先写数据库,再刷缓存,即使缓存刷新失败也能在下次请求时自动重建

4.3 兼容性要求

要求
PC 浏览器Chrome 80+、Firefox 75+、Safari 13+
数据库MySQL 5.7+、PostgreSQL 12+、Oracle 12c+、SQL Server 2017+
RedisRedis 5.0+

五、数据设计

5.1 数据模型

5.1.1 字典类型表(system_dict_type)

字段名类型约束说明
idBIGINTPK, AUTO_INCREMENT字典类型编号(主键)
nameVARCHAR(100)NOT NULL字典名称(展示用)
typeVARCHAR(100)NOT NULL字典类型编码(全局唯一标识)
statusTINYINTNOT NULL, DEFAULT 0状态(0-正常 1-停用)
remarkVARCHAR(500)-备注
creatorVARCHAR(64)-创建者
create_timeDATETIMENOT NULL创建时间
updaterVARCHAR(64)-更新者
update_timeDATETIMENOT NULL更新时间
deletedBIT(1)NOT NULL, DEFAULT 0删除标记(0-未删除 1-已删除)
deleted_timeDATETIME-删除时间

重要:该表标注 @TenantIgnore,不进行租户隔离。字典数据是全局共享的——所有租户使用同一套字典。原因:字典定义的是系统级枚举值(如性别、状态),与租户无关。

索引设计:

索引名字段类型说明
uk_typetypeUNIQUE字典类型编码唯一索引,防止编码重复
idx_namenameNORMAL按名称查询加速
idx_statusstatusNORMAL按状态筛选加速

5.1.2 字典数据表(system_dict_data)

字段名类型约束说明
idBIGINTPK, AUTO_INCREMENT字典数据编号(主键)
sortINTNOT NULL, DEFAULT 0字典排序(升序排列)
labelVARCHAR(100)NOT NULL字典标签(显示文本)
valueVARCHAR(100)NOT NULL字典值(存储值)
dict_typeVARCHAR(100)NOT NULL字典类型(冗余字段,关联 system_dict_type.type)
statusTINYINTNOT NULL, DEFAULT 0状态(0-正常 1-停用)
color_typeVARCHAR(100)-颜色类型
css_classVARCHAR(100)-CSS 自定义样式
remarkVARCHAR(500)-备注
creatorVARCHAR(64)-创建者
create_timeDATETIMENOT NULL创建时间
updaterVARCHAR(64)-更新者
update_timeDATETIMENOT NULL更新时间
deletedBIT(1)NOT NULL, DEFAULT 0删除标记

重要:该表标注 @TenantIgnore,不进行租户隔离,字典数据为全局共享。

索引设计:

索引名字段类型说明
uk_dict_type_valuedict_type, valueUNIQUE同字典类型下值唯一,数据库层面防止重复
idx_dict_typedict_typeNORMAL按字典类型查询加速(缓存读取的主要查询路径)
idx_sortsortNORMAL按排序值排序加速
idx_statusstatusNORMAL按状态筛选加速

5.1.3 数据模型 ER 关系

字典ER关系图

5.2 数据字典

5.2.1 系统内置字典类型

系统预置了以下字典类型,在数据库初始化时自动写入:

字典类型编码字典名称字典数据项使用场景
common_status通用状态0-开启, 1-关闭全局通用的启用/停用状态
system_user_sex用户性别1-男, 2-女用户管理中的性别选择
system_menu_type菜单类型1-目录, 2-菜单, 3-按钮菜单管理中的类型区分
system_role_type角色类型1-内置, 2-自定义角色管理中的类型区分
system_data_scope数据范围1-全部, 2-指定部门, 3-本部门, 4-本部门及以下, 5-仅本人角色权限中的数据权限配置
system_notice_type通知类型1-通知, 2-公告消息通知中的类型区分
system_login_result登录结果0-成功, 10-账号密码错误, 20-用户被禁用, 30-验证码不存在, 31-验证码不正确, 100-未知异常登录日志中的结果记录
system_login_type登录类型100-账号登录, 101-社交登录, 103-短信登录, 200-主动登出, 202-强制登出登录日志中的类型记录
system_oauth2_grant_typeOAuth2 授权类型password-密码模式, authorization_code-授权码模式, implicit-简化模式, client_credentials-客户端模式, refresh_token-刷新模式认证授权中的授权方式
infra_boolean_string布尔值字符串true-是, false-否基础设施中的布尔值展示
infra_operate_type操作类型0-其它, 1-查询, 2-新增, 3-修改, 4-删除, 5-导出, 6-导入操作日志中的操作类型
infra_job_status定时任务状态0-初始化/运行中, 1-正常(暂停), 2-暂停定时任务管理中的状态
infra_config_type参数类型1-系统内置, 2-自定义参数配置中的类型区分
infra_file_storage文件存储1-数据库, 10-本地磁盘, 11-FTP, 12-SFTP, 20-S3对象存储文件管理中的存储方式

5.3 数据流转关系

操作涉及的表数据流转
创建字典类型system_dict_type创建字典类型记录 → 刷新全部字典缓存
编辑字典类型system_dict_type + system_dict_data更新字典类型信息 → 若 type 字段变更需同步更新关联字典数据的 dict_type → 刷新全部字典缓存
删除字典类型system_dict_type校验无关联字典数据 → 逻辑删除字典类型 → 刷新全部字典缓存
创建字典数据system_dict_data创建字典数据记录 → 刷新对应 dictType 的缓存
编辑字典数据system_dict_data更新字典数据记录 → 刷新对应 dictType 的缓存
删除字典数据system_dict_data逻辑删除字典数据 → 刷新对应 dictType 的缓存
前端加载字典Redis前端请求精简列表 → 从 Redis 缓存读取 → 缓存未命中则查库并回填
App 端查询字典Redis + system_dict_data按 dictType 查询 → 优先读缓存 → 缓存未命中则查库并回填

六、跨模块联动

数据字典作为平台基础模块,与多个业务模块存在紧密的数据依赖关系。以下梳理了关键的跨模块集成点。

6.1 联动模块清单

联动模块联动方式数据流向说明
用户管理字典数据被引用字典 → 用户管理用户性别、用户状态等下拉框使用字典数据
角色权限字典数据被引用字典 → 角色权限数据范围(system_data_scope)、角色类型(system_role_type)使用字典数据
菜单管理字典数据被引用字典 → 菜单管理菜单类型(system_menu_type)使用字典数据
认证授权字典数据被引用字典 → 认证授权登录结果(system_login_result)、登录类型(system_login_type)、OAuth2 授权类型使用字典数据
日志审计字典数据被引用 + 操作日志字典 → 日志审计操作类型(infra_operate_type)使用字典数据;字典管理的增删改操作写入操作日志
基础设施字典数据被引用字典 → 基础设施定时任务状态、文件存储方式、参数类型使用字典数据
工作流字典数据被引用字典 → 工作流流程状态、审批结果等下拉框使用字典数据
支付字典数据被引用字典 → 支付支付渠道、支付状态等下拉框使用字典数据
前端全局精简列表接口字典 → 前端前端在登录后一次性拉取全部字典数据并本地缓存

6.2 关键联动流程

6.2.1 前端字典数据加载流程

前端字典数据加载缓存流程

6.2.2 业务模块使用字典数据的流程

业务模块使用字典数据流程

6.3 数据一致性要求

一致性场景保障措施
字典数据变更后前端展示字典缓存自动刷新,前端下次请求获取最新数据。如需即时生效,前端可监听 WebSocket 通知主动刷新缓存
字典类型编码修改后业务引用修改编码时同步更新关联字典数据的 dict_type 字段,但已存入业务表的历史数据不会自动更新,需评估影响范围
缓存与数据库一致性先写数据库再刷缓存(Cache-Aside 模式),即使缓存刷新失败,下次请求也会自动从数据库重建缓存

七、附录

7.1 名词解释

术语解释类比
字典类型(Dict Type)字典数据的分类标识,相当于"词典的一个词条标题"比如"用户性别"就是一个字典类型
字典数据(Dict Data)字典类型下的具体数据项,相当于"词条下面的具体内容"比如"用户性别"下面的"男""女"就是字典数据
字典标签(Label)字典数据的显示文本,给用户看的下拉框里你看到的"男""女"
字典值(Value)字典数据的存储值,给数据库存的数据库里实际存的"1""2"
字典类型编码(dictType)字典类型的唯一标识符,全局不可重复类似于身份证号码,每个字典类型都有一个独一无二的编码
颜色类型(Color Type)前端标签渲染时使用的颜色主题比如"成功"显示绿色、"失败"显示红色
CSS 样式(CSS Class)前端自定义展示的 CSS class 名称当预设颜色不够用时,允许前端用自定义样式
排序值(Sort)字典数据在同一字典类型下的展示排序,值越小排越前类似于列表里的"置顶",数字小的排前面
字典缓存存储在 Redis 中的字典数据副本,用于加速读取类似于把常用电话号码存在手机通讯录里,不用每次都翻电话簿
字典精简列表只返回核心字段(dictType/value/label/colorType/cssClass)的字典数据列表类似于"速查表",只保留最常用的信息
@TenantIgnore标注此注解的实体不参与租户数据隔离字典数据是全局共享的,所有租户用同一套字典
CommonStatusEnum通用状态枚举,0-正常(开启)、1-停用(关闭)几乎所有模块都通用的"开关"
缓存预热服务启动时自动将字典数据加载到 Redis 缓存类似于开店前先把常卖的商品摆上货架,不用等顾客来了再去找
缓存穿透请求的数据在缓存中不存在,导致请求直接打到数据库类似于通讯录里没有这个号码,只能翻电话簿去找
dictType 冗余字段字典数据表中存储的字典类型编码,与字典类型表的 type 字段冗余为了查询方便,字典数据直接记住自己属于哪个字典类型

7.2 颜色类型对照表

颜色类型值颜色主题适用场景举例
default默认/灰色普通状态、未分类未知状态
primary主色/蓝色主要状态、默认选中进行中
success成功/绿色正常、已通过、已完成审核通过、已启用
info信息/灰色中性状态、提示待处理
warning警告/橙色需注意、待处理即将过期
danger危险/红色异常、失败、已停用审核拒绝、已停用

7.3 字典命名规范

模块命名格式示例
系统管理system_{业务}_system_user_sex, system_menu_type
基础设施infra_{业务}_infra_job_status, infra_config_type
通用common_common_status
工作流bpm_{业务}_bpm_task_status, bpm_process_status
支付pay_{业务}_pay_order_status, pay_channel
商城product_{业务}_product_spu_status
营销promotion_{业务}_promotion_discount_type

7.4 接口汇总

7.4.1 字典类型管理接口

序号接口名称方法路径权限优先级
1创建字典类型POST/admin-api/system/dict-type/createsystem:dict:createP0
2更新字典类型PUT/admin-api/system/dict-type/updatesystem:dict:updateP0
3删除字典类型DELETE/admin-api/system/dict-type/deletesystem:dict:deleteP0
4批量删除字典类型DELETE/admin-api/system/dict-type/delete-listsystem:dict:deleteP1
5获取字典类型详情GET/admin-api/system/dict-type/getsystem:dict:queryP0
6获取字典类型分页GET/admin-api/system/dict-type/pagesystem:dict:queryP0
7导出字典类型 ExcelGET/admin-api/system/dict-type/export-excelsystem:dict:queryP1
8字典类型精简列表GET/admin-api/system/dict-type/simple-list免鉴权P0
9字典类型精简列表(别名)GET/admin-api/system/dict-type/list-all-simple免鉴权P0

7.4.2 字典数据管理接口

序号接口名称方法路径权限优先级
1创建字典数据POST/admin-api/system/dict-data/createsystem:dict:createP0
2更新字典数据PUT/admin-api/system/dict-data/updatesystem:dict:updateP0
3删除字典数据DELETE/admin-api/system/dict-data/deletesystem:dict:deleteP0
4批量删除字典数据DELETE/admin-api/system/dict-data/delete-listsystem:dict:deleteP1
5获取字典数据详情GET/admin-api/system/dict-data/getsystem:dict:queryP0
6获取字典数据分页GET/admin-api/system/dict-data/pagesystem:dict:queryP0
7导出字典数据 ExcelGET/admin-api/system/dict-data/export-excelsystem:dict:exportP1
8字典数据精简列表GET/admin-api/system/dict-data/simple-list免鉴权P0
9字典数据精简列表(别名)GET/admin-api/system/dict-data/list-all-simple免鉴权P0

7.4.3 App 端接口

序号接口名称方法路径权限优先级
1按字典类型查询字典数据GET/app-api/system/dict-data/typePermitAllP0

7.5 变更记录

版本日期修改内容修改人
v1.02026-09-14初始版本PM Team
v2.02026-09-19增强用户场景(7 个命名人物场景)、验收标准、跨模块联动(6.1-6.3)、名词解释(15 项)、ASCII 线框图、业务规则增加设计原因PM Team

本文档为数据字典管理模块 PRD v2.0,如有问题请联系产品负责人。