Kaynağa Gözat

docs(task): 添加任务模块API接口设计和数据库结构文档

- 新增任务模块API接口设计文档,详细说明了任务相关的各个接口- 新增任务模块数据库结构文档,包括任务分类、任务定义、用户任务关联等表结构
- 新增修改后的用户任务进度表结构,关联到任务达成条件
Your Name 8 ay önce
ebeveyn
işleme
f78690d477

+ 11 - 0
.roo/rules-architect/rules.md

@@ -0,0 +1,11 @@
+1.进行一些信息收集(例如使用read_file或search_files)以获取有关任务的更多上下文。
+
+2.您还应该向用户提出澄清问题,以便更好地理解任务。
+
+3.一旦你对用户的请求有了更多的了解,你应该为如何完成任务制定一个详细的计划。如果Mermaid图表有助于使你的计划更清晰,请将其包括在内。
+
+4.询问用户是否对这个计划感到满意,或者是否想进行任何更改。把这看作是一次头脑风暴会议,你可以在会上讨论任务并计划完成任务的最佳方式。
+
+5.用户确认计划后,询问他们是否希望您将其写入markdown文件。
+
+6.使用中文文件名

+ 688 - 0
app/Module/Task/Docs/API接口设计.md

@@ -0,0 +1,688 @@
+# 任务模块API接口设计
+
+## 1. 接口概述
+
+任务模块提供以下主要API接口:
+
+1. 获取任务列表
+2. 获取任务详情
+3. 接取任务
+4. 放弃任务
+5. 完成任务
+6. 领取任务奖励
+7. 获取任务进度
+
+## 2. 接口详细说明
+
+### 2.1 获取任务列表
+
+#### 请求
+
+```
+GET /api/task/list
+```
+
+#### 请求参数
+
+| 参数名 | 类型 | 必填 | 说明 |
+|-------|------|------|------|
+| type | string | 否 | 任务类型(daily, weekly, achievement, event, tutorial, team) |
+| status | int | 否 | 任务状态(0:未接取, 1:进行中, 2:已完成, 3:已领取奖励, 4:已失败, 5:已过期) |
+| category_id | int | 否 | 任务分类ID |
+| page | int | 否 | 页码,默认1 |
+| page_size | int | 否 | 每页数量,默认20 |
+
+#### 响应
+
+```json
+{
+  "code": 0,
+  "message": "success",
+  "data": {
+    "total": 100,
+    "page": 1,
+    "page_size": 20,
+    "list": [
+      {
+        "id": 1,
+        "name": "每日登录",
+        "description": "完成每日登录任务",
+        "type": "daily",
+        "category": {
+          "id": 1,
+          "name": "日常任务"
+        },
+        "target_type": "login",
+        "target_count": 1,
+        "current_progress": 0,
+        "status": 0,
+        "rewards": [
+          {
+            "item_id": 1001,
+            "item_name": "金币",
+            "quantity": 100,
+            "icon": "coin.png"
+          }
+        ],
+        "time_limit": 86400,
+        "expire_at": "2023-06-01 00:00:00",
+        "is_available": true
+      }
+    ]
+  }
+}
+```
+
+### 2.2 获取任务详情
+
+#### 请求
+
+```
+GET /api/task/detail
+```
+
+#### 请求参数
+
+| 参数名 | 类型 | 必填 | 说明 |
+|-------|------|------|------|
+| task_id | int | 是 | 任务ID |
+
+#### 响应
+
+```json
+{
+  "code": 0,
+  "message": "success",
+  "data": {
+    "id": 1,
+    "name": "每日登录",
+    "description": "完成每日登录任务",
+    "type": "daily",
+    "category": {
+      "id": 1,
+      "name": "日常任务"
+    },
+    "target_type": "login",
+    "target_params": {
+      "specific_id": null
+    },
+    "target_count": 1,
+    "current_progress": 0,
+    "status": 0,
+    "rewards": [
+      {
+        "item_id": 1001,
+        "item_name": "金币",
+        "quantity": 100,
+        "icon": "coin.png"
+      }
+    ],
+    "prerequisite_tasks": [
+      {
+        "id": 101,
+        "name": "新手引导",
+        "is_completed": true
+      }
+    ],
+    "level_required": 1,
+    "time_limit": 86400,
+    "expire_at": "2023-06-01 00:00:00",
+    "is_available": true,
+    "unavailable_reason": null
+  }
+}
+```
+
+### 2.3 接取任务
+
+#### 请求
+
+```
+POST /api/task/accept
+```
+
+#### 请求参数
+
+| 参数名 | 类型 | 必填 | 说明 |
+|-------|------|------|------|
+| task_id | int | 是 | 任务ID |
+
+#### 响应
+
+```json
+{
+  "code": 0,
+  "message": "任务接取成功",
+  "data": {
+    "task_id": 1,
+    "status": 1,
+    "progress": 0,
+    "expire_at": "2023-06-01 00:00:00"
+  }
+}
+```
+
+#### 错误码
+
+| 错误码 | 说明 |
+|-------|------|
+| 1001 | 任务不存在 |
+| 1002 | 任务已接取 |
+| 1003 | 任务已过期 |
+| 1004 | 等级不足 |
+| 1005 | 前置任务未完成 |
+
+### 2.4 放弃任务
+
+#### 请求
+
+```
+POST /api/task/abandon
+```
+
+#### 请求参数
+
+| 参数名 | 类型 | 必填 | 说明 |
+|-------|------|------|------|
+| task_id | int | 是 | 任务ID |
+
+#### 响应
+
+```json
+{
+  "code": 0,
+  "message": "任务已放弃",
+  "data": {
+    "task_id": 1
+  }
+}
+```
+
+#### 错误码
+
+| 错误码 | 说明 |
+|-------|------|
+| 1001 | 任务不存在 |
+| 1006 | 任务未接取 |
+| 1007 | 任务已完成,无法放弃 |
+
+### 2.5 完成任务
+
+#### 请求
+
+```
+POST /api/task/complete
+```
+
+#### 请求参数
+
+| 参数名 | 类型 | 必填 | 说明 |
+|-------|------|------|------|
+| task_id | int | 是 | 任务ID |
+
+#### 响应
+
+```json
+{
+  "code": 0,
+  "message": "任务完成成功",
+  "data": {
+    "task_id": 1,
+    "status": 2,
+    "rewards": [
+      {
+        "item_id": 1001,
+        "item_name": "金币",
+        "quantity": 100,
+        "icon": "coin.png"
+      }
+    ],
+    "can_claim_now": true
+  }
+}
+```
+
+#### 错误码
+
+| 错误码 | 说明 |
+|-------|------|
+| 1001 | 任务不存在 |
+| 1006 | 任务未接取 |
+| 1008 | 任务进度不足,无法完成 |
+| 1009 | 任务已过期 |
+
+### 2.6 领取任务奖励
+
+#### 请求
+
+```
+POST /api/task/claim-reward
+```
+
+#### 请求参数
+
+| 参数名 | 类型 | 必填 | 说明 |
+|-------|------|------|------|
+| task_id | int | 是 | 任务ID |
+
+#### 响应
+
+```json
+{
+  "code": 0,
+  "message": "奖励领取成功",
+  "data": {
+    "task_id": 1,
+    "status": 3,
+    "rewards": [
+      {
+        "item_id": 1001,
+        "item_name": "金币",
+        "quantity": 100,
+        "icon": "coin.png"
+      }
+    ]
+  }
+}
+```
+
+#### 错误码
+
+| 错误码 | 说明 |
+|-------|------|
+| 1001 | 任务不存在 |
+| 1010 | 任务未完成,无法领取奖励 |
+| 1011 | 奖励已领取 |
+
+### 2.7 获取任务进度
+
+#### 请求
+
+```
+GET /api/task/progress
+```
+
+#### 请求参数
+
+| 参数名 | 类型 | 必填 | 说明 |
+|-------|------|------|------|
+| task_id | int | 是 | 任务ID |
+
+#### 响应
+
+```json
+{
+  "code": 0,
+  "message": "success",
+  "data": {
+    "task_id": 1,
+    "target_count": 10,
+    "current_progress": 5,
+    "percentage": 50,
+    "status": 1,
+    "details": [
+      {
+        "target_id": "1001",
+        "target_name": "种植萝卜",
+        "current_count": 5,
+        "required_count": 10
+      }
+    ],
+    "expire_at": "2023-06-01 00:00:00",
+    "time_remaining": 3600
+  }
+}
+```
+
+## 3. 事件通知接口
+
+### 3.1 任务进度更新通知
+
+当任务进度更新时,系统会向客户端推送通知。
+
+#### 通知内容
+
+```json
+{
+  "event": "task_progress_updated",
+  "data": {
+    "task_id": 1,
+    "old_progress": 4,
+    "new_progress": 5,
+    "target_count": 10,
+    "percentage": 50,
+    "is_completed": false
+  }
+}
+```
+
+### 3.2 任务完成通知
+
+当任务完成时,系统会向客户端推送通知。
+
+#### 通知内容
+
+```json
+{
+  "event": "task_completed",
+  "data": {
+    "task_id": 1,
+    "task_name": "每日登录",
+    "rewards": [
+      {
+        "item_id": 1001,
+        "item_name": "金币",
+        "quantity": 100,
+        "icon": "coin.png"
+      }
+    ],
+    "completed_at": "2023-05-31 15:30:45"
+  }
+}
+```
+
+### 3.3 任务过期通知
+
+当任务即将过期时,系统会向客户端推送通知。
+
+#### 通知内容
+
+```json
+{
+  "event": "task_expiring",
+  "data": {
+    "task_id": 1,
+    "task_name": "每日登录",
+    "expire_at": "2023-06-01 00:00:00",
+    "time_remaining": 3600
+  }
+}
+```
+
+## 4. 批量操作接口
+
+### 4.1 批量接取任务
+
+#### 请求
+
+```
+POST /api/task/batch-accept
+```
+
+#### 请求参数
+
+| 参数名 | 类型 | 必填 | 说明 |
+|-------|------|------|------|
+| task_ids | array | 是 | 任务ID数组 |
+
+#### 响应
+
+```json
+{
+  "code": 0,
+  "message": "批量接取任务成功",
+  "data": {
+    "success_count": 2,
+    "failed_count": 1,
+    "results": [
+      {
+        "task_id": 1,
+        "success": true,
+        "message": "接取成功"
+      },
+      {
+        "task_id": 2,
+        "success": true,
+        "message": "接取成功"
+      },
+      {
+        "task_id": 3,
+        "success": false,
+        "message": "任务已接取",
+        "error_code": 1002
+      }
+    ]
+  }
+}
+```
+
+### 4.2 批量领取奖励
+
+#### 请求
+
+```
+POST /api/task/batch-claim-reward
+```
+
+#### 请求参数
+
+| 参数名 | 类型 | 必填 | 说明 |
+|-------|------|------|------|
+| task_ids | array | 是 | 任务ID数组 |
+
+#### 响应
+
+```json
+{
+  "code": 0,
+  "message": "批量领取奖励成功",
+  "data": {
+    "success_count": 2,
+    "failed_count": 1,
+    "results": [
+      {
+        "task_id": 1,
+        "success": true,
+        "rewards": [
+          {
+            "item_id": 1001,
+            "item_name": "金币",
+            "quantity": 100
+          }
+        ]
+      },
+      {
+        "task_id": 2,
+        "success": true,
+        "rewards": [
+          {
+            "item_id": 1002,
+            "item_name": "钻石",
+            "quantity": 10
+          }
+        ]
+      },
+      {
+        "task_id": 3,
+        "success": false,
+        "message": "任务未完成",
+        "error_code": 1010
+      }
+    ],
+    "total_rewards": [
+      {
+        "item_id": 1001,
+        "item_name": "金币",
+        "quantity": 100
+      },
+      {
+        "item_id": 1002,
+        "item_name": "钻石",
+        "quantity": 10
+      }
+    ]
+  }
+}
+```
+
+## 5. 管理接口
+
+### 5.1 创建任务
+
+#### 请求
+
+```
+POST /api/admin/task/create
+```
+
+#### 请求参数
+
+| 参数名 | 类型 | 必填 | 说明 |
+|-------|------|------|------|
+| name | string | 是 | 任务名称 |
+| description | string | 否 | 任务描述 |
+| category_id | int | 是 | 任务分类ID |
+| type | string | 是 | 任务类型 |
+| target_type | string | 是 | 目标类型 |
+| target_params | object | 否 | 目标参数 |
+| target_count | int | 是 | 目标数量 |
+| rewards | array | 是 | 奖励内容 |
+| prerequisite_tasks | array | 否 | 前置任务 |
+| level_required | int | 否 | 所需等级 |
+| time_limit | int | 否 | 时间限制(秒) |
+| reset_type | string | 否 | 重置类型 |
+| is_active | boolean | 否 | 是否激活 |
+| start_time | string | 否 | 开始时间 |
+| end_time | string | 否 | 结束时间 |
+
+#### 响应
+
+```json
+{
+  "code": 0,
+  "message": "任务创建成功",
+  "data": {
+    "id": 10,
+    "name": "新任务",
+    "type": "daily",
+    "created_at": "2023-05-31 16:00:00"
+  }
+}
+```
+
+### 5.2 更新任务
+
+#### 请求
+
+```
+POST /api/admin/task/update
+```
+
+#### 请求参数
+
+| 参数名 | 类型 | 必填 | 说明 |
+|-------|------|------|------|
+| id | int | 是 | 任务ID |
+| name | string | 否 | 任务名称 |
+| description | string | 否 | 任务描述 |
+| category_id | int | 否 | 任务分类ID |
+| type | string | 否 | 任务类型 |
+| target_type | string | 否 | 目标类型 |
+| target_params | object | 否 | 目标参数 |
+| target_count | int | 否 | 目标数量 |
+| rewards | array | 否 | 奖励内容 |
+| prerequisite_tasks | array | 否 | 前置任务 |
+| level_required | int | 否 | 所需等级 |
+| time_limit | int | 否 | 时间限制(秒) |
+| reset_type | string | 否 | 重置类型 |
+| is_active | boolean | 否 | 是否激活 |
+| start_time | string | 否 | 开始时间 |
+| end_time | string | 否 | 结束时间 |
+
+#### 响应
+
+```json
+{
+  "code": 0,
+  "message": "任务更新成功",
+  "data": {
+    "id": 10,
+    "updated_at": "2023-05-31 16:30:00"
+  }
+}
+```
+
+### 5.3 删除任务
+
+#### 请求
+
+```
+POST /api/admin/task/delete
+```
+
+#### 请求参数
+
+| 参数名 | 类型 | 必填 | 说明 |
+|-------|------|------|------|
+| id | int | 是 | 任务ID |
+
+#### 响应
+
+```json
+{
+  "code": 0,
+  "message": "任务删除成功",
+  "data": {
+    "id": 10
+  }
+}
+```
+
+### 5.4 手动重置任务
+
+#### 请求
+
+```
+POST /api/admin/task/reset
+```
+
+#### 请求参数
+
+| 参数名 | 类型 | 必填 | 说明 |
+|-------|------|------|------|
+| reset_type | string | 是 | 重置类型(daily, weekly, monthly) |
+| task_ids | array | 否 | 指定任务ID数组,为空则重置所有符合类型的任务 |
+
+#### 响应
+
+```json
+{
+  "code": 0,
+  "message": "任务重置成功",
+  "data": {
+    "reset_type": "daily",
+    "affected_count": 15,
+    "reset_time": "2023-05-31 00:00:00"
+  }
+}
+```
+
+## 6. 错误码汇总
+
+| 错误码 | 说明 |
+|-------|------|
+| 1001 | 任务不存在 |
+| 1002 | 任务已接取 |
+| 1003 | 任务已过期 |
+| 1004 | 等级不足 |
+| 1005 | 前置任务未完成 |
+| 1006 | 任务未接取 |
+| 1007 | 任务已完成,无法放弃 |
+| 1008 | 任务进度不足,无法完成 |
+| 1009 | 任务已过期 |
+| 1010 | 任务未完成,无法领取奖励 |
+| 1011 | 奖励已领取 |
+| 1012 | 任务不可用 |
+| 1013 | 任务已失败 |
+| 1014 | 批量操作部分失败 |
+| 1015 | 参数错误 |
+| 1016 | 操作频率限制 |
+| 1017 | 系统错误 |
+
+## 7. 接口安全性
+
+1. 所有接口都需要进行用户身份验证
+2. 敏感操作(如领取奖励)需要进行额外的安全验证
+3. 接口访问频率限制,防止恶意请求
+4. 服务端验证所有请求参数,防止非法数据
+5. 记录关键操作日志,用于审计和问题排查

+ 126 - 0
app/Module/Task/Docs/create.sql

@@ -0,0 +1,126 @@
+-- 任务分类表
+DROP TABLE IF EXISTS `kku_task_categories`;
+CREATE TABLE `kku_task_categories` (
+  `id` int NOT NULL AUTO_INCREMENT COMMENT '分类ID,主键',
+  `name` varchar(100) NOT NULL COMMENT '分类名称',
+  `code` varchar(50) NOT NULL COMMENT '分类编码(唯一)',
+  `description` varchar(255) DEFAULT NULL COMMENT '分类描述',
+  `sort_order` int 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='任务分类表';
+
+-- 任务定义表
+DROP TABLE IF EXISTS `kku_task_tasks`;
+CREATE TABLE `kku_task_tasks` (
+  `id` int NOT NULL AUTO_INCREMENT COMMENT '任务ID,主键',
+  `category_id` int NOT NULL COMMENT '任务分类ID,外键关联kku_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)',
+  `target_type` varchar(30) NOT NULL COMMENT '目标类型(plant, harvest, upgrade_land等)',
+  `target_params` json DEFAULT NULL COMMENT '目标参数(JSON格式,如特定作物ID)',
+  `target_count` int NOT NULL DEFAULT '1' COMMENT '目标数量',
+  `rewards` json NOT NULL COMMENT '奖励内容(JSON格式)',
+  `prerequisite_tasks` json DEFAULT NULL COMMENT '前置任务ID(JSON格式)',
+  `level_required` int NOT NULL DEFAULT '0' COMMENT '所需等级',
+  `time_limit` int DEFAULT NULL COMMENT '时间限制(秒,NULL表示无限制)',
+  `reset_type` varchar(20) NOT NULL DEFAULT 'none' COMMENT '重置类型(none, daily, weekly, monthly)',
+  `is_active` tinyint 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_target_type` (`target_type`),
+  KEY `idx_active_time` (`is_active`, `start_time`, `end_time`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务定义表';
+
+-- 用户任务关联表
+DROP TABLE IF EXISTS `kku_task_user_tasks`;
+CREATE TABLE `kku_task_user_tasks` (
+  `id` int NOT NULL AUTO_INCREMENT COMMENT '记录ID,主键',
+  `user_id` int NOT NULL COMMENT '用户ID',
+  `task_id` int NOT NULL COMMENT '任务ID,外键关联kku_task_tasks表',
+  `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态(0:未接取, 1:进行中, 2:已完成, 3:已领取奖励, 4:已失败, 5:已过期)',
+  `progress` int 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='用户任务关联表';
+
+-- 用户任务进度表
+DROP TABLE IF EXISTS `kku_task_user_progress`;
+CREATE TABLE `kku_task_user_progress` (
+  `id` int NOT NULL AUTO_INCREMENT COMMENT '记录ID,主键',
+  `user_id` int NOT NULL COMMENT '用户ID',
+  `task_id` int NOT NULL COMMENT '任务ID,外键关联kku_task_tasks表',
+  `target_id` varchar(100) NOT NULL COMMENT '目标ID(如特定作物ID、物品ID等)',
+  `current_count` int 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_user_task_target` (`user_id`, `task_id`, `target_id`),
+  KEY `idx_user_task` (`user_id`, `task_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户任务进度表';
+
+-- 任务完成日志表
+DROP TABLE IF EXISTS `kku_task_completion_logs`;
+CREATE TABLE `kku_task_completion_logs` (
+  `id` int NOT NULL AUTO_INCREMENT COMMENT '记录ID,主键',
+  `user_id` int NOT NULL COMMENT '用户ID',
+  `task_id` int NOT NULL COMMENT '任务ID,外键关联kku_task_tasks表',
+  `completed_at` timestamp NOT NULL COMMENT '完成时间',
+  `time_spent` int 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='任务完成日志表';
+
+-- 任务奖励发放日志表
+DROP TABLE IF EXISTS `kku_task_reward_logs`;
+CREATE TABLE `kku_task_reward_logs` (
+  `id` int NOT NULL AUTO_INCREMENT COMMENT '记录ID,主键',
+  `user_id` int NOT NULL COMMENT '用户ID',
+  `task_id` int NOT NULL COMMENT '任务ID,外键关联kku_task_tasks表',
+  `user_task_id` int NOT NULL COMMENT '用户任务ID,外键关联kku_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='任务奖励发放日志表';
+
+-- 任务重置日志表
+DROP TABLE IF EXISTS `kku_task_reset_logs`;
+CREATE TABLE `kku_task_reset_logs` (
+  `id` int NOT NULL AUTO_INCREMENT COMMENT '记录ID,主键',
+  `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 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='任务重置日志表';

+ 16 - 0
app/Module/Task/Docs/task_user_progress_modified.sql

@@ -0,0 +1,16 @@
+-- 修改后的用户任务进度表(关联到任务达成条件)
+DROP TABLE IF EXISTS `kku_task_user_progress`;
+CREATE TABLE `kku_task_user_progress` (
+  `id` int NOT NULL AUTO_INCREMENT COMMENT '记录ID,主键',
+  `user_id` int NOT NULL COMMENT '用户ID',
+  `task_id` int NOT NULL COMMENT '任务ID,外键关联kku_task_tasks表',
+  `achievement_condition_id` int NOT NULL COMMENT '达成条件ID,外键关联kku_task_achievement_conditions表',
+  `current_value` int 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='用户任务进度表';

+ 504 - 0
app/Module/Task/Docs/与其他模块集成.md

@@ -0,0 +1,504 @@
+# 任务模块与其他模块集成
+
+## 1. 概述
+
+任务模块作为开心农场系统的核心功能模块之一,需要与多个其他模块进行交互和集成。本文档详细说明任务模块与其他模块的集成方式、接口调用和事件通信机制。
+
+## 2. 与用户模块集成
+
+### 2.1 依赖关系
+
+- 任务模块需要获取用户基本信息
+- 任务模块需要验证用户等级和权限
+- 任务完成可能影响用户经验和等级
+
+### 2.2 接口调用
+
+#### 2.2.1 获取用户信息
+
+```php
+// 在TaskService中调用UserService
+public function getAvailableTasks(int $userId, ?string $type = null): array
+{
+    // 获取用户信息,包括等级、VIP状态等
+    $userInfo = UserService::getUserInfo($userId);
+    
+    // 根据用户等级筛选可用任务
+    $tasks = $this->taskRepository->getAvailableTasks($userId, $type, $userInfo['level']);
+    
+    return $tasks;
+}
+```
+
+#### 2.2.2 验证用户等级
+
+```php
+// 在TaskLogic中验证用户等级
+public function canAcceptTask(int $userId, int $taskId): bool
+{
+    $task = $this->taskRepository->find($taskId);
+    $userInfo = UserService::getUserInfo($userId);
+    
+    if ($userInfo['level'] < $task->level_required) {
+        return false;
+    }
+    
+    return true;
+}
+```
+
+### 2.3 事件通信
+
+#### 2.3.1 监听用户等级变更事件
+
+```php
+// 在TaskModule的事件监听器中
+public function handleUserLevelUp(UserLevelUpEvent $event): void
+{
+    // 当用户升级时,检查是否有新的任务可以解锁
+    $userId = $event->userId;
+    $newLevel = $event->newLevel;
+    
+    // 解锁新等级的任务
+    TaskService::unlockTasksByLevel($userId, $newLevel);
+}
+```
+
+## 3. 与物品模块集成
+
+### 3.1 依赖关系
+
+- 任务完成后需要发放物品奖励
+- 某些任务需要验证用户物品使用情况
+- 物品使用可能触发任务进度更新
+
+### 3.2 接口调用
+
+#### 3.2.1 发放任务奖励
+
+```php
+// 在TaskLogic中处理任务奖励
+public function processTaskReward(int $userId, int $taskId): array
+{
+    $task = $this->taskRepository->find($taskId);
+    $rewards = json_decode($task->rewards, true);
+    
+    $result = [];
+    
+    // 开始事务
+    DB::beginTransaction();
+    try {
+        foreach ($rewards['items'] as $reward) {
+            // 调用物品模块服务添加物品
+            $itemResult = ItemService::addItem(
+                $userId,
+                $reward['item_id'],
+                $reward['quantity'],
+                [
+                    'source_type' => 'task_reward',
+                    'source_id' => $taskId,
+                    'details' => ['task_name' => $task->name]
+                ]
+            );
+            
+            $result[] = [
+                'item_id' => $reward['item_id'],
+                'quantity' => $reward['quantity'],
+                'success' => $itemResult['success']
+            ];
+        }
+        
+        DB::commit();
+        return $result;
+    } catch (\Exception $e) {
+        DB::rollBack();
+        throw $e;
+    }
+}
+```
+
+#### 3.2.2 验证物品使用情况
+
+```php
+// 在TaskLogic中验证物品使用任务
+public function validateUseItemTask(int $userId, int $taskId, int $itemId, int $quantity): bool
+{
+    $task = $this->taskRepository->find($taskId);
+    $targetParams = json_decode($task->target_params, true);
+    
+    // 检查是否是目标物品
+    if (isset($targetParams['item_ids']) && !in_array($itemId, $targetParams['item_ids'])) {
+        return false;
+    }
+    
+    return true;
+}
+```
+
+### 3.3 事件通信
+
+#### 3.3.1 监听物品使用事件
+
+```php
+// 在TaskModule的事件监听器中
+public function handleItemUsed(ItemUsedEvent $event): void
+{
+    // 当物品被使用时,更新相关任务进度
+    $userId = $event->userId;
+    $itemId = $event->itemId;
+    $quantity = $event->quantity;
+    
+    // 更新使用物品类型的任务进度
+    TaskService::updateTaskProgress(
+        $userId,
+        TARGET_TYPE::USE_ITEM->value,
+        ['item_id' => $itemId],
+        $quantity
+    );
+}
+```
+
+## 4. 与农场模块集成
+
+### 4.1 依赖关系
+
+- 农场活动(种植、收获等)可能触发任务进度更新
+- 任务可能要求特定农场操作
+- 任务奖励可能影响农场状态
+
+### 4.2 接口调用
+
+#### 4.2.1 获取农场信息
+
+```php
+// 在TaskService中获取农场信息
+public function getPlantingTasks(int $userId): array
+{
+    // 获取用户农场信息
+    $farmInfo = FarmService::getUserFarmInfo($userId);
+    
+    // 根据农场状态筛选适合的种植任务
+    $tasks = $this->taskRepository->getTasksByTargetType(
+        $userId,
+        TARGET_TYPE::PLANT->value,
+        ['house_level' => $farmInfo['house_level']]
+    );
+    
+    return $tasks;
+}
+```
+
+### 4.3 事件通信
+
+#### 4.3.1 监听种植事件
+
+```php
+// 在TaskModule的事件监听器中
+public function handleCropPlanted(CropPlantedEvent $event): void
+{
+    // 当作物被种植时,更新相关任务进度
+    $userId = $event->userId;
+    $seedId = $event->seedId;
+    $landId = $event->landId;
+    
+    // 更新种植任务进度
+    TaskService::updateTaskProgress(
+        $userId,
+        TARGET_TYPE::PLANT->value,
+        ['seed_id' => $seedId, 'land_id' => $landId],
+        1
+    );
+}
+```
+
+#### 4.3.2 监听收获事件
+
+```php
+// 在TaskModule的事件监听器中
+public function handleCropHarvested(CropHarvestedEvent $event): void
+{
+    // 当作物被收获时,更新相关任务进度
+    $userId = $event->userId;
+    $cropId = $event->cropId;
+    $quantity = $event->quantity;
+    
+    // 更新收获任务进度
+    TaskService::updateTaskProgress(
+        $userId,
+        TARGET_TYPE::HARVEST->value,
+        ['crop_id' => $cropId],
+        $quantity
+    );
+}
+```
+
+## 5. 与团队模块集成
+
+### 5.1 依赖关系
+
+- 任务完成后需要计算团队收益分成
+- 团队任务需要多人协作完成
+- 推荐任务与团队发展相关
+
+### 5.2 接口调用
+
+#### 5.2.1 记录任务完成收益
+
+```php
+// 在TaskService中记录任务完成收益
+public function completeTask(int $userId, int $taskId): array
+{
+    $result = $this->taskLogic->completeTask($userId, $taskId);
+    
+    if ($result['success']) {
+        // 记录团队收益
+        foreach ($result['rewards'] as $reward) {
+            if (isset($reward['item_id']) && isset($reward['quantity'])) {
+                TeamProfitService::recordTaskCompleteProfit(
+                    $userId,
+                    $taskId,
+                    $reward['item_id'],
+                    $reward['quantity']
+                );
+            }
+        }
+    }
+    
+    return $result;
+}
+```
+
+#### 5.2.2 创建团队任务
+
+```php
+// 在TeamTaskService中创建团队任务
+public function createTeamTask(int $creatorId, array $taskData): array
+{
+    // 验证创建者是否是达人
+    $talentInfo = $this->talentRepository->getByUserId($creatorId);
+    if (!$talentInfo || $talentInfo->talent_level < 3) {
+        throw new TalentException("只有高级及以上达人才能创建团队任务");
+    }
+    
+    // 创建基础任务
+    $taskId = TaskService::createTask([
+        'name' => $taskData['name'],
+        'description' => $taskData['description'],
+        'type' => TASK_TYPE::TEAM->value,
+        'target_type' => $taskData['target_type'],
+        'target_params' => $taskData['target_params'],
+        'target_count' => $taskData['target_count'],
+        'rewards' => $taskData['rewards'],
+        'time_limit' => $taskData['time_limit'] ?? 604800, // 默认7天
+        'is_active' => true
+    ]);
+    
+    // 创建团队任务记录
+    $teamTask = $this->teamTaskRepository->create([
+        'task_id' => $taskId,
+        'creator_id' => $creatorId,
+        'team_id' => $taskData['team_id'],
+        'min_participants' => $taskData['min_participants'] ?? 1,
+        'max_participants' => $taskData['max_participants'] ?? 0,
+        'status' => 1, // 活跃状态
+        'expire_at' => now()->addSeconds($taskData['time_limit'] ?? 604800)
+    ]);
+    
+    return [
+        'success' => true,
+        'task_id' => $taskId,
+        'team_task_id' => $teamTask->id
+    ];
+}
+```
+
+### 5.3 事件通信
+
+#### 5.3.1 监听团队成员变更事件
+
+```php
+// 在TaskModule的事件监听器中
+public function handleTeamMemberAdded(TeamMemberAddedEvent $event): void
+{
+    // 当团队添加新成员时,更新相关推荐任务进度
+    $userId = $event->referrerId; // 推荐人ID
+    $newMemberId = $event->newMemberId;
+    
+    // 更新推荐任务进度
+    TaskService::updateTaskProgress(
+        $userId,
+        TARGET_TYPE::INVITE->value,
+        [],
+        1
+    );
+}
+```
+
+## 6. 与宠物模块集成
+
+### 6.1 依赖关系
+
+- 宠物相关活动可能触发任务进度更新
+- 任务可能要求特定宠物操作
+- 任务奖励可能包含宠物相关物品
+
+### 6.2 接口调用
+
+#### 6.2.1 验证宠物状态
+
+```php
+// 在TaskLogic中验证宠物任务
+public function validatePetTask(int $userId, int $taskId): bool
+{
+    $task = $this->taskRepository->find($taskId);
+    $targetParams = json_decode($task->target_params, true);
+    
+    // 获取用户宠物信息
+    $petInfo = PetService::getUserPetInfo($userId);
+    
+    // 检查宠物等级要求
+    if (isset($targetParams['min_pet_level']) && $petInfo['level'] < $targetParams['min_pet_level']) {
+        return false;
+    }
+    
+    return true;
+}
+```
+
+### 6.3 事件通信
+
+#### 6.3.1 监听宠物喂养事件
+
+```php
+// 在TaskModule的事件监听器中
+public function handlePetFed(PetFedEvent $event): void
+{
+    // 当宠物被喂养时,更新相关任务进度
+    $userId = $event->userId;
+    $petId = $event->petId;
+    $foodId = $event->foodId;
+    
+    // 更新喂养宠物任务进度
+    TaskService::updateTaskProgress(
+        $userId,
+        TARGET_TYPE::FEED_PET->value,
+        ['pet_id' => $petId, 'food_id' => $foodId],
+        1
+    );
+}
+```
+
+## 7. 与通知模块集成
+
+### 7.1 依赖关系
+
+- 任务状态变更需要发送通知
+- 任务即将过期需要提醒用户
+- 新任务可用时需要通知用户
+
+### 7.2 接口调用
+
+#### 7.2.1 发送任务完成通知
+
+```php
+// 在TaskService中发送任务完成通知
+public function completeTask(int $userId, int $taskId): array
+{
+    $result = $this->taskLogic->completeTask($userId, $taskId);
+    
+    if ($result['success']) {
+        // 发送任务完成通知
+        NotificationService::send(
+            $userId,
+            'task_completed',
+            [
+                'task_id' => $taskId,
+                'task_name' => $result['task_name'],
+                'rewards' => $result['rewards']
+            ]
+        );
+    }
+    
+    return $result;
+}
+```
+
+#### 7.2.2 发送任务过期提醒
+
+```php
+// 在TaskService中发送任务过期提醒
+public function sendExpirationReminders(): int
+{
+    // 获取即将过期的任务(24小时内)
+    $expiringTasks = $this->taskRepository->getExpiringTasks(86400);
+    
+    $count = 0;
+    foreach ($expiringTasks as $task) {
+        // 发送过期提醒通知
+        NotificationService::send(
+            $task->user_id,
+            'task_expiring',
+            [
+                'task_id' => $task->task_id,
+                'task_name' => $task->name,
+                'expire_at' => $task->expire_at,
+                'time_remaining' => strtotime($task->expire_at) - time()
+            ]
+        );
+        $count++;
+    }
+    
+    return $count;
+}
+```
+
+## 8. 集成最佳实践
+
+### 8.1 使用事件驱动架构
+
+- 使用事件和监听器实现模块间的松耦合通信
+- 避免直接依赖,减少模块间的耦合度
+- 使用事件队列处理异步任务,提高系统响应性能
+
+### 8.2 统一接口规范
+
+- 定义清晰的服务接口,隐藏内部实现细节
+- 使用数据传输对象(DTO)进行跨模块数据交换
+- 统一错误处理和返回格式
+
+### 8.3 事务管理
+
+- 跨模块操作使用数据库事务确保一致性
+- 关键操作添加重试机制
+- 使用分布式事务处理复杂场景
+
+### 8.4 性能优化
+
+- 使用缓存减少跨模块调用频率
+- 批量处理任务进度更新
+- 异步处理非关键路径操作
+
+### 8.5 安全考虑
+
+- 跨模块调用进行权限验证
+- 敏感操作记录详细日志
+- 防止数据泄露和越权访问
+
+## 9. 集成测试策略
+
+### 9.1 单元测试
+
+- 使用模拟对象(Mock)测试模块间接口
+- 验证各模块独立功能正确性
+
+### 9.2 集成测试
+
+- 测试模块间实际交互
+- 验证事件触发和处理机制
+- 测试跨模块事务处理
+
+### 9.3 端到端测试
+
+- 模拟真实用户场景
+- 验证完整业务流程
+- 测试性能和并发处理能力

+ 370 - 0
app/Module/Task/Docs/事件监听设计.md

@@ -0,0 +1,370 @@
+# 任务模块事件监听设计
+
+## 1. 概述
+
+任务模块采用事件驱动架构,通过事件机制与其他模块进行松耦合通信。本文档描述任务模块提供的核心事件以及如何监听这些事件。
+
+## 2. 核心事件
+
+任务模块提供以下核心事件:
+
+### 2.1 任务完成事件 (TaskCompletedEvent)
+
+当用户完成任务时触发此事件。
+
+```php
+/**
+ * 当任务完成时触发
+ */
+class TaskCompletedEvent
+{
+    public int $userId;        // 用户ID
+    public int $taskId;        // 任务ID
+    public string $taskName;   // 任务名称
+    public string $taskType;   // 任务类型
+    public string $completedAt; // 完成时间
+    public array $rewards;     // 任务奖励内容
+}
+```
+
+### 2.2 任务奖励领取事件 (TaskRewardClaimedEvent)
+
+当用户领取任务奖励时触发此事件。
+
+```php
+/**
+ * 当用户领取任务奖励时触发
+ */
+class TaskRewardClaimedEvent
+{
+    public int $userId;        // 用户ID
+    public int $taskId;        // 任务ID
+    public string $taskName;   // 任务名称
+    public array $rewards;     // 实际发放的奖励
+    public string $claimedAt;  // 领取时间
+    public bool $isSuccess;    // 奖励是否成功发放
+}
+```
+
+## 3. 事件监听器设计
+
+### 3.1 监听器基类
+
+为了统一处理逻辑,我们设计一个基础监听器类:
+
+```php
+abstract class BaseTaskEventListener
+{
+    /**
+     * 处理事件
+     *
+     * @param mixed $event 事件对象
+     * @return void
+     */
+    abstract public function handle($event): void;
+    
+    /**
+     * 记录事件日志
+     *
+     * @param string $message 日志消息
+     * @param array $context 上下文数据
+     * @return void
+     */
+    protected function logEvent(string $message, array $context = []): void
+    {
+        Log::info($message, $context);
+    }
+}
+```
+
+### 3.2 任务完成事件监听器
+
+```php
+class TaskCompletedListener extends BaseTaskEventListener
+{
+    protected UserService $userService;
+    protected ItemService $itemService;
+    
+    /**
+     * 构造函数
+     */
+    public function __construct(UserService $userService, ItemService $itemService)
+    {
+        $this->userService = $userService;
+        $this->itemService = $itemService;
+    }
+    
+    /**
+     * 处理任务完成事件
+     *
+     * @param TaskCompletedEvent $event
+     * @return void
+     */
+    public function handle($event): void
+    {
+        // 记录日志
+        $this->logEvent("用户 {$event->userId} 完成了任务 {$event->taskName}", [
+            'user_id' => $event->userId,
+            'task_id' => $event->taskId,
+            'task_type' => $event->taskType,
+            'completed_at' => $event->completedAt
+        ]);
+        
+        // 更新用户统计数据
+        $this->userService->incrementTaskCompletionCount($event->userId, $event->taskType);
+        
+        // 发送通知
+        $this->sendTaskCompletionNotification($event->userId, $event->taskName);
+    }
+    
+    /**
+     * 发送任务完成通知
+     *
+     * @param int $userId 用户ID
+     * @param string $taskName 任务名称
+     * @return void
+     */
+    private function sendTaskCompletionNotification(int $userId, string $taskName): void
+    {
+        // 发送通知逻辑
+        // 可以调用通知模块的服务
+    }
+}
+```
+
+### 3.3 任务奖励领取事件监听器
+
+```php
+class TaskRewardClaimedListener extends BaseTaskEventListener
+{
+    protected ItemService $itemService;
+    protected TeamProfitService $teamProfitService;
+    
+    /**
+     * 构造函数
+     */
+    public function __construct(ItemService $itemService, TeamProfitService $teamProfitService)
+    {
+        $this->itemService = $itemService;
+        $this->teamProfitService = $teamProfitService;
+    }
+    
+    /**
+     * 处理任务奖励领取事件
+     *
+     * @param TaskRewardClaimedEvent $event
+     * @return void
+     */
+    public function handle($event): void
+    {
+        // 记录日志
+        $this->logEvent("用户 {$event->userId} 领取了任务 {$event->taskName} 的奖励", [
+            'user_id' => $event->userId,
+            'task_id' => $event->taskId,
+            'rewards' => $event->rewards,
+            'claimed_at' => $event->claimedAt,
+            'is_success' => $event->isSuccess
+        ]);
+        
+        // 如果奖励发放成功
+        if ($event->isSuccess) {
+            // 处理团队收益分成
+            $this->processTeamProfit($event);
+            
+            // 发送奖励领取通知
+            $this->sendRewardNotification($event->userId, $event->taskName, $event->rewards);
+        }
+    }
+    
+    /**
+     * 处理团队收益分成
+     *
+     * @param TaskRewardClaimedEvent $event
+     * @return void
+     */
+    private function processTeamProfit(TaskRewardClaimedEvent $event): void
+    {
+        // 遍历奖励
+        foreach ($event->rewards as $reward) {
+            if (isset($reward['item_id']) && isset($reward['quantity'])) {
+                // 记录任务完成收益
+                $this->teamProfitService->recordTaskCompleteProfit(
+                    $event->userId,
+                    $event->taskId,
+                    $reward['item_id'],
+                    $reward['quantity']
+                );
+            }
+        }
+    }
+    
+    /**
+     * 发送奖励领取通知
+     *
+     * @param int $userId 用户ID
+     * @param string $taskName 任务名称
+     * @param array $rewards 奖励内容
+     * @return void
+     */
+    private function sendRewardNotification(int $userId, string $taskName, array $rewards): void
+    {
+        // 发送通知逻辑
+        // 可以调用通知模块的服务
+    }
+}
+```
+
+## 4. 事件注册
+
+在任务模块的服务提供者中注册事件监听器:
+
+```php
+// app/Module/Task/Providers/TaskServiceProvider.php
+public function boot()
+{
+    // 注册事件监听器
+    $this->app['events']->listen(
+        \App\Module\Task\Events\TaskCompletedEvent::class,
+        \App\Module\Task\Listeners\TaskCompletedListener::class
+    );
+    
+    $this->app['events']->listen(
+        \App\Module\Task\Events\TaskRewardClaimedEvent::class,
+        \App\Module\Task\Listeners\TaskRewardClaimedListener::class
+    );
+}
+```
+
+## 5. 与其他模块的集成
+
+### 5.1 与物品模块集成
+
+任务奖励领取事件可以触发物品模块的相关操作:
+
+```php
+// 在TaskRewardClaimedListener中
+private function processItemRewards(TaskRewardClaimedEvent $event): void
+{
+    foreach ($event->rewards as $reward) {
+        if (isset($reward['item_id']) && isset($reward['quantity'])) {
+            // 调用物品模块服务添加物品
+            $this->itemService->addItem(
+                $event->userId,
+                $reward['item_id'],
+                $reward['quantity'],
+                [
+                    'source_type' => 'task_reward',
+                    'source_id' => $event->taskId,
+                    'details' => ['task_name' => $event->taskName]
+                ]
+            );
+        }
+    }
+}
+```
+
+### 5.2 与团队模块集成
+
+任务奖励领取事件可以触发团队收益分成:
+
+```php
+// 在TaskRewardClaimedListener中
+private function processTeamProfit(TaskRewardClaimedEvent $event): void
+{
+    foreach ($event->rewards as $reward) {
+        if (isset($reward['item_id']) && isset($reward['quantity'])) {
+            // 调用团队模块服务记录任务完成收益
+            $this->teamProfitService->recordTaskCompleteProfit(
+                $event->userId,
+                $event->taskId,
+                $reward['item_id'],
+                $reward['quantity']
+            );
+        }
+    }
+}
+```
+
+### 5.3 与通知模块集成
+
+任务完成和奖励领取事件可以触发通知发送:
+
+```php
+// 在TaskCompletedListener中
+private function sendTaskCompletionNotification(int $userId, string $taskName): void
+{
+    // 调用通知模块服务发送通知
+    $this->notificationService->send(
+        $userId,
+        'task_completed',
+        [
+            'task_name' => $taskName,
+            'message' => "恭喜您完成了任务:{$taskName}!"
+        ]
+    );
+}
+```
+
+## 6. 事件触发
+
+在任务服务中触发事件:
+
+```php
+// app/Module/Task/Services/TaskService.php
+
+/**
+ * 完成任务
+ *
+ * @param int $userId 用户ID
+ * @param int $taskId 任务ID
+ * @return array 完成结果
+ */
+public function completeTask(int $userId, int $taskId): array
+{
+    // 任务完成逻辑...
+    
+    // 触发任务完成事件
+    event(new TaskCompletedEvent(
+        $userId,
+        $taskId,
+        $task->name,
+        $task->type,
+        now()->toDateTimeString(),
+        json_decode($task->rewards, true)
+    ));
+    
+    return [
+        'success' => true,
+        'message' => '任务完成成功',
+        'task_id' => $taskId
+    ];
+}
+
+/**
+ * 领取任务奖励
+ *
+ * @param int $userId 用户ID
+ * @param int $taskId 任务ID
+ * @return array 领取结果
+ */
+public function claimTaskReward(int $userId, int $taskId): array
+{
+    // 奖励领取逻辑...
+    
+    // 触发任务奖励领取事件
+    event(new TaskRewardClaimedEvent(
+        $userId,
+        $taskId,
+        $task->name,
+        $rewardsData,
+        now()->toDateTimeString(),
+        true
+    ));
+    
+    return [
+        'success' => true,
+        'message' => '奖励领取成功',
+        'rewards' => $rewardsData
+    ];
+}
+```

+ 544 - 0
app/Module/Task/Docs/数据库设计.md

@@ -0,0 +1,544 @@
+# 任务模块数据库设计
+
+## 1. 数据库表概览
+
+任务模块包含以下核心数据表:
+
+1. **task_categories** - 任务分类表
+2. **task_tasks** - 任务定义表
+3. **task_conditions** - 任务条件表
+4. **task_achievement_conditions** - 任务达成条件表
+5. **task_user_tasks** - 用户任务关联表
+6. **task_user_progress** - 用户任务进度表
+7. **task_completion_logs** - 任务完成日志表
+8. **task_reward_logs** - 任务奖励发放日志表
+9. **task_reset_logs** - 任务重置日志表
+
+## 2. 表结构详细设计
+
+### 2.1 任务分类表 (task_categories)
+
+存储任务的分类信息,用于对任务进行分组和管理。
+
+| 字段名 | 类型 | 允许空 | 默认值 | 说明 |
+|-------|------|-------|-------|------|
+| id | int | 否 | 自增 | 主键 |
+| name | varchar(100) | 否 | - | 分类名称 |
+| code | varchar(50) | 否 | - | 分类编码(唯一) |
+| description | varchar(255) | 是 | NULL | 分类描述 |
+| sort_order | int | 否 | 0 | 排序顺序 |
+| created_at | timestamp | 是 | NULL | 创建时间 |
+| updated_at | timestamp | 是 | NULL | 更新时间 |
+
+**索引:**
+- PRIMARY KEY (`id`)
+- UNIQUE KEY `idx_code` (`code`)
+
+### 2.2 任务定义表 (task_tasks)
+
+存储任务的基本定义信息,包括任务名称、描述、奖励等。目标相关字段已拆分到任务达成条件表。
+
+| 字段名 | 类型 | 允许空 | 默认值 | 说明 |
+|-------|------|-------|-------|------|
+| id | int | 否 | 自增 | 主键 |
+| category_id | int | 否 | - | 任务分类ID,外键关联task_categories表 |
+| name | varchar(100) | 否 | - | 任务名称 |
+| description | varchar(500) | 是 | NULL | 任务描述 |
+| type | varchar(20) | 否 | - | 任务类型(daily, weekly, achievement, event, tutorial, team) |
+| rewards | json | 否 | - | 奖励内容(JSON格式) |
+| prerequisite_tasks | json | 是 | NULL | 前置任务ID(JSON格式) |
+| level_required | int | 否 | 0 | 所需等级 |
+| time_limit | int | 是 | NULL | 时间限制(秒,NULL表示无限制) |
+| reset_type | varchar(20) | 否 | 'none' | 重置类型(none, daily, weekly, monthly) |
+| is_active | tinyint | 否 | 1 | 是否激活(0:否, 1:是) |
+| start_time | timestamp | 是 | NULL | 开始时间(NULL表示立即开始) |
+| end_time | timestamp | 是 | NULL | 结束时间(NULL表示永不结束) |
+| created_at | timestamp | 是 | NULL | 创建时间 |
+| updated_at | timestamp | 是 | NULL | 更新时间 |
+
+**索引:**
+- PRIMARY KEY (`id`)
+- KEY `idx_category` (`category_id`)
+- KEY `idx_type` (`type`)
+- KEY `idx_active_time` (`is_active`, `start_time`, `end_time`)
+
+### 2.3 用户任务关联表 (task_user_tasks)
+
+存储用户与任务的关联信息,包括任务状态、进度、完成时间等。
+
+| 字段名 | 类型 | 允许空 | 默认值 | 说明 |
+|-------|------|-------|-------|------|
+| id | int | 否 | 自增 | 主键 |
+| user_id | int | 否 | - | 用户ID |
+| task_id | int | 否 | - | 任务ID,外键关联task_tasks表 |
+| status | tinyint | 否 | 0 | 状态(0:未接取, 1:进行中, 2:已完成, 3:已领取奖励, 4:已失败, 5:已过期) |
+| progress | int | 否 | 0 | 当前进度 |
+| completed_at | timestamp | 是 | NULL | 完成时间 |
+| rewarded_at | timestamp | 是 | NULL | 奖励发放时间 |
+| expire_at | timestamp | 是 | NULL | 过期时间 |
+| created_at | timestamp | 是 | NULL | 创建时间 |
+| updated_at | timestamp | 是 | NULL | 更新时间 |
+
+**索引:**
+- 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`)
+
+### 2.4 任务条件表 (task_conditions)
+
+定义系统中所有可用的条件类型,每种条件类型对应一个处理器类,负责验证和更新该类型条件的进度。
+
+| 字段名 | 类型 | 允许空 | 默认值 | 说明 |
+|-------|------|-------|-------|------|
+| id | int | 否 | 自增 | 主键 |
+| code | varchar(50) | 否 | - | 条件代码(唯一),如'login', 'plant', 'harvest' |
+| name | varchar(100) | 否 | - | 条件名称,如'登录游戏', '种植作物', '收获作物' |
+| description | varchar(255) | 是 | NULL | 条件描述 |
+| param_schema | json | 是 | NULL | 参数模式,定义此条件需要的参数及其类型 |
+| handler_class | varchar(255) | 是 | NULL | 处理此条件的类名 |
+| is_active | tinyint | 否 | 1 | 是否激活(0:否, 1:是) |
+| created_at | timestamp | 是 | NULL | 创建时间 |
+| updated_at | timestamp | 是 | NULL | 更新时间 |
+
+**索引:**
+- PRIMARY KEY (`id`)
+- UNIQUE KEY `idx_code` (`code`)
+
+### 2.5 任务达成条件表 (task_achievement_conditions)
+
+关联任务和具体的条件,定义了完成任务需要满足的条件。一个任务可以有多个条件,通过这个表可以实现复杂的任务逻辑。条件分为两种类型:前置条件和进度条件。
+
+| 字段名 | 类型 | 允许空 | 默认值 | 说明 |
+|-------|------|-------|-------|------|
+| id | int | 否 | 自增 | 主键 |
+| task_id | int | 否 | - | 任务ID,外键关联task_tasks表 |
+| condition_id | int | 否 | - | 条件ID,外键关联task_conditions表 |
+| condition_type | varchar(20) | 否 | 'progress' | 条件类型('prerequisite'=前置条件,'progress'=进度条件) |
+| target_value | int | 否 | 1 | 目标值,如需要完成的次数 |
+| params | json | 是 | NULL | 条件参数,如特定物品ID、特定作物ID等 |
+| operator | varchar(10) | 否 | '=' | 运算符,如'=', '>=', '<=' |
+| sort_order | int | 否 | 0 | 排序顺序,用于多条件任务 |
+| is_required | tinyint | 否 | 1 | 是否必须满足此条件(0:否, 1:是) |
+| created_at | timestamp | 是 | NULL | 创建时间 |
+| updated_at | timestamp | 是 | NULL | 更新时间 |
+
+**索引:**
+- 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`)
+
+### 2.6 用户任务进度表 (task_user_progress)
+
+存储用户任务的详细进度信息,关联到具体的任务达成条件。
+
+| 字段名 | 类型 | 允许空 | 默认值 | 说明 |
+|-------|------|-------|-------|------|
+| id | int | 否 | 自增 | 主键 |
+| user_id | int | 否 | - | 用户ID |
+| task_id | int | 否 | - | 任务ID,外键关联task_tasks表 |
+| achievement_condition_id | int | 否 | - | 达成条件ID,外键关联task_achievement_conditions表 |
+| current_value | int | 否 | 0 | 当前值 |
+| last_update_time | timestamp | 是 | NULL | 最后更新时间 |
+| created_at | timestamp | 是 | NULL | 创建时间 |
+| updated_at | timestamp | 是 | NULL | 更新时间 |
+
+**索引:**
+- 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`)
+
+### 2.7 任务完成日志表 (task_completion_logs)
+
+记录用户完成任务的详细信息,用于审计和数据分析。
+
+| 字段名 | 类型 | 允许空 | 默认值 | 说明 |
+|-------|------|-------|-------|------|
+| id | int | 否 | 自增 | 主键 |
+| user_id | int | 否 | - | 用户ID |
+| task_id | int | 否 | - | 任务ID,外键关联task_tasks表 |
+| completed_at | timestamp | 否 | - | 完成时间 |
+| time_spent | int | 是 | NULL | 完成耗时(秒) |
+| ip_address | varchar(45) | 是 | NULL | IP地址 |
+| device_info | varchar(255) | 是 | NULL | 设备信息 |
+| created_at | timestamp | 是 | NULL | 创建时间 |
+
+**索引:**
+- PRIMARY KEY (`id`)
+- KEY `idx_user` (`user_id`)
+- KEY `idx_task` (`task_id`)
+- KEY `idx_completed_at` (`completed_at`)
+
+### 2.8 任务奖励发放日志表 (task_reward_logs)
+
+记录任务奖励的发放情况,包括奖励内容、发放时间等。
+
+| 字段名 | 类型 | 允许空 | 默认值 | 说明 |
+|-------|------|-------|-------|------|
+| id | int | 否 | 自增 | 主键 |
+| user_id | int | 否 | - | 用户ID |
+| task_id | int | 否 | - | 任务ID,外键关联task_tasks表 |
+| user_task_id | int | 否 | - | 用户任务ID,外键关联task_user_tasks表 |
+| rewards | json | 否 | - | 奖励内容(JSON格式) |
+| rewarded_at | timestamp | 否 | - | 奖励发放时间 |
+| ip_address | varchar(45) | 是 | NULL | IP地址 |
+| device_info | varchar(255) | 是 | NULL | 设备信息 |
+| created_at | timestamp | 是 | NULL | 创建时间 |
+
+**索引:**
+- 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`)
+
+### 2.9 任务重置日志表 (task_reset_logs)
+
+记录任务重置的情况,包括重置类型、重置时间、影响的任务数等。
+
+| 字段名 | 类型 | 允许空 | 默认值 | 说明 |
+|-------|------|-------|-------|------|
+| id | int | 否 | 自增 | 主键 |
+| reset_type | varchar(20) | 否 | - | 重置类型(daily, weekly, monthly) |
+| reset_time | timestamp | 否 | - | 重置时间 |
+| affected_tasks | json | 是 | NULL | 受影响的任务ID列表(JSON格式) |
+| affected_count | int | 否 | 0 | 受影响的任务数量 |
+| created_at | timestamp | 是 | NULL | 创建时间 |
+
+**索引:**
+- PRIMARY KEY (`id`)
+- KEY `idx_reset_type` (`reset_type`)
+- KEY `idx_reset_time` (`reset_time`)
+
+## 3. 数据关系
+
+### 3.1 主要关系图
+
+```
+task_categories 1 --< task_tasks
+task_conditions 1 --< task_achievement_conditions
+task_tasks 1 --< task_achievement_conditions
+task_tasks 1 --< task_user_tasks
+task_achievement_conditions 1 --< task_user_progress
+task_user_tasks 1 --< task_completion_logs
+task_user_tasks 1 --< task_reward_logs
+```
+
+### 3.2 关系说明
+
+1. 一个任务分类可以包含多个任务
+2. 一个条件类型可以用于多个任务达成条件
+3. 一个任务可以有多个达成条件
+4. 一个任务可以被多个用户接取
+5. 一个任务达成条件可以有多个用户进度记录
+6. 一个用户任务完成后会生成一条完成日志
+7. 一个用户任务领取奖励后会生成一条奖励发放日志
+
+## 4. JSON字段结构
+
+### 4.1 条件参数模式 (param_schema)
+
+```json
+{
+  "properties": {
+    "seed_ids": {
+      "type": "array",
+      "items": {"type": "integer"},
+      "description": "指定种子ID列表"
+    },
+    "land_type": {
+      "type": "integer",
+      "description": "指定土地类型"
+    },
+    "min_level": {
+      "type": "integer",
+      "description": "最低等级要求"
+    }
+  }
+}
+```
+
+### 4.2 奖励内容 (rewards)
+
+```json
+{
+  "items": [
+    {"item_id": 1001, "quantity": 10},
+    {"item_id": 1002, "quantity": 5}
+  ],
+  "experience": 100,
+  "special_rewards": {
+    "type": "unlock_feature",
+    "feature_id": 3
+  }
+}
+```
+
+### 4.3 前置任务 (prerequisite_tasks)
+
+```json
+{
+  "required_tasks": [101, 102],     // 必须完成的任务ID
+  "optional_tasks": [103, 104],     // 可选完成的任务ID
+  "min_optional_count": 1           // 最少需要完成的可选任务数
+}
+```
+
+## 5. 索引设计考虑
+
+### 5.1 高频查询场景
+
+1. 获取用户当前进行中的任务
+   - 使用 `idx_user_status` 索引优化
+
+2. 获取特定类型的可用任务
+   - 使用 `idx_type` 和 `idx_active_time` 索引优化
+
+3. 检查用户是否完成特定任务
+   - 使用 `idx_user_task` 索引优化
+
+4. 获取即将过期的任务
+   - 使用 `idx_expire` 索引优化
+
+### 5.2 写入优化
+
+1. 任务进度更新是高频操作,使用 `task_user_progress` 表分担 `task_user_tasks` 表的写入压力
+
+2. 日志表(`task_completion_logs`, `task_reward_logs`)可考虑按时间分区,提高写入性能
+
+## 6. 数据迁移与升级策略
+
+1. 使用Laravel迁移文件管理表结构
+2. 版本化迁移文件,支持回滚
+3. 大型结构变更时考虑分步迁移,减少对系统的影响
+
+## 7. 条件处理器设计
+
+每种条件类型都有一个对应的处理器类,负责验证和更新该类型条件的进度。
+
+### 7.1 条件处理器接口
+
+```php
+interface ConditionHandlerInterface
+{
+    /**
+     * 验证事件是否满足条件
+     *
+     * @param array $event 事件数据
+     * @param array $params 条件参数
+     * @return bool
+     */
+    public function matches(array $event, array $params): bool;
+
+    /**
+     * 计算事件对条件进度的贡献值
+     *
+     * @param array $event 事件数据
+     * @param array $params 条件参数
+     * @return int
+     */
+    public function calculateProgress(array $event, array $params): int;
+
+    /**
+     * 检查条件是否已完成
+     *
+     * @param int $currentValue 当前值
+     * @param int $targetValue 目标值
+     * @param string $operator 运算符
+     * @return bool
+     */
+    public function isCompleted(int $currentValue, int $targetValue, string $operator): bool;
+}
+```
+
+### 7.2 基础条件处理器
+
+```php
+abstract class BaseConditionHandler implements ConditionHandlerInterface
+{
+    /**
+     * 检查条件是否已完成
+     *
+     * @param int $currentValue 当前值
+     * @param int $targetValue 目标值
+     * @param string $operator 运算符
+     * @return bool
+     */
+    public function isCompleted(int $currentValue, int $targetValue, string $operator): bool
+    {
+        switch ($operator) {
+            case '=':
+                return $currentValue == $targetValue;
+            case '>=':
+                return $currentValue >= $targetValue;
+            case '>':
+                return $currentValue > $targetValue;
+            case '<=':
+                return $currentValue <= $targetValue;
+            case '<':
+                return $currentValue < $targetValue;
+            default:
+                return false;
+        }
+    }
+}
+```
+
+## 8. 任务进度更新流程
+
+### 8.1 事件触发
+
+1. 用户执行操作(如登录、种植、收获等)
+2. 系统触发相应的事件
+
+### 8.2 条件匹配
+
+1. 任务服务接收事件
+2. 查找与事件相关的所有活跃任务的进度条件
+3. 对每个条件,调用对应的处理器验证事件是否匹配
+
+### 8.3 进度更新
+
+1. 对于匹配的条件,计算进度贡献值
+2. 更新用户任务进度表中的当前值
+3. 检查条件是否已完成
+
+### 8.4 任务完成检查
+
+1. 当进度条件完成时,检查任务的所有必要的进度条件是否都已完成
+2. 如果所有必要的进度条件都已完成,将任务标记为已完成
+3. 触发任务完成事件
+
+## 9. 前置条件与进度条件的区别
+
+### 9.1 前置条件
+
+前置条件是指用户必须满足才能接取任务的条件,但不计入任务的完成进度。前置条件的特点:
+
+1. **检查时机**:在用户接取任务时检查
+2. **完成状态**:只有“满足/不满足”两种状态,没有进度概念
+3. **典型例子**:
+   - 用户等级要求(如“需要等级10级才能接取”)
+   - 前置任务要求(如“需要完成任务A才能接取”)
+   - 特定物品要求(如“需要拥有特定物品才能接取”)
+
+### 9.2 进度条件
+
+进度条件是指用户需要完成才能完成任务的条件,有明确的进度计算。进度条件的特点:
+
+1. **进度跟踪**:有明确的当前值和目标值
+2. **动态更新**:随着用户操作不断更新进度
+3. **典型例子**:
+   - 种植作物(如“种植5次小麦”)
+   - 收获作物(如“收获10个苹果”)
+   - 使用物品(如“使用3次化肥”)
+
+### 9.3 处理流程差异
+
+1. **前置条件处理**:
+   - 在用户尝试接取任务时检查
+   - 如果不满足,拒绝接取并返回原因
+   - 不需要记录进度
+
+2. **进度条件处理**:
+   - 接取任务后持续跟踪
+   - 根据用户操作更新进度
+   - 在用户任务进度表中记录当前值
+   - 当所有必要的进度条件都满足时,完成任务
+
+## 10. 任务示例
+
+### 10.1 简单任务:每日登录
+
+```
+任务名称:每日登录
+任务描述:今天登录游戏
+任务类型:daily
+条件:
+  - 类型:login
+  - 目标值:1
+  - 参数:{}
+  - 运算符:=
+奖励:
+  - 金币 x 100
+```
+
+### 10.2 多条件任务:农场管理
+
+```
+任务名称:农场管理大师
+任务描述:种植3种不同作物,收获10次,升级1次土地
+任务类型:weekly
+条件:
+  - 类型:plant
+    目标值:3
+    参数:{"seed_ids": [101, 102, 103, 104, 105]}
+    运算符:>=
+    是否必须:是
+  - 类型:harvest
+    目标值:10
+    参数:{}
+    运算符:>=
+    是否必须:是
+  - 类型:upgrade_land
+    目标值:1
+    参数:{}
+    运算符:>=
+    是否必须:是
+奖励:
+  - 高级化肥 x 3
+  - 金币 x 500
+```
+
+### 10.3 带前置条件的任务示例
+
+```
+任务名称:高级农场主
+任务描述:已经达到农场等级10级的玩家,可以尝试种植高级作物
+任务类型:achievement
+前置条件:
+  - 类型:level_check
+    目标值:10
+    参数:{"level_type": "farm"}
+    运算符:>=
+    条件类型:prerequisite
+  - 类型:task_completed
+    目标值:1
+    参数:{"task_ids": [101, 102]}
+    运算符:>=
+    条件类型:prerequisite
+进度条件:
+  - 类型:plant
+    目标值:5
+    参数:{"seed_ids": [201, 202]}
+    运算符:>=
+    条件类型:progress
+    是否必须:是
+  - 类型:harvest
+    目标值:20
+    参数:{"crop_ids": [301, 302]}
+    运算符:>=
+    条件类型:progress
+    是否必须:是
+奖励:
+  - 稀有种子 x 1
+  - 金币 x 1000
+```
+
+## 11. 数据维护
+
+### 11.1 数据清理策略
+
+1. 定期清理过期的用户任务数据(可设置保留期限)
+2. 日志表数据可考虑归档处理
+3. 使用软删除机制,避免直接删除重要数据
+
+### 11.2 数据备份策略
+
+1. 与系统整体备份策略保持一致
+2. 关键操作前进行数据备份
+3. 定期验证备份数据的完整性

+ 176 - 0
app/Module/Task/Docs/设计概述.md

@@ -0,0 +1,176 @@
+# 任务模块设计概述
+
+## 1. 模块简介
+
+任务模块是开心农场系统的核心功能模块之一,负责管理游戏中的各类任务,包括日常任务、成就任务、活动任务等。该模块提供任务的创建、分配、进度跟踪、完成验证和奖励发放等功能,通过任务系统引导玩家体验游戏内容,提高用户活跃度和留存率。
+
+## 2. 核心功能
+
+### 2.1 任务管理
+- 支持多种任务类型:日常任务、周常任务、成就任务、活动任务、新手引导任务、团队任务
+- 任务分类管理:按照不同维度对任务进行分类
+- 任务前置条件:支持设置任务的前置依赖关系
+- 任务时间限制:支持设置任务的有效期和过期机制
+
+### 2.2 任务进度跟踪
+- 自动跟踪玩家的任务进度
+- 支持多种任务目标类型:种植、收获、升级、登录、邀请等
+- 实时更新任务完成状态
+- 任务进度持久化存储
+
+### 2.3 任务奖励系统
+- 支持多种奖励类型:物品、经验、特殊权益等
+- 奖励自动发放机制
+- 奖励领取记录
+- 与物品系统的无缝集成
+
+### 2.4 任务重置机制
+- 支持不同周期的任务重置:每日、每周、每月
+- 重置时保留或清除任务进度
+- 重置时间点可配置
+
+### 2.5 任务通知
+- 新任务可接取通知
+- 任务完成通知
+- 任务即将过期提醒
+
+## 3. 架构设计
+
+### 3.1 模块结构
+
+任务模块采用分层架构设计,遵循"服务是对外的,Logic是内部的"原则:
+
+```
+app/Module/Task/
+├── AdminControllers/        # 后台管理控制器
+│   ├── Helper/              # 控制器辅助类
+│   ├── Actions/             # 控制器动作类
+│   └── LazyRenderable/      # 懒加载渲染类
+├── Commands/                # 命令行工具
+├── Controllers/             # 前端API控制器
+├── Databases/               # 数据库相关文件
+│   └── GenerateSql/         # 数据库创建脚本
+├── Dtos/                    # 数据传输对象
+├── Enums/                   # 枚举类型定义
+├── Events/                  # 事件类
+├── Exceptions/              # 异常类
+├── Listeners/               # 事件监听器
+├── Logics/                  # 业务逻辑类
+├── Models/                  # 数据模型
+├── Providers/               # 服务提供者
+├── Repositorys/             # 数据仓库
+├── Services/                # 服务类
+└── Docs/                    # 模块文档
+```
+
+### 3.2 核心组件
+
+- **Models层**:数据模型,定义数据结构和关系
+- **Logics层**:业务逻辑,处理具体的业务规则
+- **Services层**:服务接口,对外提供功能,调用Logics层处理业务
+- **Controllers层**:控制器,处理HTTP请求,调用Services层
+- **Repositories层**:数据访问层,封装数据库操作
+- **Events/Listeners**:事件和监听器,实现模块间的松耦合通信
+
+## 4. 数据流程
+
+### 4.1 任务接取流程
+1. 用户请求可用任务列表
+2. 系统根据用户等级、完成情况等筛选可接取任务
+3. 用户选择并接取任务
+4. 系统创建用户任务记录,初始化进度
+5. 返回接取结果
+
+### 4.2 任务进度更新流程
+1. 用户执行游戏操作(如种植作物)
+2. 系统捕获相关事件
+3. 任务模块根据事件类型更新相关任务进度
+4. 检查任务是否完成
+5. 如果任务完成,更新任务状态
+
+### 4.3 任务奖励领取流程
+1. 用户请求领取已完成任务的奖励
+2. 系统验证任务完成状态
+3. 系统发放任务奖励(调用物品模块)
+4. 更新任务状态为已领取
+5. 记录奖励领取日志
+6. 触发任务完成事件(用于团队收益计算等)
+
+## 5. 与其他模块的交互
+
+### 5.1 与用户模块的交互
+- 获取用户基本信息
+- 验证用户权限和等级
+
+### 5.2 与物品模块的交互
+- 调用物品模块接口发放任务奖励
+- 验证用户物品使用情况(针对使用物品类任务)
+
+### 5.3 与农场模块的交互
+- 监听种植、收获等事件
+- 更新相关任务进度
+
+### 5.4 与团队模块的交互
+- 任务完成后计算团队收益
+- 支持团队协作任务
+
+### 5.5 与通知模块的交互
+- 发送任务相关通知
+
+## 6. 扩展性设计
+
+### 6.1 任务类型扩展
+- 通过枚举类型定义任务类型,便于扩展
+- 支持自定义任务目标类型
+- 支持自定义任务完成条件
+
+### 6.2 任务奖励扩展
+- 支持多种奖励类型
+- 支持自定义奖励发放逻辑
+
+### 6.3 任务触发机制扩展
+- 基于事件的任务进度更新机制
+- 支持自定义事件监听器
+
+## 7. 性能优化
+
+### 7.1 数据库优化
+- 合理设计索引
+- 分表策略(按用户ID分片)
+- 定期清理过期任务数据
+
+### 7.2 缓存策略
+- 缓存用户当前任务列表
+- 缓存任务配置信息
+- 使用Redis存储热点任务数据
+
+### 7.3 异步处理
+- 任务奖励发放异步处理
+- 大规模任务重置使用队列处理
+
+## 8. 安全性考虑
+
+### 8.1 防作弊机制
+- 任务进度服务端验证
+- 敏感操作日志记录
+- 异常任务完成监控
+
+### 8.2 数据一致性
+- 使用事务确保任务状态和奖励发放的原子性
+- 奖励发放失败重试机制
+
+## 9. 未来规划
+
+### 9.1 功能扩展
+- 支持任务链和任务树
+- 支持条件分支任务
+- 支持多人协作任务
+
+### 9.2 性能提升
+- 引入分布式任务处理
+- 优化大规模任务数据存储
+
+### 9.3 用户体验优化
+- 任务推荐系统
+- 个性化任务生成
+- 任务完成动画和特效

+ 46 - 0
app/Module/Task/Docs_Roo_dpv3/事件系统设计.md

@@ -0,0 +1,46 @@
+# 任务模块事件系统设计
+
+## 1. 核心事件列表
+
+### 1.1 任务完成事件(TaskCompleted)
+- **触发时机**:用户完成任务时
+- **事件数据**:
+  - user_id: 用户ID
+  - task_id: 任务ID
+  - completion_time: 完成时间
+  - reward_data: 奖励数据
+
+### 1.2 任务奖励领取事件(TaskRewardClaimed)
+- **触发时机**:用户领取任务奖励时
+- **事件数据**:
+  - user_id: 用户ID
+  - task_id: 任务ID
+  - reward_items: 奖励物品列表
+  - claim_time: 领取时间
+
+## 2. 事件监听器设计
+
+### 2.1 奖励发放监听器(RewardDistributor)
+- **监听事件**:TaskCompleted
+- **功能**:
+  - 发放任务基础奖励
+  - 触发额外奖励计算
+  - 发送奖励通知
+
+### 2.2 通知发送监听器(NotificationSender)
+- **监听事件**:TaskCompleted, TaskRewardClaimed
+- **功能**:
+  - 发送任务完成通知
+  - 发送奖励领取通知
+
+## 3. 事件与业务模块集成
+
+### 3.1 与成就系统集成
+- 监听TaskCompleted事件
+- 检查成就完成条件
+- 更新用户成就进度
+
+### 3.2 与道具系统集成  
+- 监听TaskRewardClaimed事件
+- 处理道具类奖励发放
+- 更新用户道具库存

+ 78 - 0
app/Module/Task/Docs_Roo_dpv3/任务模块设计方案.md

@@ -0,0 +1,78 @@
+# 任务模块设计方案
+
+## 1. 目录结构设计
+```
+app/Module/Task/
+├── README.md                 # 模块说明文档
+├── AdminControllers/         # 后台控制器
+│   ├── TaskController.php      # 任务管理
+│   ├── TaskTypeController.php  # 任务类型管理
+│   └── TaskRewardController.php # 任务奖励管理
+├── Commands/                 # 命令行
+│   └── ResetDailyTasksCommand.php # 重置日常任务
+├── Databases/                # 数据库
+│   └── GenerateSql/            # SQL文件
+│       ├── task_types.sql       # 任务类型表
+│       ├── tasks.sql            # 任务表
+│       ├── user_tasks.sql       # 用户任务表
+│       └── task_rewards.sql     # 任务奖励表
+├── Dtos/                     # 数据传输对象
+│   ├── TaskDto.php             # 任务DTO
+│   └── TaskProgressDto.php     # 任务进度DTO
+├── Enums/                    # 枚举
+│   ├── TASK_STATUS.php         # 任务状态
+│   ├── TASK_TYPE.php           # 任务类型
+│   └── REWARD_TYPE.php         # 奖励类型
+├── Events/                   # 事件
+│   ├── TaskCompleted.php       # 任务完成事件
+│   └── TaskProgressUpdated.php # 任务进度更新事件
+├── Listeners/                # 事件监听器
+│   ├── AwardTaskReward.php     # 发放任务奖励
+│   └── UpdateTeamTaskStats.php # 更新团队任务统计
+├── Models/                   # 模型
+│   ├── Task.php                # 任务模型
+│   ├── TaskType.php            # 任务类型模型
+│   └── UserTask.php            # 用户任务模型
+├── Providers/                # 服务提供者
+│   └── TaskServiceProvider.php # 任务服务提供者
+├── Repositorys/              # 仓储
+│   ├── TaskRepository.php      # 任务仓储
+│   └── UserTaskRepository.php  # 用户任务仓储
+├── Services/                 # 服务层
+│   ├── TaskService.php         # 任务服务
+│   └── TaskProgressService.php # 任务进度服务
+└── Validations/              # 验证
+    └── TaskValidation.php      # 任务验证
+```
+
+## 2. 核心类设计
+
+### 2.1 任务服务(TaskService)
+- 提供任务创建、更新、删除等管理功能
+- 处理任务进度更新
+- 处理任务完成检查
+- 提供任务列表查询
+
+### 2.2 任务进度服务(TaskProgressService)
+- 处理用户任务进度更新
+- 触发任务完成事件
+- 处理任务奖励发放
+
+### 2.3 任务模型(Task)
+- 定义任务基础属性
+- 定义与任务类型的关联关系
+- 定义与奖励的关联关系
+
+## 3. 与其他模块的交互
+
+### 3.1 与用户系统交互
+- 通过user_id关联用户信息
+- 任务完成时更新用户统计信息
+
+### 3.2 与道具系统交互
+- 任务奖励可能包含道具
+- 通过事件触发道具发放
+
+### 3.3 与团队系统交互
+- 团队任务进度统计
+- 团队任务奖励分配

+ 189 - 0
app/Module/Task/Docs_Roo_dpv3/数据库设计.md

@@ -0,0 +1,189 @@
+# 任务模块数据库设计
+
+## 1. 数据库表概览
+
+1. **任务定义相关表**
+   - task_tasks - 任务基础表
+   - task_conditions - 任务条件表
+
+2. **任务完成相关表**  
+   - task_user_tasks - 用户任务关联表
+   - task_rewards - 任务奖励表
+
+3. **日志记录相关表**
+   - task_completion_logs - 任务完成日志表
+   - task_reward_logs - 奖励发放日志表
+   - task_reset_logs - 进度重置日志表
+
+## 2. 任务定义
+
+### 2.1 任务基础表 (task_tasks)
+
+| 字段名 | 类型 | 允许空 | 默认值 | 说明 |
+|-------|------|-------|-------|------|
+| id | int | 否 | 自增 | 主键 |
+| name | varchar(100) | 否 | - | 任务名称 |
+| description | text | 是 | NULL | 任务描述 |
+| task_type | varchar(50) | 否 | - | 任务类型 |
+| status | tinyint | 否 | 1 | 状态(0禁用,1启用) |
+| start_time | timestamp | 是 | NULL | 开始时间 |
+| end_time | timestamp | 是 | NULL | 结束时间 |
+| repeat_type | varchar(20) | 否 | 'none' | 重复类型(none/daily/weekly/monthly) |
+| max_completions | int | 否 | 1 | 最大完成次数 |
+| sort_order | int | 否 | 0 | 排序权重 |
+| created_at | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
+| updated_at | timestamp | 否 | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
+
+**索引:**
+- PRIMARY KEY (`id`)
+- KEY `idx_type` (`task_type`)
+- KEY `idx_status` (`status`)
+- KEY `idx_time` (`start_time`, `end_time`)
+
+### 2.2 任务条件表 (task_conditions)
+
+| 字段名 | 类型 | 允许空 | 默认值 | 说明 |
+|-------|------|-------|-------|------|
+| id | int | 否 | 自增 | 主键 |
+| task_id | int | 否 | - | 关联任务ID |
+| condition_type | varchar(50) | 否 | - | 条件类型 |
+| target_value | varchar(255) | 否 | - | 目标值 |
+| operator | varchar(20) | 否 | '>=' | 比较运算符 |
+| description | varchar(255) | 是 | NULL | 条件描述 |
+| sort_order | int | 否 | 0 | 排序权重 |
+| created_at | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
+
+**索引:**
+- PRIMARY KEY (`id`)
+- KEY `idx_task` (`task_id`)
+- KEY `idx_type` (`condition_type`)
+
+## 3. 任务完成
+
+### 3.1 用户任务关联表 (task_user_tasks)
+
+| 字段名 | 类型 | 允许空 | 默认值 | 说明 |
+|-------|------|-------|-------|------|
+| id | int | 否 | 自增 | 主键 |
+| user_id | int | 否 | - | 用户ID |
+| task_id | int | 否 | - | 任务ID |
+| progress | json | 否 | - | 当前进度 |
+| completions | int | 否 | 0 | 已完成次数 |
+| last_completed_at | timestamp | 是 | NULL | 最后完成时间 |
+| next_reset_at | timestamp | 是 | NULL | 下次重置时间 |
+| status | tinyint | 否 | 0 | 状态(0进行中,1已完成) |
+| created_at | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
+| updated_at | timestamp | 否 | CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 |
+
+**索引:**
+- PRIMARY KEY (`id`)
+- UNIQUE KEY `uniq_user_task` (`user_id`, `task_id`)
+- KEY `idx_status` (`status`)
+- KEY `idx_reset` (`next_reset_at`)
+
+### 3.2 任务奖励表 (task_rewards)
+
+**设计目的**:定义任务完成后可以获得的奖励内容,支持多种奖励类型和数量配置
+
+| 字段名 | 类型 | 允许空 | 默认值 | 说明 |
+|-------|------|-------|-------|------|
+| id | int | 否 | 自增 | 主键 |
+| task_id | int | 否 | - | 关联任务ID |
+| reward_type | varchar(50) | 否 | - | 奖励类型(item:道具, currency:货币, exp:经验等) |
+| reward_value | varchar(255) | 否 | - | 奖励值(道具ID/货币类型/经验类型等) |
+| reward_amount | int | 否 | 1 | 奖励数量 |
+| description | varchar(255) | 是 | NULL | 奖励描述 |
+| sort_order | int | 否 | 0 | 排序权重 |
+| created_at | timestamp | 否 | CURRENT_TIMESTAMP | 创建时间 |
+
+**索引:**
+- PRIMARY KEY (`id`)
+- KEY `idx_task` (`task_id`)
+- KEY `idx_type` (`reward_type`)
+
+**使用示例**:
+1. 道具奖励:reward_type='item', reward_value='1001'(道具ID), reward_amount=5
+2. 货币奖励:reward_type='currency', reward_value='gold'(金币类型), reward_amount=100
+3. 经验奖励:reward_type='exp', reward_value='farming'(种植经验), reward_amount=50
+
+## 4. 日志记录
+
+### 4.1 任务完成日志表 (task_completion_logs)
+
+| 字段名 | 类型 | 允许空 | 默认值 | 说明 |
+|-------|------|-------|-------|------|
+| id | int | 否 | 自增 | 主键 |
+| user_id | int | 否 | - | 用户ID |
+| task_id | int | 否 | - | 任务ID |
+| user_task_id | int | 否 | - | 用户任务ID |
+| completed_at | timestamp | 否 | - | 完成时间 |
+| conditions | json | 否 | - | 完成时的条件状态 |
+| ip_address | varchar(45) | 是 | NULL | IP地址 |
+| device_info | varchar(255) | 是 | NULL | 设备信息 |
+| created_at | timestamp | 是 | NULL | 创建时间 |
+
+**索引:**
+- PRIMARY KEY (`id`)
+- KEY `idx_user` (`user_id`)
+- KEY `idx_task` (`task_id`)
+- KEY `idx_completed` (`completed_at`)
+
+### 4.2 奖励发放日志表 (task_reward_logs)
+
+| 字段名 | 类型 | 允许空 | 默认值 | 说明 |
+|-------|------|-------|-------|------|
+| id | int | 否 | 自增 | 主键 |
+| user_id | int | 否 | - | 用户ID |
+| task_id | int | 否 | - | 任务ID |
+| user_task_id | int | 否 | - | 用户任务ID |
+| rewards | json | 否 | - | 发放的奖励 |
+| rewarded_at | timestamp | 否 | - | 发放时间 |
+| operator_id | int | 是 | NULL | 操作者ID(系统为0) |
+| ip_address | varchar(45) | 是 | NULL | IP地址 |
+| created_at | timestamp | 是 | NULL | 创建时间 |
+
+**索引:**
+- PRIMARY KEY (`id`)
+- KEY `idx_user` (`user_id`) 
+- KEY `idx_task` (`task_id`)
+- KEY `idx_rewarded` (`rewarded_at`)
+
+### 4.3 进度重置日志表 (task_reset_logs)
+
+| 字段名 | 类型 | 允许空 | 默认值 | 说明 |
+|-------|------|-------|-------|------|
+| id | int | 否 | 自增 | 主键 |
+| user_id | int | 否 | - | 用户ID |
+| task_id | int | 否 | - | 任务ID |
+| user_task_id | int | 否 | - | 用户任务ID |
+| reset_type | varchar(20) | 否 | - | 重置类型 |
+| reset_time | timestamp | 否 | - | 重置时间 |
+| old_progress | json | 是 | NULL | 重置前进度 |
+| operator_id | int | 是 | NULL | 操作者ID |
+| created_at | timestamp | 是 | NULL | 创建时间 |
+
+**索引:**
+- PRIMARY KEY (`id`)
+- KEY `idx_user_task` (`user_id`, `task_id`)
+- KEY `idx_reset_time` (`reset_time`)
+
+## 5. 数据关系
+
+```
+task_tasks 1 --< task_conditions
+task_tasks 1 --< task_rewards
+task_tasks 1 --< task_user_tasks
+task_user_tasks 1 --< task_completion_logs
+task_user_tasks 1 --< task_reward_logs
+task_user_tasks 1 --< task_reset_logs
+```
+
+## 6. 设计说明
+
+1. **模块化设计**:任务定义、完成和日志分离,结构清晰
+2. **完整审计**:通过日志表记录所有关键操作
+3. **性能优化**:合理设计索引,确保查询效率
+4. **扩展性**:支持多种任务类型和条件组合
+5. **数据安全**:所有修改操作都有日志可追溯
+6. **进度跟踪**:用户任务表记录详细进度状态
+7. **灵活奖励**:支持多种奖励类型和数量配置

+ 123 - 0
app/Module/Task/Enums/RESET_TYPE.php

@@ -0,0 +1,123 @@
+<?php
+
+namespace App\Module\Task\Enums;
+
+/**
+ * 重置类型枚举
+ * 定义了任务的重置类型
+ */
+enum RESET_TYPE: string {
+    case NONE = 'none';             // 不重置
+    case DAILY = 'daily';           // 每日重置
+    case WEEKLY = 'weekly';         // 每周重置
+    case MONTHLY = 'monthly';       // 每月重置
+    case SEASONAL = 'seasonal';     // 季节性重置
+    
+    /**
+     * 获取所有重置类型的选项,用于表单选择
+     *
+     * @return array
+     */
+    public static function getOptions(): array
+    {
+        $options = [];
+        foreach (self::cases() as $case) {
+            $options[$case->value] = self::getDescription($case);
+        }
+        return $options;
+    }
+    
+    /**
+     * 获取重置类型的描述
+     *
+     * @param RESET_TYPE $type
+     * @return string
+     */
+    public static function getDescription(self $type): string
+    {
+        return match($type) {
+            self::NONE => '不重置',
+            self::DAILY => '每日重置',
+            self::WEEKLY => '每周重置',
+            self::MONTHLY => '每月重置',
+            self::SEASONAL => '季节性重置',
+        };
+    }
+    
+    /**
+     * 获取重置类型的时间间隔(秒)
+     *
+     * @param RESET_TYPE $type
+     * @return int|null
+     */
+    public static function getInterval(self $type): ?int
+    {
+        return match($type) {
+            self::NONE => null,
+            self::DAILY => 86400,    // 24小时
+            self::WEEKLY => 604800,  // 7天
+            self::MONTHLY => 2592000, // 30天
+            self::SEASONAL => 7776000, // 90天
+        };
+    }
+    
+    /**
+     * 获取下一次重置时间
+     *
+     * @param RESET_TYPE $type
+     * @return \DateTime|null
+     */
+    public static function getNextResetTime(self $type): ?\DateTime
+    {
+        $now = new \DateTime();
+        
+        return match($type) {
+            self::NONE => null,
+            self::DAILY => (function() use ($now) {
+                // 每天凌晨5点重置
+                $reset = new \DateTime($now->format('Y-m-d 05:00:00'));
+                if ($now >= $reset) {
+                    $reset->modify('+1 day');
+                }
+                return $reset;
+            })(),
+            self::WEEKLY => (function() use ($now) {
+                // 每周一凌晨5点重置
+                $reset = new \DateTime($now->format('Y-m-d 05:00:00'));
+                $dayOfWeek = (int)$now->format('N'); // 1-7, 1 = Monday
+                
+                // 如果今天不是周一或者已经过了今天的重置时间
+                if ($dayOfWeek !== 1 || $now >= $reset) {
+                    // 计算到下周一的天数
+                    $daysToAdd = 8 - $dayOfWeek;
+                    $reset->modify("+{$daysToAdd} days");
+                }
+                
+                return $reset;
+            })(),
+            self::MONTHLY => (function() use ($now) {
+                // 每月1日凌晨5点重置
+                $reset = new \DateTime($now->format('Y-m-01 05:00:00'));
+                if ($now >= $reset) {
+                    $reset->modify('first day of next month');
+                }
+                return $reset;
+            })(),
+            self::SEASONAL => (function() use ($now) {
+                // 每季度第一天凌晨5点重置
+                $month = (int)$now->format('n');
+                $quarter = ceil($month / 3);
+                $firstMonthOfQuarter = ($quarter - 1) * 3 + 1;
+                
+                $reset = new \DateTime($now->format('Y-' . str_pad($firstMonthOfQuarter, 2, '0', STR_PAD_LEFT) . '-01 05:00:00'));
+                
+                if ($now >= $reset) {
+                    // 移动到下一个季度
+                    $reset->modify('+3 months');
+                }
+                
+                return $reset;
+            })(),
+        };
+    }
+}

+ 231 - 0
app/Module/Task/Enums/TARGET_TYPE.php

@@ -0,0 +1,231 @@
+<?php
+
+namespace App\Module\Task\Enums;
+
+/**
+ * 任务目标类型枚举
+ * 定义了任务可以跟踪的各种目标类型
+ */
+enum TARGET_TYPE: string {
+    // 用户相关
+    case LOGIN = 'login';                     // 登录游戏
+    case LEVEL_UP = 'level_up';               // 等级提升
+    case UPDATE_PROFILE = 'update_profile';   // 更新个人资料
+    case ACTIVATE_VIP = 'activate_vip';       // 激活VIP
+    case BIND_PHONE = 'bind_phone';           // 绑定手机
+    case REAL_NAME_AUTH = 'real_name_auth';   // 实名认证
+    
+    // 农场相关
+    case PLANT = 'plant';                     // 种植作物
+    case HARVEST = 'harvest';                 // 收获作物
+    case UPGRADE_LAND = 'upgrade_land';       // 升级土地
+    case UPGRADE_HOUSE = 'upgrade_house';     // 升级房屋
+    case CLEAR_DISASTER = 'clear_disaster';   // 清除灾害
+    case USE_FERTILIZER = 'use_fertilizer';   // 使用化肥
+    case USE_PESTICIDE = 'use_pesticide';     // 使用农药
+    case USE_WATERING_CAN = 'use_watering_can'; // 使用洒水壶
+    case USE_WEED_REMOVER = 'use_weed_remover'; // 使用除草剂
+    
+    // 物品相关
+    case ACQUIRE_ITEM = 'acquire_item';       // 获取物品
+    case USE_ITEM = 'use_item';               // 使用物品
+    case CRAFT_ITEM = 'craft_item';           // 合成物品
+    case DISMANTLE_ITEM = 'dismantle_item';   // 分解物品
+    case OPEN_CHEST = 'open_chest';           // 开启宝箱
+    case SELL_ITEM = 'sell_item';             // 出售物品
+    case TRADE_ITEM = 'trade_item';           // 交易物品
+    
+    // 宠物相关
+    case FEED_PET = 'feed_pet';               // 喂养宠物
+    case PET_LEVEL_UP = 'pet_level_up';       // 宠物升级
+    case USE_PET_SKILL = 'use_pet_skill';     // 使用宠物技能
+    case PET_REMOULD = 'pet_remould';         // 宠物洗髓
+    case PET_VEGETEAL = 'pet_vegeteal';       // 宠物偷菜
+    case PET_BATTLE = 'pet_battle';           // 宠物战斗
+    
+    // 团队相关
+    case INVITE = 'invite';                   // 邀请好友
+    case TEAM_PROFIT = 'team_profit';         // 团队收益
+    case TALENT_LEVEL_UP = 'talent_level_up'; // 达人等级提升
+    case TEAM_TASK_COMPLETE = 'team_task_complete'; // 完成团队任务
+    case TEAM_RANK_CHANGE = 'team_rank_change'; // 团队排名变化
+    
+    // 社交相关
+    case ADD_FRIEND = 'add_friend';           // 添加好友
+    case VISIT_FRIEND = 'visit_friend';       // 访问好友
+    case SEND_MESSAGE = 'send_message';       // 发送消息
+    case SEND_GIFT = 'send_gift';             // 发送礼物
+    case SOCIAL_SHARE = 'social_share';       // 社交分享
+    
+    // 商店相关
+    case SHOP_PURCHASE = 'shop_purchase';     // 商店购买
+    case SPECIAL_OFFER_PURCHASE = 'special_offer_purchase'; // 特价商品购买
+    case VIP_SHOP_PURCHASE = 'vip_shop_purchase'; // VIP商店购买
+    case FIRST_PURCHASE = 'first_purchase';   // 首次购买
+    
+    // 活动相关
+    case PARTICIPATE_EVENT = 'participate_event'; // 参与活动
+    case EVENT_RANKING_CHANGE = 'event_ranking_change'; // 活动排名变化
+    case EVENT_REWARD_CLAIM = 'event_reward_claim'; // 活动奖励领取
+    case SEASONAL_EVENT_COMPLETE = 'seasonal_event_complete'; // 季节性活动完成
+    
+    /**
+     * 获取所有目标类型的选项,用于表单选择
+     *
+     * @return array
+     */
+    public static function getOptions(): array
+    {
+        $options = [];
+        foreach (self::cases() as $case) {
+            $options[$case->value] = self::getDescription($case);
+        }
+        return $options;
+    }
+    
+    /**
+     * 获取目标类型的描述
+     *
+     * @param TARGET_TYPE $type
+     * @return string
+     */
+    public static function getDescription(self $type): string
+    {
+        return match($type) {
+            // 用户相关
+            self::LOGIN => '登录游戏',
+            self::LEVEL_UP => '等级提升',
+            self::UPDATE_PROFILE => '更新个人资料',
+            self::ACTIVATE_VIP => '激活VIP',
+            self::BIND_PHONE => '绑定手机',
+            self::REAL_NAME_AUTH => '实名认证',
+            
+            // 农场相关
+            self::PLANT => '种植作物',
+            self::HARVEST => '收获作物',
+            self::UPGRADE_LAND => '升级土地',
+            self::UPGRADE_HOUSE => '升级房屋',
+            self::CLEAR_DISASTER => '清除灾害',
+            self::USE_FERTILIZER => '使用化肥',
+            self::USE_PESTICIDE => '使用农药',
+            self::USE_WATERING_CAN => '使用洒水壶',
+            self::USE_WEED_REMOVER => '使用除草剂',
+            
+            // 物品相关
+            self::ACQUIRE_ITEM => '获取物品',
+            self::USE_ITEM => '使用物品',
+            self::CRAFT_ITEM => '合成物品',
+            self::DISMANTLE_ITEM => '分解物品',
+            self::OPEN_CHEST => '开启宝箱',
+            self::SELL_ITEM => '出售物品',
+            self::TRADE_ITEM => '交易物品',
+            
+            // 宠物相关
+            self::FEED_PET => '喂养宠物',
+            self::PET_LEVEL_UP => '宠物升级',
+            self::USE_PET_SKILL => '使用宠物技能',
+            self::PET_REMOULD => '宠物洗髓',
+            self::PET_VEGETEAL => '宠物偷菜',
+            self::PET_BATTLE => '宠物战斗',
+            
+            // 团队相关
+            self::INVITE => '邀请好友',
+            self::TEAM_PROFIT => '团队收益',
+            self::TALENT_LEVEL_UP => '达人等级提升',
+            self::TEAM_TASK_COMPLETE => '完成团队任务',
+            self::TEAM_RANK_CHANGE => '团队排名变化',
+            
+            // 社交相关
+            self::ADD_FRIEND => '添加好友',
+            self::VISIT_FRIEND => '访问好友',
+            self::SEND_MESSAGE => '发送消息',
+            self::SEND_GIFT => '发送礼物',
+            self::SOCIAL_SHARE => '社交分享',
+            
+            // 商店相关
+            self::SHOP_PURCHASE => '商店购买',
+            self::SPECIAL_OFFER_PURCHASE => '特价商品购买',
+            self::VIP_SHOP_PURCHASE => 'VIP商店购买',
+            self::FIRST_PURCHASE => '首次购买',
+            
+            // 活动相关
+            self::PARTICIPATE_EVENT => '参与活动',
+            self::EVENT_RANKING_CHANGE => '活动排名变化',
+            self::EVENT_REWARD_CLAIM => '活动奖励领取',
+            self::SEASONAL_EVENT_COMPLETE => '季节性活动完成',
+        };
+    }
+    
+    /**
+     * 获取目标类型的分组
+     *
+     * @return array
+     */
+    public static function getGroups(): array
+    {
+        return [
+            '用户相关' => [
+                self::LOGIN->value,
+                self::LEVEL_UP->value,
+                self::UPDATE_PROFILE->value,
+                self::ACTIVATE_VIP->value,
+                self::BIND_PHONE->value,
+                self::REAL_NAME_AUTH->value,
+            ],
+            '农场相关' => [
+                self::PLANT->value,
+                self::HARVEST->value,
+                self::UPGRADE_LAND->value,
+                self::UPGRADE_HOUSE->value,
+                self::CLEAR_DISASTER->value,
+                self::USE_FERTILIZER->value,
+                self::USE_PESTICIDE->value,
+                self::USE_WATERING_CAN->value,
+                self::USE_WEED_REMOVER->value,
+            ],
+            '物品相关' => [
+                self::ACQUIRE_ITEM->value,
+                self::USE_ITEM->value,
+                self::CRAFT_ITEM->value,
+                self::DISMANTLE_ITEM->value,
+                self::OPEN_CHEST->value,
+                self::SELL_ITEM->value,
+                self::TRADE_ITEM->value,
+            ],
+            '宠物相关' => [
+                self::FEED_PET->value,
+                self::PET_LEVEL_UP->value,
+                self::USE_PET_SKILL->value,
+                self::PET_REMOULD->value,
+                self::PET_VEGETEAL->value,
+                self::PET_BATTLE->value,
+            ],
+            '团队相关' => [
+                self::INVITE->value,
+                self::TEAM_PROFIT->value,
+                self::TALENT_LEVEL_UP->value,
+                self::TEAM_TASK_COMPLETE->value,
+                self::TEAM_RANK_CHANGE->value,
+            ],
+            '社交相关' => [
+                self::ADD_FRIEND->value,
+                self::VISIT_FRIEND->value,
+                self::SEND_MESSAGE->value,
+                self::SEND_GIFT->value,
+                self::SOCIAL_SHARE->value,
+            ],
+            '商店相关' => [
+                self::SHOP_PURCHASE->value,
+                self::SPECIAL_OFFER_PURCHASE->value,
+                self::VIP_SHOP_PURCHASE->value,
+                self::FIRST_PURCHASE->value,
+            ],
+            '活动相关' => [
+                self::PARTICIPATE_EVENT->value,
+                self::EVENT_RANKING_CHANGE->value,
+                self::EVENT_REWARD_CLAIM->value,
+                self::SEASONAL_EVENT_COMPLETE->value,
+            ],
+        ];
+    }
+}

+ 110 - 0
app/Module/Task/Enums/TASK_STATUS.php

@@ -0,0 +1,110 @@
+<?php
+
+namespace App\Module\Task\Enums;
+
+/**
+ * 任务状态枚举
+ * 定义了任务的各种状态
+ */
+enum TASK_STATUS: int {
+    case NOT_ACCEPTED = 0;          // 未接取
+    case IN_PROGRESS = 1;           // 进行中
+    case COMPLETED = 2;             // 已完成
+    case REWARDED = 3;              // 已领取奖励
+    case FAILED = 4;                // 已失败
+    case EXPIRED = 5;               // 已过期
+    
+    /**
+     * 获取所有任务状态的选项,用于表单选择
+     *
+     * @return array
+     */
+    public static function getOptions(): array
+    {
+        $options = [];
+        foreach (self::cases() as $case) {
+            $options[$case->value] = self::getDescription($case);
+        }
+        return $options;
+    }
+    
+    /**
+     * 获取任务状态的描述
+     *
+     * @param TASK_STATUS $status
+     * @return string
+     */
+    public static function getDescription(self $status): string
+    {
+        return match($status) {
+            self::NOT_ACCEPTED => '未接取',
+            self::IN_PROGRESS => '进行中',
+            self::COMPLETED => '已完成',
+            self::REWARDED => '已领取奖励',
+            self::FAILED => '已失败',
+            self::EXPIRED => '已过期',
+        };
+    }
+    
+    /**
+     * 获取任务状态的颜色
+     *
+     * @param TASK_STATUS $status
+     * @return string
+     */
+    public static function getColor(self $status): string
+    {
+        return match($status) {
+            self::NOT_ACCEPTED => 'gray',
+            self::IN_PROGRESS => 'blue',
+            self::COMPLETED => 'green',
+            self::REWARDED => 'purple',
+            self::FAILED => 'red',
+            self::EXPIRED => 'orange',
+        };
+    }
+    
+    /**
+     * 检查任务是否可以接取
+     *
+     * @param TASK_STATUS $status
+     * @return bool
+     */
+    public static function canAccept(self $status): bool
+    {
+        return $status === self::NOT_ACCEPTED;
+    }
+    
+    /**
+     * 检查任务是否可以放弃
+     *
+     * @param TASK_STATUS $status
+     * @return bool
+     */
+    public static function canAbandon(self $status): bool
+    {
+        return $status === self::IN_PROGRESS;
+    }
+    
+    /**
+     * 检查任务是否可以完成
+     *
+     * @param TASK_STATUS $status
+     * @return bool
+     */
+    public static function canComplete(self $status): bool
+    {
+        return $status === self::IN_PROGRESS;
+    }
+    
+    /**
+     * 检查任务是否可以领取奖励
+     *
+     * @param TASK_STATUS $status
+     * @return bool
+     */
+    public static function canClaimReward(self $status): bool
+    {
+        return $status === self::COMPLETED;
+    }
+}

+ 87 - 0
app/Module/Task/Enums/TASK_TYPE.php

@@ -0,0 +1,87 @@
+<?php
+
+namespace App\Module\Task\Enums;
+
+/**
+ * 任务类型枚举
+ * 定义了系统支持的各种任务类型
+ */
+enum TASK_TYPE: string {
+    case DAILY = 'daily';           // 日常任务,每日重置
+    case WEEKLY = 'weekly';         // 周常任务,每周重置
+    case ACHIEVEMENT = 'achievement'; // 成就任务,永久性任务,完成后不重置
+    case EVENT = 'event';           // 活动任务,与特定活动关联,活动结束后过期
+    case TUTORIAL = 'tutorial';     // 新手引导任务,引导新用户熟悉游戏
+    case TEAM = 'team';             // 团队任务,需要团队成员协作完成
+    case MONTHLY = 'monthly';       // 月度任务,每月重置
+    case SEASONAL = 'seasonal';     // 季节性任务,与游戏季节相关
+    case MAIN = 'main';             // 主线任务,推动游戏主要剧情
+    case SIDE = 'side';             // 支线任务,提供额外游戏内容
+    
+    /**
+     * 获取所有任务类型的选项,用于表单选择
+     *
+     * @return array
+     */
+    public static function getOptions(): array
+    {
+        $options = [];
+        foreach (self::cases() as $case) {
+            $options[$case->value] = self::getDescription($case);
+        }
+        return $options;
+    }
+    
+    /**
+     * 获取任务类型的描述
+     *
+     * @param TASK_TYPE $type
+     * @return string
+     */
+    public static function getDescription(self $type): string
+    {
+        return match($type) {
+            self::DAILY => '日常任务',
+            self::WEEKLY => '周常任务',
+            self::ACHIEVEMENT => '成就任务',
+            self::EVENT => '活动任务',
+            self::TUTORIAL => '新手引导任务',
+            self::TEAM => '团队任务',
+            self::MONTHLY => '月度任务',
+            self::SEASONAL => '季节性任务',
+            self::MAIN => '主线任务',
+            self::SIDE => '支线任务',
+        };
+    }
+    
+    /**
+     * 获取任务类型对应的重置类型
+     *
+     * @param TASK_TYPE $type
+     * @return string
+     */
+    public static function getResetType(self $type): string
+    {
+        return match($type) {
+            self::DAILY => 'daily',
+            self::WEEKLY => 'weekly',
+            self::MONTHLY => 'monthly',
+            self::SEASONAL => 'seasonal',
+            default => 'none',
+        };
+    }
+    
+    /**
+     * 检查任务类型是否需要重置
+     *
+     * @param TASK_TYPE $type
+     * @return bool
+     */
+    public static function needsReset(self $type): bool
+    {
+        return match($type) {
+            self::DAILY, self::WEEKLY, self::MONTHLY, self::SEASONAL => true,
+            default => false,
+        };
+    }
+}

+ 79 - 0
app/Module/Task/Events/TaskCompletedEvent.php

@@ -0,0 +1,79 @@
+<?php
+
+namespace App\Module\Task\Events;
+
+/**
+ * 任务完成事件
+ * 
+ * 当用户完成任务时触发此事件
+ */
+class TaskCompletedEvent
+{
+    /**
+     * 用户ID
+     *
+     * @var int
+     */
+    public int $userId;
+    
+    /**
+     * 任务ID
+     *
+     * @var int
+     */
+    public int $taskId;
+    
+    /**
+     * 任务名称
+     *
+     * @var string
+     */
+    public string $taskName;
+    
+    /**
+     * 任务类型
+     *
+     * @var string
+     */
+    public string $taskType;
+    
+    /**
+     * 完成时间
+     *
+     * @var string
+     */
+    public string $completedAt;
+    
+    /**
+     * 任务奖励内容
+     *
+     * @var array
+     */
+    public array $rewards;
+    
+    /**
+     * 创建一个新的事件实例
+     *
+     * @param int $userId 用户ID
+     * @param int $taskId 任务ID
+     * @param string $taskName 任务名称
+     * @param string $taskType 任务类型
+     * @param string $completedAt 完成时间
+     * @param array $rewards 任务奖励内容
+     */
+    public function __construct(
+        int $userId,
+        int $taskId,
+        string $taskName,
+        string $taskType,
+        string $completedAt,
+        array $rewards
+    ) {
+        $this->userId = $userId;
+        $this->taskId = $taskId;
+        $this->taskName = $taskName;
+        $this->taskType = $taskType;
+        $this->completedAt = $completedAt;
+        $this->rewards = $rewards;
+    }
+}

+ 79 - 0
app/Module/Task/Events/TaskRewardClaimedEvent.php

@@ -0,0 +1,79 @@
+<?php
+
+namespace App\Module\Task\Events;
+
+/**
+ * 任务奖励领取事件
+ * 
+ * 当用户领取任务奖励时触发此事件
+ */
+class TaskRewardClaimedEvent
+{
+    /**
+     * 用户ID
+     *
+     * @var int
+     */
+    public int $userId;
+    
+    /**
+     * 任务ID
+     *
+     * @var int
+     */
+    public int $taskId;
+    
+    /**
+     * 任务名称
+     *
+     * @var string
+     */
+    public string $taskName;
+    
+    /**
+     * 实际发放的奖励
+     *
+     * @var array
+     */
+    public array $rewards;
+    
+    /**
+     * 领取时间
+     *
+     * @var string
+     */
+    public string $claimedAt;
+    
+    /**
+     * 奖励是否成功发放
+     *
+     * @var bool
+     */
+    public bool $isSuccess;
+    
+    /**
+     * 创建一个新的事件实例
+     *
+     * @param int $userId 用户ID
+     * @param int $taskId 任务ID
+     * @param string $taskName 任务名称
+     * @param array $rewards 实际发放的奖励
+     * @param string $claimedAt 领取时间
+     * @param bool $isSuccess 奖励是否成功发放
+     */
+    public function __construct(
+        int $userId,
+        int $taskId,
+        string $taskName,
+        array $rewards,
+        string $claimedAt,
+        bool $isSuccess
+    ) {
+        $this->userId = $userId;
+        $this->taskId = $taskId;
+        $this->taskName = $taskName;
+        $this->rewards = $rewards;
+        $this->claimedAt = $claimedAt;
+        $this->isSuccess = $isSuccess;
+    }
+}

+ 31 - 0
app/Module/Task/Listeners/BaseTaskEventListener.php

@@ -0,0 +1,31 @@
+<?php
+
+namespace App\Module\Task\Listeners;
+
+use Illuminate\Support\Facades\Log;
+
+/**
+ * 任务事件监听器基类
+ */
+abstract class BaseTaskEventListener
+{
+    /**
+     * 处理事件
+     *
+     * @param mixed $event 事件对象
+     * @return void
+     */
+    abstract public function handle($event): void;
+    
+    /**
+     * 记录事件日志
+     *
+     * @param string $message 日志消息
+     * @param array $context 上下文数据
+     * @return void
+     */
+    protected function logEvent(string $message, array $context = []): void
+    {
+        Log::info($message, $context);
+    }
+}

+ 79 - 0
app/Module/Task/Listeners/TaskCompletedListener.php

@@ -0,0 +1,79 @@
+<?php
+
+namespace App\Module\Task\Listeners;
+
+use App\Module\Task\Events\TaskCompletedEvent;
+use App\Module\User\Services\UserService;
+use App\Module\GameItems\Services\ItemService;
+
+/**
+ * 任务完成事件监听器
+ */
+class TaskCompletedListener extends BaseTaskEventListener
+{
+    /**
+     * 用户服务
+     *
+     * @var UserService
+     */
+    protected UserService $userService;
+    
+    /**
+     * 物品服务
+     *
+     * @var ItemService
+     */
+    protected ItemService $itemService;
+    
+    /**
+     * 构造函数
+     *
+     * @param UserService $userService
+     * @param ItemService $itemService
+     */
+    public function __construct(UserService $userService, ItemService $itemService)
+    {
+        $this->userService = $userService;
+        $this->itemService = $itemService;
+    }
+    
+    /**
+     * 处理任务完成事件
+     *
+     * @param TaskCompletedEvent $event
+     * @return void
+     */
+    public function handle($event): void
+    {
+        // 记录日志
+        $this->logEvent("用户 {$event->userId} 完成了任务 {$event->taskName}", [
+            'user_id' => $event->userId,
+            'task_id' => $event->taskId,
+            'task_type' => $event->taskType,
+            'completed_at' => $event->completedAt
+        ]);
+        
+        // 更新用户统计数据
+        // 注意:需要确保UserService中有此方法
+        if (method_exists($this->userService, 'incrementTaskCompletionCount')) {
+            $this->userService->incrementTaskCompletionCount($event->userId, $event->taskType);
+        }
+        
+        // 发送通知
+        $this->sendTaskCompletionNotification($event->userId, $event->taskName);
+    }
+    
+    /**
+     * 发送任务完成通知
+     *
+     * @param int $userId 用户ID
+     * @param string $taskName 任务名称
+     * @return void
+     */
+    private function sendTaskCompletionNotification(int $userId, string $taskName): void
+    {
+        // 发送通知逻辑
+        // 如果有通知服务,可以调用通知模块的服务
+        // 例如:$this->notificationService->send($userId, 'task_completed', [...]);
+    }
+}

+ 106 - 0
app/Module/Task/Listeners/TaskRewardClaimedListener.php

@@ -0,0 +1,106 @@
+<?php
+
+namespace App\Module\Task\Listeners;
+
+use App\Module\Task\Events\TaskRewardClaimedEvent;
+use App\Module\GameItems\Services\ItemService;
+use App\Module\Team\Services\TeamProfitService;
+
+/**
+ * 任务奖励领取事件监听器
+ */
+class TaskRewardClaimedListener extends BaseTaskEventListener
+{
+    /**
+     * 物品服务
+     *
+     * @var ItemService
+     */
+    protected ItemService $itemService;
+    
+    /**
+     * 团队收益服务
+     *
+     * @var TeamProfitService
+     */
+    protected TeamProfitService $teamProfitService;
+    
+    /**
+     * 构造函数
+     *
+     * @param ItemService $itemService
+     * @param TeamProfitService $teamProfitService
+     */
+    public function __construct(ItemService $itemService, TeamProfitService $teamProfitService)
+    {
+        $this->itemService = $itemService;
+        $this->teamProfitService = $teamProfitService;
+    }
+    
+    /**
+     * 处理任务奖励领取事件
+     *
+     * @param TaskRewardClaimedEvent $event
+     * @return void
+     */
+    public function handle($event): void
+    {
+        // 记录日志
+        $this->logEvent("用户 {$event->userId} 领取了任务 {$event->taskName} 的奖励", [
+            'user_id' => $event->userId,
+            'task_id' => $event->taskId,
+            'rewards' => $event->rewards,
+            'claimed_at' => $event->claimedAt,
+            'is_success' => $event->isSuccess
+        ]);
+        
+        // 如果奖励发放成功
+        if ($event->isSuccess) {
+            // 处理团队收益分成
+            $this->processTeamProfit($event);
+            
+            // 发送奖励领取通知
+            $this->sendRewardNotification($event->userId, $event->taskName, $event->rewards);
+        }
+    }
+    
+    /**
+     * 处理团队收益分成
+     *
+     * @param TaskRewardClaimedEvent $event
+     * @return void
+     */
+    private function processTeamProfit(TaskRewardClaimedEvent $event): void
+    {
+        // 遍历奖励
+        foreach ($event->rewards as $reward) {
+            if (isset($reward['item_id']) && isset($reward['quantity'])) {
+                // 记录任务完成收益
+                // 注意:需要确保TeamProfitService中有此方法
+                if (method_exists($this->teamProfitService, 'recordTaskCompleteProfit')) {
+                    $this->teamProfitService->recordTaskCompleteProfit(
+                        $event->userId,
+                        $event->taskId,
+                        $reward['item_id'],
+                        $reward['quantity']
+                    );
+                }
+            }
+        }
+    }
+    
+    /**
+     * 发送奖励领取通知
+     *
+     * @param int $userId 用户ID
+     * @param string $taskName 任务名称
+     * @param array $rewards 奖励内容
+     * @return void
+     */
+    private function sendRewardNotification(int $userId, string $taskName, array $rewards): void
+    {
+        // 发送通知逻辑
+        // 如果有通知服务,可以调用通知模块的服务
+        // 例如:$this->notificationService->send($userId, 'task_reward_claimed', [...]);
+    }
+}

+ 44 - 0
app/Module/Task/Providers/TaskServiceProvider.php

@@ -0,0 +1,44 @@
+<?php
+
+namespace App\Module\Task\Providers;
+
+use Illuminate\Support\ServiceProvider;
+use App\Module\Task\Events\TaskCompletedEvent;
+use App\Module\Task\Events\TaskRewardClaimedEvent;
+use App\Module\Task\Listeners\TaskCompletedListener;
+use App\Module\Task\Listeners\TaskRewardClaimedListener;
+
+/**
+ * 任务模块服务提供者
+ */
+class TaskServiceProvider extends ServiceProvider
+{
+    /**
+     * 注册服务
+     *
+     * @return void
+     */
+    public function register(): void
+    {
+        // 注册服务...
+    }
+
+    /**
+     * 引导服务
+     *
+     * @return void
+     */
+    public function boot(): void
+    {
+        // 注册事件监听器
+        $this->app['events']->listen(
+            TaskCompletedEvent::class,
+            TaskCompletedListener::class
+        );
+        
+        $this->app['events']->listen(
+            TaskRewardClaimedEvent::class,
+            TaskRewardClaimedListener::class
+        );
+    }
+}

+ 172 - 0
app/Module/Task/README.md

@@ -0,0 +1,172 @@
+# 任务模块
+
+> 开心农场系统 - 任务系统,管理游戏内各类任务的创建、分配、完成和奖励发放
+
+## 目录
+
+1. [模块概述](#1-模块概述)
+2. [核心功能](#2-核心功能)
+3. [架构设计](#3-架构设计)
+4. [数据结构](#4-数据结构)
+5. [API接口](#5-api接口)
+6. [与其他模块集成](#6-与其他模块集成)
+7. [部署与配置](#7-部署与配置)
+8. [开发指南](#8-开发指南)
+9. [常见问题](#9-常见问题)
+
+## 1. 模块概述
+
+任务模块是开心农场系统的核心功能模块之一,负责管理游戏中的各类任务,包括日常任务、成就任务、活动任务等。该模块提供任务的创建、分配、进度跟踪、完成验证和奖励发放等功能,通过任务系统引导玩家体验游戏内容,提高用户活跃度和留存率。
+
+## 2. 核心功能
+
+- **多类型任务管理**:支持日常、周常、成就、活动、新手引导、团队等多种任务类型
+- **任务进度跟踪**:自动跟踪玩家的任务进度,支持多种任务目标类型
+- **任务奖励系统**:支持多种奖励类型,与物品系统无缝集成
+- **任务重置机制**:支持不同周期的任务重置(每日、每周、每月)
+- **任务通知**:任务状态变更通知,任务过期提醒等
+
+## 3. 架构设计
+
+任务模块采用分层架构设计,遵循"服务是对外的,Logic是内部的"原则:
+
+```
+app/Module/Task/
+├── AdminControllers/        # 后台管理控制器
+│   ├── Helper/              # 控制器辅助类
+│   ├── Actions/             # 控制器动作类
+│   └── LazyRenderable/      # 懒加载渲染类
+├── Commands/                # 命令行工具
+├── Controllers/             # 前端API控制器
+├── Databases/               # 数据库相关文件
+│   └── GenerateSql/         # 数据库创建脚本
+├── Dtos/                    # 数据传输对象
+├── Enums/                   # 枚举类型定义
+├── Events/                  # 事件类
+├── Exceptions/              # 异常类
+├── Listeners/               # 事件监听器
+├── Logics/                  # 业务逻辑类
+├── Models/                  # 数据模型
+├── Providers/               # 服务提供者
+├── Repositorys/             # 数据仓库
+├── Services/                # 服务类
+└── Docs/                    # 模块文档
+```
+
+## 4. 数据结构
+
+任务模块包含以下核心数据表:
+
+1. **task_categories** - 任务分类表
+2. **task_tasks** - 任务定义表
+3. **task_user_tasks** - 用户任务关联表
+4. **task_user_progress** - 用户任务进度表
+5. **task_completion_logs** - 任务完成日志表
+6. **task_reward_logs** - 任务奖励发放日志表
+7. **task_reset_logs** - 任务重置日志表
+
+详细的数据库设计请参考 [数据库设计文档](./Docs/数据库设计.md)。
+
+## 5. API接口
+
+任务模块提供以下主要API接口:
+
+- 获取任务列表 - `GET /api/task/list`
+- 获取任务详情 - `GET /api/task/detail`
+- 接取任务 - `POST /api/task/accept`
+- 放弃任务 - `POST /api/task/abandon`
+- 完成任务 - `POST /api/task/complete`
+- 领取任务奖励 - `POST /api/task/claim-reward`
+- 获取任务进度 - `GET /api/task/progress`
+
+详细的API接口设计请参考 [API接口设计文档](./Docs/API接口设计.md)。
+
+## 6. 与其他模块集成
+
+任务模块与以下模块进行集成:
+
+- **用户模块**:获取用户信息,验证用户等级和权限
+- **物品模块**:发放任务奖励,验证物品使用情况
+- **农场模块**:监听种植、收获等事件,更新任务进度
+- **团队模块**:任务完成后计算团队收益,支持团队任务
+- **宠物模块**:监听宠物相关事件,更新任务进度
+- **通知模块**:发送任务相关通知
+
+详细的集成方式请参考 [与其他模块集成文档](./Docs/与其他模块集成.md)。
+
+## 7. 部署与配置
+
+### 7.1 安装步骤
+
+1. 确保已安装Laravel框架和相关依赖
+2. 将任务模块代码复制到项目的`app/Module/Task`目录下
+3. 执行数据库迁移:`php artisan migrate`
+4. 注册服务提供者:在`config/app.php`中添加`App\Module\Task\Providers\TaskServiceProvider::class`
+5. 发布配置文件:`php artisan vendor:publish --tag=task-config`
+
+### 7.2 配置选项
+
+任务模块的主要配置选项位于`config/task.php`文件中:
+
+- `reset_time` - 任务重置时间配置
+- `notification_enabled` - 是否启用任务通知
+- `expiration_reminder_hours` - 任务过期提醒时间(小时)
+- `log_retention_days` - 日志保留天数
+
+## 8. 开发指南
+
+### 8.1 添加新任务类型
+
+1. 在`TASK_TYPE`枚举中添加新的任务类型
+2. 在`TaskLogic`中实现相应的验证和处理逻辑
+3. 在后台管理界面添加新任务类型的配置选项
+
+### 8.2 添加新目标类型
+
+1. 在`TARGET_TYPE`枚举中添加新的目标类型
+2. 创建相应的事件监听器,监听相关事件
+3. 在`TaskService::updateTaskProgress`方法中添加新目标类型的处理逻辑
+
+### 8.3 自定义任务奖励
+
+1. 修改任务奖励的JSON结构,添加新的奖励类型
+2. 在`TaskLogic::processTaskReward`方法中添加新奖励类型的处理逻辑
+3. 更新前端界面,显示新的奖励类型
+
+## 9. 常见问题
+
+### 9.1 任务进度不更新
+
+可能的原因:
+- 事件未正确触发或监听
+- 任务目标参数配置错误
+- 用户任务状态不正确
+
+解决方案:
+- 检查事件监听器是否正确注册
+- 验证任务目标参数是否匹配
+- 检查用户任务状态是否为"进行中"
+
+### 9.2 任务奖励发放失败
+
+可能的原因:
+- 物品模块接口调用失败
+- 数据库事务回滚
+- 奖励配置错误
+
+解决方案:
+- 检查物品模块日志
+- 验证奖励JSON格式是否正确
+- 确保数据库连接稳定
+
+### 9.3 任务重置未生效
+
+可能的原因:
+- 计划任务未正确配置
+- 重置类型配置错误
+- 时区设置不正确
+
+解决方案:
+- 检查计划任务配置
+- 验证任务的重置类型设置
+- 确保系统时区设置正确