# 帮助文章分类枚举表设计 ## 背景 当前 `SysHelpClassification` 是 Java 硬编码枚举,新增分类需要改代码重新部署。 改为数据库字典表后,管理后台直接维护分类,各业务模块通过 `category_code` 查询对应内容,无需改代码。 --- ## 一、表结构设计 ### 1. 分类主表 `sys_help_category` 存储所有分类/协议类型,管理后台从此表读取下拉选项。 ```sql CREATE TABLE `sys_help_category` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', `code` VARCHAR(50) NOT NULL COMMENT '分类编码(英文唯一标识,业务方使用此字段查询)', `name_zh` VARCHAR(100) NOT NULL COMMENT '中文名称', `name_en` VARCHAR(100) NOT NULL COMMENT '英文名称', `scene` VARCHAR(50) NOT NULL DEFAULT 'HELP' COMMENT '适用场景: HELP=帮助中心, PROTOCOL=协议展示, NOTICE=公告', `sort` INT NOT NULL DEFAULT 0 COMMENT '排序值,越大越靠前', `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态: 1=启用, 0=禁用', `remark` VARCHAR(255) DEFAULT NULL COMMENT '备注(说明该分类的用途)', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_code` (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='帮助文章分类枚举表'; ``` ### 2. `sys_help` 表调整 将原来的硬编码枚举字段替换为分类 code 外键。 ```sql -- 新增 category_code 字段,替代原 sys_help_classification 枚举字段 ALTER TABLE `sys_help` ADD COLUMN `category_code` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '分类编码,关联 sys_help_category.code' AFTER `title`, ADD INDEX `idx_category_code` (`category_code`); ``` > **迁移说明**:上线时先写入初始数据(见下方),再执行字段迁移,将旧枚举 ordinal 映射到对应 code。 --- ## 二、初始数据 对应现有 `SysHelpClassification` 枚举,全量初始化: ```sql INSERT INTO `sys_help_category` (`code`, `name_zh`, `name_en`, `scene`, `sort`, `status`, `remark`) VALUES ('HELP', '新手入门', 'Getting Started', 'HELP', 100, 1, '注册、下载、基础操作等新手引导'), ('FAQ', '常见问题', 'FAQ', 'HELP', 90, 1, '用户高频问题汇总'), ('EXCHANGE', '交易指南', 'Trading Guide', 'HELP', 80, 1, '现货/合约交易操作说明'), ('COININFO', '币种资料', 'Coin Info', 'HELP', 70, 1, '各币种项目介绍'), ('ANALYSIS', '行情技术', 'Market Analysis', 'HELP', 60, 1, '技术分析、行情解读'), ('FOLLOW_PROTOCOL', '交易员条款', 'Trader Agreement', 'PROTOCOL', 55, 1, '带单交易员服务协议'), ('PRIVACY', '隐私条款', 'Privacy Policy', 'PROTOCOL', 50, 1, '用户隐私政策'), ('DISCLAIMER', '免责声明', 'Disclaimer', 'PROTOCOL', 45, 1, '平台免责声明'), ('PROTOCOL', '条款协议', 'Terms of Service', 'PROTOCOL', 40, 1, '用户服务协议/利用规约'), ('QR_CODE', 'APP二维码', 'APP QR Code', 'HELP', 10, 1, '应用下载二维码展示页'), ('OTHER', '其他', 'Other', 'HELP', 0, 1, '未归类内容'); ``` --- ## 三、字段说明 ### `sys_help_category` 字段 | 字段 | 类型 | 必填 | 说明 | |-------------|--------------|------|-------------------------------------------------------------------| | id | bigint | 是 | 主键,自增 | | code | varchar(50) | 是 | 唯一编码,**业务方通过此字段查询**,如 `PROTOCOL`、`PRIVACY` | | name_zh | varchar(100) | 是 | 中文名称,管理后台下拉显示 | | name_en | varchar(100) | 是 | 英文名称,前端多语言使用 | | scene | varchar(50) | 是 | 适用场景,用于前端分区展示,见场景枚举说明 | | sort | int | 是 | 排序值,越大越靠前,默认 0 | | status | tinyint | 是 | 1=启用,0=禁用;禁用后该分类不再出现在下拉中 | | remark | varchar(255) | 否 | 备注,说明该分类的业务用途 | | create_time | datetime | 是 | 创建时间 | | update_time | datetime | 是 | 最后修改时间 | ### `scene` 场景枚举值 | 值 | 说明 | |----------|----------------------------------------------| | HELP | 帮助中心展示(新手指南、FAQ、交易指南等) | | PROTOCOL | 协议页面展示(服务条款、隐私政策、免责等) | | NOTICE | 公告/通知(预留,后续扩展) | --- ## 四、业务查询示例 ### 查询帮助中心所有启用分类(供下拉选择) ```sql SELECT id, code, name_zh, name_en FROM sys_help_category WHERE status = 1 AND scene = 'HELP' ORDER BY sort DESC; ``` ### 查询指定协议类型的文章(如服务条款,支持多语言) ```sql SELECT h.id, h.title, h.content, h.lang FROM sys_help h WHERE h.category_code = 'PROTOCOL' AND h.status = 1 -- CommonStatus.NORMAL AND h.lang = 'EN' ORDER BY h.is_top ASC, h.sort DESC; ``` ### 查询协议页所有分类及其文章(一次性加载) ```sql SELECT c.code, c.name_zh, h.title, h.content, h.lang FROM sys_help_category c LEFT JOIN sys_help h ON h.category_code = c.code AND h.status = 1 WHERE c.scene = 'PROTOCOL' AND c.status = 1 ORDER BY c.sort DESC, h.sort DESC; ``` --- ## 五、后续扩展方式 新增分类时,**只需在管理后台插入一行**,无需改代码: ```sql -- 示例:新增"新手指南"分类(APP端新手流程) INSERT INTO `sys_help_category` (`code`, `name_zh`, `name_en`, `scene`, `sort`, `remark`) VALUES ('BEGINNER_GUIDE', '新手指南', 'Beginner Guide', 'HELP', 95, 'APP端新手引导流程专用'); ``` 前端/API 按 `code` 字段拉取对应分类的文章,`code` 值与业务约定后保持不变,新增分类不影响现有业务。 --- ## 六、管理后台接口建议 | 接口 | 方法 | 路径 | 说明 | |------|------|------|------| | 分类列表(下拉用) | GET | `/cms/help-category/list` | 返回所有启用分类,按 scene 过滤 | | 分类分页查询 | POST | `/cms/help-category/page-query` | 管理列表,支持 scene/status 筛选 | | 新增分类 | POST | `/cms/help-category/create` | 新增一个分类 | | 修改分类 | POST | `/cms/help-category/update` | 修改名称、排序、状态等 | | 删除分类 | POST | `/cms/help-category/deletes` | 软删除(status=0)或物理删除 |