-- ---------------------------- -- 协议配置:协议版本表 -- -- 目标库 hugray(**系统库**,与 sys_menu/sys_notice 同库)——协议属系统级配置, -- 不落会员库 hugray-account,后端也放在 ruoyi-system 而不是 ruoyi-user。 -- 表是新建,用 CREATE TABLE IF NOT EXISTS,脚本可重复执行。 -- 演示数据另见 hugray_agreement_demo_20261013.sql。 -- -- 【追加式表:没有 status、没有 del_flag、没有 update_*】 -- 一行 = 一个已发布的版本。发布新版本是 INSERT 新行,旧版本原样保留、**不被修改**, -- 因此列表里的「当前版本 / 历史版本」是查出来时按「同类型 max(agreement_id)」实时算的, -- 不落库、也就不需要任何 UPDATE 逻辑去维护它(后端零事务)。 -- 同一类型可以有多个「历史版本」,且这些历史行永远处在终态——这是本表能免掉 -- status/del_flag/update_by/update_time 的原因,改表前先想清楚这一点。 -- 与 hugray 库的原生表一致(sys_notice/sys_config 都不带 del_flag),也与本库 -- 「只保留删不掉的审计痕迹」的口径一致。 -- -- 【协议编号】 -- 就是主键自增。起始 313124100 是为了让编号落在原型那一行(313124142)的量级上, -- 业务上无含义,也与会员/档案的 33140000、33141000 段错开,避免两个库的自增号看起来是同一套。 -- -- 【枚举取值】沿用本仓库约定,直接存值、不建 sys_dict_type,前端维护同名常量 -- (见 hugray-admin/src/utils/agreement.js): -- 协议类型 agreement_type:1用户协议 2隐私权限 3供货协议 4购买协议 -- ---------------------------- USE `hugray`; -- ---------- 1. sys_agreement:协议版本 ---------- -- content 用 longtext 而不是 sys_notice.notice_content 那种 longblob: -- 新表没有历史包袱,longtext 读回 String 不需要在 mapper 里写 cast(... as char)。 -- -- 不加 UNIQUE(agreement_type, version): -- 重复版本号由服务层拦并给出「该类型下已存在版本号 X」的提示, -- 交给数据库只会得到一个 500 与一句 SQLIntegrityConstraintViolationException。 -- -- idx_type_id 同时服务两个查询:按类型筛选,以及取该类型最大 id(当前版本判定)。 CREATE TABLE IF NOT EXISTS `sys_agreement` ( `agreement_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '协议编号', `agreement_type` char(1) NOT NULL COMMENT '协议类型(1用户协议 2隐私权限 3供货协议 4购买协议)', `version` varchar(32) NOT NULL COMMENT '版本号(原样存文本,如 1.1.01,不做格式校验)', `content` longtext DEFAULT NULL COMMENT '协议内容(富文本 HTML)', `create_by` varchar(64) DEFAULT '' COMMENT '发布人', `create_time` datetime DEFAULT NULL COMMENT '发布时间(列表的「更新时间/更新人」取的就是它与 create_by,见 mapper 注释)', `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`agreement_id`), KEY `idx_type_id` (`agreement_type`, `agreement_id`) ) ENGINE=InnoDB AUTO_INCREMENT=313124100 DEFAULT CHARSET=utf8mb4 COMMENT='协议版本表(追加式:一行一个已发布版本,不修改不删除)'; -- ---------- 2. 结果核对 ---------- SELECT `table_name`, `engine`, `table_comment`, `auto_increment` FROM `information_schema`.`tables` WHERE `table_schema` = 'hugray' AND `table_name` = 'sys_agreement'; SELECT `column_name`, `column_type`, `is_nullable`, `column_key`, `column_default`, `column_comment` FROM `information_schema`.`columns` WHERE `table_schema` = 'hugray' AND `table_name` = 'sys_agreement' ORDER BY `ordinal_position`; SELECT `index_name`, `seq_in_index`, `column_name`, `non_unique` FROM `information_schema`.`statistics` WHERE `table_schema` = 'hugray' AND `table_name` = 'sys_agreement' ORDER BY `index_name`, `seq_in_index`;