-- 房间红包主表 CREATE TABLE `room_red_packet` ( `id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', `packet_id` VARCHAR(32) UNIQUE NOT NULL COMMENT '红包ID(UUID)', `room_id` BIGINT NOT NULL COMMENT '房间ID', `user_id` BIGINT NOT NULL COMMENT '发起人ID', `packet_type` TINYINT NOT NULL COMMENT '红包类型:1-固定金额 2-拼手气', `source_type` TINYINT NOT NULL DEFAULT 1 COMMENT '来源类型:1-用户红包 2-平台红包', `total_amount` BIGINT NOT NULL COMMENT '总金额(分)', `total_count` INT NOT NULL COMMENT '红包总个数', `remain_amount` BIGINT NOT NULL COMMENT '剩余金额(分)', `remain_count` INT NOT NULL COMMENT '剩余个数', `expire_minutes` INT NOT NULL COMMENT '过期分钟数:1/3/5', `expire_time` DATETIME NOT NULL COMMENT '过期时间', `status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1-进行中 2-已抢完 3-已过期', `refund_status` TINYINT DEFAULT 0 COMMENT '退款状态:0-未退 1-已退 2-无需退款', `is_broadcast` TINYINT DEFAULT 0 COMMENT '是否触发全服推送:0-否 1-是(10000+金币)', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX `idx_room_id` (`room_id`), INDEX `idx_user_id` (`user_id`), INDEX `idx_expire_time` (`expire_time`, `status`), INDEX `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='房间红包主表'; -- 房间红包领取记录表 CREATE TABLE `room_red_packet_record` ( `id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', `record_id` VARCHAR(32) UNIQUE NOT NULL COMMENT '记录ID(UUID)', `packet_id` VARCHAR(32) NOT NULL COMMENT '红包ID', `user_id` BIGINT NOT NULL COMMENT '领取人ID', `amount` BIGINT NOT NULL COMMENT '领取金额(分)', `grab_time` DATETIME NOT NULL COMMENT '抢红包时间', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', UNIQUE KEY `uk_packet_user` (`packet_id`, `user_id`) COMMENT '防止重复领取', INDEX `idx_packet_id` (`packet_id`), INDEX `idx_user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='房间红包领取记录表'; -- 房间红包异常日志表(可选,用于补偿机制) CREATE TABLE `room_red_packet_error_log` ( `id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID', `packet_id` VARCHAR(32) NOT NULL COMMENT '红包ID', `user_id` BIGINT COMMENT '用户ID', `error_type` VARCHAR(50) NOT NULL COMMENT '异常类型', `error_msg` TEXT COMMENT '异常信息', `retry_count` INT DEFAULT 0 COMMENT '重试次数', `status` TINYINT DEFAULT 0 COMMENT '状态:0-待处理 1-已处理', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX `idx_packet_id` (`packet_id`), INDEX `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='房间红包异常日志表';