fix(tongji): 修复小游戏平台同步与并发问题

This commit is contained in:
大哥大哥的大哥哥
2026-07-17 21:21:43 +08:00
parent 7192c4db8c
commit fd7e6071a8
8 changed files with 262 additions and 50 deletions
@@ -1,5 +1,13 @@
-- 控糖消消乐:真实用户周榜、幂等局记录与轻量分享访问关系
CREATE TABLE IF NOT EXISTS `zyt_tcm_game_weekly_allocator` (
`week_start` date NOT NULL COMMENT '周一日期',
`sex` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '同行组性别:0未知 1男 2女',
`create_time` int unsigned NOT NULL DEFAULT 0,
`update_time` int unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`week_start`, `sex`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='控糖消消乐每周同行分组并发锁';
CREATE TABLE IF NOT EXISTS `zyt_tcm_game_weekly_group` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`week_start` date NOT NULL COMMENT '周一日期',
@@ -68,6 +76,7 @@ CREATE TABLE IF NOT EXISTS `zyt_tcm_game_share_visit` (
`visitor_user_id` int unsigned NOT NULL COMMENT '受邀打开用户ID',
`create_time` int unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_inviter_visitor` (`inviter_user_id`, `visitor_user_id`),
UNIQUE KEY `uk_invite_visitor` (`invite_code`, `visitor_user_id`),
KEY `idx_inviter` (`inviter_user_id`),
KEY `idx_visitor` (`visitor_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='控糖消消乐分享打开记录(不做强绑定)';
@@ -0,0 +1,55 @@
-- 仅用于已经执行过旧版小游戏建表脚本的数据库。
-- 新安装直接执行 add_tcm_endless_game_platform.sql 即可。
CREATE TABLE IF NOT EXISTS `zyt_tcm_game_weekly_allocator` (
`week_start` date NOT NULL COMMENT '周一日期',
`sex` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '同行组性别:0未知 1男 2女',
`create_time` int unsigned NOT NULL DEFAULT 0,
`update_time` int unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`week_start`, `sex`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='控糖消消乐每周同行分组并发锁';
SET @has_old_visit_index = (
SELECT COUNT(*) FROM information_schema.statistics
WHERE table_schema = DATABASE()
AND table_name = 'zyt_tcm_game_share_visit'
AND index_name = 'uk_inviter_visitor'
);
SET @drop_old_visit_index_sql = IF(
@has_old_visit_index > 0,
'ALTER TABLE `zyt_tcm_game_share_visit` DROP INDEX `uk_inviter_visitor`',
'SELECT 1'
);
PREPARE drop_old_visit_index_stmt FROM @drop_old_visit_index_sql;
EXECUTE drop_old_visit_index_stmt;
DEALLOCATE PREPARE drop_old_visit_index_stmt;
SET @has_invite_visit_index = (
SELECT COUNT(*) FROM information_schema.statistics
WHERE table_schema = DATABASE()
AND table_name = 'zyt_tcm_game_share_visit'
AND index_name = 'uk_invite_visitor'
);
SET @add_invite_visit_index_sql = IF(
@has_invite_visit_index = 0,
'ALTER TABLE `zyt_tcm_game_share_visit` ADD UNIQUE INDEX `uk_invite_visitor` (`invite_code`, `visitor_user_id`)',
'SELECT 1'
);
PREPARE add_invite_visit_index_stmt FROM @add_invite_visit_index_sql;
EXECUTE add_invite_visit_index_stmt;
DEALLOCATE PREPARE add_invite_visit_index_stmt;
SET @has_inviter_index = (
SELECT COUNT(*) FROM information_schema.statistics
WHERE table_schema = DATABASE()
AND table_name = 'zyt_tcm_game_share_visit'
AND index_name = 'idx_inviter'
);
SET @add_inviter_index_sql = IF(
@has_inviter_index = 0,
'ALTER TABLE `zyt_tcm_game_share_visit` ADD INDEX `idx_inviter` (`inviter_user_id`)',
'SELECT 1'
);
PREPARE add_inviter_index_stmt FROM @add_inviter_index_sql;
EXECUTE add_inviter_index_stmt;
DEALLOCATE PREPARE add_inviter_index_stmt;