zjk
10 小时以前 8ea6a7dd1fcdbd4e22c564ed63a5a8023510161a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
-- ----------------------------
-- 协议配置:协议版本表
--
-- 目标库 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`;