create.sql 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. -- 任务模块数据库创建脚本
  2. -- 创建时间:根据数据库设计文档自动生成
  3. -- 1. 任务分类表
  4. CREATE TABLE IF NOT EXISTS `task_categories` (
  5. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  6. `name` varchar(100) NOT NULL COMMENT '分类名称',
  7. `code` varchar(50) NOT NULL COMMENT '分类编码(唯一)',
  8. `description` varchar(255) DEFAULT NULL COMMENT '分类描述',
  9. `sort_order` int(11) NOT NULL DEFAULT 0 COMMENT '排序顺序',
  10. `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  11. `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  12. PRIMARY KEY (`id`),
  13. UNIQUE KEY `idx_code` (`code`)
  14. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务分类表';
  15. -- 2. 任务定义表
  16. CREATE TABLE IF NOT EXISTS `task_tasks` (
  17. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  18. `category_id` int(11) NOT NULL COMMENT '任务分类ID,外键关联task_categories表',
  19. `name` varchar(100) NOT NULL COMMENT '任务名称',
  20. `description` varchar(500) DEFAULT NULL COMMENT '任务描述',
  21. `type` varchar(20) NOT NULL COMMENT '任务类型(daily, weekly, achievement, event, tutorial, team)',
  22. `prerequisite_tasks` json DEFAULT NULL COMMENT '前置任务ID(JSON格式)',
  23. `level_required` int(11) NOT NULL DEFAULT 0 COMMENT '所需等级',
  24. `time_limit` int(11) DEFAULT NULL COMMENT '时间限制(秒,NULL表示无限制)',
  25. `max_completions` int(11) NOT NULL DEFAULT 1 COMMENT '最大完成次数(用于限制任务可完成的次数)',
  26. `reset_type` varchar(20) NOT NULL DEFAULT 'none' COMMENT '重置类型(none, daily, weekly, monthly)',
  27. `display_params` json DEFAULT NULL COMMENT '显示参数(JSON格式,存储与任务显示相关的参数)',
  28. `sort_order` int(11) NOT NULL DEFAULT 0 COMMENT '排序权重(数值越大越靠前)',
  29. `is_active` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否激活(0:否, 1:是)',
  30. `start_time` timestamp NULL DEFAULT NULL COMMENT '开始时间(NULL表示立即开始)',
  31. `end_time` timestamp NULL DEFAULT NULL COMMENT '结束时间(NULL表示永不结束)',
  32. `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  33. `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  34. PRIMARY KEY (`id`),
  35. KEY `idx_category` (`category_id`),
  36. KEY `idx_type` (`type`),
  37. KEY `idx_active_time` (`is_active`, `start_time`, `end_time`),
  38. KEY `idx_sort` (`sort_order`)
  39. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务定义表';
  40. -- 3. 任务奖励定义表
  41. CREATE TABLE IF NOT EXISTS `task_rewards` (
  42. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  43. `task_id` int(11) NOT NULL COMMENT '任务ID,外键关联task_tasks表',
  44. `reward_type` varchar(50) NOT NULL COMMENT '奖励类型(item, currency, experience, feature_unlock等)',
  45. `reward_param1` varchar(100) NOT NULL COMMENT '奖励参数1(如物品类型、货币类型等)',
  46. `reward_param2` varchar(100) NOT NULL COMMENT '奖励参数2(如物品ID、货币ID等)',
  47. `quantity` int(11) NOT NULL DEFAULT 1 COMMENT '奖励数量',
  48. `extra_data` json DEFAULT NULL COMMENT '额外数据(JSON格式)',
  49. `sort_order` int(11) NOT NULL DEFAULT 0 COMMENT '排序权重(数值越大越靠前)',
  50. `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  51. `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  52. PRIMARY KEY (`id`),
  53. KEY `idx_task_id` (`task_id`),
  54. KEY `idx_reward_type` (`reward_type`),
  55. KEY `idx_reward_params` (`reward_param1`, `reward_param2`),
  56. KEY `idx_sort` (`sort_order`)
  57. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务奖励定义表';
  58. -- 4. 任务接取消耗表
  59. CREATE TABLE IF NOT EXISTS `task_costs` (
  60. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  61. `task_id` int(11) NOT NULL COMMENT '任务ID,外键关联task_tasks表',
  62. `cost_type` varchar(50) NOT NULL COMMENT '消耗类型(currency, item, energy, ticket等)',
  63. `cost_param1` varchar(100) NOT NULL COMMENT '消耗参数1(如货币类型、物品类型等)',
  64. `cost_param2` varchar(100) NOT NULL COMMENT '消耗参数2(如货币ID、物品ID等)',
  65. `quantity` int(11) NOT NULL DEFAULT 1 COMMENT '消耗数量',
  66. `extra_data` json DEFAULT NULL COMMENT '额外数据(JSON格式)',
  67. `sort_order` int(11) NOT NULL DEFAULT 0 COMMENT '排序权重(数值越大越靠前)',
  68. `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  69. `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  70. PRIMARY KEY (`id`),
  71. KEY `idx_task_id` (`task_id`),
  72. KEY `idx_cost_type` (`cost_type`),
  73. KEY `idx_cost_params` (`cost_param1`, `cost_param2`),
  74. KEY `idx_sort` (`sort_order`)
  75. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务接取消耗表';
  76. -- 5. 任务条件表
  77. CREATE TABLE IF NOT EXISTS `task_conditions` (
  78. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  79. `code` varchar(50) NOT NULL COMMENT '条件代码(唯一),如login, plant, harvest',
  80. `name` varchar(100) NOT NULL COMMENT '条件名称,如登录游戏, 种植作物, 收获作物',
  81. `description` varchar(255) DEFAULT NULL COMMENT '条件描述',
  82. `param_schema` json DEFAULT NULL COMMENT '参数模式,定义此条件需要的参数及其类型',
  83. `handler_class` varchar(255) DEFAULT NULL COMMENT '处理此条件的类名',
  84. `is_active` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否激活(0:否, 1:是)',
  85. `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  86. `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  87. PRIMARY KEY (`id`),
  88. UNIQUE KEY `idx_code` (`code`)
  89. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务条件表';
  90. -- 6. 任务达成条件表
  91. CREATE TABLE IF NOT EXISTS `task_achievement_conditions` (
  92. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  93. `task_id` int(11) NOT NULL COMMENT '任务ID,外键关联task_tasks表',
  94. `condition_id` int(11) NOT NULL COMMENT '条件ID,外键关联task_conditions表',
  95. `condition_type` varchar(20) NOT NULL DEFAULT 'progress' COMMENT '条件类型(prerequisite=前置条件,progress=进度条件)',
  96. `target_value` int(11) NOT NULL DEFAULT 1 COMMENT '目标值,如需要完成的次数',
  97. `params` json DEFAULT NULL COMMENT '条件参数,如特定物品ID、特定作物ID等',
  98. `operator` varchar(10) NOT NULL DEFAULT '=' COMMENT '运算符,如=, >=, <=',
  99. `sort_order` int(11) NOT NULL DEFAULT 0 COMMENT '排序顺序,用于多条件任务',
  100. `is_required` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否必须满足此条件(0:否, 1:是)',
  101. `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  102. `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  103. PRIMARY KEY (`id`),
  104. KEY `idx_task_id` (`task_id`),
  105. KEY `idx_condition_id` (`condition_id`),
  106. KEY `idx_task_condition` (`task_id`, `condition_id`),
  107. KEY `idx_condition_type` (`condition_type`)
  108. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务达成条件表';
  109. -- 7. 用户任务关联表
  110. CREATE TABLE IF NOT EXISTS `task_user_tasks` (
  111. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  112. `user_id` int(11) NOT NULL COMMENT '用户ID',
  113. `task_id` int(11) NOT NULL COMMENT '任务ID,外键关联task_tasks表',
  114. `status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '状态(0:未接取, 1:进行中, 2:已完成, 3:已领取奖励, 4:已失败, 5:已过期)',
  115. `progress` int(11) NOT NULL DEFAULT 0 COMMENT '当前进度',
  116. `completed_at` timestamp NULL DEFAULT NULL COMMENT '完成时间',
  117. `rewarded_at` timestamp NULL DEFAULT NULL COMMENT '奖励发放时间',
  118. `expire_at` timestamp NULL DEFAULT NULL COMMENT '过期时间',
  119. `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  120. `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  121. PRIMARY KEY (`id`),
  122. UNIQUE KEY `idx_user_task` (`user_id`, `task_id`),
  123. KEY `idx_user_status` (`user_id`, `status`),
  124. KEY `idx_task` (`task_id`),
  125. KEY `idx_expire` (`expire_at`)
  126. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户任务关联表';
  127. -- 8. 用户任务进度表
  128. CREATE TABLE IF NOT EXISTS `task_user_progress` (
  129. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  130. `user_id` int(11) NOT NULL COMMENT '用户ID',
  131. `task_id` int(11) NOT NULL COMMENT '任务ID,外键关联task_tasks表',
  132. `achievement_condition_id` int(11) NOT NULL COMMENT '达成条件ID,外键关联task_achievement_conditions表',
  133. `current_value` int(11) NOT NULL DEFAULT 0 COMMENT '当前值',
  134. `last_update_time` timestamp NULL DEFAULT NULL COMMENT '最后更新时间',
  135. `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  136. `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  137. PRIMARY KEY (`id`),
  138. UNIQUE KEY `idx_user_task_condition` (`user_id`, `task_id`, `achievement_condition_id`),
  139. KEY `idx_user_task` (`user_id`, `task_id`),
  140. KEY `idx_achievement_condition` (`achievement_condition_id`)
  141. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户任务进度表';
  142. -- 9. 任务完成日志表
  143. CREATE TABLE IF NOT EXISTS `task_completion_logs` (
  144. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  145. `user_id` int(11) NOT NULL COMMENT '用户ID',
  146. `task_id` int(11) NOT NULL COMMENT '任务ID,外键关联task_tasks表',
  147. `completed_at` timestamp NOT NULL COMMENT '完成时间',
  148. `time_spent` int(11) DEFAULT NULL COMMENT '完成耗时(秒)',
  149. `ip_address` varchar(45) DEFAULT NULL COMMENT 'IP地址',
  150. `device_info` varchar(255) DEFAULT NULL COMMENT '设备信息',
  151. `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  152. PRIMARY KEY (`id`),
  153. KEY `idx_user` (`user_id`),
  154. KEY `idx_task` (`task_id`),
  155. KEY `idx_completed_at` (`completed_at`)
  156. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务完成日志表';
  157. -- 10. 任务奖励发放日志表
  158. CREATE TABLE IF NOT EXISTS `task_reward_logs` (
  159. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  160. `user_id` int(11) NOT NULL COMMENT '用户ID',
  161. `task_id` int(11) NOT NULL COMMENT '任务ID,外键关联task_tasks表',
  162. `user_task_id` int(11) NOT NULL COMMENT '用户任务ID,外键关联task_user_tasks表',
  163. `rewards` json NOT NULL COMMENT '奖励内容(JSON格式)',
  164. `rewarded_at` timestamp NOT NULL COMMENT '奖励发放时间',
  165. `ip_address` varchar(45) DEFAULT NULL COMMENT 'IP地址',
  166. `device_info` varchar(255) DEFAULT NULL COMMENT '设备信息',
  167. `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  168. PRIMARY KEY (`id`),
  169. KEY `idx_user` (`user_id`),
  170. KEY `idx_task` (`task_id`),
  171. KEY `idx_user_task` (`user_task_id`),
  172. KEY `idx_rewarded_at` (`rewarded_at`)
  173. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务奖励发放日志表';
  174. -- 11. 任务消耗日志表
  175. CREATE TABLE IF NOT EXISTS `task_cost_logs` (
  176. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  177. `user_id` int(11) NOT NULL COMMENT '用户ID',
  178. `task_id` int(11) NOT NULL COMMENT '任务ID,外键关联task_tasks表',
  179. `cost_type` varchar(50) NOT NULL COMMENT '消耗类型(currency, item, energy, ticket等)',
  180. `cost_param1` varchar(100) NOT NULL COMMENT '消耗参数1(如货币类型、物品类型等)',
  181. `cost_param2` varchar(100) NOT NULL COMMENT '消耗参数2(如货币ID、物品ID等)',
  182. `quantity` int(11) NOT NULL DEFAULT 1 COMMENT '消耗数量',
  183. `cost_at` timestamp NOT NULL COMMENT '消耗时间',
  184. `ip_address` varchar(45) DEFAULT NULL COMMENT 'IP地址',
  185. `device_info` varchar(255) DEFAULT NULL COMMENT '设备信息',
  186. `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  187. PRIMARY KEY (`id`),
  188. KEY `idx_user` (`user_id`),
  189. KEY `idx_task` (`task_id`),
  190. KEY `idx_cost_type` (`cost_type`),
  191. KEY `idx_cost_at` (`cost_at`)
  192. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务消耗日志表';
  193. -- 12. 任务重置日志表
  194. CREATE TABLE IF NOT EXISTS `task_reset_logs` (
  195. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  196. `reset_type` varchar(20) NOT NULL COMMENT '重置类型(daily, weekly, monthly)',
  197. `reset_time` timestamp NOT NULL COMMENT '重置时间',
  198. `affected_tasks` json DEFAULT NULL COMMENT '受影响的任务ID列表(JSON格式)',
  199. `affected_count` int(11) NOT NULL DEFAULT 0 COMMENT '受影响的任务数量',
  200. `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  201. PRIMARY KEY (`id`),
  202. KEY `idx_reset_type` (`reset_type`),
  203. KEY `idx_reset_time` (`reset_time`)
  204. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务重置日志表';
  205. -- 添加外键约束(如果需要)
  206. -- ALTER TABLE `task_tasks` ADD CONSTRAINT `fk_task_category` FOREIGN KEY (`category_id`) REFERENCES `task_categories` (`id`) ON DELETE CASCADE;
  207. -- ALTER TABLE `task_rewards` ADD CONSTRAINT `fk_reward_task` FOREIGN KEY (`task_id`) REFERENCES `task_tasks` (`id`) ON DELETE CASCADE;
  208. -- ALTER TABLE `task_costs` ADD CONSTRAINT `fk_cost_task` FOREIGN KEY (`task_id`) REFERENCES `task_tasks` (`id`) ON DELETE CASCADE;
  209. -- ALTER TABLE `task_achievement_conditions` ADD CONSTRAINT `fk_achievement_task` FOREIGN KEY (`task_id`) REFERENCES `task_tasks` (`id`) ON DELETE CASCADE;
  210. -- ALTER TABLE `task_achievement_conditions` ADD CONSTRAINT `fk_achievement_condition` FOREIGN KEY (`condition_id`) REFERENCES `task_conditions` (`id`) ON DELETE CASCADE;
  211. -- ALTER TABLE `task_user_tasks` ADD CONSTRAINT `fk_user_task` FOREIGN KEY (`task_id`) REFERENCES `task_tasks` (`id`) ON DELETE CASCADE;
  212. -- ALTER TABLE `task_user_progress` ADD CONSTRAINT `fk_progress_task` FOREIGN KEY (`task_id`) REFERENCES `task_tasks` (`id`) ON DELETE CASCADE;
  213. -- ALTER TABLE `task_user_progress` ADD CONSTRAINT `fk_progress_condition` FOREIGN KEY (`achievement_condition_id`) REFERENCES `task_achievement_conditions` (`id`) ON DELETE CASCADE;