feat: use six-digit numeric member invite codes

This commit is contained in:
richjohnrambo
2026-10-15 18:41:52 +08:00
parent 639c46fd88
commit c6ec45cccf
5 changed files with 82 additions and 16 deletions
@@ -0,0 +1,28 @@
-- 将现有会员邀请码迁移为唯一的六位数字,保留原码映射供核查和回退。
-- 执行前确认每个租户会员数不超过 900000,且没有占用 100000 起始区间的六位数字码。
-- 本迁移只调整邀请码;团队关系由 parent_id 和 tree 保存,不受影响。
CREATE TABLE IF NOT EXISTS `hg_app_member_invite_code_backup_20261015` (
`tenant_id` bigint unsigned NOT NULL,
`member_id` bigint unsigned NOT NULL,
`old_code` varchar(32) NOT NULL,
`new_code` char(6) NOT NULL,
`migrated_at` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (`tenant_id`, `member_id`),
UNIQUE KEY `uk_invite_code_backup_new` (`tenant_id`, `new_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员邀请码六位数字迁移备份';
START TRANSACTION;
INSERT INTO `hg_app_member_invite_code_backup_20261015`
(`tenant_id`, `member_id`, `old_code`, `new_code`)
SELECT `tenant_id`, `id`, `invite_code`,
LPAD(100000 + ROW_NUMBER() OVER (PARTITION BY `tenant_id` ORDER BY `id`) - 1, 6, '0')
FROM `hg_app_member`;
UPDATE `hg_app_member` AS m
JOIN `hg_app_member_invite_code_backup_20261015` AS b
ON b.`tenant_id` = m.`tenant_id` AND b.`member_id` = m.`id`
SET m.`invite_code` = b.`new_code`;
COMMIT;