mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-08 04:39:00 +08:00
fix(db): 补齐旧社交凭据迁移及升级说明
This commit is contained in:
1 parent
816a63f0c2
commit
7712a1bb3c
2 files changed
+85
No files matched your search
@@ -0,0 +1,58 @@
|
||||
-- 适用:升级到独立社交身份表的既有 PIGX 数据库。
|
||||
-- 执行前备份,并通过 mysql 的 --database 指定 pigxx 或 pigxx_boot;不要对业务库重跑初始化脚本。
|
||||
-- 保留 sys_user 旧字段;仅迁移当前仍支持的平台。重复执行不会覆盖已经绑定的身份。
|
||||
-- 若同一身份绑定多个用户,或用户已有不同身份,唯一索引将阻止迁移并回滚数据,请先核对冲突。
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `sys_user_social` (
|
||||
`id` bigint(20) NOT NULL COMMENT '主键ID',
|
||||
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
|
||||
`type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '社交平台类型',
|
||||
`identifier` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '唯一凭据',
|
||||
`create_time` datetime NOT NULL COMMENT '创建时间',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE KEY `uk_social_identifier` (`type`,`identifier`) USING BTREE,
|
||||
UNIQUE KEY `uk_user_social_type` (`user_id`,`type`) USING BTREE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户社交登录身份表';
|
||||
|
||||
DROP PROCEDURE IF EXISTS pigx_migrate_user_social_20260922;
|
||||
DELIMITER $$
|
||||
CREATE PROCEDURE pigx_migrate_user_social_20260922()
|
||||
BEGIN
|
||||
DECLARE platform_index INT DEFAULT 0;
|
||||
DECLARE legacy_column VARCHAR(32);
|
||||
DECLARE platform_type VARCHAR(32);
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
ROLLBACK;
|
||||
RESIGNAL;
|
||||
END;
|
||||
|
||||
START TRANSACTION;
|
||||
WHILE platform_index < 5 DO
|
||||
SET legacy_column = ELT(platform_index + 1, 'wx_openid', 'mini_openid', 'qq_openid', 'wx_cp_userid', 'wx_ding_userid');
|
||||
SET platform_type = ELT(platform_index + 1, 'WX', 'MINI', 'QQ', 'WEIXIN_CP', 'DINGTALK');
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sys_user' AND COLUMN_NAME = legacy_column
|
||||
) THEN
|
||||
SET @pigx_social_migration_sql = CONCAT(
|
||||
'INSERT INTO sys_user_social (id, user_id, type, identifier, create_time) ',
|
||||
'SELECT UUID_SHORT(), u.user_id, ', QUOTE(platform_type), ', u.`', legacy_column, '`, NOW() ',
|
||||
'FROM sys_user u WHERE u.`', legacy_column, '` IS NOT NULL ',
|
||||
'AND TRIM(u.`', legacy_column, '`) <> ', QUOTE(''), ' ',
|
||||
'AND NOT EXISTS (SELECT 1 FROM sys_user_social s WHERE s.user_id = u.user_id ',
|
||||
'AND s.type = ', QUOTE(platform_type), ' AND BINARY s.identifier = BINARY u.`', legacy_column, '`)'
|
||||
);
|
||||
PREPARE pigx_social_migration_stmt FROM @pigx_social_migration_sql;
|
||||
EXECUTE pigx_social_migration_stmt;
|
||||
DEALLOCATE PREPARE pigx_social_migration_stmt;
|
||||
END IF;
|
||||
SET platform_index = platform_index + 1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END$$
|
||||
DELIMITER ;
|
||||
|
||||
CALL pigx_migrate_user_social_20260922();
|
||||
DROP PROCEDURE pigx_migrate_user_social_20260922;
|
||||
SET @pigx_social_migration_sql = NULL;
|
||||
@@ -0,0 +1,27 @@
|
||||
# 2026-09-22 数据库脚本同步
|
||||
|
||||
以 `ai-dev-next` 的 `c0b8a966b` 为参考,仅同步当前商业版代码对应的结构,不包含 AI 表、菜单、路由和镜像初始化入口。
|
||||
|
||||
## 新安装
|
||||
|
||||
单体使用 `db/0pigxx_boot.sql`;微服务按 `db/Dockerfile` 所列脚本初始化。两种模式的公共表结构已对齐,包括 utf8mb4、日志 `user_agent` 的 TEXT 类型和用户 `dept_id` 的默认值 0。
|
||||
|
||||
内置 `app`、`pig` 客户端的新安装授权类型与参考分支一致,移除 `client_credentials`;其他授权类型保持不变。服务端仍支持该授权模式,需要机器客户端时单独配置。
|
||||
|
||||
## 既有数据库
|
||||
|
||||
不要对已有数据库重跑带有 `DROP TABLE` 的初始化脚本。备份后先在数据库副本验证,根据实际部署模式选择升级文件:
|
||||
|
||||
| 文件 | 适用范围 |
|
||||
| --- | --- |
|
||||
| `20260922_schema_alignment_boot.sql` | 单体;执行时指定目标数据库,默认部署为 `pigxx_boot` |
|
||||
| `20260922_schema_alignment_services.sql` | 微服务;核对脚本内 `USE` 的各模块数据库名 |
|
||||
| `20260922_user_social.sql` | 从旧版用户表迁移社交身份;单体在 `pigxx_boot` 执行,微服务在 `pigxx` 执行 |
|
||||
|
||||
结构升级以本轮修改前的 `dev` 为起点,不是任意历史版本的全量升级工具;更早版本缺少的表或字段需要按实际版本补齐。MySQL DDL 会隐式提交,脚本失败后应核对已完成的语句再重跑。为同步修改 Quartz 外键关联列的字符集,脚本暂时关闭当前会话的外键检查,并在结尾恢复;执行期间停止相关写入,失败时退出该会话。微服务旧表中 `dept_id IS NULL` 的记录先转为 0,再施加非空约束。
|
||||
|
||||
社交身份脚本将 `wx_openid`、`mini_openid`、`qq_openid`、`wx_cp_userid`、`wx_ding_userid` 映射到代码中的 `WX`、`MINI`、`QQ`、`WEIXIN_CP`、`DINGTALK`。迁移保留原字段,重复执行跳过完全相同的身份映射;绑定冲突触发唯一索引错误并回滚当次数据迁移,不覆盖新绑定。该脚本使用 `UUID_SHORT()` 生成迁移记录 ID,应在同一 MySQL 实例执行,迁移期间停止账号绑定写入。
|
||||
|
||||
结构升级不会覆盖既有 OAuth 授权、第三方应用密钥、注册开关或自定义菜单。旧安装的飞书字典项及应用配置应结合 `pigx-upms/FEISHU-LOGIN.md` 核对;本目录脚本不替用户配置飞书应用。
|
||||
|
||||
动态加签的 `process_task_add_sign_record`、`assignment_origin`、`initial_user_id` 已存在于当前单体及微服务初始化脚本。本轮未改动其结构。
|
||||
Reference in new issue
Block a user