dongasai hace 6 meses
padre
commit
911ed50240

+ 7 - 1
AiWork/记忆习惯.md

@@ -118,7 +118,13 @@
 
 ## 项目相关运行和访问
 - 项目已经使用Docker运行,访问地址:http://kku_laravel.local.gd
-- 用户偏好在game模块创建清理命令,能够安全地清理用户数据、日志等信息,包含完整的安全机制和确认流程
+- 用户偏好创建专门的Cleanup模块来实现数据清理功能,而不是在game模块中创建清理命令
+- Cleanup模块设计为独立的数据清理系统,提供后台管理界面配置每个表的清理条件,支持测试数据清理
+- Cleanup模块包含完整的安全机制:多重确认、预览模式、权限控制、操作审计、分批处理等
+- Cleanup模块支持完全自由的表选择,不局限于模块边界,可以自由配置清理任意表
+- 支持5种表选择方式:自定义、模块、分类、全量、混合选择,提供最大的灵活性
+- 每个表都可以制定不同的清理方式:清空表、删除所有、按时间删除、按用户删除、按条件删除
+- 支持表级别的独立配置:清理类型、条件、优先级、备份设置、说明备注等
 - 用户已创建ThirdParty模块,专门处理接入第三方服务的需求,与OpenAPI模块互补(OpenAPI提供API给别人,ThirdParty使用别人的API)
 - 系统包含35个模块,Promotionurs模块已被移除,创建了新的UrsPromotion模块来替代
 - UrsPromotion模块是专门为URS业务场景设计的推广系统,与Promotion模块完全独立

+ 9 - 0
app/Module/Cleanup/Docs/A.md

@@ -0,0 +1,9 @@
+# 
+
+
+几个概念
+
+1. 清理计划,比如 "农场模块清理"
+2. 计划内容,"农场模块清理",具体处理那些表,怎么清理
+3. 清理任务,执行的xx计划的,具体的进度,备份内容,日志
+4. 备份,xx计划的备份方案,xx计划的备份内容,可单独备份,在清理任务执行开始前备份

+ 248 - 0
app/Module/Cleanup/Docs/功能需求.md

@@ -0,0 +1,248 @@
+# Cleanup 模块功能需求
+
+## 1. 需求概述
+
+### 1.1 业务背景
+在开发和测试过程中,系统会产生大量的测试数据和运行数据。这些数据需要定期清理以:
+- 保持测试环境的干净状态
+- 减少数据库存储压力
+- 提高系统性能
+- 便于重复测试
+
+### 1.2 核心需求
+- 提供灵活的数据清理配置功能
+- 支持多种清理策略和条件
+- 确保清理过程的安全性和可控性
+- 提供完整的清理日志和统计信息
+
+## 2. 功能模块
+
+### 2.1 配置管理模块
+
+#### 2.1.1 表扫描功能
+**功能描述**:自动扫描系统中的所有数据表,识别表结构和数据特征。
+
+**具体需求**:
+- 扫描所有以`kku_`开头的数据表
+- 自动识别表的模块归属(根据表名前缀)
+- 分析表的数据特征(记录数、大小、时间字段等)
+- 自动分类表的数据类型(用户数据、日志数据、配置数据等)
+- 生成默认的清理配置建议
+
+**输入**:无
+**输出**:表扫描结果和配置建议
+
+#### 2.1.2 清理配置管理
+**功能描述**:为每个数据表配置具体的清理规则和条件。
+
+**具体需求**:
+- 支持配置清理类型(清空、按时间删除、按条件删除等)
+- 支持配置清理条件(时间范围、用户范围、状态条件等)
+- 支持设置清理优先级和批处理大小
+- 支持启用/禁用特定表的清理
+- 提供配置模板和快速配置功能
+
+**输入**:表名、清理规则、条件参数
+**输出**:配置保存结果
+
+#### 2.1.3 配置验证功能
+**功能描述**:验证清理配置的正确性和安全性。
+
+**具体需求**:
+- 验证SQL条件的语法正确性
+- 检查时间字段的存在性
+- 验证用户字段的有效性
+- 检查配置的逻辑一致性
+- 提供配置风险评估
+
+**输入**:清理配置
+**输出**:验证结果和风险评估
+
+### 2.2 清理执行模块
+
+#### 2.2.1 预览功能
+**功能描述**:在实际清理前预览将要清理的数据统计。
+
+**具体需求**:
+- 统计每个表将要删除的记录数
+- 计算清理后释放的存储空间
+- 显示清理的影响范围
+- 提供清理时间估算
+- 支持按模块、分类查看预览结果
+
+**输入**:清理任务配置
+**输出**:清理预览报告
+
+#### 2.2.2 清理执行功能
+**功能描述**:执行实际的数据清理操作。
+
+**具体需求**:
+- 支持多种清理策略(TRUNCATE、DELETE等)
+- 按优先级顺序执行清理
+- 支持分批处理大数据量表
+- 实时显示清理进度
+- 支持清理过程的暂停和恢复
+- 提供清理失败的回滚机制
+
+**输入**:清理任务
+**输出**:清理执行结果
+
+#### 2.2.3 安全控制功能
+**功能描述**:确保清理过程的安全性。
+
+**具体需求**:
+- 多重确认机制(特别是危险操作)
+- 权限验证(只有授权用户可以执行清理)
+- 操作审计(记录所有清理操作)
+- 备份提醒(清理前提醒用户备份重要数据)
+- 紧急停止功能
+
+**输入**:用户操作
+**输出**:安全验证结果
+
+### 2.3 任务管理模块
+
+#### 2.3.1 任务创建功能
+**功能描述**:创建和配置清理任务。
+
+**具体需求**:
+- 支持创建不同类型的清理任务
+- 支持选择目标模块和数据分类
+- 支持自定义清理条件
+- 支持任务模板和快速创建
+- 支持任务调度(立即执行或定时执行)
+
+**输入**:任务配置参数
+**输出**:任务创建结果
+
+#### 2.3.2 任务监控功能
+**功能描述**:监控清理任务的执行状态和进度。
+
+**具体需求**:
+- 实时显示任务执行进度
+- 显示当前处理的表和记录数
+- 显示执行时间和剩余时间估算
+- 支持任务状态变更通知
+- 提供任务执行的详细日志
+
+**输入**:任务ID
+**输出**:任务状态和进度信息
+
+#### 2.3.3 任务历史功能
+**功能描述**:管理和查看历史清理任务。
+
+**具体需求**:
+- 查看历史任务列表
+- 查看任务执行详情
+- 支持按时间、状态、创建者筛选
+- 支持任务结果的导出
+- 提供任务执行统计分析
+
+**输入**:查询条件
+**输出**:任务历史记录
+
+### 2.4 日志管理模块
+
+#### 2.4.1 操作日志功能
+**功能描述**:记录所有清理操作的详细日志。
+
+**具体需求**:
+- 记录每个表的清理操作详情
+- 记录操作前后的数据统计
+- 记录执行的SQL语句
+- 记录操作耗时和性能指标
+- 支持日志的查询和筛选
+
+**输入**:清理操作
+**输出**:操作日志记录
+
+#### 2.4.2 统计报告功能
+**功能描述**:生成清理操作的统计报告。
+
+**具体需求**:
+- 生成清理效果统计报告
+- 显示存储空间释放情况
+- 显示清理性能指标
+- 支持按时间段统计
+- 支持报告导出和分享
+
+**输入**:统计时间范围
+**输出**:统计报告
+
+### 2.5 后台管理模块
+
+#### 2.5.1 配置管理界面
+**功能描述**:提供友好的配置管理界面。
+
+**具体需求**:
+- 表格形式显示所有表的配置
+- 支持批量编辑和操作
+- 提供配置导入导出功能
+- 支持配置的复制和模板化
+- 提供配置验证和预览功能
+
+#### 2.5.2 任务管理界面
+**功能描述**:提供任务创建和管理界面。
+
+**具体需求**:
+- 向导式任务创建流程
+- 任务列表和状态监控
+- 任务详情查看和操作
+- 支持任务的暂停、恢复、取消
+- 提供任务执行的实时监控
+
+#### 2.5.3 日志查看界面
+**功能描述**:提供日志查看和分析界面。
+
+**具体需求**:
+- 分页显示清理日志
+- 支持多维度筛选和搜索
+- 提供日志详情查看
+- 支持日志的导出和下载
+- 提供可视化的统计图表
+
+## 3. 非功能需求
+
+### 3.1 性能需求
+- 支持处理百万级记录的大表清理
+- 清理操作不应显著影响系统正常运行
+- 分批处理机制确保内存使用可控
+- 清理进度更新频率不超过每秒一次
+
+### 3.2 安全需求
+- 所有清理操作必须经过权限验证
+- 敏感操作需要多重确认
+- 完整的操作审计日志
+- 支持操作的撤销和恢复
+
+### 3.3 可用性需求
+- 界面操作简单直观
+- 提供详细的操作指导
+- 支持批量操作提高效率
+- 提供操作结果的及时反馈
+
+### 3.4 可维护性需求
+- 模块化设计便于扩展
+- 清晰的代码结构和文档
+- 支持新清理规则的快速添加
+- 提供完整的错误处理机制
+
+## 4. 约束条件
+
+### 4.1 技术约束
+- 必须兼容现有的数据库结构
+- 不能破坏数据表之间的关联关系
+- 必须支持事务回滚机制
+- 清理操作必须是幂等的
+
+### 4.2 业务约束
+- 配置数据表默认不允许清理
+- 用户核心数据需要特殊保护
+- 清理操作必须有明确的业务授权
+- 必须保留必要的审计信息
+
+### 4.3 运维约束
+- 清理操作应在业务低峰期执行
+- 大规模清理前必须进行数据备份
+- 清理过程必须可监控和可中断
+- 必须提供清理效果的验证机制

+ 280 - 0
app/Module/Cleanup/Docs/备份功能总结.md

@@ -0,0 +1,280 @@
+# Cleanup 模块备份功能总结
+
+## 1. 备份功能概述
+
+为了确保数据清理的安全性,Cleanup 模块集成了完整的数据备份功能。该功能不是简单的"备份提醒",而是一个完整的自动备份和恢复系统。
+
+### 1.1 核心特性
+- **自动备份**:清理前自动备份将要删除的数据
+- **多种格式**:支持SQL、JSON、CSV三种备份格式
+- **智能压缩**:自动压缩备份文件,节省存储空间
+- **完整性验证**:MD5哈希验证确保备份文件完整性
+- **快速恢复**:支持一键恢复备份数据
+- **生命周期管理**:自动清理过期备份文件
+
+## 2. 备份实现方案
+
+### 2.1 备份策略
+```
+清理执行流程:
+1. 分析清理任务 → 确定需要备份的数据
+2. 创建备份计划 → 生成备份任务列表
+3. 执行数据备份 → 按表分别备份数据
+4. 压缩备份文件 → 减少存储空间占用
+5. 验证备份完整性 → 确保备份文件可用
+6. 记录备份信息 → 保存备份元数据
+7. 执行清理操作 → 在备份完成后执行清理
+```
+
+### 2.2 备份格式
+
+#### SQL备份
+- **优点**:包含完整的表结构和数据,恢复最可靠
+- **适用场景**:重要数据的完整备份
+- **文件示例**:
+```sql
+-- 备份文件: kku_farm_users
+-- 创建时间: 2024-12-16 14:30:22
+
+CREATE TABLE `kku_farm_users` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+  `user_id` bigint(20) NOT NULL,
+  -- ... 表结构
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+INSERT INTO `kku_farm_users` (`id`, `user_id`, `house_level`, `created_at`) VALUES
+(1, 1001, 5, '2024-01-01 10:00:00'),
+(2, 1002, 3, '2024-01-02 11:00:00');
+```
+
+#### JSON备份
+- **优点**:结构化数据,易于解析和处理
+- **适用场景**:需要程序化处理的数据备份
+- **文件示例**:
+```json
+{
+  "table_name": "kku_farm_users",
+  "backup_time": "2024-12-16 14:30:22",
+  "conditions": {"time_field": "created_at", "before": "2024-01-01"},
+  "records": [
+    {"id": 1, "user_id": 1001, "house_level": 5},
+    {"id": 2, "user_id": 1002, "house_level": 3}
+  ]
+}
+```
+
+#### CSV备份
+- **优点**:文件小,处理速度快
+- **适用场景**:大数据量的快速备份
+- **文件示例**:
+```csv
+id,user_id,house_level,created_at
+1,1001,5,"2024-01-01 10:00:00"
+2,1002,3,"2024-01-02 11:00:00"
+```
+
+### 2.3 压缩机制
+
+#### Gzip压缩
+```php
+// 压缩率:通常可达到70-80%的压缩率
+// 兼容性:广泛支持,Linux系统原生支持
+// 示例:farm_users_143022_abc123.sql.gz
+```
+
+#### Zip压缩
+```php
+// 压缩率:略低于gzip,但支持多文件打包
+// 兼容性:Windows和Linux都支持
+// 示例:backup_143022_abc123.zip
+```
+
+## 3. 数据库设计
+
+### 3.1 备份记录表
+```sql
+-- 存储备份的基本信息
+kku_cleanup_backups
+├── backup_name     # 备份名称
+├── backup_type     # 备份格式(SQL/JSON/CSV)
+├── compression_type # 压缩类型(gzip/zip/none)
+├── backup_path     # 备份文件路径
+├── backup_size     # 压缩后文件大小
+├── original_size   # 原始数据大小
+├── backup_hash     # 文件MD5哈希
+└── expires_at      # 备份过期时间
+```
+
+### 3.2 备份文件表
+```sql
+-- 存储每个表的备份文件详情
+kku_cleanup_backup_files
+├── backup_id       # 关联备份记录
+├── table_name      # 表名
+├── file_path       # 文件路径
+├── records_count   # 备份记录数
+├── file_hash       # 文件哈希
+└── backup_conditions # 备份条件
+```
+
+## 4. 使用示例
+
+### 4.1 自动备份(推荐)
+```bash
+# 执行清理任务时自动创建备份
+php artisan cleanup:execute 1
+
+# 系统会自动:
+# 1. 分析要清理的数据
+# 2. 创建备份文件
+# 3. 验证备份完整性
+# 4. 执行清理操作
+```
+
+### 4.2 手动备份
+```bash
+# 为特定任务创建备份
+php artisan cleanup:backup 1 --type=sql --compression=gzip
+
+# 验证备份完整性
+php artisan cleanup:verify-backup 123
+
+# 恢复备份数据
+php artisan cleanup:restore 123 --force
+```
+
+### 4.3 后台管理
+```php
+// 访问备份管理页面
+/admin/cleanup/backups
+
+// 功能包括:
+// - 查看备份列表
+// - 下载备份文件
+// - 验证备份完整性
+// - 恢复备份数据
+// - 删除过期备份
+```
+
+## 5. 安全保障
+
+### 5.1 数据完整性
+- **MD5哈希验证**:每个备份文件都有MD5哈希值
+- **分批备份**:大表采用分批备份,避免内存溢出
+- **事务保护**:备份过程使用数据库事务保护
+- **错误恢复**:备份失败时自动清理临时文件
+
+### 5.2 存储安全
+- **路径隔离**:备份文件存储在专门的目录中
+- **权限控制**:备份文件设置适当的文件权限
+- **定期清理**:自动清理过期的备份文件
+- **空间监控**:监控备份存储空间使用情况
+
+### 5.3 操作安全
+- **权限验证**:只有授权用户可以操作备份
+- **操作审计**:记录所有备份操作的详细日志
+- **确认机制**:重要操作需要用户确认
+- **回滚支持**:支持备份操作的回滚
+
+## 6. 性能优化
+
+### 6.1 备份性能
+- **分批处理**:大表分批备份,避免长时间锁表
+- **并行备份**:多个表可以并行备份
+- **压缩优化**:选择合适的压缩算法和级别
+- **I/O优化**:优化文件读写操作
+
+### 6.2 存储优化
+- **增量备份**:只备份变更的数据(未来版本)
+- **重复数据删除**:识别和删除重复的备份文件
+- **分层存储**:新备份存储在快速存储,旧备份迁移到慢速存储
+- **压缩率优化**:根据数据特征选择最佳压缩方式
+
+## 7. 监控和维护
+
+### 7.1 备份监控
+```php
+// 备份状态监控
+- 备份成功率统计
+- 备份文件大小趋势
+- 备份时间性能分析
+- 存储空间使用监控
+```
+
+### 7.2 自动维护
+```bash
+# 定期清理过期备份
+php artisan cleanup:clean-backups --days=30
+
+# 验证备份文件完整性
+php artisan cleanup:verify-backup --all
+
+# 备份存储空间报告
+php artisan cleanup:backup-report
+```
+
+## 8. 配置选项
+
+### 8.1 备份配置
+```php
+// config/cleanup.php
+'backup' => [
+    'default_type' => 'sql',        // 默认备份格式
+    'compression' => 'gzip',        // 默认压缩方式
+    'retention_days' => 30,         // 备份保留天数
+    'batch_size' => 1000,          // 分批处理大小
+    'max_file_size' => 500,        // 最大文件大小(MB)
+    'storage_path' => 'cleanup/backups', // 存储路径
+    'auto_cleanup' => true,         // 自动清理过期备份
+]
+```
+
+### 8.2 性能配置
+```php
+'performance' => [
+    'parallel_backups' => 3,        // 并行备份数量
+    'compression_level' => 6,       // 压缩级别(1-9)
+    'memory_limit' => '512M',       // 内存限制
+    'timeout' => 3600,             // 超时时间(秒)
+]
+```
+
+## 9. 与清理流程的集成
+
+### 9.1 集成流程
+```
+清理任务执行流程:
+1. 任务创建 → 分析清理范围
+2. 备份计划 → 确定备份策略
+3. 数据备份 → 执行备份操作
+4. 备份验证 → 验证备份完整性
+5. 清理执行 → 执行数据清理
+6. 结果记录 → 记录清理和备份结果
+```
+
+### 9.2 失败处理
+```
+备份失败处理:
+- 备份失败 → 停止清理操作
+- 清理失败 → 保留备份文件
+- 验证失败 → 重新创建备份
+- 恢复失败 → 记录错误日志
+```
+
+## 10. 总结
+
+Cleanup 模块的备份功能提供了完整的数据保护机制:
+
+### 10.1 核心价值
+- **安全保障**:确保清理操作的数据安全
+- **快速恢复**:支持误操作后的快速数据恢复
+- **自动化**:无需人工干预的自动备份流程
+- **可靠性**:多重验证确保备份文件可用
+
+### 10.2 技术优势
+- **多格式支持**:适应不同场景的备份需求
+- **智能压缩**:节省存储空间和传输时间
+- **完整性保证**:哈希验证确保数据完整性
+- **生命周期管理**:自动化的备份文件管理
+
+这个备份系统不仅满足了数据安全的基本需求,还提供了专业级的备份管理功能,确保Cleanup模块在提供强大清理能力的同时,也能保证数据的绝对安全。

+ 331 - 0
app/Module/Cleanup/Docs/开发计划.md

@@ -0,0 +1,331 @@
+# Cleanup 模块开发计划
+
+## 1. 项目概述
+
+### 1.1 项目目标
+开发一个专门的数据清理模块,提供灵活的数据清理配置和执行功能,主要用于测试环境的数据清理,支持清除所有模块的运行数据,同时保留配置数据。
+
+### 1.2 项目范围
+- 创建完整的Cleanup模块架构
+- 实现数据表扫描和分类功能
+- 开发清理配置管理系统
+- 实现清理任务执行引擎
+- 提供后台管理界面
+- 开发命令行工具
+- 完善日志和监控功能
+
+### 1.3 技术要求
+- 遵循项目现有的模块化架构
+- 使用Laravel框架和Dcat Admin
+- 支持大数据量的高效处理
+- 确保数据安全和操作可控性
+
+## 2. 开发阶段规划
+
+### 阶段一:基础架构搭建 (1-2天)
+
+#### 2.1 模块结构创建
+- [x] 创建模块目录结构
+- [x] 创建基础文档(设计概述、数据库设计、功能需求、接口设计)
+- [ ] 创建服务提供者
+- [ ] 配置模块自动加载
+
+**交付物**:
+- 完整的模块目录结构
+- 核心设计文档
+- 服务提供者配置
+
+#### 2.2 数据库设计实现
+- [ ] 创建数据库表结构SQL
+- [ ] 创建数据模型类
+- [ ] 定义枚举类型
+- [ ] 创建数据迁移脚本
+
+**交付物**:
+- 数据库表创建SQL
+- 模型类文件
+- 枚举定义文件
+
+#### 2.3 基础服务类
+- [ ] 创建基础Logic类
+- [ ] 创建基础Service类
+- [ ] 创建DTO类
+- [ ] 创建基础验证类
+
+**交付物**:
+- 核心业务逻辑类
+- 对外服务接口类
+- 数据传输对象
+
+### 阶段二:核心功能实现 (3-4天)
+
+#### 2.4 表扫描功能
+- [ ] 实现TableScannerLogic
+- [ ] 自动识别表的模块归属
+- [ ] 分析表的数据特征
+- [ ] 生成默认清理配置
+
+**功能要点**:
+- 扫描所有kku_开头的表
+- 识别表的时间字段和用户字段
+- 根据表名前缀确定模块归属
+- 根据表特征确定数据分类
+
+#### 2.5 配置管理功能
+- [ ] 实现CleanupConfigLogic
+- [ ] 配置的CRUD操作
+- [ ] 配置验证和风险评估
+- [ ] 批量配置更新
+
+**功能要点**:
+- 支持多种清理类型配置
+- 复杂条件的JSON配置
+- 配置的安全性验证
+- 配置模板功能
+
+#### 2.6 清理执行引擎
+- [ ] 实现CleanupExecutorLogic
+- [ ] 支持多种清理策略
+- [ ] 分批处理机制
+- [ ] 进度跟踪和状态管理
+
+**功能要点**:
+- TRUNCATE、DELETE等清理策略
+- 大数据量的分批处理
+- 实时进度更新
+- 错误处理和恢复
+
+### 阶段三:任务管理系统 (2-3天)
+
+#### 2.7 任务创建和管理
+- [ ] 实现任务创建逻辑
+- [ ] 任务状态管理
+- [ ] 任务调度功能
+- [ ] 任务历史记录
+
+**功能要点**:
+- 多种任务类型支持
+- 任务的暂停、恢复、取消
+- 任务执行的优先级控制
+- 完整的任务生命周期管理
+
+#### 2.8 预览和执行功能
+- [ ] 清理结果预览
+- [ ] 安全确认机制
+- [ ] 实际清理执行
+- [ ] 执行结果统计
+
+**功能要点**:
+- 详细的预览报告
+- 多重确认机制
+- 实时执行监控
+- 完整的执行日志
+
+### 阶段四:后台管理界面 (2-3天)
+
+#### 2.9 配置管理界面
+- [ ] 创建CleanupConfigController
+- [ ] 配置列表和编辑页面
+- [ ] 批量操作功能
+- [ ] 表扫描操作界面
+
+**界面要点**:
+- 友好的配置编辑界面
+- 支持批量选择和操作
+- 配置的导入导出功能
+- 实时的配置验证
+
+#### 2.10 任务管理界面
+- [ ] 创建CleanupTaskController
+- [ ] 任务创建向导
+- [ ] 任务监控界面
+- [ ] 任务历史查看
+
+**界面要点**:
+- 向导式任务创建流程
+- 实时的任务状态监控
+- 详细的任务执行日志
+- 任务结果的可视化展示
+
+#### 2.11 日志和统计界面
+- [ ] 创建CleanupLogController
+- [ ] 日志查看和筛选
+- [ ] 统计报告生成
+- [ ] 数据可视化图表
+
+**界面要点**:
+- 多维度的日志筛选
+- 清理效果统计分析
+- 性能指标监控
+- 报告导出功能
+
+### 阶段五:命令行工具 (1-2天)
+
+#### 2.12 清理命令开发
+- [ ] 创建CleanupDataCommand
+- [ ] 表扫描命令
+- [ ] 任务管理命令
+- [ ] 日志清理命令
+
+**命令功能**:
+- 支持多种清理模式
+- 丰富的命令行参数
+- 详细的执行反馈
+- 与后台管理的一致性
+
+#### 2.13 命令行工具完善
+- [ ] 命令帮助文档
+- [ ] 参数验证和错误处理
+- [ ] 进度显示和状态反馈
+- [ ] 与后台数据同步
+
+### 阶段六:测试和优化 (2-3天)
+
+#### 2.14 功能测试
+- [ ] 单元测试编写
+- [ ] 集成测试
+- [ ] 性能测试
+- [ ] 安全测试
+
+**测试重点**:
+- 各种清理场景的测试
+- 大数据量的性能测试
+- 异常情况的处理测试
+- 权限和安全机制测试
+
+#### 2.15 性能优化
+- [ ] SQL查询优化
+- [ ] 分批处理优化
+- [ ] 内存使用优化
+- [ ] 并发处理优化
+
+#### 2.16 文档完善
+- [ ] API文档完善
+- [ ] 用户使用手册
+- [ ] 故障排除指南
+- [ ] 最佳实践文档
+
+## 3. 开发里程碑
+
+### 里程碑1:基础架构完成 (第2天)
+- 模块结构创建完成
+- 数据库设计实现
+- 基础服务类创建
+
+### 里程碑2:核心功能完成 (第6天)
+- 表扫描功能实现
+- 配置管理功能完成
+- 清理执行引擎完成
+
+### 里程碑3:任务管理完成 (第9天)
+- 任务创建和管理功能
+- 预览和执行功能完成
+
+### 里程碑4:后台界面完成 (第12天)
+- 所有后台管理界面完成
+- 用户交互功能完善
+
+### 里程碑5:命令行工具完成 (第14天)
+- 所有命令行工具完成
+- 与后台功能保持一致
+
+### 里程碑6:项目交付 (第17天)
+- 所有功能测试完成
+- 性能优化完成
+- 文档完善
+
+## 4. 风险评估和应对
+
+### 4.1 技术风险
+
+#### 风险1:大数据量处理性能问题
+**风险等级**:中等
+**应对措施**:
+- 采用分批处理策略
+- 优化SQL查询语句
+- 实现进度监控和中断恢复
+
+#### 风险2:数据安全风险
+**风险等级**:高
+**应对措施**:
+- 实现多重确认机制
+- 完善权限控制
+- 提供预览功能
+- 建议备份机制
+
+#### 风险3:系统兼容性问题
+**风险等级**:低
+**应对措施**:
+- 遵循现有架构规范
+- 充分测试各种环境
+- 保持向后兼容性
+
+### 4.2 进度风险
+
+#### 风险1:开发时间超期
+**风险等级**:中等
+**应对措施**:
+- 合理分解任务
+- 及时调整优先级
+- 必要时简化非核心功能
+
+#### 风险2:需求变更
+**风险等级**:中等
+**应对措施**:
+- 保持架构的灵活性
+- 及时沟通需求变化
+- 预留扩展接口
+
+## 5. 质量保证
+
+### 5.1 代码质量
+- 遵循PSR-4命名规范
+- 使用类型声明和注释
+- 保持代码的可读性和可维护性
+- 进行代码审查
+
+### 5.2 测试覆盖
+- 核心功能100%测试覆盖
+- 边界条件和异常情况测试
+- 性能和压力测试
+- 用户体验测试
+
+### 5.3 文档质量
+- 完整的技术文档
+- 详细的用户手册
+- 清晰的API文档
+- 及时的文档更新
+
+## 6. 交付标准
+
+### 6.1 功能完整性
+- 所有规划功能实现完成
+- 通过功能测试验收
+- 满足性能要求
+- 符合安全标准
+
+### 6.2 代码质量
+- 代码规范检查通过
+- 无严重bug和安全漏洞
+- 测试覆盖率达标
+- 代码审查通过
+
+### 6.3 文档完整性
+- 技术文档完整
+- 用户文档清晰
+- API文档准确
+- 部署文档详细
+
+## 7. 后续维护
+
+### 7.1 版本迭代
+- 根据用户反馈优化功能
+- 添加新的清理策略
+- 性能持续优化
+- 安全机制增强
+
+### 7.2 技术支持
+- 提供使用培训
+- 及时响应问题反馈
+- 定期维护和更新
+- 监控系统运行状态

+ 974 - 0
app/Module/Cleanup/Docs/接口设计.md

@@ -0,0 +1,974 @@
+# Cleanup 模块接口设计
+
+## 1. 接口概述
+
+Cleanup 模块提供以下几类接口:
+- **配置管理接口**:管理清理配置
+- **任务管理接口**:创建和管理清理任务
+- **执行控制接口**:控制清理执行过程
+- **统计查询接口**:查询统计信息和日志
+
+## 2. 服务层接口 (Services)
+
+### 2.1 CleanupService
+
+#### 2.1.1 扫描数据表
+```php
+/**
+ * 扫描系统中的所有数据表
+ *
+ * @param bool $forceRefresh 是否强制刷新
+ * @return array 扫描结果
+ */
+public static function scanTables(bool $forceRefresh = false): array
+```
+
+#### 2.1.2 创建清理计划
+```php
+/**
+ * 创建清理计划
+ *
+ * @param array $planData 计划数据
+ * @return array 创建结果
+ */
+public static function createCleanupPlan(array $planData): array
+```
+
+**输入参数**:
+```php
+[
+    'plan_name' => '自定义数据清理',
+    'plan_type' => 4, // 自定义清理
+    'target_selection' => [
+        'selection_type' => 'custom',
+        'tables' => [
+            'kku_farm_users',
+            'kku_item_users',
+            'kku_pet_users',
+            'kku_farm_logs'
+        ]
+    ],
+    'global_conditions' => [
+        'exclude_config_tables' => true,
+        'time_limit' => '30_days_ago'
+    ],
+    'backup_config' => [
+        'backup_type' => 'sql',
+        'compression' => 'gzip'
+    ],
+    'description' => '清理指定表的测试数据'
+]
+```
+
+**其他选择方式示例**:
+```php
+// 按模块选择
+'target_selection' => [
+    'selection_type' => 'module',
+    'modules' => ['Farm', 'GameItems'],
+    'exclude_tables' => ['kku_farm_configs']
+]
+
+// 按分类选择
+'target_selection' => [
+    'selection_type' => 'category',
+    'categories' => [1, 2], // 用户数据和日志数据
+    'exclude_tables' => ['kku_user_configs']
+]
+
+// 混合选择
+'target_selection' => [
+    'selection_type' => 'mixed',
+    'modules' => ['Farm'],
+    'categories' => [2],
+    'tables' => ['kku_pet_users'],
+    'exclude_tables' => ['kku_farm_configs']
+]
+```
+
+#### 2.1.3 生成计划内容
+```php
+/**
+ * 为计划生成内容配置
+ *
+ * @param int $planId 计划ID
+ * @param bool $autoGenerate 是否自动生成
+ * @return array 生成结果
+ */
+public static function generatePlanContents(int $planId, bool $autoGenerate = true): array
+```
+
+**返回数据结构**:
+```php
+[
+    'total_tables' => 188,
+    'scanned_tables' => 185,
+    'new_tables' => 3,
+    'tables' => [
+        [
+            'table_name' => 'kku_farm_users',
+            'module_name' => 'Farm',
+            'data_category' => 1, // 用户数据
+            'record_count' => 1250,
+            'table_size_mb' => 2.5,
+            'has_time_field' => true,
+            'time_fields' => ['created_at', 'updated_at'],
+            'has_user_field' => true,
+            'user_fields' => ['user_id']
+        ]
+    ]
+]
+```
+
+#### 2.1.4 创建清理任务
+```php
+/**
+ * 基于计划创建清理任务
+ *
+ * @param int $planId 计划ID
+ * @param array $taskOptions 任务选项
+ * @return array 创建结果
+ */
+public static function createCleanupTask(int $planId, array $taskOptions = []): array
+```
+
+**输入参数**:
+```php
+[
+    'task_name' => '农场模块清理_20241216_001', // 可选,默认自动生成
+    'execute_immediately' => false,
+    'backup_before_cleanup' => true,
+    'override_conditions' => [], // 可选,覆盖计划的条件
+]
+```
+
+#### 2.1.5 预览清理结果
+```php
+/**
+ * 预览计划的清理结果
+ *
+ * @param int $planId 计划ID
+ * @return array 预览结果
+ */
+public static function previewPlanCleanup(int $planId): array
+```
+
+**返回数据结构**:
+```php
+[
+    'total_tables' => 45,
+    'total_records' => 125000,
+    'estimated_size_mb' => 250.5,
+    'estimated_time_seconds' => 120,
+    'tables_preview' => [
+        [
+            'table_name' => 'kku_farm_users',
+            'current_records' => 1250,
+            'records_to_delete' => 1200,
+            'size_to_free_mb' => 2.4,
+            'cleanup_type' => 'DELETE',
+            'conditions' => 'WHERE created_at < "2024-01-01"'
+        ]
+    ]
+]
+```
+
+#### 2.1.6 执行清理任务
+```php
+/**
+ * 执行清理任务
+ *
+ * @param int $taskId 任务ID
+ * @param bool $dryRun 是否为预演模式
+ * @return array 执行结果
+ */
+public static function executeCleanupTask(int $taskId, bool $dryRun = false): array
+```
+
+#### 2.1.7 创建计划备份
+```php
+/**
+ * 为计划创建数据备份
+ *
+ * @param int $planId 计划ID
+ * @param array $backupOptions 备份选项
+ * @return array 备份结果
+ */
+public static function createPlanBackup(int $planId, array $backupOptions = []): array
+```
+
+**输入参数**:
+```php
+[
+    'backup_type' => 'sql', // sql, json, csv
+    'compression' => 'gzip', // gzip, zip, none
+    'include_structure' => true, // 是否包含表结构
+    'batch_size' => 1000 // 分批处理大小
+]
+```
+
+**返回数据结构**:
+```php
+[
+    'backup_id' => 123,
+    'backup_name' => 'cleanup_backup_20241216_143022',
+    'backup_path' => '/storage/app/cleanup/backups/2024/12/16/backup_143022_abc123.sql.gz',
+    'backup_size' => 2048576, // 字节
+    'tables_count' => 15,
+    'records_count' => 125000,
+    'status' => 'completed'
+]
+```
+
+#### 2.1.8 恢复数据备份
+```php
+/**
+ * 恢复数据备份
+ *
+ * @param int $backupId 备份ID
+ * @param array $restoreOptions 恢复选项
+ * @return array 恢复结果
+ */
+public static function restoreBackup(int $backupId, array $restoreOptions = []): array
+```
+
+### 2.2 PlanService
+
+#### 2.2.1 获取清理计划列表
+```php
+/**
+ * 获取清理计划列表
+ *
+ * @param array $filters 筛选条件
+ * @return array 计划列表
+ */
+public static function getCleanupPlans(array $filters = []): array
+```
+
+#### 2.2.2 获取计划详情
+```php
+/**
+ * 获取计划详情包含内容
+ *
+ * @param int $planId 计划ID
+ * @return array 计划详情
+ */
+public static function getPlanWithContents(int $planId): array
+```
+
+#### 2.2.3 更新计划内容
+```php
+/**
+ * 更新计划的内容配置
+ *
+ * @param int $planId 计划ID
+ * @param array $contents 内容配置
+ * @return bool 更新结果
+ */
+public static function updatePlanContents(int $planId, array $contents): bool
+```
+
+**内容配置示例**:
+```php
+[
+    [
+        'table_name' => 'kku_farm_users',
+        'cleanup_type' => 3, // 按时间删除
+        'conditions' => [
+            'time_field' => 'created_at',
+            'before' => '90_days_ago'
+        ],
+        'priority' => 100,
+        'backup_enabled' => true,
+        'notes' => '保留90天内的农场用户数据'
+    ],
+    [
+        'table_name' => 'kku_item_users',
+        'cleanup_type' => 4, // 按用户删除
+        'conditions' => [
+            'user_field' => 'user_id',
+            'user_condition' => 'in',
+            'user_values' => [1001, 1002, 1003]
+        ],
+        'priority' => 150,
+        'backup_enabled' => true,
+        'notes' => '清理指定测试用户的物品数据'
+    ],
+    [
+        'table_name' => 'kku_cache',
+        'cleanup_type' => 1, // 清空表
+        'conditions' => null,
+        'priority' => 400,
+        'backup_enabled' => false,
+        'notes' => '缓存表直接清空'
+    ]
+]
+```
+
+#### 2.2.4 配置单个表
+```php
+/**
+ * 配置单个表的清理方式
+ *
+ * @param int $planId 计划ID
+ * @param string $tableName 表名
+ * @param array $config 表配置
+ * @return bool 配置结果
+ */
+public static function configureTable(int $planId, string $tableName, array $config): bool
+```
+
+#### 2.2.5 批量配置表
+```php
+/**
+ * 批量配置多个表的清理方式
+ *
+ * @param int $planId 计划ID
+ * @param array $configTemplate 配置模板
+ * @param array $tableNames 表名列表
+ * @return array 配置结果
+ */
+public static function batchConfigureTables(int $planId, array $configTemplate, array $tableNames): array
+```
+
+### 2.3 ConfigService
+
+#### 2.3.1 获取清理配置
+```php
+/**
+ * 获取表的清理配置
+ *
+ * @param string|null $tableName 表名,为空则获取所有
+ * @return array 配置列表
+ */
+public static function getCleanupConfigs(?string $tableName = null): array
+```
+
+#### 2.3.2 更新清理配置
+```php
+/**
+ * 更新清理配置
+ *
+ * @param string $tableName 表名
+ * @param array $configData 配置数据
+ * @return bool 更新结果
+ */
+public static function updateCleanupConfig(string $tableName, array $configData): bool
+```
+
+#### 2.3.3 批量更新配置
+```php
+/**
+ * 批量更新清理配置
+ *
+ * @param array $configs 配置数组
+ * @return array 更新结果
+ */
+public static function batchUpdateConfigs(array $configs): array
+```
+
+### 2.4 BackupService
+
+#### 2.4.1 获取备份列表
+```php
+/**
+ * 获取备份列表
+ *
+ * @param array $filters 筛选条件
+ * @return array 备份列表
+ */
+public static function getBackupList(array $filters = []): array
+```
+
+#### 2.4.2 验证备份完整性
+```php
+/**
+ * 验证备份文件完整性
+ *
+ * @param int $backupId 备份ID
+ * @return bool 验证结果
+ */
+public static function verifyBackupIntegrity(int $backupId): bool
+```
+
+#### 2.4.3 清理过期备份
+```php
+/**
+ * 清理过期备份文件
+ *
+ * @param int $retentionDays 保留天数
+ * @return int 清理的备份数量
+ */
+public static function cleanExpiredBackups(int $retentionDays = 30): int
+```
+
+## 3. 后台管理接口 (AdminControllers)
+
+### 3.1 CleanupPlanController
+
+#### 3.1.1 计划列表页面
+```php
+/**
+ * GET /admin/cleanup/plans
+ * 显示清理计划列表
+ */
+public function index(Content $content): Content
+```
+
+#### 3.1.2 创建计划页面
+```php
+/**
+ * GET /admin/cleanup/plans/create
+ * 显示计划创建表单
+ */
+public function create(Content $content): Content
+```
+
+#### 3.1.3 计划详情页面
+```php
+/**
+ * GET /admin/cleanup/plans/{id}
+ * 显示计划详情和内容
+ */
+public function show($id, Content $content): Content
+```
+
+#### 3.1.4 编辑计划页面
+```php
+/**
+ * GET /admin/cleanup/plans/{id}/edit
+ * 显示计划编辑表单
+ */
+public function edit($id, Content $content): Content
+```
+
+#### 3.1.5 计划内容管理
+```php
+/**
+ * GET /admin/cleanup/plans/{id}/contents
+ * 显示计划内容配置页面
+ */
+public function contents($id, Content $content): Content
+```
+
+#### 3.1.6 更新计划内容
+```php
+/**
+ * PUT /admin/cleanup/plans/{id}/contents
+ * 更新计划内容配置
+ */
+public function updateContents($id, Request $request): JsonResponse
+```
+
+#### 3.1.7 预览计划清理结果
+```php
+/**
+ * POST /admin/cleanup/plans/{id}/preview
+ * 预览计划的清理结果
+ */
+public function preview($id): JsonResponse
+```
+
+#### 3.1.8 表配置管理
+```php
+/**
+ * GET /admin/cleanup/plans/{id}/tables/{table}/config
+ * 获取表的配置
+ */
+public function getTableConfig($id, $table): JsonResponse
+```
+
+```php
+/**
+ * PUT /admin/cleanup/plans/{id}/tables/{table}/config
+ * 更新表的配置
+ */
+public function updateTableConfig($id, $table, Request $request): JsonResponse
+```
+
+```php
+/**
+ * POST /admin/cleanup/plans/{id}/tables/batch-config
+ * 批量配置表
+ */
+public function batchConfigTables($id, Request $request): JsonResponse
+```
+
+#### 3.1.9 为计划创建备份
+```php
+/**
+ * POST /admin/cleanup/plans/{id}/backup
+ * 为计划创建备份
+ */
+public function createBackup($id, Request $request): JsonResponse
+```
+
+### 3.2 CleanupConfigController
+
+#### 3.2.1 配置列表页面
+```php
+/**
+ * GET /admin/cleanup/configs
+ * 显示清理配置列表
+ */
+public function index(Content $content): Content
+```
+
+#### 3.2.2 配置编辑页面
+```php
+/**
+ * GET /admin/cleanup/configs/{id}/edit
+ * 显示配置编辑表单
+ */
+public function edit($id, Content $content): Content
+```
+
+#### 3.2.3 批量操作
+```php
+/**
+ * POST /admin/cleanup/configs/batch
+ * 批量更新配置
+ */
+public function batch(Request $request): JsonResponse
+```
+
+#### 3.2.4 扫描表操作
+```php
+/**
+ * POST /admin/cleanup/configs/scan
+ * 扫描数据表并生成配置
+ */
+public function scanTables(Request $request): JsonResponse
+```
+
+### 3.3 CleanupTaskController
+
+#### 3.3.1 任务列表页面
+```php
+/**
+ * GET /admin/cleanup/tasks
+ * 显示清理任务列表
+ */
+public function index(Content $content): Content
+```
+
+#### 3.3.2 基于计划创建任务
+```php
+/**
+ * POST /admin/cleanup/plans/{planId}/tasks
+ * 基于计划创建清理任务
+ */
+public function createFromPlan($planId, Request $request): JsonResponse
+```
+
+#### 3.3.3 任务详情页面
+```php
+/**
+ * GET /admin/cleanup/tasks/{id}
+ * 显示任务详情
+ */
+public function show($id, Content $content): Content
+```
+
+#### 3.3.4 执行清理任务
+```php
+/**
+ * POST /admin/cleanup/tasks/{id}/execute
+ * 执行清理任务
+ */
+public function execute($id, Request $request): JsonResponse
+```
+
+#### 3.3.5 获取任务进度
+```php
+/**
+ * GET /admin/cleanup/tasks/{id}/progress
+ * 获取任务执行进度
+ */
+public function progress($id): JsonResponse
+```
+
+#### 3.3.6 停止任务执行
+```php
+/**
+ * POST /admin/cleanup/tasks/{id}/stop
+ * 停止任务执行
+ */
+public function stop($id): JsonResponse
+```
+
+### 3.4 CleanupLogController
+
+#### 3.4.1 日志列表页面
+```php
+/**
+ * GET /admin/cleanup/logs
+ * 显示清理日志列表
+ */
+public function index(Content $content): Content
+```
+
+#### 3.4.2 日志详情页面
+```php
+/**
+ * GET /admin/cleanup/logs/{id}
+ * 显示日志详情
+ */
+public function show($id, Content $content): Content
+```
+
+#### 3.4.3 统计报告页面
+```php
+/**
+ * GET /admin/cleanup/reports
+ * 显示统计报告
+ */
+public function reports(Content $content): Content
+```
+
+### 3.5 CleanupBackupController
+
+#### 3.5.1 备份列表页面
+```php
+/**
+ * GET /admin/cleanup/backups
+ * 显示备份列表
+ */
+public function index(Content $content): Content
+```
+
+#### 3.4.2 备份详情页面
+```php
+/**
+ * GET /admin/cleanup/backups/{id}
+ * 显示备份详情
+ */
+public function show($id, Content $content): Content
+```
+
+#### 3.4.3 创建备份
+```php
+/**
+ * POST /admin/cleanup/backups
+ * 创建数据备份
+ */
+public function store(Request $request): JsonResponse
+```
+
+#### 3.4.4 下载备份文件
+```php
+/**
+ * GET /admin/cleanup/backups/{id}/download
+ * 下载备份文件
+ */
+public function download($id): Response
+```
+
+#### 3.4.5 恢复备份
+```php
+/**
+ * POST /admin/cleanup/backups/{id}/restore
+ * 恢复备份数据
+ */
+public function restore($id, Request $request): JsonResponse
+```
+
+#### 3.4.6 验证备份
+```php
+/**
+ * POST /admin/cleanup/backups/{id}/verify
+ * 验证备份完整性
+ */
+public function verify($id): JsonResponse
+```
+
+#### 3.4.7 删除备份
+```php
+/**
+ * DELETE /admin/cleanup/backups/{id}
+ * 删除备份文件
+ */
+public function destroy($id): JsonResponse
+```
+
+## 4. 命令行接口 (Commands)
+
+### 4.1 CleanupDataCommand
+
+```bash
+# 扫描数据表
+php artisan cleanup:scan-tables [--force]
+
+# 创建清理计划
+php artisan cleanup:create-plan [plan_name] [--type=] [--modules=] [--categories=] [--tables=]
+
+# 查看计划详情
+php artisan cleanup:show-plan [plan_id]
+
+# 为计划生成内容
+php artisan cleanup:generate-contents [plan_id] [--auto]
+
+# 配置表的清理方式
+php artisan cleanup:config-table [plan_id] [table_name] [--type=] [--conditions=] [--priority=] [--backup]
+
+# 批量配置表
+php artisan cleanup:batch-config [plan_id] [--template=] [--tables=]
+
+# 基于计划创建任务
+php artisan cleanup:create-task [plan_id] [--name=] [--execute]
+
+# 执行清理任务
+php artisan cleanup:execute [task_id] [--dry-run] [--force]
+
+# 查看任务状态
+php artisan cleanup:task-status [task_id]
+
+# 为计划创建备份
+php artisan cleanup:backup-plan [plan_id] [--type=sql] [--compression=gzip]
+
+# 恢复数据备份
+php artisan cleanup:restore-backup [backup_id] [--force]
+
+# 验证备份完整性
+php artisan cleanup:verify-backup [backup_id]
+
+# 清理过期备份
+php artisan cleanup:clean-backups [--days=30]
+
+# 清理历史日志
+php artisan cleanup:clean-logs [--days=30]
+```
+
+### 4.2 命令参数说明
+
+#### 4.2.1 cleanup:scan-tables
+- `--force`: 强制重新扫描所有表
+
+#### 4.2.2 cleanup:create-plan
+- `--type`: 清理类型 (1:全量, 2:模块, 3:分类, 4:自定义)
+- `--modules`: 目标模块列表 (逗号分隔)
+- `--categories`: 目标分类列表 (逗号分隔)
+- `--tables`: 目标表列表 (逗号分隔)
+- `--exclude-tables`: 排除表列表 (逗号分隔)
+- `--exclude-modules`: 排除模块列表 (逗号分隔)
+
+#### 4.2.3 cleanup:config-table
+- `plan_id`: 计划ID
+- `table_name`: 表名
+- `--type`: 清理类型 (1:清空表, 2:删除所有, 3:按时间, 4:按用户, 5:按条件)
+- `--time-field`: 时间字段名(type=3时使用)
+- `--before`: 时间条件(type=3时使用)
+- `--user-field`: 用户字段名(type=4时使用)
+- `--users`: 用户ID列表(type=4时使用,逗号分隔)
+- `--conditions`: JSON格式的自定义条件(type=5时使用)
+- `--priority`: 优先级(数字)
+- `--backup`: 启用备份
+- `--no-backup`: 禁用备份
+
+#### 4.2.4 cleanup:batch-config
+- `plan_id`: 计划ID
+- `--template`: 配置模板JSON文件路径
+- `--tables`: 表名列表(逗号分隔)
+- `--type`: 批量设置的清理类型
+- `--backup`: 批量启用备份
+
+#### 4.2.5 cleanup:create-task
+- `plan_id`: 计划ID
+- `--name`: 任务名称(可选,默认自动生成)
+- `--execute`: 创建后立即执行
+
+#### 4.2.4 cleanup:execute
+- `task_id`: 任务ID
+- `--dry-run`: 预演模式,不实际执行
+- `--force`: 强制执行,跳过确认
+
+## 5. 数据传输对象 (DTOs)
+
+### 5.1 CleanupPlanDto
+```php
+class CleanupPlanDto extends BaseDto
+{
+    public int $id;
+    public string $planName;
+    public int $planType;
+    public ?array $targetSelection;
+    public ?array $globalConditions;
+    public ?array $backupConfig;
+    public bool $isTemplate;
+    public bool $isEnabled;
+    public ?string $description;
+    public ?int $createdBy;
+    public string $createdAt;
+    public string $updatedAt;
+}
+```
+
+### 5.2 CleanupPlanContentDto
+```php
+class CleanupPlanContentDto extends BaseDto
+{
+    public int $id;
+    public int $planId;
+    public string $tableName;
+    public int $cleanupType;
+    public ?array $conditions;
+    public int $priority;
+    public int $batchSize;
+    public bool $isEnabled;
+    public bool $backupEnabled;
+    public ?string $notes;
+    public string $createdAt;
+    public string $updatedAt;
+}
+```
+
+### 5.3 CleanupTaskDto
+```php
+class CleanupTaskDto extends BaseDto
+{
+    public int $id;
+    public string $taskName;
+    public int $planId;
+    public ?int $backupId;
+    public int $status;
+    public float $progress;
+    public ?string $currentStep;
+    public int $totalTables;
+    public int $processedTables;
+    public int $totalRecords;
+    public int $deletedRecords;
+    public int $backupSize;
+    public float $executionTime;
+    public float $backupTime;
+    public ?string $startedAt;
+    public ?string $backupCompletedAt;
+    public ?string $completedAt;
+    public ?string $errorMessage;
+    public ?int $createdBy;
+    public string $createdAt;
+    public string $updatedAt;
+}
+```
+
+### 5.4 CleanupConfigDto
+```php
+class CleanupConfigDto extends BaseDto
+{
+    public int $id;
+    public string $tableName;
+    public string $moduleName;
+    public int $dataCategory;
+    public int $defaultCleanupType;
+    public ?array $defaultConditions;
+    public bool $isEnabled;
+    public int $priority;
+    public int $batchSize;
+    public ?string $description;
+    public ?string $lastCleanupAt;
+    public string $createdAt;
+    public string $updatedAt;
+}
+```
+
+### 5.5 CleanupLogDto
+```php
+class CleanupLogDto extends BaseDto
+{
+    public int $id;
+    public int $taskId;
+    public string $tableName;
+    public string $operationType;
+    public int $recordsBefore;
+    public int $recordsAfter;
+    public int $recordsAffected;
+    public float $executionTime;
+    public ?array $conditionsUsed;
+    public ?string $sqlStatement;
+    public int $status;
+    public ?string $errorMessage;
+    public string $createdAt;
+}
+```
+
+### 5.6 CleanupBackupDto
+```php
+class CleanupBackupDto extends BaseDto
+{
+    public int $id;
+    public int $planId;
+    public ?int $taskId;
+    public string $backupName;
+    public int $backupType;
+    public int $compressionType;
+    public string $backupPath;
+    public int $backupSize;
+    public int $originalSize;
+    public int $tablesCount;
+    public int $recordsCount;
+    public int $backupStatus;
+    public ?string $backupHash;
+    public ?array $backupConfig;
+    public ?string $startedAt;
+    public ?string $completedAt;
+    public ?string $expiresAt;
+    public ?string $errorMessage;
+    public ?int $createdBy;
+    public string $createdAt;
+    public string $updatedAt;
+}
+```
+
+### 5.7 CleanupBackupFileDto
+```php
+class CleanupBackupFileDto extends BaseDto
+{
+    public int $id;
+    public int $backupId;
+    public string $tableName;
+    public string $filePath;
+    public int $fileSize;
+    public int $recordsCount;
+    public ?string $fileHash;
+    public ?array $backupConditions;
+    public string $createdAt;
+}
+```
+
+## 6. 错误码定义
+
+### 6.1 配置相关错误
+- `CLEANUP_CONFIG_NOT_FOUND` (10001): 清理配置不存在
+- `CLEANUP_CONFIG_INVALID` (10002): 清理配置无效
+- `CLEANUP_TABLE_NOT_EXISTS` (10003): 数据表不存在
+
+### 6.2 计划相关错误
+- `CLEANUP_PLAN_NOT_FOUND` (11001): 清理计划不存在
+- `CLEANUP_PLAN_NAME_EXISTS` (11002): 计划名称已存在
+- `CLEANUP_PLAN_INVALID` (11003): 计划配置无效
+- `CLEANUP_PLAN_CONTENT_EMPTY` (11004): 计划内容为空
+- `CLEANUP_PLAN_DISABLED` (11005): 计划已禁用
+
+### 6.3 任务相关错误
+- `CLEANUP_TASK_NOT_FOUND` (20001): 清理任务不存在
+- `CLEANUP_TASK_RUNNING` (20002): 任务正在执行中
+- `CLEANUP_TASK_FAILED` (20003): 任务执行失败
+- `CLEANUP_TASK_PLAN_MISMATCH` (20004): 任务与计划不匹配
+
+### 6.4 权限相关错误
+- `CLEANUP_PERMISSION_DENIED` (30001): 没有清理权限
+- `CLEANUP_DANGEROUS_OPERATION` (30002): 危险操作需要确认
+
+### 6.5 执行相关错误
+- `CLEANUP_EXECUTION_FAILED` (40001): 清理执行失败
+- `CLEANUP_SQL_ERROR` (40002): SQL执行错误
+- `CLEANUP_TIMEOUT` (40003): 清理超时
+- `CLEANUP_BACKUP_REQUIRED` (40004): 需要先创建备份
+
+### 6.6 备份相关错误
+- `BACKUP_CREATE_FAILED` (50001): 备份创建失败
+- `BACKUP_NOT_FOUND` (50002): 备份文件不存在
+- `BACKUP_CORRUPTED` (50003): 备份文件损坏
+- `BACKUP_RESTORE_FAILED` (50004): 备份恢复失败
+- `BACKUP_STORAGE_FULL` (50005): 备份存储空间不足
+- `BACKUP_PERMISSION_DENIED` (50006): 备份文件权限不足
+- `BACKUP_PLAN_MISMATCH` (50007): 备份与计划不匹配

+ 490 - 0
app/Module/Cleanup/Docs/数据备份设计.md

@@ -0,0 +1,490 @@
+# Cleanup 模块数据备份设计
+
+## 1. 备份策略概述
+
+### 1.1 备份原则
+- **安全第一**:清理前必须完成数据备份
+- **选择性备份**:只备份将要删除的数据,不是全量备份
+- **快速恢复**:支持快速的数据恢复操作
+- **空间优化**:采用压缩和增量备份减少存储空间
+
+### 1.2 备份类型
+- **SQL备份**:生成INSERT语句的SQL文件
+- **JSON备份**:将数据导出为JSON格式
+- **CSV备份**:将数据导出为CSV格式(适合大数据量)
+- **压缩备份**:自动压缩备份文件节省空间
+
+## 2. 备份架构设计
+
+### 2.1 备份组件架构
+```
+备份系统
+├── BackupLogic          # 备份核心逻辑
+├── BackupService        # 备份服务接口
+├── BackupExecutor       # 备份执行器
+├── BackupStorage        # 备份存储管理
+├── BackupCompressor     # 备份压缩器
+└── BackupRestorer       # 备份恢复器
+```
+
+### 2.2 备份流程
+```
+1. 分析清理任务 → 确定需要备份的数据
+2. 创建备份计划 → 生成备份任务列表
+3. 执行数据备份 → 按表分别备份数据
+4. 压缩备份文件 → 减少存储空间占用
+5. 验证备份完整性 → 确保备份文件可用
+6. 记录备份信息 → 保存备份元数据
+7. 执行清理操作 → 在备份完成后执行清理
+```
+
+## 3. 数据库设计扩展
+
+### 3.1 备份记录表 (cleanup_backups)
+
+```sql
+CREATE TABLE `kku_cleanup_backups` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `task_id` bigint(20) unsigned NOT NULL COMMENT '清理任务ID',
+  `backup_name` varchar(100) NOT NULL COMMENT '备份名称',
+  `backup_type` tinyint(3) unsigned NOT NULL COMMENT '备份类型:1SQL,2JSON,3CSV',
+  `compression_type` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '压缩类型:1gzip,2zip,3none',
+  `backup_path` varchar(500) NOT NULL COMMENT '备份文件路径',
+  `backup_size` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '备份文件大小(字节)',
+  `original_size` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '原始数据大小(字节)',
+  `tables_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '备份表数量',
+  `records_count` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '备份记录数量',
+  `backup_status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '备份状态:1进行中,2已完成,3已失败',
+  `backup_hash` varchar(64) DEFAULT NULL COMMENT '备份文件MD5哈希',
+  `started_at` timestamp NULL DEFAULT NULL COMMENT '备份开始时间',
+  `completed_at` timestamp NULL DEFAULT NULL COMMENT '备份完成时间',
+  `expires_at` timestamp NULL DEFAULT NULL COMMENT '备份过期时间',
+  `error_message` text COMMENT '错误信息',
+  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  PRIMARY KEY (`id`),
+  KEY `idx_task_id` (`task_id`),
+  KEY `idx_backup_status` (`backup_status`),
+  KEY `idx_expires_at` (`expires_at`),
+  KEY `idx_created_at` (`created_at`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='清理备份记录表';
+```
+
+### 3.2 备份文件表 (cleanup_backup_files)
+
+```sql
+CREATE TABLE `kku_cleanup_backup_files` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `backup_id` bigint(20) unsigned NOT NULL COMMENT '备份记录ID',
+  `table_name` varchar(100) NOT NULL COMMENT '表名',
+  `file_path` varchar(500) NOT NULL COMMENT '文件路径',
+  `file_size` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '文件大小(字节)',
+  `records_count` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '记录数量',
+  `file_hash` varchar(64) DEFAULT NULL COMMENT '文件MD5哈希',
+  `backup_conditions` json DEFAULT NULL COMMENT '备份条件',
+  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  PRIMARY KEY (`id`),
+  KEY `idx_backup_id` (`backup_id`),
+  KEY `idx_table_name` (`table_name`),
+  FOREIGN KEY (`backup_id`) REFERENCES `kku_cleanup_backups` (`id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='清理备份文件表';
+```
+
+## 4. 备份实现方案
+
+### 4.1 SQL备份实现
+
+#### 4.1.1 生成INSERT语句
+```php
+/**
+ * 生成表的SQL备份
+ *
+ * @param string $tableName 表名
+ * @param array $conditions 备份条件
+ * @return string SQL文件路径
+ */
+public function createSqlBackup(string $tableName, array $conditions = []): string
+{
+    $backupPath = $this->generateBackupPath($tableName, 'sql');
+    $whereClause = $this->buildWhereClause($conditions);
+    
+    // 获取表结构
+    $createTableSql = $this->getCreateTableSql($tableName);
+    
+    // 分批查询数据并生成INSERT语句
+    $batchSize = 1000;
+    $offset = 0;
+    
+    $file = fopen($backupPath, 'w');
+    fwrite($file, "-- 备份文件: {$tableName}\n");
+    fwrite($file, "-- 创建时间: " . date('Y-m-d H:i:s') . "\n\n");
+    fwrite($file, $createTableSql . "\n\n");
+    
+    do {
+        $records = DB::table($tableName)
+            ->whereRaw($whereClause)
+            ->offset($offset)
+            ->limit($batchSize)
+            ->get();
+            
+        if ($records->isNotEmpty()) {
+            $insertSql = $this->generateInsertSql($tableName, $records);
+            fwrite($file, $insertSql . "\n");
+        }
+        
+        $offset += $batchSize;
+    } while ($records->count() === $batchSize);
+    
+    fclose($file);
+    
+    return $backupPath;
+}
+```
+
+#### 4.1.2 INSERT语句生成
+```php
+/**
+ * 生成INSERT语句
+ */
+private function generateInsertSql(string $tableName, $records): string
+{
+    if ($records->isEmpty()) {
+        return '';
+    }
+    
+    $columns = array_keys((array)$records->first());
+    $columnList = '`' . implode('`, `', $columns) . '`';
+    
+    $values = [];
+    foreach ($records as $record) {
+        $recordArray = (array)$record;
+        $valueList = [];
+        foreach ($recordArray as $value) {
+            if (is_null($value)) {
+                $valueList[] = 'NULL';
+            } else {
+                $valueList[] = "'" . addslashes($value) . "'";
+            }
+        }
+        $values[] = '(' . implode(', ', $valueList) . ')';
+    }
+    
+    return "INSERT INTO `{$tableName}` ({$columnList}) VALUES\n" . 
+           implode(",\n", $values) . ';';
+}
+```
+
+### 4.2 JSON备份实现
+
+```php
+/**
+ * 创建JSON格式备份
+ */
+public function createJsonBackup(string $tableName, array $conditions = []): string
+{
+    $backupPath = $this->generateBackupPath($tableName, 'json');
+    $whereClause = $this->buildWhereClause($conditions);
+    
+    $metadata = [
+        'table_name' => $tableName,
+        'backup_time' => date('Y-m-d H:i:s'),
+        'conditions' => $conditions,
+        'records' => []
+    ];
+    
+    // 分批查询数据
+    $batchSize = 1000;
+    $offset = 0;
+    
+    do {
+        $records = DB::table($tableName)
+            ->whereRaw($whereClause)
+            ->offset($offset)
+            ->limit($batchSize)
+            ->get();
+            
+        foreach ($records as $record) {
+            $metadata['records'][] = (array)$record;
+        }
+        
+        $offset += $batchSize;
+    } while ($records->count() === $batchSize);
+    
+    file_put_contents($backupPath, json_encode($metadata, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
+    
+    return $backupPath;
+}
+```
+
+### 4.3 CSV备份实现
+
+```php
+/**
+ * 创建CSV格式备份
+ */
+public function createCsvBackup(string $tableName, array $conditions = []): string
+{
+    $backupPath = $this->generateBackupPath($tableName, 'csv');
+    $whereClause = $this->buildWhereClause($conditions);
+    
+    $file = fopen($backupPath, 'w');
+    
+    // 写入BOM以支持中文
+    fwrite($file, "\xEF\xBB\xBF");
+    
+    $headerWritten = false;
+    $batchSize = 1000;
+    $offset = 0;
+    
+    do {
+        $records = DB::table($tableName)
+            ->whereRaw($whereClause)
+            ->offset($offset)
+            ->limit($batchSize)
+            ->get();
+            
+        if ($records->isNotEmpty() && !$headerWritten) {
+            // 写入表头
+            $headers = array_keys((array)$records->first());
+            fputcsv($file, $headers);
+            $headerWritten = true;
+        }
+        
+        foreach ($records as $record) {
+            fputcsv($file, (array)$record);
+        }
+        
+        $offset += $batchSize;
+    } while ($records->count() === $batchSize);
+    
+    fclose($file);
+    
+    return $backupPath;
+}
+```
+
+## 5. 备份压缩和存储
+
+### 5.1 文件压缩
+```php
+/**
+ * 压缩备份文件
+ */
+public function compressBackupFile(string $filePath, string $compressionType = 'gzip'): string
+{
+    switch ($compressionType) {
+        case 'gzip':
+            return $this->gzipCompress($filePath);
+        case 'zip':
+            return $this->zipCompress($filePath);
+        default:
+            return $filePath; // 不压缩
+    }
+}
+
+/**
+ * Gzip压缩
+ */
+private function gzipCompress(string $filePath): string
+{
+    $compressedPath = $filePath . '.gz';
+    
+    $input = fopen($filePath, 'rb');
+    $output = gzopen($compressedPath, 'wb9');
+    
+    while (!feof($input)) {
+        gzwrite($output, fread($input, 8192));
+    }
+    
+    fclose($input);
+    gzclose($output);
+    
+    // 删除原文件
+    unlink($filePath);
+    
+    return $compressedPath;
+}
+```
+
+### 5.2 存储路径管理
+```php
+/**
+ * 生成备份文件路径
+ */
+private function generateBackupPath(string $tableName, string $format): string
+{
+    $date = date('Y/m/d');
+    $timestamp = date('His');
+    $random = substr(md5(uniqid()), 0, 8);
+    
+    $backupDir = storage_path("app/cleanup/backups/{$date}");
+    
+    if (!is_dir($backupDir)) {
+        mkdir($backupDir, 0755, true);
+    }
+    
+    return "{$backupDir}/{$tableName}_{$timestamp}_{$random}.{$format}";
+}
+```
+
+## 6. 备份恢复功能
+
+### 6.1 SQL备份恢复
+```php
+/**
+ * 从SQL备份恢复数据
+ */
+public function restoreFromSqlBackup(string $backupPath): bool
+{
+    try {
+        DB::beginTransaction();
+        
+        $sql = file_get_contents($backupPath);
+        
+        // 分割SQL语句并执行
+        $statements = $this->splitSqlStatements($sql);
+        
+        foreach ($statements as $statement) {
+            if (trim($statement)) {
+                DB::statement($statement);
+            }
+        }
+        
+        DB::commit();
+        return true;
+        
+    } catch (\Exception $e) {
+        DB::rollBack();
+        Log::error('备份恢复失败', [
+            'backup_path' => $backupPath,
+            'error' => $e->getMessage()
+        ]);
+        return false;
+    }
+}
+```
+
+### 6.2 JSON备份恢复
+```php
+/**
+ * 从JSON备份恢复数据
+ */
+public function restoreFromJsonBackup(string $backupPath): bool
+{
+    try {
+        $backupData = json_decode(file_get_contents($backupPath), true);
+        $tableName = $backupData['table_name'];
+        $records = $backupData['records'];
+        
+        DB::beginTransaction();
+        
+        // 分批插入数据
+        $chunks = array_chunk($records, 1000);
+        foreach ($chunks as $chunk) {
+            DB::table($tableName)->insert($chunk);
+        }
+        
+        DB::commit();
+        return true;
+        
+    } catch (\Exception $e) {
+        DB::rollBack();
+        return false;
+    }
+}
+```
+
+## 7. 备份管理功能
+
+### 7.1 备份清理策略
+```php
+/**
+ * 清理过期备份
+ */
+public function cleanExpiredBackups(): int
+{
+    $expiredBackups = CleanupBackup::where('expires_at', '<', now())
+        ->where('backup_status', 2) // 已完成的备份
+        ->get();
+    
+    $deletedCount = 0;
+    
+    foreach ($expiredBackups as $backup) {
+        try {
+            // 删除备份文件
+            if (file_exists($backup->backup_path)) {
+                unlink($backup->backup_path);
+            }
+            
+            // 删除相关的备份文件记录
+            CleanupBackupFile::where('backup_id', $backup->id)->delete();
+            
+            // 删除备份记录
+            $backup->delete();
+            
+            $deletedCount++;
+            
+        } catch (\Exception $e) {
+            Log::error('删除过期备份失败', [
+                'backup_id' => $backup->id,
+                'error' => $e->getMessage()
+            ]);
+        }
+    }
+    
+    return $deletedCount;
+}
+```
+
+### 7.2 备份验证
+```php
+/**
+ * 验证备份文件完整性
+ */
+public function verifyBackupIntegrity(int $backupId): bool
+{
+    $backup = CleanupBackup::find($backupId);
+    
+    if (!$backup || !file_exists($backup->backup_path)) {
+        return false;
+    }
+    
+    // 验证文件哈希
+    $currentHash = md5_file($backup->backup_path);
+    
+    return $currentHash === $backup->backup_hash;
+}
+```
+
+## 8. 配置选项
+
+### 8.1 备份配置
+```php
+// config/cleanup.php
+return [
+    'backup' => [
+        // 默认备份类型
+        'default_type' => 'sql', // sql, json, csv
+        
+        // 默认压缩类型
+        'compression' => 'gzip', // gzip, zip, none
+        
+        // 备份保留天数
+        'retention_days' => 30,
+        
+        // 分批处理大小
+        'batch_size' => 1000,
+        
+        // 最大备份文件大小(MB)
+        'max_file_size' => 500,
+        
+        // 备份存储路径
+        'storage_path' => 'cleanup/backups',
+        
+        // 是否自动清理过期备份
+        'auto_cleanup' => true,
+    ]
+];
+```
+
+这个备份设计提供了完整的数据保护机制,确保在清理数据前能够安全地备份将要删除的数据,并支持快速恢复。您觉得这个备份方案如何?是否需要调整某些部分?

+ 452 - 0
app/Module/Cleanup/Docs/数据库设计.md

@@ -0,0 +1,452 @@
+# Cleanup 模块数据库设计
+
+## 1. 数据库表概览
+
+Cleanup 模块包含以下核心数据表:
+
+1. **cleanup_configs** - 清理配置表(基础表配置)
+2. **cleanup_plans** - 清理计划表(如"农场模块清理")
+3. **cleanup_plan_contents** - 计划内容表(计划具体处理哪些表,怎么清理)
+4. **cleanup_tasks** - 清理任务表(执行某个计划的具体实例)
+5. **cleanup_backups** - 备份记录表(计划的备份方案和内容)
+6. **cleanup_backup_files** - 备份文件表(备份的具体文件)
+7. **cleanup_logs** - 清理日志表(任务执行日志)
+8. **cleanup_table_stats** - 表统计信息表(表的统计信息)
+
+## 2. 表结构详细设计
+
+### 2.1 清理配置表 (cleanup_configs)
+
+存储每个数据表的基础清理配置信息。
+
+```sql
+CREATE TABLE `kku_cleanup_configs` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `table_name` varchar(100) NOT NULL COMMENT '表名',
+  `module_name` varchar(50) NOT NULL COMMENT '模块名称',
+  `data_category` tinyint(3) unsigned NOT NULL COMMENT '数据分类:1用户数据,2日志数据,3交易数据,4缓存数据,5配置数据',
+  `default_cleanup_type` tinyint(3) unsigned NOT NULL COMMENT '默认清理类型:1清空表,2删除所有,3按时间删除,4按用户删除,5按条件删除',
+  `default_conditions` json DEFAULT NULL COMMENT '默认清理条件JSON配置',
+  `is_enabled` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用清理',
+  `priority` int(10) unsigned NOT NULL DEFAULT '100' COMMENT '清理优先级(数字越小优先级越高)',
+  `batch_size` int(10) unsigned NOT NULL DEFAULT '1000' COMMENT '批处理大小',
+  `description` text COMMENT '配置描述',
+  `last_cleanup_at` timestamp NULL DEFAULT NULL COMMENT '最后清理时间',
+  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `idx_table_name` (`table_name`),
+  KEY `idx_module_category` (`module_name`, `data_category`),
+  KEY `idx_enabled_priority` (`is_enabled`, `priority`),
+  KEY `idx_last_cleanup` (`last_cleanup_at`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='清理配置表';
+```
+
+### 2.2 清理计划表 (cleanup_plans)
+
+存储清理计划信息,如"农场模块清理"。
+
+```sql
+CREATE TABLE `kku_cleanup_plans` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `plan_name` varchar(100) NOT NULL COMMENT '计划名称',
+  `plan_type` tinyint(3) unsigned NOT NULL COMMENT '计划类型:1全量清理,2模块清理,3分类清理,4自定义清理',
+  `target_selection` json DEFAULT NULL COMMENT '目标选择配置',
+  `global_conditions` json DEFAULT NULL COMMENT '全局清理条件',
+  `backup_config` json DEFAULT NULL COMMENT '备份配置',
+  `is_template` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否为模板',
+  `is_enabled` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用',
+  `description` text COMMENT '计划描述',
+  `created_by` bigint(20) unsigned DEFAULT NULL COMMENT '创建者用户ID',
+  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `idx_plan_name` (`plan_name`),
+  KEY `idx_plan_type` (`plan_type`),
+  KEY `idx_is_template` (`is_template`),
+  KEY `idx_is_enabled` (`is_enabled`),
+  KEY `idx_created_by` (`created_by`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='清理计划表';
+```
+
+### 2.3 计划内容表 (cleanup_plan_contents)
+
+存储计划的具体内容,即计划具体处理哪些表,怎么清理。
+
+```sql
+CREATE TABLE `kku_cleanup_plan_contents` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `plan_id` bigint(20) unsigned NOT NULL COMMENT '计划ID',
+  `table_name` varchar(100) NOT NULL COMMENT '表名',
+  `cleanup_type` tinyint(3) unsigned NOT NULL COMMENT '清理类型:1清空表,2删除所有,3按时间删除,4按用户删除,5按条件删除',
+  `conditions` json DEFAULT NULL COMMENT '清理条件JSON配置',
+  `priority` int(10) unsigned NOT NULL DEFAULT '100' COMMENT '清理优先级',
+  `batch_size` int(10) unsigned NOT NULL DEFAULT '1000' COMMENT '批处理大小',
+  `is_enabled` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用',
+  `backup_enabled` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用备份',
+  `notes` text COMMENT '备注说明',
+  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `idx_plan_table` (`plan_id`, `table_name`),
+  KEY `idx_plan_id` (`plan_id`),
+  KEY `idx_table_name` (`table_name`),
+  KEY `idx_priority` (`priority`),
+  FOREIGN KEY (`plan_id`) REFERENCES `kku_cleanup_plans` (`id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='计划内容表';
+```
+
+### 2.4 清理任务表 (cleanup_tasks)
+
+存储清理任务的执行信息和状态,即执行某个计划的具体实例。
+
+```sql
+CREATE TABLE `kku_cleanup_tasks` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `task_name` varchar(100) NOT NULL COMMENT '任务名称',
+  `plan_id` bigint(20) unsigned NOT NULL COMMENT '关联的清理计划ID',
+  `backup_id` bigint(20) unsigned DEFAULT NULL COMMENT '关联的备份ID',
+  `status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '任务状态:1待执行,2备份中,3执行中,4已完成,5已失败,6已取消',
+  `progress` decimal(5,2) NOT NULL DEFAULT '0.00' COMMENT '执行进度百分比',
+  `current_step` varchar(50) DEFAULT NULL COMMENT '当前执行步骤',
+  `total_tables` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '总表数',
+  `processed_tables` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '已处理表数',
+  `total_records` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '总记录数',
+  `deleted_records` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '已删除记录数',
+  `backup_size` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '备份文件大小(字节)',
+  `execution_time` decimal(10,3) NOT NULL DEFAULT '0.000' COMMENT '执行时间(秒)',
+  `backup_time` decimal(10,3) NOT NULL DEFAULT '0.000' COMMENT '备份时间(秒)',
+  `started_at` timestamp NULL DEFAULT NULL COMMENT '开始时间',
+  `backup_completed_at` timestamp NULL DEFAULT NULL COMMENT '备份完成时间',
+  `completed_at` timestamp NULL DEFAULT NULL COMMENT '完成时间',
+  `error_message` text COMMENT '错误信息',
+  `created_by` bigint(20) unsigned DEFAULT NULL COMMENT '创建者用户ID',
+  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  PRIMARY KEY (`id`),
+  KEY `idx_plan_id` (`plan_id`),
+  KEY `idx_backup_id` (`backup_id`),
+  KEY `idx_status` (`status`),
+  KEY `idx_created_by` (`created_by`),
+  KEY `idx_created_at` (`created_at`),
+  FOREIGN KEY (`plan_id`) REFERENCES `kku_cleanup_plans` (`id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='清理任务表';
+```
+
+### 2.5 备份记录表 (cleanup_backups)
+
+存储计划的备份方案和备份内容。
+
+```sql
+CREATE TABLE `kku_cleanup_backups` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `plan_id` bigint(20) unsigned NOT NULL COMMENT '关联的清理计划ID',
+  `task_id` bigint(20) unsigned DEFAULT NULL COMMENT '关联的清理任务ID(如果是任务触发的备份)',
+  `backup_name` varchar(100) NOT NULL COMMENT '备份名称',
+  `backup_type` tinyint(3) unsigned NOT NULL COMMENT '备份类型:1SQL,2JSON,3CSV',
+  `compression_type` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '压缩类型:1gzip,2zip,3none',
+  `backup_path` varchar(500) NOT NULL COMMENT '备份文件路径',
+  `backup_size` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '备份文件大小(字节)',
+  `original_size` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '原始数据大小(字节)',
+  `tables_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '备份表数量',
+  `records_count` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '备份记录数量',
+  `backup_status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '备份状态:1进行中,2已完成,3已失败',
+  `backup_hash` varchar(64) DEFAULT NULL COMMENT '备份文件MD5哈希',
+  `backup_config` json DEFAULT NULL COMMENT '备份配置信息',
+  `started_at` timestamp NULL DEFAULT NULL COMMENT '备份开始时间',
+  `completed_at` timestamp NULL DEFAULT NULL COMMENT '备份完成时间',
+  `expires_at` timestamp NULL DEFAULT NULL COMMENT '备份过期时间',
+  `error_message` text COMMENT '错误信息',
+  `created_by` bigint(20) unsigned DEFAULT NULL COMMENT '创建者用户ID',
+  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  PRIMARY KEY (`id`),
+  KEY `idx_plan_id` (`plan_id`),
+  KEY `idx_task_id` (`task_id`),
+  KEY `idx_backup_status` (`backup_status`),
+  KEY `idx_expires_at` (`expires_at`),
+  KEY `idx_created_at` (`created_at`),
+  FOREIGN KEY (`plan_id`) REFERENCES `kku_cleanup_plans` (`id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='备份记录表';
+```
+
+### 2.6 备份文件表 (cleanup_backup_files)
+
+存储备份的具体文件信息。
+
+```sql
+CREATE TABLE `kku_cleanup_backup_files` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `backup_id` bigint(20) unsigned NOT NULL COMMENT '备份记录ID',
+  `table_name` varchar(100) NOT NULL COMMENT '表名',
+  `file_path` varchar(500) NOT NULL COMMENT '文件路径',
+  `file_size` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '文件大小(字节)',
+  `records_count` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '记录数量',
+  `file_hash` varchar(64) DEFAULT NULL COMMENT '文件MD5哈希',
+  `backup_conditions` json DEFAULT NULL COMMENT '备份条件',
+  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  PRIMARY KEY (`id`),
+  KEY `idx_backup_id` (`backup_id`),
+  KEY `idx_table_name` (`table_name`),
+  FOREIGN KEY (`backup_id`) REFERENCES `kku_cleanup_backups` (`id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='备份文件表';
+```
+
+### 2.7 清理日志表 (cleanup_logs)
+
+记录任务执行的详细日志。
+
+```sql
+CREATE TABLE `kku_cleanup_logs` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `task_id` bigint(20) unsigned NOT NULL COMMENT '任务ID',
+  `table_name` varchar(100) NOT NULL COMMENT '表名',
+  `operation_type` varchar(20) NOT NULL COMMENT '操作类型:BACKUP,TRUNCATE,DELETE,COUNT',
+  `records_before` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '操作前记录数',
+  `records_after` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '操作后记录数',
+  `records_affected` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '影响记录数',
+  `execution_time` decimal(8,3) NOT NULL DEFAULT '0.000' COMMENT '执行时间(秒)',
+  `conditions_used` json DEFAULT NULL COMMENT '使用的清理条件',
+  `sql_statement` text COMMENT '执行的SQL语句',
+  `status` tinyint(3) unsigned NOT NULL COMMENT '执行状态:1成功,2失败,3跳过',
+  `error_message` text COMMENT '错误信息',
+  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  PRIMARY KEY (`id`),
+  KEY `idx_task_id` (`task_id`),
+  KEY `idx_table_name` (`table_name`),
+  KEY `idx_status` (`status`),
+  KEY `idx_created_at` (`created_at`),
+  KEY `idx_operation_type` (`operation_type`),
+  FOREIGN KEY (`task_id`) REFERENCES `kku_cleanup_tasks` (`id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='清理日志表';
+```
+
+### 2.8 表统计信息表 (cleanup_table_stats)
+
+存储数据表的统计信息,用于清理决策。
+
+```sql
+CREATE TABLE `kku_cleanup_table_stats` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `table_name` varchar(100) NOT NULL COMMENT '表名',
+  `record_count` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '记录总数',
+  `table_size_mb` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '表大小(MB)',
+  `index_size_mb` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '索引大小(MB)',
+  `data_free_mb` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '碎片空间(MB)',
+  `avg_row_length` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '平均行长度',
+  `auto_increment` bigint(20) unsigned DEFAULT NULL COMMENT '自增值',
+  `oldest_record_time` timestamp NULL DEFAULT NULL COMMENT '最早记录时间',
+  `newest_record_time` timestamp NULL DEFAULT NULL COMMENT '最新记录时间',
+  `scan_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '扫描时间',
+  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `idx_table_scan` (`table_name`, `scan_time`),
+  KEY `idx_table_name` (`table_name`),
+  KEY `idx_record_count` (`record_count`),
+  KEY `idx_table_size` (`table_size_mb`),
+  KEY `idx_scan_time` (`scan_time`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='表统计信息表';
+```
+
+## 3. JSON字段结构
+
+### 3.1 清理条件JSON (conditions)
+
+#### 3.1.1 按时间清理条件
+```json
+{
+  "time_field": "created_at",
+  "time_condition": "older_than",
+  "time_value": 30,
+  "time_unit": "days"
+}
+```
+
+#### 3.1.2 按用户清理条件
+```json
+{
+  "user_field": "user_id",
+  "user_condition": "in",
+  "user_values": [1, 2, 3]
+}
+```
+
+#### 3.1.3 复合条件
+```json
+{
+  "logic": "AND",
+  "conditions": [
+    {
+      "field": "status",
+      "operator": "=",
+      "value": 0
+    },
+    {
+      "field": "created_at",
+      "operator": "<",
+      "value": "2024-01-01 00:00:00"
+    }
+  ]
+}
+```
+
+### 3.2 目标选择配置JSON (target_selection)
+
+#### 3.2.1 自定义表选择
+```json
+{
+  "selection_type": "custom",
+  "tables": [
+    "kku_farm_users",
+    "kku_item_users",
+    "kku_pet_users",
+    "kku_farm_logs",
+    "kku_item_logs"
+  ]
+}
+```
+
+#### 3.2.2 按模块选择
+```json
+{
+  "selection_type": "module",
+  "modules": ["Farm", "GameItems"],
+  "exclude_tables": ["kku_farm_configs"]  // 可选:排除特定表
+}
+```
+
+#### 3.2.3 按分类选择
+```json
+{
+  "selection_type": "category",
+  "categories": [1, 2],  // 用户数据和日志数据
+  "exclude_tables": ["kku_user_configs"]  // 可选:排除特定表
+}
+```
+
+#### 3.2.4 全量选择
+```json
+{
+  "selection_type": "all",
+  "exclude_modules": ["Config"],  // 可选:排除特定模块
+  "exclude_categories": [5],      // 可选:排除配置数据
+  "exclude_tables": [             // 可选:排除特定表
+    "kku_farm_configs",
+    "kku_item_configs"
+  ]
+}
+```
+
+#### 3.2.5 混合选择
+```json
+{
+  "selection_type": "mixed",
+  "modules": ["Farm"],           // 包含Farm模块的所有表
+  "categories": [2],             // 包含所有日志数据表
+  "tables": [                    // 包含指定的表
+    "kku_pet_users",
+    "kku_shop_orders"
+  ],
+  "exclude_tables": [            // 排除特定表
+    "kku_farm_configs"
+  ]
+}
+```
+
+## 4. 索引设计
+
+### 4.1 主键索引
+所有表都使用自增的`id`字段作为主键。
+
+### 4.2 唯一索引
+- `cleanup_configs`: `table_name`(确保每个表只有一个配置)
+- `cleanup_table_stats`: `table_name, scan_time`(确保每次扫描的唯一性)
+
+### 4.3 普通索引
+- `cleanup_configs`: `module_name, data_category`, `is_enabled, priority`, `last_cleanup_at`
+- `cleanup_tasks`: `status`, `created_by`, `created_at`, `cleanup_type`
+- `cleanup_logs`: `task_id`, `table_name`, `status`, `created_at`, `operation_type`
+- `cleanup_table_stats`: `table_name`, `record_count`, `table_size_mb`, `scan_time`
+
+## 5. 数据关系
+
+### 5.1 主要关系图
+```
+cleanup_configs (基础配置)
+     |
+     v
+cleanup_plans (清理计划) -----> cleanup_plan_contents (计划内容)
+     |                                    |
+     v                                    |
+cleanup_tasks (清理任务) <----------------+
+     |         |
+     v         v
+cleanup_logs   cleanup_backups (备份记录)
+               |
+               v
+               cleanup_backup_files (备份文件)
+
+cleanup_table_stats (表统计) - 独立存在,为决策提供支持
+```
+
+### 5.2 关系说明
+
+#### 5.2.1 核心关系链
+1. **配置 → 计划**:基础配置为计划提供默认设置
+2. **计划 → 计划内容**:一个计划包含多个表的具体清理内容
+3. **计划 → 任务**:一个计划可以创建多个执行任务
+4. **任务 → 日志**:一个任务产生多条操作日志
+5. **计划 → 备份**:一个计划可以有多个备份记录
+6. **备份 → 备份文件**:一个备份包含多个表的备份文件
+
+#### 5.2.2 概念层次关系
+```
+清理计划 (cleanup_plans)
+├── 计划名称: "跨模块数据清理"
+├── 计划类型: 自定义清理
+├── 目标选择: {
+│   "selection_type": "custom",
+│   "tables": ["kku_farm_users", "kku_item_users", "kku_pet_logs"]
+│   }
+└── 备份配置: {...}
+    ↓
+计划内容 (cleanup_plan_contents)
+├── kku_farm_users: 按时间删除
+├── kku_item_users: 按时间删除
+└── kku_pet_logs: 删除7天前数据
+    ↓
+清理任务 (cleanup_tasks)
+├── 任务名称: "跨模块数据清理_20241216_001"
+├── 执行状态: 进行中
+├── 执行进度: 45%
+└── 关联备份: backup_id = 123
+    ↓
+备份记录 (cleanup_backups)
+├── 备份名称: "custom_backup_20241216_143022"
+├── 备份状态: 已完成
+└── 备份文件: [...]
+```
+
+## 6. 数据初始化
+
+### 6.1 默认配置数据
+系统启动时会自动扫描所有数据表,并创建默认的清理配置。
+
+### 6.2 预设清理规则
+- **日志表**:默认保留30天
+- **缓存表**:默认清空
+- **用户数据表**:默认不清理(需手动配置)
+- **配置表**:默认不清理
+
+## 7. 数据维护
+
+### 7.1 定期任务
+- **统计更新**:每日更新表统计信息
+- **日志清理**:定期清理过期的清理日志
+- **配置优化**:根据统计信息优化清理配置
+
+### 7.2 性能优化
+- **分批处理**:大表采用分批删除
+- **索引优化**:根据查询模式优化索引
+- **统计缓存**:缓存常用的统计信息

+ 281 - 0
app/Module/Cleanup/Docs/架构调整总结.md

@@ -0,0 +1,281 @@
+# Cleanup 模块架构调整总结
+
+## 1. 调整概述
+
+根据用户提出的四个核心概念,我们对 Cleanup 模块的架构进行了重新设计,使其更符合实际的业务逻辑和使用场景。
+
+### 1.1 原始概念 vs 调整后概念
+
+| 原始设计 | 调整后设计 | 说明 |
+|---------|-----------|------|
+| 直接任务创建 | 计划 → 任务 | 增加计划层,任务基于计划创建 |
+| 任务配置清理规则 | 计划配置清理规则 | 清理规则在计划层定义 |
+| 任务关联备份 | 计划关联备份 | 备份属于计划,可独立创建 |
+| 单层配置 | 多层配置 | 基础配置 → 计划配置 → 任务执行 |
+
+## 2. 新的概念层次
+
+### 2.1 四层架构
+
+```
+1. 清理配置 (cleanup_configs)
+   ↓ 提供默认设置
+2. 清理计划 (cleanup_plans)
+   ↓ 包含具体内容
+3. 计划内容 (cleanup_plan_contents)
+   ↓ 创建执行任务
+4. 清理任务 (cleanup_tasks)
+   ↓ 关联备份记录
+5. 备份记录 (cleanup_backups)
+```
+
+### 2.2 概念详细说明
+
+#### 2.2.1 清理计划 (Cleanup Plans)
+- **定义**:命名的清理方案,如"农场模块清理"
+- **作用**:定义清理的整体策略和范围
+- **特点**:可重复使用,可作为模板
+
+#### 2.2.2 计划内容 (Plan Contents)
+- **定义**:计划具体处理哪些表,怎么清理
+- **作用**:详细的执行配置
+- **特点**:每个表独立配置,支持优先级
+
+#### 2.2.3 清理任务 (Cleanup Tasks)
+- **定义**:执行某个计划的具体实例
+- **作用**:记录执行过程和结果
+- **特点**:包含进度、状态、日志等信息
+
+#### 2.2.4 备份记录 (Backup Records)
+- **定义**:计划的备份方案和内容
+- **作用**:数据安全保障
+- **特点**:可单独备份,任务执行前自动备份
+
+## 3. 数据库架构调整
+
+### 3.1 新增数据表
+
+#### 3.1.1 清理计划表 (cleanup_plans)
+```sql
+-- 存储清理计划信息
+CREATE TABLE `kku_cleanup_plans` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+  `plan_name` varchar(100) NOT NULL COMMENT '计划名称',
+  `plan_type` tinyint(3) unsigned NOT NULL COMMENT '计划类型',
+  `target_modules` json DEFAULT NULL COMMENT '目标模块',
+  `global_conditions` json DEFAULT NULL COMMENT '全局条件',
+  `backup_config` json DEFAULT NULL COMMENT '备份配置',
+  -- ... 其他字段
+  PRIMARY KEY (`id`)
+);
+```
+
+#### 3.1.2 计划内容表 (cleanup_plan_contents)
+```sql
+-- 存储计划的具体内容
+CREATE TABLE `kku_cleanup_plan_contents` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+  `plan_id` bigint(20) unsigned NOT NULL COMMENT '计划ID',
+  `table_name` varchar(100) NOT NULL COMMENT '表名',
+  `cleanup_type` tinyint(3) unsigned NOT NULL COMMENT '清理类型',
+  `conditions` json DEFAULT NULL COMMENT '清理条件',
+  -- ... 其他字段
+  PRIMARY KEY (`id`),
+  FOREIGN KEY (`plan_id`) REFERENCES `kku_cleanup_plans` (`id`)
+);
+```
+
+### 3.2 调整现有数据表
+
+#### 3.2.1 清理任务表调整
+```sql
+-- 添加计划关联
+ALTER TABLE `kku_cleanup_tasks` 
+ADD COLUMN `plan_id` bigint(20) unsigned NOT NULL COMMENT '关联的清理计划ID',
+ADD COLUMN `backup_id` bigint(20) unsigned DEFAULT NULL COMMENT '关联的备份ID',
+ADD COLUMN `current_step` varchar(50) DEFAULT NULL COMMENT '当前执行步骤';
+```
+
+#### 3.2.2 备份记录表调整
+```sql
+-- 添加计划关联
+ALTER TABLE `kku_cleanup_backups` 
+ADD COLUMN `plan_id` bigint(20) unsigned NOT NULL COMMENT '关联的清理计划ID',
+MODIFY COLUMN `task_id` bigint(20) unsigned DEFAULT NULL COMMENT '关联的清理任务ID(可选)';
+```
+
+## 4. 接口架构调整
+
+### 4.1 新增服务接口
+
+#### 4.1.1 PlanService
+```php
+// 计划管理服务
+class PlanService
+{
+    public static function createCleanupPlan(array $planData): array;
+    public static function generatePlanContents(int $planId): array;
+    public static function updatePlanContents(int $planId, array $contents): bool;
+    public static function getPlanWithContents(int $planId): array;
+}
+```
+
+#### 4.1.2 调整后的 CleanupService
+```php
+// 清理服务调整
+class CleanupService
+{
+    // 基于计划创建任务
+    public static function createCleanupTask(int $planId, array $options = []): array;
+    
+    // 预览计划清理结果
+    public static function previewPlanCleanup(int $planId): array;
+    
+    // 为计划创建备份
+    public static function createPlanBackup(int $planId, array $options = []): array;
+}
+```
+
+### 4.2 新增后台管理接口
+
+#### 4.2.1 CleanupPlanController
+```php
+// 计划管理控制器
+class CleanupPlanController
+{
+    public function index(Content $content): Content;           // 计划列表
+    public function create(Content $content): Content;          // 创建计划
+    public function show($id, Content $content): Content;       // 计划详情
+    public function contents($id, Content $content): Content;   // 计划内容管理
+    public function preview($id): JsonResponse;                 // 预览清理结果
+    public function createBackup($id, Request $request): JsonResponse; // 创建备份
+}
+```
+
+### 4.3 调整命令行接口
+
+```bash
+# 新增计划相关命令
+php artisan cleanup:create-plan [plan_name] [--type=] [--modules=]
+php artisan cleanup:show-plan [plan_id]
+php artisan cleanup:generate-contents [plan_id]
+
+# 调整任务相关命令
+php artisan cleanup:create-task [plan_id] [--name=] [--execute]
+php artisan cleanup:backup-plan [plan_id] [--type=sql]
+```
+
+## 5. 使用流程调整
+
+### 5.1 新的使用流程
+
+#### 5.1.1 创建和配置阶段
+```
+1. 创建清理计划
+   ├── 设置计划名称:"农场模块清理"
+   ├── 选择计划类型:模块清理
+   ├── 指定目标模块:["Farm"]
+   └── 配置备份设置
+
+2. 生成计划内容
+   ├── 系统扫描目标模块的表
+   ├── 自动生成清理配置
+   └── 用户调整具体设置
+
+3. 调整计划内容
+   ├── kku_farm_users: 按时间删除
+   ├── kku_farm_crops: 清空表
+   └── kku_farm_logs: 删除30天前数据
+```
+
+#### 5.1.2 执行阶段
+```
+1. 基于计划创建任务
+   ├── 选择要执行的计划
+   ├── 设置任务名称(可选)
+   └── 选择是否立即执行
+
+2. 执行清理任务
+   ├── 自动创建备份
+   ├── 按优先级清理表
+   ├── 记录详细日志
+   └── 生成执行报告
+```
+
+### 5.2 独立备份流程
+
+```
+1. 为计划创建备份
+   ├── 选择备份格式:SQL/JSON/CSV
+   ├── 选择压缩方式:gzip/zip/none
+   └── 设置备份配置
+
+2. 备份管理
+   ├── 查看备份列表
+   ├── 验证备份完整性
+   ├── 下载备份文件
+   └── 恢复备份数据
+```
+
+## 6. 架构优势
+
+### 6.1 概念清晰
+- **分层明确**:计划 → 内容 → 任务 → 备份
+- **职责单一**:每层有明确的职责和作用
+- **关系清楚**:层次间的关系和依赖明确
+
+### 6.2 使用灵活
+- **计划重用**:一个计划可以创建多个任务
+- **独立备份**:备份不依赖任务,可独立操作
+- **模板化**:计划可以作为模板重复使用
+- **配置灵活**:支持全局和表级别的配置
+
+### 6.3 管理方便
+- **可视化管理**:完整的后台管理界面
+- **进度跟踪**:详细的执行进度和状态
+- **日志完整**:完整的操作日志和审计
+- **安全保障**:多重安全机制和数据保护
+
+### 6.4 扩展性强
+- **易于扩展**:新的清理类型和策略容易添加
+- **插件化**:支持插件化的扩展机制
+- **API完整**:提供完整的API接口
+- **多端支持**:支持后台管理和命令行操作
+
+## 7. 迁移策略
+
+### 7.1 数据迁移
+1. **创建新表**:创建计划表和计划内容表
+2. **调整现有表**:为任务表和备份表添加计划关联
+3. **数据转换**:将现有的任务配置转换为计划配置
+4. **索引优化**:添加必要的索引提高查询性能
+
+### 7.2 代码迁移
+1. **新增服务**:实现 PlanService 和相关逻辑
+2. **调整现有服务**:修改 CleanupService 的接口
+3. **新增控制器**:实现 CleanupPlanController
+4. **调整命令**:修改和新增命令行工具
+
+### 7.3 兼容性保证
+1. **向后兼容**:保持现有API的兼容性
+2. **渐进迁移**:支持新旧模式并存
+3. **平滑过渡**:提供迁移工具和指导
+4. **文档更新**:及时更新使用文档
+
+## 8. 总结
+
+通过这次架构调整,Cleanup 模块的设计更加符合用户的实际需求和使用习惯:
+
+### 8.1 核心改进
+- **概念层次清晰**:四层概念架构符合业务逻辑
+- **使用流程优化**:先创建计划,再执行任务的流程更合理
+- **备份功能增强**:独立的备份管理更加灵活
+- **管理界面完善**:提供完整的可视化管理功能
+
+### 8.2 业务价值
+- **提高效率**:计划重用减少重复配置
+- **降低风险**:完善的备份机制保障数据安全
+- **便于管理**:清晰的层次结构便于理解和管理
+- **易于维护**:模块化设计便于后续维护和扩展
+
+这个调整后的架构完全符合您提出的四个概念,提供了更加专业和完善的数据清理解决方案。

+ 414 - 0
app/Module/Cleanup/Docs/概念层次设计.md

@@ -0,0 +1,414 @@
+# Cleanup 模块概念层次设计
+
+## 1. 概念层次概述
+
+根据用户需求,Cleanup 模块采用四层概念架构:
+
+```
+1. 清理计划 (cleanup_plans)
+   ↓
+2. 计划内容 (cleanup_plan_contents)  
+   ↓
+3. 清理任务 (cleanup_tasks)
+   ↓
+4. 备份记录 (cleanup_backups)
+```
+
+## 2. 概念详细说明
+
+### 2.1 清理计划 (Cleanup Plans)
+
+**定义**:清理计划是一个命名的清理方案,如"农场模块清理"、"日志数据清理"等。
+
+**特点**:
+- 具有明确的名称和描述
+- 定义清理的范围(模块、分类、表)
+- 可以作为模板重复使用
+- 包含全局的清理条件和备份配置
+
+**示例**:
+```json
+{
+  "plan_name": "自定义数据清理",
+  "plan_type": 4,  // 自定义清理
+  "target_selection": {
+    "selection_type": "custom",  // custom, module, category, all
+    "modules": ["Farm", "GameItems"],  // 可选:按模块选择
+    "categories": [1, 2],  // 可选:按分类选择
+    "tables": ["kku_farm_users", "kku_item_users", "kku_pet_logs"]  // 可选:直接指定表
+  },
+  "global_conditions": {
+    "exclude_config_tables": true,
+    "time_limit": "30_days_ago"
+  },
+  "backup_config": {
+    "backup_type": "sql",
+    "compression": "gzip",
+    "retention_days": 30
+  }
+}
+```
+
+### 2.2 计划内容 (Plan Contents)
+
+**定义**:计划内容定义了计划具体处理哪些表,以及每个表怎么清理。
+
+**特点**:
+- 每个计划包含多个表的清理配置
+- 每个表可以有不同的清理策略
+- 可以覆盖全局条件,设置表级别的特殊条件
+- 支持启用/禁用特定表的清理
+
+**示例**:
+```json
+[
+  {
+    "table_name": "kku_farm_users",
+    "cleanup_type": 3,  // 按时间删除
+    "conditions": {
+      "time_field": "created_at",
+      "before": "2024-01-01"
+    },
+    "priority": 100,
+    "backup_enabled": true,
+    "notes": "清理2024年前的农场用户数据"
+  },
+  {
+    "table_name": "kku_item_users",
+    "cleanup_type": 4,  // 按用户删除
+    "conditions": {
+      "user_field": "user_id",
+      "user_condition": "in",
+      "user_values": [1001, 1002, 1003]
+    },
+    "priority": 150,
+    "backup_enabled": true,
+    "notes": "清理指定测试用户的物品数据"
+  },
+  {
+    "table_name": "kku_pet_logs",
+    "cleanup_type": 3,  // 按时间删除
+    "conditions": {
+      "time_field": "created_at",
+      "before": "7_days_ago"
+    },
+    "priority": 300,
+    "backup_enabled": false,
+    "notes": "清理7天前的宠物日志,不需要备份"
+  }
+]
+```
+
+### 2.3 清理任务 (Cleanup Tasks)
+
+**定义**:清理任务是执行某个计划的具体实例,记录执行的进度、备份内容、日志等。
+
+**特点**:
+- 每次执行计划都会创建一个新的任务
+- 记录任务的完整生命周期
+- 包含执行进度和状态信息
+- 关联备份记录和执行日志
+
+**生命周期**:
+```
+1. 创建任务 (status=1, 待执行)
+2. 开始备份 (status=2, 备份中)
+3. 备份完成,开始清理 (status=3, 执行中)
+4. 清理完成 (status=4, 已完成)
+```
+
+**示例**:
+```json
+{
+  "task_name": "农场模块清理_20241216_001",
+  "plan_id": 1,
+  "backup_id": 123,
+  "status": 3,  // 执行中
+  "progress": 45.50,
+  "current_step": "清理 kku_farm_crops 表",
+  "total_tables": 15,
+  "processed_tables": 7,
+  "total_records": 125000,
+  "deleted_records": 56750,
+  "backup_size": 2048576,
+  "execution_time": 120.5,
+  "backup_time": 45.2
+}
+```
+
+### 2.4 备份记录 (Backup Records)
+
+**定义**:备份记录存储计划的备份方案和备份内容,可以单独备份,在清理任务执行开始前备份。
+
+**特点**:
+- 可以独立于任务单独创建备份
+- 任务执行前自动创建备份
+- 支持多种备份格式和压缩方式
+- 包含完整性验证和过期管理
+
+**备份时机**:
+1. **手动备份**:用户主动为计划创建备份
+2. **任务备份**:任务执行前自动创建备份
+3. **定期备份**:按计划定期创建备份
+
+**示例**:
+```json
+{
+  "backup_name": "farm_backup_20241216_143022",
+  "plan_id": 1,
+  "task_id": 456,  // 如果是任务触发的备份
+  "backup_type": 1,  // SQL备份
+  "compression_type": 1,  // gzip压缩
+  "backup_path": "/storage/app/cleanup/backups/2024/12/16/farm_backup_143022.sql.gz",
+  "backup_size": 2048576,
+  "original_size": 8192000,
+  "tables_count": 15,
+  "records_count": 125000,
+  "backup_status": 2,  // 已完成
+  "backup_hash": "d41d8cd98f00b204e9800998ecf8427e",
+  "expires_at": "2025-01-15 14:30:22"
+}
+```
+
+## 3. 概念关系流程
+
+### 3.1 创建流程
+
+#### 3.1.1 创建清理计划
+```
+1. 用户创建计划 "自定义数据清理"
+2. 设置计划类型为 "自定义清理"
+3. 配置目标选择:
+   - 选择类型:custom
+   - 指定表列表:["kku_farm_users", "kku_item_users", "kku_pet_logs"]
+4. 配置全局条件和备份设置
+5. 保存到 cleanup_plans 表
+```
+
+#### 3.1.2 配置计划内容
+```
+1. 根据目标选择配置解析出具体的表列表
+2. 为每个表生成默认的清理配置
+3. 用户调整每个表的清理策略和条件
+4. 保存到 cleanup_plan_contents 表
+```
+
+#### 3.1.3 执行清理任务
+```
+1. 用户选择执行 "自定义数据清理" 计划
+2. 系统创建清理任务记录
+3. 根据计划内容生成执行列表
+4. 开始执行备份和清理流程
+```
+
+### 3.2 执行流程
+
+```
+清理任务执行流程:
+
+1. 创建任务记录
+   ├── task_name: "自定义数据清理_20241216_001"
+   ├── plan_id: 1
+   ├── status: 1 (待执行)
+   └── progress: 0%
+
+2. 开始备份阶段
+   ├── status: 2 (备份中)
+   ├── 创建备份记录
+   ├── 按表分别备份数据
+   ├── 压缩和验证备份文件
+   └── backup_completed_at: 设置完成时间
+
+3. 开始清理阶段
+   ├── status: 3 (执行中)
+   ├── 按优先级顺序处理表
+   ├── 记录每个操作的详细日志
+   ├── 实时更新进度信息
+   └── current_step: 更新当前步骤
+
+4. 完成任务
+   ├── status: 4 (已完成)
+   ├── progress: 100%
+   ├── completed_at: 设置完成时间
+   └── 生成执行报告
+```
+
+## 4. 使用场景示例
+
+### 4.1 场景一:创建自定义清理计划
+
+```bash
+# 1. 创建清理计划
+POST /admin/cleanup/plans
+{
+  "plan_name": "测试数据清理",
+  "plan_type": 4,  // 自定义清理
+  "target_selection": {
+    "selection_type": "custom",
+    "tables": [
+      "kku_farm_users",
+      "kku_item_users",
+      "kku_pet_users",
+      "kku_farm_logs",
+      "kku_item_logs"
+    ]
+  },
+  "description": "清理指定表的测试数据"
+}
+
+# 2. 用户配置计划内容
+PUT /admin/cleanup/plans/1/contents
+[
+  {
+    "table_name": "kku_farm_users",
+    "cleanup_type": 3,
+    "conditions": {"time_field": "created_at", "before": "2024-01-01"}
+  },
+  {
+    "table_name": "kku_item_users",
+    "cleanup_type": 3,
+    "conditions": {"time_field": "created_at", "before": "2024-01-01"}
+  },
+  {
+    "table_name": "kku_farm_logs",
+    "cleanup_type": 3,
+    "conditions": {"time_field": "created_at", "before": "7_days_ago"}
+  }
+]
+```
+
+### 4.2 场景二:按模块创建清理计划
+
+```bash
+# 1. 创建模块清理计划
+POST /admin/cleanup/plans
+{
+  "plan_name": "农场模块清理",
+  "plan_type": 2,  // 模块清理
+  "target_selection": {
+    "selection_type": "module",
+    "modules": ["Farm"]
+  },
+  "description": "清理农场模块的所有数据"
+}
+
+# 2. 系统自动生成计划内容
+# 扫描 Farm 模块的表:kku_farm_users, kku_farm_crops, kku_farm_logs 等
+# 用户可以调整或删除不需要的表
+```
+
+### 4.3 场景三:按数据分类创建清理计划
+
+```bash
+# 1. 创建分类清理计划
+POST /admin/cleanup/plans
+{
+  "plan_name": "日志数据清理",
+  "plan_type": 3,  // 分类清理
+  "target_selection": {
+    "selection_type": "category",
+    "categories": [2]  // 日志数据
+  },
+  "description": "清理所有日志类型的数据"
+}
+
+# 2. 系统自动生成计划内容
+# 扫描所有日志分类的表:kku_farm_logs, kku_item_logs, kku_user_logs 等
+```
+
+### 4.4 场景四:执行清理任务
+
+```bash
+# 1. 创建并执行任务
+POST /admin/cleanup/tasks
+{
+  "plan_id": 1,
+  "task_name": "测试数据清理_20241216_001",
+  "execute_immediately": true
+}
+
+# 2. 监控任务进度
+GET /admin/cleanup/tasks/1/progress
+{
+  "status": 3,
+  "progress": 45.50,
+  "current_step": "清理 kku_farm_users 表",
+  "backup_id": 123
+}
+
+# 3. 查看执行日志
+GET /admin/cleanup/tasks/1/logs
+```
+
+### 4.5 场景五:独立备份操作
+
+```bash
+# 1. 为计划创建备份
+POST /admin/cleanup/plans/1/backup
+{
+  "backup_type": "sql",
+  "compression": "gzip"
+}
+
+# 2. 查看备份列表
+GET /admin/cleanup/plans/1/backups
+
+# 3. 下载备份文件
+GET /admin/cleanup/backups/123/download
+```
+
+## 5. 概念优势
+
+### 5.1 清晰的层次结构
+- **计划层**:定义清理的整体策略
+- **内容层**:定义具体的执行细节
+- **任务层**:记录执行过程和结果
+- **备份层**:提供数据安全保障
+
+### 5.2 灵活的配置能力
+- 计划可以作为模板重复使用
+- 每个表可以有独立的清理策略
+- 支持全局条件和表级条件
+- 备份配置可以灵活调整
+
+### 5.3 完整的执行跟踪
+- 任务记录完整的执行过程
+- 详细的进度和状态信息
+- 完整的操作日志记录
+- 备份和恢复的完整支持
+
+### 5.4 安全的数据保护
+- 执行前自动备份
+- 支持独立备份操作
+- 多种备份格式选择
+- 完整性验证和过期管理
+
+## 6. 命令行使用示例
+
+```bash
+# 创建自定义清理计划
+php artisan cleanup:create-plan "跨模块清理" --type=4 --tables=kku_farm_users,kku_item_users,kku_pet_logs
+
+# 创建模块清理计划
+php artisan cleanup:create-plan "农场模块清理" --type=2 --modules=Farm --exclude-tables=kku_farm_configs
+
+# 创建混合清理计划
+php artisan cleanup:create-plan "复杂清理" --type=4 --modules=Farm --categories=2 --tables=kku_pet_users
+
+# 查看计划内容
+php artisan cleanup:show-plan 1
+
+# 为计划创建备份
+php artisan cleanup:backup-plan 1 --type=sql
+
+# 基于计划创建任务
+php artisan cleanup:create-task 1 --execute
+
+# 查看任务状态
+php artisan cleanup:task-status 1
+
+# 恢复备份
+php artisan cleanup:restore-backup 123
+```
+
+这个概念层次设计完全符合您提出的四个概念,提供了清晰的层次结构和灵活的使用方式。

+ 207 - 0
app/Module/Cleanup/Docs/模块规划总结.md

@@ -0,0 +1,207 @@
+# Cleanup 模块规划总结
+
+## 1. 规划概述
+
+根据用户需求"开发一个清理命令,这是测试数据清理,用于清除所有的模块的运行数据(配置数据不清理)",我们设计了一个专门的 **Cleanup 模块**,而不是简单的清理命令。
+
+### 1.1 设计理念
+- **专业化**:专门的模块处理数据清理需求
+- **配置化**:通过后台界面灵活配置清理规则
+- **安全性**:多重安全机制确保数据安全
+- **可扩展**:易于添加新的清理策略和规则
+
+### 1.2 核心优势
+- 比单一命令更加灵活和强大
+- 提供可视化的配置和监控界面
+- 支持复杂的清理条件和策略
+- 完整的日志记录和审计功能
+
+## 2. 模块架构
+
+### 2.1 整体架构
+```
+Cleanup 模块
+├── 配置管理系统    # 管理每个表的清理配置
+├── 任务管理系统    # 创建和管理清理任务
+├── 执行引擎       # 实际执行清理操作
+├── 监控系统       # 监控清理进度和状态
+├── 日志系统       # 记录清理操作和结果
+└── 后台管理界面    # 提供可视化管理界面
+```
+
+### 2.2 核心组件
+
+#### 2.2.1 数据分类系统
+- **USER_DATA (1)**: 用户运行数据(农场、物品、宠物等)
+- **LOG_DATA (2)**: 日志数据(操作日志、交易日志等)
+- **TRANSACTION_DATA (3)**: 交易数据(订单、交易记录等)
+- **CACHE_DATA (4)**: 缓存数据(临时数据、会话等)
+- **CONFIG_DATA (5)**: 配置数据(默认不清理)
+
+#### 2.2.2 清理策略
+- **TRUNCATE**: 清空表(最快速)
+- **DELETE_ALL**: 删除所有记录
+- **DELETE_BY_TIME**: 按时间条件删除
+- **DELETE_BY_USER**: 按用户条件删除
+- **DELETE_BY_CONDITION**: 按自定义条件删除
+
+## 3. 核心功能
+
+### 3.1 自动表扫描
+- 扫描所有 `kku_` 开头的数据表
+- 自动识别表的模块归属和数据分类
+- 分析表结构特征(时间字段、用户字段等)
+- 生成默认的清理配置建议
+
+### 3.2 灵活配置管理
+- 为每个表配置具体的清理规则
+- 支持复杂的清理条件(JSON配置)
+- 配置优先级和批处理大小
+- 配置的导入导出和模板化
+
+### 3.3 安全执行机制
+- **预览模式**:显示清理统计,不实际执行
+- **多重确认**:危险操作需要多次确认
+- **权限控制**:基于角色的操作权限
+- **分批处理**:大数据量分批处理避免锁表
+- **进度监控**:实时显示清理进度
+- **错误恢复**:支持任务中断后的恢复
+
+### 3.4 完整日志系统
+- 记录每个表的清理操作详情
+- 统计清理前后的数据变化
+- 记录执行时间和性能指标
+- 提供统计报告和可视化分析
+
+## 4. 数据库设计
+
+### 4.1 核心数据表
+
+#### 清理配置表 (cleanup_configs)
+- 存储每个表的清理配置
+- 包含清理类型、条件、优先级等
+- 支持启用/禁用控制
+
+#### 清理任务表 (cleanup_tasks)
+- 存储清理任务信息
+- 记录任务状态和执行进度
+- 支持任务的暂停、恢复、取消
+
+#### 清理日志表 (cleanup_logs)
+- 记录每个操作的详细日志
+- 包含执行时间、影响记录数等
+- 支持错误信息记录
+
+#### 表统计信息表 (cleanup_table_stats)
+- 存储表的统计信息
+- 用于清理决策和效果分析
+- 定期更新表的状态信息
+
+## 5. 使用场景
+
+### 5.1 测试环境清理
+```bash
+# 扫描所有表并生成配置
+php artisan cleanup:scan-tables
+
+# 创建测试数据清理任务
+php artisan cleanup:create-task --name="测试数据清理" --type=1
+
+# 预览清理结果
+php artisan cleanup:execute 1 --dry-run
+
+# 执行清理
+php artisan cleanup:execute 1
+```
+
+### 5.2 模块数据清理
+```bash
+# 清理特定模块的数据
+php artisan cleanup:create-task --name="农场模块清理" --type=2 --modules=Farm
+
+# 清理特定类型的数据
+php artisan cleanup:create-task --name="日志清理" --type=3 --categories=2
+```
+
+### 5.3 后台管理操作
+- 访问 `/admin/cleanup/configs` 配置清理规则
+- 访问 `/admin/cleanup/tasks` 管理清理任务
+- 访问 `/admin/cleanup/logs` 查看清理日志
+- 访问 `/admin/cleanup/reports` 查看统计报告
+
+## 6. 安全保障
+
+### 6.1 多重安全机制
+- **配置验证**:验证清理配置的正确性和安全性
+- **权限控制**:只有授权用户可以执行清理操作
+- **操作审计**:记录所有清理操作的详细信息
+- **备份提醒**:清理前提醒用户备份重要数据
+- **紧急停止**:支持清理过程的紧急中断
+
+### 6.2 数据保护策略
+- **配置数据保护**:配置表默认不会被清理
+- **关键数据保护**:重要用户数据需要特殊配置
+- **关联数据检查**:检查外键约束避免数据不一致
+- **分批处理**:避免长时间锁表影响业务
+
+## 7. 性能优化
+
+### 7.1 处理策略
+- **分批删除**:大表采用分批删除策略
+- **索引优化**:根据清理条件优化索引使用
+- **并发控制**:控制清理任务的并发执行
+- **资源监控**:监控内存和CPU使用情况
+
+### 7.2 执行优化
+- **优先级控制**:按优先级顺序执行清理
+- **时间窗口**:在业务低峰期执行清理
+- **进度跟踪**:实时跟踪清理进度
+- **中断恢复**:支持任务中断后的恢复
+
+## 8. 扩展能力
+
+### 8.1 清理策略扩展
+- 易于添加新的清理类型
+- 支持自定义清理条件
+- 可配置的清理算法
+- 插件化的清理策略
+
+### 8.2 数据分类扩展
+- 支持新的数据分类定义
+- 自动识别新的表类型
+- 可配置的分类规则
+- 灵活的分类策略
+
+## 9. 开发计划
+
+### 9.1 开发阶段
+1. **基础架构搭建** (1-2天)
+2. **核心功能实现** (3-4天)
+3. **任务管理系统** (2-3天)
+4. **后台管理界面** (2-3天)
+5. **命令行工具** (1-2天)
+6. **测试和优化** (2-3天)
+
+### 9.2 交付标准
+- 功能完整性验收
+- 性能要求达标
+- 安全机制完善
+- 文档完整清晰
+
+## 10. 总结
+
+Cleanup 模块的设计充分考虑了用户的实际需求,不仅满足了"清除所有模块运行数据"的基本要求,还提供了:
+
+### 10.1 超越基本需求的价值
+- **可视化管理**:比命令行更友好的管理界面
+- **灵活配置**:比固定逻辑更灵活的配置能力
+- **安全保障**:比简单删除更安全的操作机制
+- **监控审计**:比黑盒操作更透明的执行过程
+
+### 10.2 长期价值
+- **可维护性**:模块化设计便于后续维护和扩展
+- **可重用性**:配置化设计支持不同场景的重复使用
+- **可扩展性**:开放的架构支持新功能的快速添加
+- **专业性**:专门的清理系统比临时方案更专业可靠
+
+这个设计方案将为项目提供一个强大、安全、灵活的数据清理解决方案,不仅满足当前的测试数据清理需求,还为未来的数据管理需求奠定了坚实的基础。

+ 297 - 0
app/Module/Cleanup/Docs/灵活表选择更新总结.md

@@ -0,0 +1,297 @@
+# Cleanup 模块灵活表选择更新总结
+
+## 1. 更新概述
+
+根据用户需求"不要局限于模块,可以自由配置清理那个表",我们对 Cleanup 模块进行了全面的更新,实现了完全自由的表选择功能。
+
+## 2. 核心改进
+
+### 2.1 从模块限制到完全自由
+
+**原设计问题**:
+- 清理范围局限于模块边界
+- 无法跨模块选择特定表
+- 选择方式不够灵活
+
+**新设计优势**:
+- 完全自由选择任意表
+- 支持跨模块的精确控制
+- 提供5种灵活的选择方式
+
+### 2.2 数据库结构调整
+
+**原字段设计**:
+```sql
+-- 原来的设计
+`target_modules` json DEFAULT NULL COMMENT '目标模块列表',
+`target_categories` json DEFAULT NULL COMMENT '目标数据分类列表',
+`target_tables` json DEFAULT NULL COMMENT '目标表列表',
+```
+
+**新字段设计**:
+```sql
+-- 新的设计
+`target_selection` json DEFAULT NULL COMMENT '目标选择配置',
+```
+
+**新字段支持的配置**:
+```json
+{
+  "selection_type": "custom|module|category|all|mixed",
+  "modules": ["Farm", "GameItems"],           // 可选
+  "categories": [1, 2],                       // 可选
+  "tables": ["kku_farm_users", "..."],        // 可选
+  "exclude_modules": ["Config"],              // 可选
+  "exclude_categories": [5],                  // 可选
+  "exclude_tables": ["kku_farm_configs"]     // 可选
+}
+```
+
+## 3. 五种表选择方式
+
+### 3.1 自定义选择 (Custom)
+**用途**:直接指定要清理的表列表
+**示例**:
+```json
+{
+  "selection_type": "custom",
+  "tables": [
+    "kku_farm_users",
+    "kku_item_users", 
+    "kku_pet_users",
+    "kku_shop_orders"
+  ]
+}
+```
+
+### 3.2 模块选择 (Module)
+**用途**:选择一个或多个模块的所有表
+**示例**:
+```json
+{
+  "selection_type": "module",
+  "modules": ["Farm", "GameItems"],
+  "exclude_tables": ["kku_farm_configs"]
+}
+```
+
+### 3.3 分类选择 (Category)
+**用途**:按数据分类选择表
+**示例**:
+```json
+{
+  "selection_type": "category",
+  "categories": [1, 2],  // 用户数据和日志数据
+  "exclude_modules": ["Config"]
+}
+```
+
+### 3.4 全量选择 (All)
+**用途**:选择所有表,但可排除特定内容
+**示例**:
+```json
+{
+  "selection_type": "all",
+  "exclude_categories": [5],  // 排除配置数据
+  "exclude_tables": ["kku_user_profiles"]
+}
+```
+
+### 3.5 混合选择 (Mixed)
+**用途**:组合多种选择方式
+**示例**:
+```json
+{
+  "selection_type": "mixed",
+  "modules": ["Farm"],           // 包含Farm模块
+  "categories": [2],             // 包含所有日志数据
+  "tables": ["kku_pet_users"],   // 包含指定表
+  "exclude_tables": ["kku_farm_configs"]  // 排除特定表
+}
+```
+
+## 4. 技术实现
+
+### 4.1 表选择解析器
+```php
+class TableSelectionResolver
+{
+    /**
+     * 解析目标选择配置,返回最终的表列表
+     */
+    public function resolve(array $targetSelection): array
+    {
+        $selectionType = $targetSelection['selection_type'];
+        
+        switch ($selectionType) {
+            case 'custom':
+                return $this->resolveCustomSelection($targetSelection);
+            case 'module':
+                return $this->resolveModuleSelection($targetSelection);
+            case 'category':
+                return $this->resolveCategorySelection($targetSelection);
+            case 'all':
+                return $this->resolveAllSelection($targetSelection);
+            case 'mixed':
+                return $this->resolveMixedSelection($targetSelection);
+        }
+    }
+}
+```
+
+### 4.2 后台管理界面
+- 智能的表选择器组件
+- 支持搜索和过滤功能
+- 实时预览选择结果
+- 批量选择和排除功能
+
+### 4.3 命令行工具增强
+```bash
+# 支持更多参数
+php artisan cleanup:create-plan [plan_name] \
+    --type=4 \
+    --tables=kku_farm_users,kku_item_users \
+    --modules=Farm,GameItems \
+    --categories=1,2 \
+    --exclude-tables=kku_farm_configs \
+    --exclude-modules=Config
+```
+
+## 5. 使用场景示例
+
+### 5.1 跨模块用户数据清理
+```bash
+php artisan cleanup:create-plan "跨模块用户清理" \
+    --type=4 \
+    --tables=kku_farm_users,kku_item_users,kku_pet_users,kku_shop_users
+```
+
+### 5.2 特定功能数据清理
+```bash
+php artisan cleanup:create-plan "交易相关清理" \
+    --type=4 \
+    --tables=kku_shop_orders,kku_mex_orders,kku_fund_transfer,kku_point_transfer
+```
+
+### 5.3 日志数据清理(排除重要日志)
+```bash
+php artisan cleanup:create-plan "日志清理" \
+    --type=3 \
+    --categories=2 \
+    --exclude-tables=kku_admin_actionlogs,kku_sys_request_logs
+```
+
+### 5.4 测试环境全面清理
+```bash
+php artisan cleanup:create-plan "测试环境清理" \
+    --type=4 \
+    --modules=Farm,GameItems,Pet \
+    --categories=2 \
+    --exclude-categories=5 \
+    --exclude-tables=kku_user_profiles
+```
+
+## 6. API使用示例
+
+### 6.1 创建自定义清理计划
+```php
+$planData = [
+    'plan_name' => '跨模块数据清理',
+    'plan_type' => 4,
+    'target_selection' => [
+        'selection_type' => 'custom',
+        'tables' => [
+            'kku_farm_users',
+            'kku_item_users',
+            'kku_pet_users',
+            'kku_shop_orders'
+        ]
+    ],
+    'global_conditions' => [
+        'time_limit' => '30_days_ago'
+    ]
+];
+
+$result = CleanupService::createCleanupPlan($planData);
+```
+
+### 6.2 创建混合选择计划
+```php
+$planData = [
+    'plan_name' => '复杂清理计划',
+    'plan_type' => 4,
+    'target_selection' => [
+        'selection_type' => 'mixed',
+        'modules' => ['Farm'],
+        'categories' => [2],
+        'tables' => ['kku_pet_users'],
+        'exclude_tables' => ['kku_farm_configs']
+    ]
+];
+```
+
+## 7. 更新的文档
+
+### 7.1 已更新的文档列表
+1. **[概念层次设计.md](概念层次设计.md)** - 更新了示例和使用场景
+2. **[数据库设计.md](数据库设计.md)** - 调整了表结构和JSON配置
+3. **[接口设计.md](接口设计.md)** - 更新了接口参数和DTO
+4. **[灵活表选择设计.md](灵活表选择设计.md)** - 新增专门的设计文档
+5. **[README.md](../README.md)** - 更新了功能特性和使用示例
+
+### 7.2 文档更新要点
+- 所有示例都改为自定义选择或混合选择
+- 强调了跨模块选择的能力
+- 增加了排除机制的说明
+- 提供了丰富的使用场景
+
+## 8. 核心优势
+
+### 8.1 完全自由
+- **不受模块限制**:可以选择任意表,不受模块边界约束
+- **精确控制**:可以精确到表级别的控制
+- **跨模块选择**:可以同时选择多个模块的特定表
+
+### 8.2 灵活组合
+- **多种方式**:支持5种不同的选择方式
+- **组合使用**:混合选择支持多种方式的组合
+- **包含排除**:既可以包含也可以排除,灵活控制范围
+
+### 8.3 易于使用
+- **直观界面**:后台管理界面直观易用
+- **智能搜索**:支持表名搜索和过滤
+- **命令行友好**:丰富的命令行参数支持
+
+### 8.4 安全可控
+- **明确列表**:最终会生成明确的表列表
+- **预览功能**:执行前可以预览清理范围
+- **排除保护**:通过排除机制保护重要数据
+
+## 9. 实际应用场景
+
+### 9.1 开发测试
+- 清理特定功能相关的所有表
+- 跨模块清理用户测试数据
+- 保留配置但清理运行数据
+
+### 9.2 数据维护
+- 清理特定时间段的数据
+- 清理特定用户的所有数据
+- 清理无用的日志和缓存数据
+
+### 9.3 环境重置
+- 重置测试环境到初始状态
+- 清理演示环境的演示数据
+- 准备新的测试周期
+
+## 10. 总结
+
+通过这次更新,Cleanup 模块完全摆脱了模块边界的限制,实现了真正的"自由配置清理哪个表":
+
+- ✅ **完全自由**:可以选择任意表组合
+- ✅ **跨模块支持**:不受模块边界限制
+- ✅ **灵活配置**:5种选择方式满足各种需求
+- ✅ **易于使用**:直观的界面和命令行工具
+- ✅ **安全可控**:完善的排除和预览机制
+
+这个设计完全满足了用户的需求,提供了最大的灵活性和控制能力。

+ 434 - 0
app/Module/Cleanup/Docs/灵活表选择设计.md

@@ -0,0 +1,434 @@
+# Cleanup 模块灵活表选择设计
+
+## 1. 设计理念
+
+Cleanup 模块支持完全自由的表选择配置,不局限于模块边界。用户可以:
+- 自由选择任意表进行清理
+- 按模块、分类、或混合方式选择
+- 灵活排除不需要清理的表
+- 支持复杂的选择组合
+
+## 2. 选择方式类型
+
+### 2.1 自定义选择 (Custom)
+**用途**:直接指定要清理的表列表
+**适用场景**:精确控制清理范围,跨模块选择特定表
+
+```json
+{
+  "selection_type": "custom",
+  "tables": [
+    "kku_farm_users",
+    "kku_item_users", 
+    "kku_pet_users",
+    "kku_shop_orders",
+    "kku_game_logs"
+  ]
+}
+```
+
+**特点**:
+- 完全自由选择任意表
+- 不受模块限制
+- 精确控制清理范围
+
+### 2.2 模块选择 (Module)
+**用途**:选择一个或多个模块的所有表
+**适用场景**:按功能模块进行清理
+
+```json
+{
+  "selection_type": "module",
+  "modules": ["Farm", "GameItems", "Pet"],
+  "exclude_tables": [
+    "kku_farm_configs",
+    "kku_item_configs"
+  ]
+}
+```
+
+**特点**:
+- 自动包含模块的所有表
+- 可排除特定表
+- 便于模块级别的清理
+
+### 2.3 分类选择 (Category)
+**用途**:按数据分类选择表
+**适用场景**:按数据类型进行清理(如只清理日志数据)
+
+```json
+{
+  "selection_type": "category",
+  "categories": [1, 2],  // 用户数据和日志数据
+  "exclude_tables": [
+    "kku_user_configs"
+  ],
+  "exclude_modules": ["Config"]
+}
+```
+
+**特点**:
+- 跨模块选择同类型数据
+- 可排除特定表或模块
+- 便于数据类型级别的清理
+
+### 2.4 全量选择 (All)
+**用途**:选择所有表,但可排除特定内容
+**适用场景**:全面清理,但保护重要数据
+
+```json
+{
+  "selection_type": "all",
+  "exclude_modules": ["Config", "System"],
+  "exclude_categories": [5],  // 排除配置数据
+  "exclude_tables": [
+    "kku_user_profiles",
+    "kku_admin_users"
+  ]
+}
+```
+
+**特点**:
+- 默认包含所有表
+- 通过排除列表保护重要数据
+- 适合全面清理场景
+
+### 2.5 混合选择 (Mixed)
+**用途**:组合多种选择方式
+**适用场景**:复杂的清理需求
+
+```json
+{
+  "selection_type": "mixed",
+  "modules": ["Farm"],           // 包含Farm模块所有表
+  "categories": [2],             // 包含所有日志数据
+  "tables": [                    // 包含指定表
+    "kku_pet_users",
+    "kku_shop_orders"
+  ],
+  "exclude_tables": [            // 排除特定表
+    "kku_farm_configs",
+    "kku_important_logs"
+  ]
+}
+```
+
+**特点**:
+- 最大灵活性
+- 支持复杂的选择逻辑
+- 可组合多种选择方式
+
+## 3. 实现机制
+
+### 3.1 表选择解析器
+
+```php
+class TableSelectionResolver
+{
+    /**
+     * 解析目标选择配置,返回最终的表列表
+     */
+    public function resolve(array $targetSelection): array
+    {
+        $selectionType = $targetSelection['selection_type'];
+        
+        switch ($selectionType) {
+            case 'custom':
+                return $this->resolveCustomSelection($targetSelection);
+            case 'module':
+                return $this->resolveModuleSelection($targetSelection);
+            case 'category':
+                return $this->resolveCategorySelection($targetSelection);
+            case 'all':
+                return $this->resolveAllSelection($targetSelection);
+            case 'mixed':
+                return $this->resolveMixedSelection($targetSelection);
+            default:
+                throw new InvalidArgumentException("不支持的选择类型: {$selectionType}");
+        }
+    }
+    
+    /**
+     * 解析自定义选择
+     */
+    private function resolveCustomSelection(array $config): array
+    {
+        $tables = $config['tables'] ?? [];
+        $excludeTables = $config['exclude_tables'] ?? [];
+        
+        return array_diff($tables, $excludeTables);
+    }
+    
+    /**
+     * 解析模块选择
+     */
+    private function resolveModuleSelection(array $config): array
+    {
+        $modules = $config['modules'] ?? [];
+        $excludeTables = $config['exclude_tables'] ?? [];
+        
+        $tables = [];
+        foreach ($modules as $module) {
+            $moduleTables = $this->getTablesByModule($module);
+            $tables = array_merge($tables, $moduleTables);
+        }
+        
+        return array_diff($tables, $excludeTables);
+    }
+    
+    /**
+     * 解析分类选择
+     */
+    private function resolveCategorySelection(array $config): array
+    {
+        $categories = $config['categories'] ?? [];
+        $excludeTables = $config['exclude_tables'] ?? [];
+        $excludeModules = $config['exclude_modules'] ?? [];
+        
+        $tables = [];
+        foreach ($categories as $category) {
+            $categoryTables = $this->getTablesByCategory($category);
+            $tables = array_merge($tables, $categoryTables);
+        }
+        
+        // 排除特定模块的表
+        if (!empty($excludeModules)) {
+            foreach ($excludeModules as $module) {
+                $moduleTables = $this->getTablesByModule($module);
+                $tables = array_diff($tables, $moduleTables);
+            }
+        }
+        
+        return array_diff($tables, $excludeTables);
+    }
+    
+    /**
+     * 解析混合选择
+     */
+    private function resolveMixedSelection(array $config): array
+    {
+        $tables = [];
+        
+        // 添加模块表
+        if (!empty($config['modules'])) {
+            foreach ($config['modules'] as $module) {
+                $moduleTables = $this->getTablesByModule($module);
+                $tables = array_merge($tables, $moduleTables);
+            }
+        }
+        
+        // 添加分类表
+        if (!empty($config['categories'])) {
+            foreach ($config['categories'] as $category) {
+                $categoryTables = $this->getTablesByCategory($category);
+                $tables = array_merge($tables, $categoryTables);
+            }
+        }
+        
+        // 添加指定表
+        if (!empty($config['tables'])) {
+            $tables = array_merge($tables, $config['tables']);
+        }
+        
+        // 去重
+        $tables = array_unique($tables);
+        
+        // 排除表
+        $excludeTables = $config['exclude_tables'] ?? [];
+        return array_diff($tables, $excludeTables);
+    }
+}
+```
+
+### 3.2 后台管理界面
+
+#### 3.2.1 计划创建界面
+```html
+<!-- 选择类型 -->
+<select name="selection_type" id="selection_type">
+    <option value="custom">自定义选择</option>
+    <option value="module">按模块选择</option>
+    <option value="category">按分类选择</option>
+    <option value="all">全量选择</option>
+    <option value="mixed">混合选择</option>
+</select>
+
+<!-- 自定义选择 -->
+<div id="custom_selection" class="selection-panel">
+    <label>选择表:</label>
+    <select name="tables[]" multiple class="table-selector">
+        <!-- 动态加载所有表 -->
+    </select>
+</div>
+
+<!-- 模块选择 -->
+<div id="module_selection" class="selection-panel">
+    <label>选择模块:</label>
+    <select name="modules[]" multiple>
+        <option value="Farm">Farm - 农场模块</option>
+        <option value="GameItems">GameItems - 物品模块</option>
+        <option value="Pet">Pet - 宠物模块</option>
+        <!-- ... -->
+    </select>
+    
+    <label>排除表:</label>
+    <select name="exclude_tables[]" multiple class="table-selector">
+        <!-- 动态加载表 -->
+    </select>
+</div>
+
+<!-- 分类选择 -->
+<div id="category_selection" class="selection-panel">
+    <label>选择分类:</label>
+    <select name="categories[]" multiple>
+        <option value="1">用户数据</option>
+        <option value="2">日志数据</option>
+        <option value="3">交易数据</option>
+        <option value="4">缓存数据</option>
+    </select>
+    
+    <label>排除模块:</label>
+    <select name="exclude_modules[]" multiple>
+        <!-- 模块列表 -->
+    </select>
+    
+    <label>排除表:</label>
+    <select name="exclude_tables[]" multiple class="table-selector">
+        <!-- 动态加载表 -->
+    </select>
+</div>
+```
+
+#### 3.2.2 表选择器组件
+```javascript
+class TableSelector {
+    constructor(selector) {
+        this.element = document.querySelector(selector);
+        this.init();
+    }
+    
+    init() {
+        // 加载所有表
+        this.loadTables();
+        
+        // 添加搜索功能
+        this.addSearchFilter();
+        
+        // 添加批量选择功能
+        this.addBatchSelection();
+    }
+    
+    loadTables() {
+        fetch('/admin/cleanup/api/tables')
+            .then(response => response.json())
+            .then(tables => {
+                this.renderTables(tables);
+            });
+    }
+    
+    renderTables(tables) {
+        const html = tables.map(table => `
+            <option value="${table.name}" 
+                    data-module="${table.module}" 
+                    data-category="${table.category}"
+                    data-records="${table.record_count}">
+                ${table.name} (${table.module} - ${table.record_count} 条记录)
+            </option>
+        `).join('');
+        
+        this.element.innerHTML = html;
+    }
+    
+    addSearchFilter() {
+        const searchInput = document.createElement('input');
+        searchInput.type = 'text';
+        searchInput.placeholder = '搜索表名...';
+        searchInput.addEventListener('input', (e) => {
+            this.filterTables(e.target.value);
+        });
+        
+        this.element.parentNode.insertBefore(searchInput, this.element);
+    }
+    
+    filterTables(keyword) {
+        const options = this.element.querySelectorAll('option');
+        options.forEach(option => {
+            const visible = option.value.toLowerCase().includes(keyword.toLowerCase());
+            option.style.display = visible ? '' : 'none';
+        });
+    }
+}
+```
+
+## 4. 使用示例
+
+### 4.1 命令行使用
+
+```bash
+# 自定义选择表
+php artisan cleanup:create-plan "自定义清理" \
+    --type=4 \
+    --tables=kku_farm_users,kku_item_users,kku_pet_logs
+
+# 按模块选择,排除配置表
+php artisan cleanup:create-plan "农场清理" \
+    --type=2 \
+    --modules=Farm \
+    --exclude-tables=kku_farm_configs
+
+# 混合选择
+php artisan cleanup:create-plan "复杂清理" \
+    --type=4 \
+    --modules=Farm,GameItems \
+    --categories=2 \
+    --tables=kku_pet_users \
+    --exclude-tables=kku_farm_configs,kku_item_configs
+```
+
+### 4.2 API使用
+
+```php
+// 创建自定义清理计划
+$planData = [
+    'plan_name' => '跨模块用户数据清理',
+    'plan_type' => 4,
+    'target_selection' => [
+        'selection_type' => 'custom',
+        'tables' => [
+            'kku_farm_users',
+            'kku_item_users',
+            'kku_pet_users',
+            'kku_shop_user_purchases'
+        ]
+    ],
+    'global_conditions' => [
+        'time_limit' => '30_days_ago'
+    ]
+];
+
+$result = CleanupService::createCleanupPlan($planData);
+```
+
+## 5. 优势特性
+
+### 5.1 完全自由
+- 不受模块边界限制
+- 可以跨模块选择任意表
+- 支持精确的表级别控制
+
+### 5.2 灵活组合
+- 支持多种选择方式组合
+- 可以包含和排除并用
+- 适应复杂的清理需求
+
+### 5.3 易于使用
+- 直观的后台管理界面
+- 智能的表搜索和过滤
+- 清晰的命令行参数
+
+### 5.4 安全可控
+- 明确的表选择列表
+- 支持排除重要表
+- 预览功能确认清理范围
+
+这种设计完全满足了"不局限于模块,可以自由配置清理哪个表"的需求,提供了最大的灵活性和控制能力。

+ 495 - 0
app/Module/Cleanup/Docs/表级清理配置设计.md

@@ -0,0 +1,495 @@
+# 表级清理配置设计
+
+## 1. 设计理念
+
+每个表都可以制定不同的清理方式,提供最大的灵活性和精确控制。不同的表根据其数据特征和业务需求,可以采用不同的清理策略。
+
+## 2. 清理类型详解
+
+### 2.1 清空表 (TRUNCATE - 1)
+**适用场景**:临时数据、缓存数据、测试数据
+**执行方式**:`TRUNCATE TABLE table_name`
+**特点**:
+- 最快的清理方式
+- 重置自增ID
+- 不能回滚
+- 不触发触发器
+
+**配置示例**:
+```json
+{
+  "table_name": "kku_cache",
+  "cleanup_type": 1,
+  "conditions": null,
+  "priority": 100,
+  "backup_enabled": false,
+  "notes": "缓存表直接清空,无需备份"
+}
+```
+
+### 2.2 删除所有记录 (DELETE_ALL - 2)
+**适用场景**:需要保留表结构和自增ID的场景
+**执行方式**:`DELETE FROM table_name`
+**特点**:
+- 保留自增ID当前值
+- 可以回滚
+- 触发触发器
+- 比TRUNCATE慢
+
+**配置示例**:
+```json
+{
+  "table_name": "kku_sessions",
+  "cleanup_type": 2,
+  "conditions": null,
+  "priority": 200,
+  "backup_enabled": false,
+  "notes": "会话表删除所有记录,保留自增ID"
+}
+```
+
+### 2.3 按时间删除 (DELETE_BY_TIME - 3)
+**适用场景**:有时间字段的表,需要保留最近数据
+**执行方式**:`DELETE FROM table_name WHERE time_field < 'date'`
+**特点**:
+- 保留最近的数据
+- 可以设置保留天数
+- 支持多种时间格式
+
+**配置示例**:
+```json
+{
+  "table_name": "kku_farm_logs",
+  "cleanup_type": 3,
+  "conditions": {
+    "time_field": "created_at",
+    "before": "30_days_ago"
+  },
+  "priority": 300,
+  "backup_enabled": true,
+  "notes": "保留30天内的农场日志"
+}
+```
+
+**时间条件支持**:
+```json
+// 绝对时间
+"before": "2024-01-01 00:00:00"
+
+// 相对时间
+"before": "30_days_ago"
+"before": "7_days_ago" 
+"before": "1_month_ago"
+"before": "1_year_ago"
+
+// 时间范围
+"between": ["2024-01-01", "2024-06-01"]
+```
+
+### 2.4 按用户删除 (DELETE_BY_USER - 4)
+**适用场景**:用户相关数据,清理特定用户的数据
+**执行方式**:`DELETE FROM table_name WHERE user_field IN (users)`
+**特点**:
+- 精确控制用户范围
+- 支持用户ID列表
+- 支持用户条件筛选
+
+**配置示例**:
+```json
+{
+  "table_name": "kku_farm_users",
+  "cleanup_type": 4,
+  "conditions": {
+    "user_field": "user_id",
+    "user_condition": "in",
+    "user_values": [1001, 1002, 1003]
+  },
+  "priority": 150,
+  "backup_enabled": true,
+  "notes": "清理指定测试用户的农场数据"
+}
+```
+
+**用户条件支持**:
+```json
+// 指定用户列表
+{
+  "user_field": "user_id",
+  "user_condition": "in",
+  "user_values": [1001, 1002, 1003]
+}
+
+// 用户范围
+{
+  "user_field": "user_id", 
+  "user_condition": "between",
+  "user_range": [1000, 2000]
+}
+
+// 排除用户
+{
+  "user_field": "user_id",
+  "user_condition": "not_in", 
+  "user_values": [1, 2, 3]  // 排除管理员用户
+}
+```
+
+### 2.5 按条件删除 (DELETE_BY_CONDITION - 5)
+**适用场景**:复杂的删除条件,自定义SQL条件
+**执行方式**:`DELETE FROM table_name WHERE custom_conditions`
+**特点**:
+- 最大灵活性
+- 支持复杂SQL条件
+- 可以组合多个条件
+
+**配置示例**:
+```json
+{
+  "table_name": "kku_item_users",
+  "cleanup_type": 5,
+  "conditions": {
+    "logic": "AND",
+    "conditions": [
+      {
+        "field": "status",
+        "operator": "=",
+        "value": 0
+      },
+      {
+        "field": "created_at",
+        "operator": "<",
+        "value": "2024-01-01"
+      },
+      {
+        "field": "item_count",
+        "operator": "<=",
+        "value": 0
+      }
+    ]
+  },
+  "priority": 250,
+  "backup_enabled": true,
+  "notes": "清理无效的物品记录"
+}
+```
+
+**条件语法支持**:
+```json
+// 简单条件
+{
+  "field": "status",
+  "operator": "=",
+  "value": 0
+}
+
+// 范围条件
+{
+  "field": "level",
+  "operator": "between", 
+  "value": [1, 10]
+}
+
+// 列表条件
+{
+  "field": "type",
+  "operator": "in",
+  "value": [1, 2, 3]
+}
+
+// 复合条件
+{
+  "logic": "AND",
+  "conditions": [
+    {"field": "status", "operator": "=", "value": 0},
+    {"field": "created_at", "operator": "<", "value": "2024-01-01"}
+  ]
+}
+```
+
+## 3. 表级配置管理
+
+### 3.1 配置继承机制
+```
+基础配置 (cleanup_configs) 
+    ↓ 提供默认值
+计划配置 (cleanup_plan_contents)
+    ↓ 可以覆盖默认值
+任务执行 (cleanup_tasks)
+```
+
+### 3.2 配置优先级
+1. **计划内容配置** - 最高优先级
+2. **全局条件配置** - 中等优先级  
+3. **基础表配置** - 默认配置
+
+### 3.3 配置验证
+```php
+class CleanupConfigValidator
+{
+    /**
+     * 验证表级清理配置
+     */
+    public function validateTableConfig(array $config): array
+    {
+        $errors = [];
+        
+        // 验证清理类型
+        if (!in_array($config['cleanup_type'], [1, 2, 3, 4, 5])) {
+            $errors[] = '无效的清理类型';
+        }
+        
+        // 验证时间条件
+        if ($config['cleanup_type'] == 3) {
+            $errors = array_merge($errors, $this->validateTimeConditions($config['conditions']));
+        }
+        
+        // 验证用户条件
+        if ($config['cleanup_type'] == 4) {
+            $errors = array_merge($errors, $this->validateUserConditions($config['conditions']));
+        }
+        
+        // 验证自定义条件
+        if ($config['cleanup_type'] == 5) {
+            $errors = array_merge($errors, $this->validateCustomConditions($config['conditions']));
+        }
+        
+        return $errors;
+    }
+}
+```
+
+## 4. 后台管理界面
+
+### 4.1 表配置编辑器
+```html
+<div class="table-config-editor">
+    <h3>表:{{ table_name }}</h3>
+    
+    <!-- 清理类型选择 -->
+    <div class="form-group">
+        <label>清理类型:</label>
+        <select name="cleanup_type" v-model="config.cleanup_type" @change="onCleanupTypeChange">
+            <option value="1">清空表 (TRUNCATE)</option>
+            <option value="2">删除所有记录 (DELETE ALL)</option>
+            <option value="3">按时间删除</option>
+            <option value="4">按用户删除</option>
+            <option value="5">按条件删除</option>
+        </select>
+    </div>
+    
+    <!-- 时间条件配置 -->
+    <div v-if="config.cleanup_type == 3" class="conditions-panel">
+        <h4>时间条件配置</h4>
+        <div class="form-group">
+            <label>时间字段:</label>
+            <select name="time_field" v-model="config.conditions.time_field">
+                <option value="created_at">创建时间</option>
+                <option value="updated_at">更新时间</option>
+                <option value="last_login_at">最后登录时间</option>
+            </select>
+        </div>
+        <div class="form-group">
+            <label>删除条件:</label>
+            <select name="time_condition" v-model="config.conditions.before">
+                <option value="7_days_ago">7天前</option>
+                <option value="30_days_ago">30天前</option>
+                <option value="90_days_ago">90天前</option>
+                <option value="1_year_ago">1年前</option>
+                <option value="custom">自定义时间</option>
+            </select>
+        </div>
+    </div>
+    
+    <!-- 用户条件配置 -->
+    <div v-if="config.cleanup_type == 4" class="conditions-panel">
+        <h4>用户条件配置</h4>
+        <div class="form-group">
+            <label>用户字段:</label>
+            <select name="user_field" v-model="config.conditions.user_field">
+                <option value="user_id">用户ID</option>
+                <option value="urs_user_id">URS用户ID</option>
+            </select>
+        </div>
+        <div class="form-group">
+            <label>条件类型:</label>
+            <select name="user_condition" v-model="config.conditions.user_condition">
+                <option value="in">包含指定用户</option>
+                <option value="not_in">排除指定用户</option>
+                <option value="between">用户ID范围</option>
+            </select>
+        </div>
+        <div class="form-group">
+            <label>用户列表:</label>
+            <textarea name="user_values" v-model="userValuesText" placeholder="用户ID列表,用逗号分隔"></textarea>
+        </div>
+    </div>
+    
+    <!-- 自定义条件配置 -->
+    <div v-if="config.cleanup_type == 5" class="conditions-panel">
+        <h4>自定义条件配置</h4>
+        <div class="condition-builder">
+            <!-- 条件构建器组件 -->
+        </div>
+    </div>
+    
+    <!-- 其他配置 -->
+    <div class="form-group">
+        <label>优先级:</label>
+        <input type="number" name="priority" v-model="config.priority" min="1" max="999">
+        <small>数字越小优先级越高</small>
+    </div>
+    
+    <div class="form-group">
+        <label>
+            <input type="checkbox" name="backup_enabled" v-model="config.backup_enabled">
+            启用备份
+        </label>
+    </div>
+    
+    <div class="form-group">
+        <label>备注说明:</label>
+        <textarea name="notes" v-model="config.notes" placeholder="清理说明和注意事项"></textarea>
+    </div>
+</div>
+```
+
+### 4.2 批量配置功能
+```javascript
+class BatchConfigManager {
+    /**
+     * 批量应用配置
+     */
+    applyBatchConfig(tables, configTemplate) {
+        tables.forEach(table => {
+            // 应用模板配置
+            const config = { ...configTemplate };
+            
+            // 根据表特征调整配置
+            if (table.name.includes('_logs')) {
+                config.cleanup_type = 3; // 日志表按时间删除
+                config.conditions = {
+                    time_field: 'created_at',
+                    before: '30_days_ago'
+                };
+                config.backup_enabled = false;
+            } else if (table.name.includes('_cache')) {
+                config.cleanup_type = 1; // 缓存表直接清空
+                config.backup_enabled = false;
+            }
+            
+            this.updateTableConfig(table.name, config);
+        });
+    }
+}
+```
+
+## 5. 使用示例
+
+### 5.1 创建多样化清理计划
+```php
+// 创建计划
+$planData = [
+    'plan_name' => '多样化清理计划',
+    'plan_type' => 4,
+    'target_selection' => [
+        'selection_type' => 'custom',
+        'tables' => [
+            'kku_farm_users',
+            'kku_item_users',
+            'kku_pet_logs',
+            'kku_cache',
+            'kku_sessions'
+        ]
+    ]
+];
+
+// 配置每个表的清理方式
+$planContents = [
+    [
+        'table_name' => 'kku_farm_users',
+        'cleanup_type' => 3, // 按时间删除
+        'conditions' => [
+            'time_field' => 'created_at',
+            'before' => '90_days_ago'
+        ],
+        'priority' => 100,
+        'backup_enabled' => true,
+        'notes' => '保留90天内的农场用户数据'
+    ],
+    [
+        'table_name' => 'kku_item_users', 
+        'cleanup_type' => 4, // 按用户删除
+        'conditions' => [
+            'user_field' => 'user_id',
+            'user_condition' => 'in',
+            'user_values' => [1001, 1002, 1003]
+        ],
+        'priority' => 150,
+        'backup_enabled' => true,
+        'notes' => '清理指定测试用户的物品数据'
+    ],
+    [
+        'table_name' => 'kku_pet_logs',
+        'cleanup_type' => 3, // 按时间删除
+        'conditions' => [
+            'time_field' => 'created_at',
+            'before' => '7_days_ago'
+        ],
+        'priority' => 300,
+        'backup_enabled' => false,
+        'notes' => '只保留7天内的宠物日志'
+    ],
+    [
+        'table_name' => 'kku_cache',
+        'cleanup_type' => 1, // 清空表
+        'conditions' => null,
+        'priority' => 400,
+        'backup_enabled' => false,
+        'notes' => '缓存表直接清空'
+    ],
+    [
+        'table_name' => 'kku_sessions',
+        'cleanup_type' => 2, // 删除所有记录
+        'conditions' => null,
+        'priority' => 500,
+        'backup_enabled' => false,
+        'notes' => '清理所有会话,保留自增ID'
+    ]
+];
+```
+
+### 5.2 命令行配置
+```bash
+# 创建计划后,配置每个表的清理方式
+php artisan cleanup:config-table kku_farm_users \
+    --type=3 \
+    --time-field=created_at \
+    --before="90_days_ago" \
+    --backup \
+    --priority=100
+
+php artisan cleanup:config-table kku_item_users \
+    --type=4 \
+    --user-field=user_id \
+    --users=1001,1002,1003 \
+    --backup \
+    --priority=150
+
+php artisan cleanup:config-table kku_cache \
+    --type=1 \
+    --no-backup \
+    --priority=400
+```
+
+## 6. 总结
+
+通过表级清理配置设计,每个表都可以:
+
+- ✅ **独立配置**:每个表有独立的清理策略
+- ✅ **多种方式**:支持5种不同的清理类型
+- ✅ **灵活条件**:支持时间、用户、自定义条件
+- ✅ **优先级控制**:可以控制清理执行顺序
+- ✅ **备份选择**:每个表可以独立选择是否备份
+- ✅ **详细说明**:每个配置都可以添加说明备注
+
+这种设计提供了最大的灵活性,让用户可以根据每个表的特点和需求,制定最合适的清理策略。

+ 226 - 0
app/Module/Cleanup/Docs/设计概述.md

@@ -0,0 +1,226 @@
+# Cleanup 模块设计概述
+
+## 1. 模块简介
+
+Cleanup 模块是一个专门用于数据清理的系统模块,提供灵活的数据清理配置和执行功能。该模块主要用于测试环境的数据清理,支持清除所有模块的运行数据,同时保留配置数据。
+
+### 1.1 核心功能
+- **配置化清理**:通过后台界面配置每个表的清理条件
+- **分类清理**:支持按模块、数据类型进行分类清理
+- **安全机制**:多重确认、预览模式、回滚机制
+- **批量处理**:支持大数据量的分批清理
+- **日志记录**:详细的清理日志和统计信息
+
+### 1.2 设计原则
+- **安全第一**:多重确认机制,防止误删重要数据
+- **灵活配置**:支持细粒度的清理条件配置
+- **可扩展性**:易于添加新的清理规则和数据类型
+- **可监控性**:完整的日志记录和进度跟踪
+
+## 2. 架构设计
+
+### 2.1 模块结构
+```
+app/Module/Cleanup/
+├── AdminControllers/        # 后台管理控制器
+│   ├── CleanupConfigController.php      # 清理配置管理
+│   ├── CleanupTaskController.php        # 清理任务管理
+│   ├── CleanupLogController.php         # 清理日志管理
+│   └── Helper/                          # 辅助类
+├── Commands/                            # 命令行工具
+│   ├── CleanupDataCommand.php           # 数据清理命令
+│   └── ScanTablesCommand.php            # 扫描数据表命令
+├── Databases/                           # 数据库相关文件
+│   └── GenerateSql/                     # SQL生成文件
+├── Docs/                                # 文档目录
+├── Enums/                               # 枚举定义
+│   ├── CLEANUP_TYPE.php                 # 清理类型枚举
+│   ├── DATA_CATEGORY.php                # 数据分类枚举
+│   └── TASK_STATUS.php                  # 任务状态枚举
+├── Events/                              # 事件类
+├── Listeners/                           # 事件监听器
+├── Logics/                              # 业务逻辑类
+│   ├── CleanupConfigLogic.php           # 清理配置逻辑
+│   ├── CleanupExecutorLogic.php         # 清理执行逻辑
+│   └── TableScannerLogic.php            # 表扫描逻辑
+├── Models/                              # 数据模型
+│   ├── CleanupConfig.php                # 清理配置模型
+│   ├── CleanupTask.php                  # 清理任务模型
+│   └── CleanupLog.php                   # 清理日志模型
+├── Providers/                           # 服务提供者
+│   └── CleanupServiceProvider.php       # 模块服务提供者
+├── Repositories/                        # 数据仓库
+├── Services/                            # 服务类
+│   ├── CleanupService.php               # 清理服务
+│   └── ConfigService.php                # 配置服务
+├── Validations/                         # 验证规则
+└── Validators/                          # 验证器
+```
+
+### 2.2 核心组件
+
+#### 2.2.1 清理配置系统
+- **CleanupConfig**: 存储每个表的清理配置
+- **ConfigService**: 提供配置管理服务
+- **CleanupConfigLogic**: 处理配置相关业务逻辑
+
+#### 2.2.2 清理执行系统
+- **CleanupExecutorLogic**: 核心清理执行逻辑
+- **CleanupService**: 对外提供清理服务接口
+- **CleanupDataCommand**: 命令行清理工具
+
+#### 2.2.3 任务管理系统
+- **CleanupTask**: 清理任务模型
+- **CleanupLog**: 清理日志模型
+- **TaskStatus**: 任务状态管理
+
+## 3. 数据库设计
+
+### 3.1 核心数据表
+
+#### 3.1.1 清理配置表 (cleanup_configs)
+```sql
+CREATE TABLE `kku_cleanup_configs` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+  `table_name` varchar(100) NOT NULL COMMENT '表名',
+  `module_name` varchar(50) NOT NULL COMMENT '模块名称',
+  `data_category` tinyint(3) unsigned NOT NULL COMMENT '数据分类',
+  `cleanup_type` tinyint(3) unsigned NOT NULL COMMENT '清理类型',
+  `conditions` json DEFAULT NULL COMMENT '清理条件',
+  `is_enabled` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用',
+  `priority` int(10) unsigned NOT NULL DEFAULT '100' COMMENT '清理优先级',
+  `description` text COMMENT '描述',
+  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
+  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `idx_table_name` (`table_name`),
+  KEY `idx_module_category` (`module_name`, `data_category`),
+  KEY `idx_enabled_priority` (`is_enabled`, `priority`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='清理配置表';
+```
+
+#### 3.1.2 清理任务表 (cleanup_tasks)
+```sql
+CREATE TABLE `kku_cleanup_tasks` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+  `task_name` varchar(100) NOT NULL COMMENT '任务名称',
+  `cleanup_type` tinyint(3) unsigned NOT NULL COMMENT '清理类型',
+  `target_modules` json DEFAULT NULL COMMENT '目标模块',
+  `target_categories` json DEFAULT NULL COMMENT '目标数据分类',
+  `conditions` json DEFAULT NULL COMMENT '清理条件',
+  `status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '任务状态',
+  `progress` decimal(5,2) NOT NULL DEFAULT '0.00' COMMENT '执行进度',
+  `total_tables` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '总表数',
+  `processed_tables` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '已处理表数',
+  `total_records` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '总记录数',
+  `deleted_records` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '已删除记录数',
+  `started_at` timestamp NULL DEFAULT NULL COMMENT '开始时间',
+  `completed_at` timestamp NULL DEFAULT NULL COMMENT '完成时间',
+  `error_message` text COMMENT '错误信息',
+  `created_by` bigint(20) unsigned DEFAULT NULL COMMENT '创建者',
+  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
+  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  PRIMARY KEY (`id`),
+  KEY `idx_status` (`status`),
+  KEY `idx_created_by` (`created_by`),
+  KEY `idx_created_at` (`created_at`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='清理任务表';
+```
+
+#### 3.1.3 清理日志表 (cleanup_logs)
+```sql
+CREATE TABLE `kku_cleanup_logs` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+  `task_id` bigint(20) unsigned NOT NULL COMMENT '任务ID',
+  `table_name` varchar(100) NOT NULL COMMENT '表名',
+  `operation_type` varchar(20) NOT NULL COMMENT '操作类型',
+  `records_count` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '记录数量',
+  `execution_time` decimal(8,3) NOT NULL DEFAULT '0.000' COMMENT '执行时间(秒)',
+  `conditions_used` json DEFAULT NULL COMMENT '使用的条件',
+  `status` tinyint(3) unsigned NOT NULL COMMENT '执行状态',
+  `error_message` text COMMENT '错误信息',
+  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
+  PRIMARY KEY (`id`),
+  KEY `idx_task_id` (`task_id`),
+  KEY `idx_table_name` (`table_name`),
+  KEY `idx_status` (`status`),
+  KEY `idx_created_at` (`created_at`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='清理日志表';
+```
+
+### 3.2 数据分类定义
+
+#### 3.2.1 数据分类 (DATA_CATEGORY)
+- **USER_DATA** (1): 用户运行数据
+- **LOG_DATA** (2): 日志数据
+- **TRANSACTION_DATA** (3): 交易数据
+- **CACHE_DATA** (4): 缓存数据
+- **CONFIG_DATA** (5): 配置数据(通常不清理)
+
+#### 3.2.2 清理类型 (CLEANUP_TYPE)
+- **TRUNCATE** (1): 清空表
+- **DELETE_ALL** (2): 删除所有记录
+- **DELETE_BY_TIME** (3): 按时间删除
+- **DELETE_BY_USER** (4): 按用户删除
+- **DELETE_BY_CONDITION** (5): 按条件删除
+
+## 4. 功能特性
+
+### 4.1 配置管理
+- **表扫描**: 自动扫描系统中的所有数据表
+- **分类管理**: 按模块和数据类型进行分类
+- **条件配置**: 支持复杂的清理条件配置
+- **优先级设置**: 控制清理执行顺序
+
+### 4.2 安全机制
+- **预览模式**: 显示将要清理的数据统计
+- **多重确认**: 危险操作需要多次确认
+- **权限控制**: 基于角色的操作权限
+- **自动备份**: 清理前自动备份将要删除的数据
+- **备份管理**: 完整的备份文件管理和恢复功能
+
+### 4.3 执行控制
+- **批量处理**: 大数据量分批处理
+- **进度跟踪**: 实时显示清理进度
+- **错误处理**: 完善的错误处理和恢复机制
+- **中断恢复**: 支持任务中断后的恢复
+
+### 4.4 监控统计
+- **详细日志**: 记录每个操作的详细信息
+- **统计报告**: 清理结果的统计分析
+- **性能监控**: 执行时间和资源使用监控
+- **历史记录**: 保留清理历史记录
+
+## 5. 使用场景
+
+### 5.1 测试环境清理
+- 定期清理测试数据
+- 重置测试环境状态
+- 清理过期的测试记录
+
+### 5.2 开发环境维护
+- 清理开发过程中的临时数据
+- 重置开发环境到初始状态
+- 清理调试产生的冗余数据
+
+### 5.3 数据维护
+- 清理过期的日志数据
+- 清理无效的缓存数据
+- 清理孤立的关联数据
+
+## 6. 技术要求
+
+### 6.1 性能要求
+- 支持大数据量的高效清理
+- 分批处理避免内存溢出
+- 优化的SQL查询减少数据库压力
+
+### 6.2 安全要求
+- 严格的权限控制
+- 完整的操作审计
+- 数据备份建议
+
+### 6.3 可维护性
+- 清晰的代码结构
+- 完整的文档说明
+- 易于扩展的架构设计

+ 442 - 0
app/Module/Cleanup/README.md

@@ -0,0 +1,442 @@
+# Cleanup 模块
+
+## 模块简介
+
+Cleanup 模块是一个专门用于数据清理的系统模块,提供灵活的数据清理配置和执行功能。该模块主要用于测试环境的数据清理,支持清除所有模块的运行数据,同时保留配置数据。
+
+### 核心特性
+
+- ✅ **灵活表选择**:自由配置清理任意表,不局限于模块边界
+- ✅ **多种选择方式**:支持自定义、模块、分类、全量、混合等选择方式
+- ✅ **表级清理配置**:每个表都可以制定不同的清理方式和条件
+- ✅ **5种清理类型**:清空表、删除所有、按时间、按用户、按条件删除
+- ✅ **安全机制**:多重确认、预览模式、自动备份机制
+- ✅ **批量处理**:支持大数据量的分批清理
+- ✅ **日志记录**:详细的清理日志和统计信息
+- ✅ **命令行工具**:支持命令行执行清理任务
+- ✅ **实时监控**:清理过程的实时进度监控
+- ✅ **数据备份**:清理前自动备份,支持快速恢复
+
+## 快速开始
+
+### 1. 扫描数据表
+
+首先扫描系统中的所有数据表,生成默认配置:
+
+```bash
+# 扫描数据表并生成配置
+php artisan cleanup:scan-tables
+
+# 强制重新扫描
+php artisan cleanup:scan-tables --force
+```
+
+### 2. 创建清理计划
+
+通过后台管理界面创建清理计划:
+
+1. 访问 `/admin/cleanup/plans` 创建清理计划
+2. 选择表选择方式:自定义、模块、分类、全量、混合
+3. 配置具体的清理条件和备份设置
+
+#### 表选择方式示例:
+
+```bash
+# 自定义选择特定表
+--tables=kku_farm_users,kku_item_users,kku_pet_logs
+
+# 按模块选择,排除配置表
+--modules=Farm,GameItems --exclude-tables=kku_farm_configs
+
+# 按分类选择日志数据
+--categories=2 --exclude-modules=Config
+
+# 混合选择
+--modules=Farm --categories=2 --tables=kku_pet_users
+```
+
+### 3. 配置表级清理方式
+
+每个表都可以制定不同的清理方式:
+
+```bash
+# 配置农场用户表:按时间删除,保留90天
+php artisan cleanup:config-table 1 kku_farm_users \
+    --type=3 --time-field=created_at --before="90_days_ago" --backup --priority=100
+
+# 配置物品用户表:按用户删除指定测试用户
+php artisan cleanup:config-table 1 kku_item_users \
+    --type=4 --user-field=user_id --users=1001,1002,1003 --backup --priority=150
+
+# 配置缓存表:直接清空,无需备份
+php artisan cleanup:config-table 1 kku_cache \
+    --type=1 --no-backup --priority=400
+
+# 基于计划创建任务
+php artisan cleanup:create-task 1 --execute
+```
+
+### 4. 执行清理
+
+```bash
+# 预览清理结果(不实际执行)
+php artisan cleanup:execute 1 --dry-run
+
+# 执行清理任务(会自动创建备份)
+php artisan cleanup:execute 1
+
+# 强制执行(跳过确认)
+php artisan cleanup:execute 1 --force
+
+# 创建数据备份
+php artisan cleanup:backup 1 --type=sql --compression=gzip
+
+# 恢复数据备份
+php artisan cleanup:restore 123
+```
+
+## 目录结构
+
+```
+app/Module/Cleanup/
+├── AdminControllers/        # 后台管理控制器
+│   ├── CleanupConfigController.php      # 清理配置管理
+│   ├── CleanupTaskController.php        # 清理任务管理
+│   ├── CleanupLogController.php         # 清理日志管理
+│   └── Helper/                          # 辅助类
+├── Commands/                            # 命令行工具
+│   ├── CleanupDataCommand.php           # 数据清理命令
+│   └── ScanTablesCommand.php            # 扫描数据表命令
+├── Databases/                           # 数据库相关文件
+│   └── GenerateSql/                     # SQL生成文件
+├── Docs/                                # 文档目录
+│   ├── 设计概述.md                       # 设计概述
+│   ├── 数据库设计.md                     # 数据库设计
+│   ├── 功能需求.md                       # 功能需求
+│   └── 接口设计.md                       # 接口设计
+├── Enums/                               # 枚举定义
+│   ├── CLEANUP_TYPE.php                 # 清理类型枚举
+│   ├── DATA_CATEGORY.php                # 数据分类枚举
+│   └── TASK_STATUS.php                  # 任务状态枚举
+├── Events/                              # 事件类
+├── Listeners/                           # 事件监听器
+├── Logics/                              # 业务逻辑类
+│   ├── CleanupConfigLogic.php           # 清理配置逻辑
+│   ├── CleanupExecutorLogic.php         # 清理执行逻辑
+│   └── TableScannerLogic.php            # 表扫描逻辑
+├── Models/                              # 数据模型
+│   ├── CleanupConfig.php                # 清理配置模型
+│   ├── CleanupTask.php                  # 清理任务模型
+│   └── CleanupLog.php                   # 清理日志模型
+├── Providers/                           # 服务提供者
+│   └── CleanupServiceProvider.php       # 模块服务提供者
+├── Repositories/                        # 数据仓库
+├── Services/                            # 服务类
+│   ├── CleanupService.php               # 清理服务
+│   └── ConfigService.php                # 配置服务
+├── Validations/                         # 验证规则
+├── Validators/                          # 验证器
+└── README.md                            # 本文档
+```
+
+## 表选择方式
+
+### 5种灵活的表选择方式
+
+#### 1. 自定义选择 (Custom)
+直接指定要清理的表列表,完全自由选择:
+```json
+{
+  "selection_type": "custom",
+  "tables": ["kku_farm_users", "kku_item_users", "kku_pet_logs"]
+}
+```
+
+#### 2. 模块选择 (Module)
+选择一个或多个模块的所有表:
+```json
+{
+  "selection_type": "module",
+  "modules": ["Farm", "GameItems"],
+  "exclude_tables": ["kku_farm_configs"]
+}
+```
+
+#### 3. 分类选择 (Category)
+按数据分类选择表:
+```json
+{
+  "selection_type": "category",
+  "categories": [1, 2],  // 用户数据和日志数据
+  "exclude_modules": ["Config"]
+}
+```
+
+#### 4. 全量选择 (All)
+选择所有表,但可排除特定内容:
+```json
+{
+  "selection_type": "all",
+  "exclude_categories": [5],  // 排除配置数据
+  "exclude_tables": ["kku_user_profiles"]
+}
+```
+
+#### 5. 混合选择 (Mixed)
+组合多种选择方式:
+```json
+{
+  "selection_type": "mixed",
+  "modules": ["Farm"],
+  "categories": [2],
+  "tables": ["kku_pet_users"],
+  "exclude_tables": ["kku_farm_configs"]
+}
+```
+
+### 数据分类定义
+
+- **USER_DATA (1)**: 用户运行数据
+- **LOG_DATA (2)**: 日志数据
+- **TRANSACTION_DATA (3)**: 交易数据
+- **CACHE_DATA (4)**: 缓存数据
+- **CONFIG_DATA (5)**: 配置数据(通常不清理)
+
+### 5种清理类型详解
+
+#### 1. 清空表 (TRUNCATE - 1)
+- **适用场景**:缓存数据、临时数据
+- **特点**:最快速,重置自增ID,不可回滚
+- **示例**:`kku_cache`, `kku_sessions`
+
+#### 2. 删除所有记录 (DELETE_ALL - 2)
+- **适用场景**:需要保留自增ID的场景
+- **特点**:保留自增ID,可回滚,触发触发器
+- **示例**:`kku_user_sessions`
+
+#### 3. 按时间删除 (DELETE_BY_TIME - 3)
+- **适用场景**:有时间字段的表,保留最近数据
+- **特点**:可设置保留天数,支持相对时间
+- **示例**:`kku_farm_logs`, `kku_user_actionlogs`
+
+#### 4. 按用户删除 (DELETE_BY_USER - 4)
+- **适用场景**:用户相关数据,清理特定用户
+- **特点**:精确控制用户范围,支持用户列表
+- **示例**:`kku_farm_users`, `kku_item_users`
+
+#### 5. 按条件删除 (DELETE_BY_CONDITION - 5)
+- **适用场景**:复杂删除条件,自定义SQL条件
+- **特点**:最大灵活性,支持复杂组合条件
+- **示例**:状态为0且创建时间早于某日期的记录
+
+## 使用示例
+
+### 1. 配置管理
+
+```php
+use App\Module\Cleanup\Services\ConfigService;
+
+// 获取所有配置
+$configs = ConfigService::getCleanupConfigs();
+
+// 更新特定表的配置
+ConfigService::updateCleanupConfig('kku_farm_users', [
+    'cleanup_type' => 3, // 按时间删除
+    'conditions' => [
+        'time_field' => 'created_at',
+        'time_condition' => 'older_than',
+        'time_value' => 30,
+        'time_unit' => 'days'
+    ],
+    'is_enabled' => true,
+    'priority' => 100
+]);
+```
+
+### 2. 任务管理
+
+```php
+use App\Module\Cleanup\Services\CleanupService;
+
+// 创建清理任务
+$result = CleanupService::createCleanupTask([
+    'task_name' => '测试数据清理',
+    'cleanup_type' => 2, // 模块清理
+    'target_modules' => ['Farm', 'GameItems'],
+    'conditions' => [
+        'exclude_tables' => ['kku_farm_configs']
+    ]
+]);
+
+// 预览清理结果
+$preview = CleanupService::previewCleanup($taskId);
+
+// 执行清理
+$result = CleanupService::executeCleanup($taskId);
+```
+
+### 3. 表级配置管理
+
+```php
+use App\Module\Cleanup\Services\PlanService;
+
+// 配置农场用户表:按时间删除
+PlanService::configureTable(1, 'kku_farm_users', [
+    'cleanup_type' => 3,
+    'conditions' => [
+        'time_field' => 'created_at',
+        'before' => '90_days_ago'
+    ],
+    'priority' => 100,
+    'backup_enabled' => true,
+    'notes' => '保留90天内的农场用户数据'
+]);
+
+// 配置物品表:按用户删除
+PlanService::configureTable(1, 'kku_item_users', [
+    'cleanup_type' => 4,
+    'conditions' => [
+        'user_field' => 'user_id',
+        'user_condition' => 'in',
+        'user_values' => [1001, 1002, 1003]
+    ],
+    'priority' => 150,
+    'backup_enabled' => true,
+    'notes' => '清理指定测试用户的物品数据'
+]);
+
+// 配置缓存表:直接清空
+PlanService::configureTable(1, 'kku_cache', [
+    'cleanup_type' => 1,
+    'conditions' => null,
+    'priority' => 400,
+    'backup_enabled' => false,
+    'notes' => '缓存表直接清空,无需备份'
+]);
+```
+
+### 4. 数据备份管理
+
+```php
+use App\Module\Cleanup\Services\CleanupService;
+
+// 创建备份
+$backupResult = CleanupService::createPlanBackup($planId, [
+    'backup_type' => 'sql',
+    'compression' => 'gzip',
+    'include_structure' => true
+]);
+
+// 恢复备份
+$restoreResult = CleanupService::restoreBackup($backupId);
+```
+
+### 5. 后台管理
+
+访问以下URL进行后台管理:
+
+- `/admin/cleanup/plans` - 清理计划管理
+- `/admin/cleanup/plans/{id}/contents` - 计划内容和表级配置
+- `/admin/cleanup/tasks` - 清理任务管理
+- `/admin/cleanup/logs` - 清理日志查看
+- `/admin/cleanup/backups` - 数据备份管理
+- `/admin/cleanup/reports` - 统计报告
+
+## 安全注意事项
+
+### 1. 权限控制
+- 只有具有清理权限的用户才能执行清理操作
+- 危险操作需要多重确认
+- 所有操作都有完整的审计日志
+
+### 2. 数据保护
+- 配置数据默认不会被清理
+- 重要的用户数据需要特殊配置
+- 清理前自动创建数据备份
+- 备份文件自动压缩和哈希验证
+
+### 3. 备份机制
+- **自动备份**:清理前自动备份将要删除的数据
+- **多种格式**:支持SQL、JSON、CSV格式备份
+- **压缩存储**:自动压缩备份文件节省空间
+- **完整性验证**:MD5哈希验证备份文件完整性
+- **快速恢复**:支持一键恢复备份数据
+
+### 4. 操作建议
+- 首次使用时建议先使用预览模式
+- 系统会自动备份,无需手动备份
+- 在业务低峰期执行清理操作
+- 定期清理过期的备份文件
+
+## 性能优化
+
+### 1. 分批处理
+- 大表自动采用分批删除策略
+- 可配置每批处理的记录数量
+- 避免长时间锁表影响业务
+
+### 2. 优先级控制
+- 按优先级顺序执行清理
+- 重要表优先处理
+- 可配置清理的并发度
+
+### 3. 监控机制
+- 实时监控清理进度
+- 记录详细的性能指标
+- 支持清理过程的暂停和恢复
+
+## 故障排除
+
+### 常见问题
+
+1. **清理任务执行失败**
+   - 检查数据库连接是否正常
+   - 检查表是否存在外键约束
+   - 查看错误日志获取详细信息
+
+2. **清理速度过慢**
+   - 调整批处理大小
+   - 检查数据库索引是否合理
+   - 考虑在业务低峰期执行
+
+3. **权限不足**
+   - 确认用户具有清理权限
+   - 检查数据库用户权限
+   - 联系管理员分配权限
+
+### 日志查看
+
+```bash
+# 查看清理日志
+tail -f storage/logs/cleanup.log
+
+# 查看任务状态
+php artisan cleanup:status [task_id]
+```
+
+## 扩展开发
+
+### 添加新的清理类型
+
+1. 在 `CLEANUP_TYPE` 枚举中添加新类型
+2. 在 `CleanupExecutorLogic` 中实现清理逻辑
+3. 更新后台管理界面的选项
+
+### 添加新的数据分类
+
+1. 在 `DATA_CATEGORY` 枚举中添加新分类
+2. 更新表扫描逻辑识别新分类
+3. 配置默认的清理策略
+
+## 版本历史
+
+- **v1.0.0** - 初始版本,基础清理功能
+- **v1.1.0** - 添加批量处理和进度监控
+- **v1.2.0** - 增强安全机制和权限控制
+
+## 相关文档
+
+- [设计概述](Docs/设计概述.md)
+- [数据库设计](Docs/数据库设计.md)  
+- [功能需求](Docs/功能需求.md)
+- [接口设计](Docs/接口设计.md)