SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci; USE hyapp_user; -- 管理员封禁与经理中心封禁保持独立事实,解封时在 user-service 内同时检查两种来源。 CREATE TABLE IF NOT EXISTS admin_user_bans ( app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离', ban_id VARCHAR(96) NOT NULL COMMENT '管理员封禁事实 ID', command_id VARCHAR(128) NOT NULL COMMENT '后台请求幂等命令 ID', target_user_id BIGINT NOT NULL COMMENT '被封禁用户 ID', target_old_status VARCHAR(32) NOT NULL COMMENT '创建事实前的用户状态,仅供审计', expires_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '到期时间,UTC epoch ms;0 表示永久', status VARCHAR(32) NOT NULL COMMENT 'active/released/expired', reason VARCHAR(255) NOT NULL DEFAULT '' COMMENT '封禁原因', operator_admin_id BIGINT NOT NULL COMMENT '创建封禁的后台管理员 ID', released_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '手动解封管理员 ID;系统到期为 0', released_reason VARCHAR(255) NOT NULL DEFAULT '' COMMENT '释放原因', released_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT '释放时间,UTC epoch ms', created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', PRIMARY KEY (app_code, ban_id), UNIQUE KEY uk_admin_user_bans_command (app_code, command_id), KEY idx_admin_user_bans_target (app_code, target_user_id, status, created_at_ms), KEY idx_admin_user_bans_expire (app_code, status, expires_at_ms) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='后台管理员用户封禁事实表'; -- 解封命令必须独立保存幂等事实:后台在合并摘要只看到经理封禁时会按用户释放最新管理员封禁, -- 若 HTTP/gRPC 超时后重试,不能继续释放下一条重叠的管理员封禁。 CREATE TABLE IF NOT EXISTS admin_user_ban_release_commands ( app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码,用于多租户隔离', command_id VARCHAR(128) NOT NULL COMMENT '稳定解封命令 ID,通常取 request_id', target_user_id BIGINT NOT NULL COMMENT '目标用户 ID', requested_ban_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '调用方指定 ban_id;空表示选择最新 active 管理员封禁', resolved_ban_id VARCHAR(96) NOT NULL DEFAULT '' COMMENT '本命令实际释放的 ban_id', release_status VARCHAR(32) NOT NULL COMMENT 'released/expired', operator_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '手动操作管理员 ID;系统到期为 0', reason VARCHAR(255) NOT NULL DEFAULT '' COMMENT '释放原因快照,用于校验幂等载荷', created_at_ms BIGINT NOT NULL COMMENT '创建时间,UTC epoch ms', updated_at_ms BIGINT NOT NULL COMMENT '更新时间,UTC epoch ms', PRIMARY KEY (app_code, command_id), KEY idx_admin_ban_release_resolved (app_code, resolved_ban_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='后台管理员解封命令幂等事实表';