Skip to content

数据字典管理

**本文引用的文件** - [SysDictController.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-server/src/main/java/com/lenovo/lemes/service/dm/common/controller/SysDictController.java) - [SysDictService.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-server/src/main/java/com/lenovo/lemes/service/dm/common/service/SysDictService.java) - [SysDictMapper.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-server/src/main/java/com/lenovo/lemes/service/dm/common/dao/SysDictMapper.java) - [SysDictDo.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-common/src/main/java/com/lenovo/lemes/service/dm/common/client/entity/SysDictDo.java) - [SysDictVo.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-common/src/main/java/com/lenovo/lemes/service/dm/common/client/vo/model/SysDictVo.java) - [SysDictInfoVo.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-common/src/main/java/com/lenovo/lemes/service/dm/common/client/vo/model/SysDictInfoVo.java) - [SysDictExtVo.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-common/src/main/java/com/lenovo/lemes/service/dm/common/client/vo/model/SysDictExtVo.java) - [dictMixins.js](file://app/devicemate-app/utils/dictMixins.js) - [device.sql](file://docs/ddl/device.sql)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本技术文档围绕“数据字典管理系统”展开,系统覆盖字典项的分类管理、字典值的维护、字典层级结构与多语言展示,以及在设备管理中的典型应用(如设备类型分类、设备状态枚举、维修原因分类等)。后端采用 Java 微服务架构,前端基于 uni-app,通过统一的字典 API 提供字典数据查询与缓存能力;数据库层面以 sys_dict 表为核心,配合多语言扩展表实现国际化展示。

项目结构

  • 后端模块:lemes-service-dm-common(公共字典服务)
    • 控制器层:SysDictController
    • 服务层:SysDictService
    • 数据访问层:SysDictMapper
    • 领域模型与 VO:SysDictDo、SysDictVo、SysDictInfoVo、SysDictExtVo
  • 前端模块:devicemate-app
    • 工具混入:dictMixins.js 封装字典请求与名称解析
  • 数据库脚本:docs/ddl/device.sql 中包含 sys_dict 及相关表结构与注释

图表来源

章节来源

核心组件

  • 控制器层:提供分页查询字典目录、按编码查询字典项、保存/删除字典、按编码或编码集合查询字典值、校验字典有效性、按名称与编码查询字典等接口。
  • 服务层:封装分页查询、字典项列表、字典详情、保存/删除、缓存字典列表、全量字典、字典有效性校验、按值与编码查询名称等业务逻辑。
  • 数据访问层:MyBatis Mapper,提供按名称与编码查询字典的 SQL 映射。
  • 领域模型与 VO:
    • SysDictDo:字典实体,包含父级 ID、字典编码、字典值、描述、备注、排序、层级、状态等字段。
    • SysDictVo:字典目录与数据项通用 VO,支持多语言名称解析。
    • SysDictInfoVo:字典详情 VO,包含目录与数据项列表。
    • SysDictExtVo:对外扩展 VO,包含字典值、名称、描述及多语言名称列表。
  • 前端工具:dictMixins.js 封装统一字典请求与名称解析方法,便于在页面中直接调用。

章节来源

架构总览

后端采用标准的 MVC 分层架构,控制器负责接收请求与返回响应,服务层承载业务逻辑,数据访问层对接数据库。前端通过统一的字典 API 获取字典数据,支持按编码批量查询与缓存,提升页面渲染效率。

图表来源

详细组件分析

字典实体模型设计

  • 字段说明
    • 父级关联:parentId 支持字典层级结构(如一级分类与二级分类)。
    • 编码与值:dictCode 用于标识字典类型,dictValue 为具体取值。
    • 描述与备注:description 与 remark 提供类型说明与补充信息。
    • 排序与层级:sort 控制同类型内排序,dictLevel 标识层级(1/2)。
    • 状态:dictStatus 控制启用/禁用。
  • 多语言支持:SysDictVo 与 SysDictExtVo 内置 nameMls 列表,支持按语言环境动态选择名称。

图表来源

章节来源

API 接口定义

  • 分页获取字典类型目录列表
    • 方法:POST
    • 路径:/sysDict/getCatalogListByPage
    • 请求体:SysDictVo
    • 返回:分页结果
  • 根据字典编码查询数据项列表
    • 方法:GET
    • 路径:/sysDict/getItemList/
    • 返回:数据项列表
  • 新增或修改字典
    • 方法:POST
    • 路径:/sysDict/saveDict
    • 请求体:SysDictInfoVo
    • 返回:操作结果
  • 根据字典编码查询字典详情
    • 方法:GET
    • 路径:/sysDict/getDictInfo/
    • 返回:字典详情
  • 批量逻辑删除字典
    • 方法:POST
    • 路径:/sysDict/deleteDictByIds
    • 请求体:Long[]
    • 返回:操作结果
  • 根据编码查询字典值(单个)
    • 方法:GET
    • 路径:/sysDict/getDictList
    • 参数:code
    • 返回:字典值列表(带缓存)
  • 批量获取字典(多编码)
    • 方法:POST
    • 路径:/sysDict/getDictLists
    • 请求体:String[]
    • 返回:字典映射(带缓存)
  • 校验字典有效性
    • 方法:POST
    • 路径:/sysDict/checkDictIsValid
    • 请求体:List<SysDictValidVo>
    • 返回:校验结果映射
  • 根据字典值与编码查询名称
    • 方法:GET
    • 路径:/sysDict/getDictNameByDictValue
    • 参数:dictValue, dictCode
    • 返回:字典项信息

章节来源

设备管理中的应用场景

  • 设备类型分类:通过 dictCode 标识“设备类型”,dictValue 为具体类型编码,nameMls 实现多语言显示。
  • 设备状态枚举:通过 dictCode 标识“设备状态”,结合 dictValue 与 name 展示状态文本。
  • 维修原因分类:通过 dictCode 标识“维修原因”,支持多级分类与排序控制。
  • 单据状态:如“报废单据状态”等,可复用字典机制进行统一管理与展示。

章节来源

前端使用示例(概念性说明)

  • 在页面中引入 dictMixins.js,调用 getDict(codes) 获取字典映射。
  • 使用 getDictName(list, value) 根据字典值解析显示名称。
  • 在表单、下拉框、标签等组件中绑定字典值与名称,实现数据展示与业务控制。

章节来源

依赖分析

  • 控制器依赖服务层,服务层依赖数据访问层,形成清晰的分层依赖。
  • SysDictMapper 提供按名称与编码查询字典的 SQL 映射,支撑多语言名称解析。
  • 前端通过统一 API 与后端交互,减少耦合度。

图表来源

性能考虑

  • 缓存策略:后端提供按编码获取字典列表与多编码批量获取接口,建议前端在应用启动时预加载常用字典,减少重复请求。
  • 多语言解析:在 VO 中内置多语言名称解析方法,避免每次渲染时重复计算。
  • 分页与批量:对目录列表与字典项列表提供分页与批量查询接口,降低一次性传输压力。
  • 数据库索引:确保字典表的 dictCode、dictValue、parentId 等字段具备合理索引,提升查询性能。

故障排查指南

  • 接口返回空数据
    • 检查请求参数是否正确(如 dictCode、codes 数组)。
    • 确认字典是否已启用(dictStatus)。
  • 名称显示为占位符
    • 检查 nameMls 是否存在对应语言的名称。
    • 确认语言环境参数是否传入。
  • 删除失败
    • 确认传入的 ID 数组是否为空。
    • 检查是否存在外键约束或业务限制。
  • 校验失败
    • 检查传入的字典值与编码是否匹配,确认字典有效性。

章节来源

结论

本数据字典管理系统通过清晰的分层架构、完善的实体模型与多语言支持,实现了设备管理等业务场景下的字典分类、值维护与展示需求。结合缓存与批量查询策略,可在保证一致性的同时提升系统性能与用户体验。

附录

  • 最佳实践
    • 统一使用 dictCode 标识字典类型,规范 dictValue 的取值范围。
    • 对高频字典进行缓存预加载,减少接口调用。
    • 在前端页面中集中使用 dictMixins.js 进行字典解析,保持一致的展示风格。
    • 对字典层级与排序进行规范化管理,确保业务逻辑清晰。
  • 缓存策略建议
    • 应用启动时批量拉取常用字典,按需更新。
    • 对多语言名称进行本地化缓存,避免重复解析。
    • 定期清理过期字典缓存,确保数据新鲜度。