-- 任务中心 DDL(含列注释与表注释) CREATE TABLE IF NOT EXISTS `task_center_tasks` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', `name` VARCHAR(64) NOT NULL COMMENT '任务名称', `description` TEXT NULL COMMENT '任务描述', `status` TINYINT NOT NULL DEFAULT 1 COMMENT '任务状态:1启用 0停用', `start_time` DATETIME NULL COMMENT '任务开始时间', `end_time` DATETIME NULL COMMENT '任务结束时间', `visibility` TINYINT NOT NULL DEFAULT 1 COMMENT '展示开关:1展示 0隐藏', `conditions_schema` TEXT NULL COMMENT '规则DSL(JSON),可选', `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_status` (`status`), KEY `idx_visibility` (`visibility`), KEY `idx_time` (`start_time`,`end_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务中心-任务'; CREATE TABLE IF NOT EXISTS `task_center_task_tiers` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', `task_id` BIGINT NOT NULL COMMENT '关联任务ID(task_center_tasks.id)', `metric` VARCHAR(32) NOT NULL COMMENT '指标:first_order|order_count|invite_count', `operator` VARCHAR(8) NOT NULL COMMENT '比较符:>= 或 ==', `threshold` BIGINT NOT NULL COMMENT '阈值(数量或布尔首单)', `window` VARCHAR(32) NOT NULL COMMENT '时间窗口:activity_period|since_registration', `repeatable` TINYINT NOT NULL DEFAULT 1 COMMENT '是否每档一次:0否 1是', `priority` INT NOT NULL DEFAULT 0 COMMENT '匹配优先级(数值越小越先匹配)', `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_task` (`task_id`), KEY `idx_task_priority` (`task_id`,`priority`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务中心-档位配置'; CREATE TABLE IF NOT EXISTS `task_center_task_rewards` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', `task_id` BIGINT NOT NULL COMMENT '关联任务ID(task_center_tasks.id)', `tier_id` BIGINT NOT NULL COMMENT '关联档位ID(task_center_task_tiers.id)', `reward_type` VARCHAR(32) NOT NULL COMMENT '奖励类型:points|coupon|item_card|title', `reward_payload` TEXT NOT NULL COMMENT '奖励载荷(JSON):各类型所需参数', `quantity` BIGINT NOT NULL DEFAULT 1 COMMENT '发放数量或上限(视类型)', `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_task_tier` (`task_id`,`tier_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务中心-奖励配置'; CREATE TABLE IF NOT EXISTS `task_center_user_progress` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_id` BIGINT NOT NULL COMMENT '用户ID(users.id)', `task_id` BIGINT NOT NULL COMMENT '任务ID(task_center_tasks.id)', `order_count` BIGINT NOT NULL DEFAULT 0 COMMENT '累计完成订单数', `invite_count` BIGINT NOT NULL DEFAULT 0 COMMENT '累计有效邀请数', `first_order` TINYINT NOT NULL DEFAULT 0 COMMENT '首单标记:1是 0否', `claimed_tiers` TEXT NULL COMMENT '已领取档位ID数组(JSON)', `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uniq_user_task` (`user_id`,`task_id`), KEY `idx_user` (`user_id`), KEY `idx_task` (`task_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务中心-用户进度'; CREATE TABLE IF NOT EXISTS `task_center_event_logs` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID', `event_id` VARCHAR(64) NULL COMMENT '事件ID(字符串)', `source_type` VARCHAR(16) NULL COMMENT '来源类型:order|invite', `source_id` BIGINT NULL COMMENT '来源业务ID(订单ID或用户ID)', `user_id` BIGINT NULL COMMENT '用户ID(users.id)', `task_id` BIGINT NULL COMMENT '任务ID(task_center_tasks.id)', `tier_id` BIGINT NULL COMMENT '档位ID(task_center_task_tiers.id)', `idempotency_key` VARCHAR(128) NOT NULL COMMENT '幂等键:user:task:tier:source', `status` VARCHAR(16) NULL COMMENT '处理状态:granted|skipped|rejected', `result` TEXT NULL COMMENT '处理结果详情(JSON)', `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uniq_idk` (`idempotency_key`), KEY `idx_user_task_tier` (`user_id`,`task_id`,`tier_id`), KEY `idx_event` (`event_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务中心-事件日志';