-- 任务模块数据库创建脚本 -- 创建时间:根据数据库设计文档自动生成 -- 1. 任务分类表 CREATE TABLE IF NOT EXISTS `task_categories` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(100) NOT NULL COMMENT '分类名称', `code` varchar(50) NOT NULL COMMENT '分类编码(唯一)', `description` varchar(255) DEFAULT NULL COMMENT '分类描述', `sort_order` int(11) NOT NULL DEFAULT 0 COMMENT '排序顺序', `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `idx_code` (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务分类表'; -- 2. 任务定义表 CREATE TABLE IF NOT EXISTS `task_tasks` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `category_id` int(11) NOT NULL COMMENT '任务分类ID,外键关联task_categories表', `name` varchar(100) NOT NULL COMMENT '任务名称', `description` varchar(500) DEFAULT NULL COMMENT '任务描述', `type` varchar(20) NOT NULL COMMENT '任务类型(daily, weekly, achievement, event, tutorial, team)', `prerequisite_tasks` json DEFAULT NULL COMMENT '前置任务ID(JSON格式)', `level_required` int(11) NOT NULL DEFAULT 0 COMMENT '所需等级', `time_limit` int(11) DEFAULT NULL COMMENT '时间限制(秒,NULL表示无限制)', `max_completions` int(11) NOT NULL DEFAULT 1 COMMENT '最大完成次数(用于限制任务可完成的次数)', `reset_type` varchar(20) NOT NULL DEFAULT 'none' COMMENT '重置类型(none, daily, weekly, monthly)', `display_params` json DEFAULT NULL COMMENT '显示参数(JSON格式,存储与任务显示相关的参数)', `sort_order` int(11) NOT NULL DEFAULT 0 COMMENT '排序权重(数值越大越靠前)', `is_active` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否激活(0:否, 1:是)', `start_time` timestamp NULL DEFAULT NULL COMMENT '开始时间(NULL表示立即开始)', `end_time` timestamp NULL DEFAULT NULL COMMENT '结束时间(NULL表示永不结束)', `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_category` (`category_id`), KEY `idx_type` (`type`), KEY `idx_active_time` (`is_active`, `start_time`, `end_time`), KEY `idx_sort` (`sort_order`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务定义表'; -- 3. 任务奖励定义表 CREATE TABLE IF NOT EXISTS `task_rewards` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `task_id` int(11) NOT NULL COMMENT '任务ID,外键关联task_tasks表', `reward_type` varchar(50) NOT NULL COMMENT '奖励类型(item, currency, experience, feature_unlock等)', `reward_param1` varchar(100) NOT NULL COMMENT '奖励参数1(如物品类型、货币类型等)', `reward_param2` varchar(100) NOT NULL COMMENT '奖励参数2(如物品ID、货币ID等)', `quantity` int(11) NOT NULL DEFAULT 1 COMMENT '奖励数量', `extra_data` json DEFAULT NULL COMMENT '额外数据(JSON格式)', `sort_order` int(11) NOT NULL DEFAULT 0 COMMENT '排序权重(数值越大越靠前)', `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_task_id` (`task_id`), KEY `idx_reward_type` (`reward_type`), KEY `idx_reward_params` (`reward_param1`, `reward_param2`), KEY `idx_sort` (`sort_order`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务奖励定义表'; -- 4. 任务接取消耗表 CREATE TABLE IF NOT EXISTS `task_costs` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `task_id` int(11) NOT NULL COMMENT '任务ID,外键关联task_tasks表', `cost_type` varchar(50) NOT NULL COMMENT '消耗类型(currency, item, energy, ticket等)', `cost_param1` varchar(100) NOT NULL COMMENT '消耗参数1(如货币类型、物品类型等)', `cost_param2` varchar(100) NOT NULL COMMENT '消耗参数2(如货币ID、物品ID等)', `quantity` int(11) NOT NULL DEFAULT 1 COMMENT '消耗数量', `extra_data` json DEFAULT NULL COMMENT '额外数据(JSON格式)', `sort_order` int(11) NOT NULL DEFAULT 0 COMMENT '排序权重(数值越大越靠前)', `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_task_id` (`task_id`), KEY `idx_cost_type` (`cost_type`), KEY `idx_cost_params` (`cost_param1`, `cost_param2`), KEY `idx_sort` (`sort_order`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务接取消耗表'; -- 5. 任务条件表 CREATE TABLE IF NOT EXISTS `task_conditions` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `code` varchar(50) NOT NULL COMMENT '条件代码(唯一),如login, plant, harvest', `name` varchar(100) NOT NULL COMMENT '条件名称,如登录游戏, 种植作物, 收获作物', `description` varchar(255) DEFAULT NULL COMMENT '条件描述', `param_schema` json DEFAULT NULL COMMENT '参数模式,定义此条件需要的参数及其类型', `handler_class` varchar(255) DEFAULT NULL COMMENT '处理此条件的类名', `is_active` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否激活(0:否, 1:是)', `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `idx_code` (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务条件表'; -- 6. 任务达成条件表 CREATE TABLE IF NOT EXISTS `task_achievement_conditions` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `task_id` int(11) NOT NULL COMMENT '任务ID,外键关联task_tasks表', `condition_id` int(11) NOT NULL COMMENT '条件ID,外键关联task_conditions表', `condition_type` varchar(20) NOT NULL DEFAULT 'progress' COMMENT '条件类型(prerequisite=前置条件,progress=进度条件)', `target_value` int(11) NOT NULL DEFAULT 1 COMMENT '目标值,如需要完成的次数', `params` json DEFAULT NULL COMMENT '条件参数,如特定物品ID、特定作物ID等', `operator` varchar(10) NOT NULL DEFAULT '=' COMMENT '运算符,如=, >=, <=', `sort_order` int(11) NOT NULL DEFAULT 0 COMMENT '排序顺序,用于多条件任务', `is_required` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否必须满足此条件(0:否, 1:是)', `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_task_id` (`task_id`), KEY `idx_condition_id` (`condition_id`), KEY `idx_task_condition` (`task_id`, `condition_id`), KEY `idx_condition_type` (`condition_type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务达成条件表'; -- 7. 用户任务关联表 CREATE TABLE IF NOT EXISTS `task_user_tasks` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `user_id` int(11) NOT NULL COMMENT '用户ID', `task_id` int(11) NOT NULL COMMENT '任务ID,外键关联task_tasks表', `status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '状态(0:未接取, 1:进行中, 2:已完成, 3:已领取奖励, 4:已失败, 5:已过期)', `progress` int(11) NOT NULL DEFAULT 0 COMMENT '当前进度', `completed_at` timestamp NULL DEFAULT NULL COMMENT '完成时间', `rewarded_at` timestamp NULL DEFAULT NULL COMMENT '奖励发放时间', `expire_at` timestamp NULL DEFAULT NULL COMMENT '过期时间', `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `idx_user_task` (`user_id`, `task_id`), KEY `idx_user_status` (`user_id`, `status`), KEY `idx_task` (`task_id`), KEY `idx_expire` (`expire_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户任务关联表'; -- 8. 用户任务进度表 CREATE TABLE IF NOT EXISTS `task_user_progress` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `user_id` int(11) NOT NULL COMMENT '用户ID', `task_id` int(11) NOT NULL COMMENT '任务ID,外键关联task_tasks表', `achievement_condition_id` int(11) NOT NULL COMMENT '达成条件ID,外键关联task_achievement_conditions表', `current_value` int(11) NOT NULL DEFAULT 0 COMMENT '当前值', `last_update_time` timestamp NULL DEFAULT NULL COMMENT '最后更新时间', `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `idx_user_task_condition` (`user_id`, `task_id`, `achievement_condition_id`), KEY `idx_user_task` (`user_id`, `task_id`), KEY `idx_achievement_condition` (`achievement_condition_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户任务进度表'; -- 9. 任务完成日志表 CREATE TABLE IF NOT EXISTS `task_completion_logs` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `user_id` int(11) NOT NULL COMMENT '用户ID', `task_id` int(11) NOT NULL COMMENT '任务ID,外键关联task_tasks表', `completed_at` timestamp NOT NULL COMMENT '完成时间', `time_spent` int(11) DEFAULT NULL COMMENT '完成耗时(秒)', `ip_address` varchar(45) DEFAULT NULL COMMENT 'IP地址', `device_info` varchar(255) DEFAULT NULL COMMENT '设备信息', `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_user` (`user_id`), KEY `idx_task` (`task_id`), KEY `idx_completed_at` (`completed_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务完成日志表'; -- 10. 任务奖励发放日志表 CREATE TABLE IF NOT EXISTS `task_reward_logs` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `user_id` int(11) NOT NULL COMMENT '用户ID', `task_id` int(11) NOT NULL COMMENT '任务ID,外键关联task_tasks表', `user_task_id` int(11) NOT NULL COMMENT '用户任务ID,外键关联task_user_tasks表', `rewards` json NOT NULL COMMENT '奖励内容(JSON格式)', `rewarded_at` timestamp NOT NULL COMMENT '奖励发放时间', `ip_address` varchar(45) DEFAULT NULL COMMENT 'IP地址', `device_info` varchar(255) DEFAULT NULL COMMENT '设备信息', `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_user` (`user_id`), KEY `idx_task` (`task_id`), KEY `idx_user_task` (`user_task_id`), KEY `idx_rewarded_at` (`rewarded_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务奖励发放日志表'; -- 11. 任务消耗日志表 CREATE TABLE IF NOT EXISTS `task_cost_logs` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `user_id` int(11) NOT NULL COMMENT '用户ID', `task_id` int(11) NOT NULL COMMENT '任务ID,外键关联task_tasks表', `cost_type` varchar(50) NOT NULL COMMENT '消耗类型(currency, item, energy, ticket等)', `cost_param1` varchar(100) NOT NULL COMMENT '消耗参数1(如货币类型、物品类型等)', `cost_param2` varchar(100) NOT NULL COMMENT '消耗参数2(如货币ID、物品ID等)', `quantity` int(11) NOT NULL DEFAULT 1 COMMENT '消耗数量', `cost_at` timestamp NOT NULL COMMENT '消耗时间', `ip_address` varchar(45) DEFAULT NULL COMMENT 'IP地址', `device_info` varchar(255) DEFAULT NULL COMMENT '设备信息', `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_user` (`user_id`), KEY `idx_task` (`task_id`), KEY `idx_cost_type` (`cost_type`), KEY `idx_cost_at` (`cost_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务消耗日志表'; -- 12. 任务重置日志表 CREATE TABLE IF NOT EXISTS `task_reset_logs` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `reset_type` varchar(20) NOT NULL COMMENT '重置类型(daily, weekly, monthly)', `reset_time` timestamp NOT NULL COMMENT '重置时间', `affected_tasks` json DEFAULT NULL COMMENT '受影响的任务ID列表(JSON格式)', `affected_count` int(11) NOT NULL DEFAULT 0 COMMENT '受影响的任务数量', `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_reset_type` (`reset_type`), KEY `idx_reset_time` (`reset_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务重置日志表'; -- 添加外键约束(如果需要) -- ALTER TABLE `task_tasks` ADD CONSTRAINT `fk_task_category` FOREIGN KEY (`category_id`) REFERENCES `task_categories` (`id`) ON DELETE CASCADE; -- ALTER TABLE `task_rewards` ADD CONSTRAINT `fk_reward_task` FOREIGN KEY (`task_id`) REFERENCES `task_tasks` (`id`) ON DELETE CASCADE; -- ALTER TABLE `task_costs` ADD CONSTRAINT `fk_cost_task` FOREIGN KEY (`task_id`) REFERENCES `task_tasks` (`id`) ON DELETE CASCADE; -- ALTER TABLE `task_achievement_conditions` ADD CONSTRAINT `fk_achievement_task` FOREIGN KEY (`task_id`) REFERENCES `task_tasks` (`id`) ON DELETE CASCADE; -- ALTER TABLE `task_achievement_conditions` ADD CONSTRAINT `fk_achievement_condition` FOREIGN KEY (`condition_id`) REFERENCES `task_conditions` (`id`) ON DELETE CASCADE; -- ALTER TABLE `task_user_tasks` ADD CONSTRAINT `fk_user_task` FOREIGN KEY (`task_id`) REFERENCES `task_tasks` (`id`) ON DELETE CASCADE; -- ALTER TABLE `task_user_progress` ADD CONSTRAINT `fk_progress_task` FOREIGN KEY (`task_id`) REFERENCES `task_tasks` (`id`) ON DELETE CASCADE; -- ALTER TABLE `task_user_progress` ADD CONSTRAINT `fk_progress_condition` FOREIGN KEY (`achievement_condition_id`) REFERENCES `task_achievement_conditions` (`id`) ON DELETE CASCADE;