Explorar o código

refactor(farm): 优化农场模块文档和代码

- 新增种子数据初始化和房屋配置数据初始化
- 更新土地类型配置和升级配置
- 添加灾害JSON结构说明
- 优化过滤器帮助类,增加equalId方法
- 调整任务完成日志控制器中的过滤器使用
Your Name hai 8 meses
pai
achega
50cbd2393b

+ 5 - 0
UCore/DcatAdmin/FilterHelper.php

@@ -39,6 +39,11 @@ class FilterHelper
         $this->filter->equal($field, $label);
     }
 
+    public function equalId($field = 'id', $label = 'ID')
+    {
+        $this->filter->equal($field, $label);
+    }
+
     /**
      * in条件映射
      *

+ 119 - 6
app/Module/Farm/Docs/数据库设计.md

@@ -117,12 +117,16 @@ CREATE TABLE `farm_seeds` (
   `growth_time` int(10) unsigned NOT NULL COMMENT '生长期时间(秒)',
   `min_output` int(10) unsigned NOT NULL COMMENT '最小产出',
   `max_output` int(10) unsigned NOT NULL COMMENT '最大产出',
+  `item_id` bigint(20) unsigned NOT NULL COMMENT '对应的物品ID',
+  `output_item_id` bigint(20) unsigned NOT NULL COMMENT '产出的物品ID',
   `disaster_resistance` json DEFAULT NULL COMMENT '灾害抵抗',
   `display_attributes` json 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`),
-  KEY `idx_type` (`type`)
+  KEY `idx_type` (`type`),
+  KEY `idx_item_id` (`item_id`),
+  KEY `idx_output_item_id` (`output_item_id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='种子配置表';
 ```
 
@@ -431,16 +435,82 @@ farm_land_upgrade_configs
 }
 ```
 
+### 5.6 灾害JSON详细结构 (disasters)
+
+灾害JSON存储在作物表的disasters字段中,记录作物当前遭受的所有灾害:
+
+```json
+{
+  "disasters": [
+    {
+      "type": 1,        // 灾害类型:1干旱,2虫害,3杂草
+      "occurred_at": "2023-05-01 12:00:00",  // 灾害发生时间
+      "impact": 0.05,  // 灾害影响程度(减产比例)
+      "status": 1      // 灾害状态:1未处理,2已处理
+    },
+    {
+      "type": 3,
+      "occurred_at": "2023-05-01 14:30:00",
+      "impact": 0.05,
+      "status": 1
+    }
+  ]
+}
+```
+
 ## 6. 数据初始化
 
 ### 6.1 种子数据
 
 初始化基本的种子数据,包括普通种子、神秘种子和巨化种子。
 
+```sql
+INSERT INTO `farm_seeds` (`id`, `name`, `type`, `seed_time`, `sprout_time`, `growth_time`, `min_output`, `max_output`, `item_id`, `output_item_id`, `disaster_resistance`) VALUES
+(1, '萝卜种子', 1, 1800, 3600, 7200, 1000, 1500, 2001, 3001, '{"drought": 0.05, "pest": 0.05, "weed": 0.05}'),
+(2, '辣椒种子', 1, 3600, 7200, 14400, 1500, 2000, 2002, 3002, '{"drought": 0.05, "pest": 0.05, "weed": 0.05}'),
+(3, '苹果种子', 1, 7200, 14400, 28800, 2000, 2500, 2003, 3003, '{"drought": 0.05, "pest": 0.05, "weed": 0.05}'),
+(4, '西瓜种子', 1, 10800, 21600, 43200, 2500, 3000, 2004, 3004, '{"drought": 0.05, "pest": 0.05, "weed": 0.05}'),
+(5, '草莓种子', 1, 14400, 28800, 57600, 3000, 3500, 2005, 3005, '{"drought": 0.05, "pest": 0.05, "weed": 0.05}'),
+(6, '南瓜种子', 1, 18000, 36000, 72000, 3500, 4000, 2006, 3006, '{"drought": 0.05, "pest": 0.05, "weed": 0.05}'),
+(7, '核桃种子', 1, 21600, 43200, 86400, 4000, 4500, 2007, 3007, '{"drought": 0.05, "pest": 0.05, "weed": 0.05}'),
+(8, '可可种子', 1, 25200, 50400, 100800, 4500, 5000, 2008, 3008, '{"drought": 0.05, "pest": 0.05, "weed": 0.05}'),
+(9, '人参种子', 1, 28800, 57600, 115200, 5000, 5500, 2009, 3009, '{"drought": 0.05, "pest": 0.05, "weed": 0.05}'),
+(10, '玫瑰种子', 1, 32400, 64800, 129600, 5500, 6000, 2010, 3010, '{"drought": 0.05, "pest": 0.05, "weed": 0.05}'),
+(11, '神秘种子', 2, 0, 0, 0, 0, 0, 2011, 0, NULL),
+(101, '巨化草莓种子', 3, 14400, 28800, 57600, 4500, 5250, 2101, 3005, '{"drought": 0.1, "pest": 0.1, "weed": 0.1}'),
+(102, '巨化南瓜种子', 3, 18000, 36000, 72000, 5250, 6000, 2102, 3006, '{"drought": 0.1, "pest": 0.1, "weed": 0.1}'),
+(103, '巨化核桃种子', 3, 21600, 43200, 86400, 6000, 6750, 2103, 3007, '{"drought": 0.1, "pest": 0.1, "weed": 0.1}'),
+(104, '巨化可可种子', 3, 25200, 50400, 100800, 6750, 7500, 2104, 3008, '{"drought": 0.1, "pest": 0.1, "weed": 0.1}'),
+(105, '巨化人参种子', 3, 28800, 57600, 115200, 7500, 8250, 2105, 3009, '{"drought": 0.1, "pest": 0.1, "weed": 0.1}'),
+(106, '巨化玫瑰种子', 3, 32400, 64800, 129600, 8250, 9000, 2106, 3010, '{"drought": 0.1, "pest": 0.1, "weed": 0.1}');
+```
+
 ### 6.2 房屋配置数据
 
 初始化12级房屋的配置数据,包括产出加成、特殊土地上限、升级材料和降级天数。
 
+```sql
+INSERT INTO `farm_house_configs` (`level`, `output_bonus`, `special_land_limit`, `upgrade_materials`, `downgrade_days`) VALUES
+(1, 0.00, 0, '{"materials": [{"item_id": 1001, "amount": 20}]}', NULL),
+(2, 0.05, 0, '{"materials": [{"item_id": 1001, "amount": 30}, {"item_id": 1002, "amount": 10}]}', 7),
+(3, 0.10, 0, '{"materials": [{"item_id": 1001, "amount": 40}, {"item_id": 1002, "amount": 20}]}', 7),
+(4, 0.15, 0, '{"materials": [{"item_id": 1001, "amount": 50}, {"item_id": 1002, "amount": 30}, {"item_id": 1003, "amount": 5}]}', 7),
+(5, 0.20, 0, '{"materials": [{"item_id": 1001, "amount": 60}, {"item_id": 1002, "amount": 40}, {"item_id": 1003, "amount": 10}]}', 7),
+(6, 0.25, 0, '{"materials": [{"item_id": 1001, "amount": 70}, {"item_id": 1002, "amount": 50}, {"item_id": 1003, "amount": 15}]}', 7),
+(7, 0.30, 2, '{"materials": [{"item_id": 1001, "amount": 80}, {"item_id": 1002, "amount": 60}, {"item_id": 1003, "amount": 20}, {"item_id": 1004, "amount": 5}]}', 7),
+(8, 0.35, 4, '{"materials": [{"item_id": 1001, "amount": 90}, {"item_id": 1002, "amount": 70}, {"item_id": 1003, "amount": 25}, {"item_id": 1004, "amount": 10}]}', 7),
+(9, 0.40, 6, '{"materials": [{"item_id": 1001, "amount": 100}, {"item_id": 1002, "amount": 80}, {"item_id": 1003, "amount": 30}, {"item_id": 1004, "amount": 15}]}', 7),
+(10, 0.45, 8, '{"materials": [{"item_id": 1001, "amount": 120}, {"item_id": 1002, "amount": 90}, {"item_id": 1003, "amount": 35}, {"item_id": 1004, "amount": 20}]}', 7),
+(11, 0.50, 10, '{"materials": [{"item_id": 1001, "amount": 140}, {"item_id": 1002, "amount": 100}, {"item_id": 1003, "amount": 40}, {"item_id": 1004, "amount": 25}]}', 7),
+(12, 0.60, 12, '{"materials": [{"item_id": 1001, "amount": 160}, {"item_id": 1002, "amount": 120}, {"item_id": 1003, "amount": 50}, {"item_id": 1004, "amount": 30}]}', NULL);
+```
+
+其中物品ID对应关系:
+- 1001: 木材
+- 1002: 石材
+- 1003: 钢材
+- 1004: 钻石
+
 ### 6.3 土地类型配置数据
 
 初始化土地类型配置数据:
@@ -461,13 +531,19 @@ INSERT INTO `farm_land_types` (`id`, `name`, `code`, `output_bonus`, `disaster_r
 
 ```sql
 INSERT INTO `farm_land_upgrade_configs` (`from_type_id`, `to_type_id`, `materials`, `conditions`) VALUES
-(1, 2, '{"materials": [{"item_name": "木材", "amount": 10}]}', NULL),
-(2, 3, '{"materials": [{"item_name": "石材", "amount": 10}]}', NULL),
-(3, 4, '{"materials": [{"item_name": "钢材", "amount": 10}, {"item_name": "钻石", "amount": 5}]}', '{"house_level_min": 7, "special_land_check": true}'),
-(3, 5, '{"materials": [{"item_name": "钢材", "amount": 10}, {"item_name": "钻石", "amount": 5}]}', '{"house_level_min": 7, "special_land_check": true}'),
-(3, 6, '{"materials": [{"item_name": "钢材", "amount": 10}, {"item_name": "钻石", "amount": 5}]}', '{"house_level_min": 7, "special_land_check": true}');
+(1, 2, '{"materials": [{"item_id": 1001, "amount": 10}]}', NULL),
+(2, 3, '{"materials": [{"item_id": 1002, "amount": 10}]}', NULL),
+(3, 4, '{"materials": [{"item_id": 1003, "amount": 10}, {"item_id": 1004, "amount": 5}]}', '{"house_level_min": 7, "special_land_check": true}'),
+(3, 5, '{"materials": [{"item_id": 1003, "amount": 10}, {"item_id": 1004, "amount": 5}]}', '{"house_level_min": 7, "special_land_check": true}'),
+(3, 6, '{"materials": [{"item_id": 1003, "amount": 10}, {"item_id": 1004, "amount": 5}]}', '{"house_level_min": 7, "special_land_check": true}');
 ```
 
+其中物品ID对应关系:
+- 1001: 木材
+- 1002: 石材
+- 1003: 钢材
+- 1004: 钻石
+
 ### 6.5 新用户初始化
 
 新用户注册时,需要:
@@ -505,3 +581,40 @@ INSERT INTO `farm_land_upgrade_configs` (`from_type_id`, `to_type_id`, `material
 ### 8.3 批量操作
 
 使用批量插入和更新操作处理大量数据,如批量更新作物生长状态。
+
+## 9. 种子与作物系统数据示例
+
+### 9.1 普通种子列表
+
+| ID | 名称 | 种子期(秒) | 发芽期(秒) | 生长期(秒) | 最小产出 | 最大产出 |
+|----|------|-----------|-----------|-----------|---------|---------|
+| 1 | 萝卜种子 | 1800 | 3600 | 7200 | 1000 | 1500 |
+| 2 | 辣椒种子 | 3600 | 7200 | 14400 | 1500 | 2000 |
+| 3 | 苹果种子 | 7200 | 14400 | 28800 | 2000 | 2500 |
+| 4 | 西瓜种子 | 10800 | 21600 | 43200 | 2500 | 3000 |
+| 5 | 草莓种子 | 14400 | 28800 | 57600 | 3000 | 3500 |
+| 6 | 南瓜种子 | 18000 | 36000 | 72000 | 3500 | 4000 |
+| 7 | 核桃种子 | 21600 | 43200 | 86400 | 4000 | 4500 |
+| 8 | 可可种子 | 25200 | 50400 | 100800 | 4500 | 5000 |
+| 9 | 人参种子 | 28800 | 57600 | 115200 | 5000 | 5500 |
+| 10 | 玫瑰种子 | 32400 | 64800 | 129600 | 5500 | 6000 |
+
+### 9.2 巨化种子列表
+
+| ID | 名称 | 对应普通种子 | 产量倍率 |
+|----|------|------------|---------|
+| 101 | 巨化草莓种子 | 草莓种子 | 1.5 |
+| 102 | 巨化南瓜种子 | 南瓜种子 | 1.5 |
+| 103 | 巨化核桃种子 | 核桃种子 | 1.5 |
+| 104 | 巨化可可种子 | 可可种子 | 1.5 |
+| 105 | 巨化人参种子 | 人参种子 | 1.5 |
+| 106 | 巨化玫瑰种子 | 玫瑰种子 | 1.5 |
+
+### 9.3 神灵加持类型
+
+| 加持类型 | 值 | 效果描述 | 应用场景 |
+|---------|---|---------|---------|
+| 丰收之神 | 1 | 确保收获时获得最高产量 | 收获作物时直接使用种子的最大产量值 |
+| 雨露之神 | 2 | 防止干旱灾害 | 生成灾害时不会生成干旱类型的灾害 |
+| 屠草之神 | 3 | 防止杂草灾害 | 生成灾害时不会生成杂草类型的灾害 |
+| 拭虫之神 | 4 | 防止虫害灾害 | 生成灾害时不会生成虫害类型的灾害 |

+ 1 - 11
app/Module/Task/AdminControllers/Helper/FilterHelperTrait.php

@@ -14,17 +14,7 @@ use App\Module\Task\Models\TaskCategory;
  */
 trait FilterHelperTrait
 {
-    /**
-     * ID过滤器
-     *
-     * @param string $field 字段名
-     * @param string $label 标签
-     * @return \Dcat\Admin\Grid\Filter\AbstractFilter
-     */
-    public function equal(string $field = 'id', string $label = 'ID')
-    {
-        return $this->filter->equal($field, $label);
-    }
+
 
     /**
      * 用户ID过滤器

+ 1 - 11
app/Module/Task/AdminControllers/Helper/GridHelperTrait.php

@@ -137,17 +137,7 @@ trait GridHelperTrait
         });
     }
 
-    /**
-     * 显示用户ID
-     *
-     * @param string $field 字段名
-     * @param string $label 标签
-     * @return \Dcat\Admin\Grid\Column
-     */
-    public function columnUserId(string $field = 'user_id', string $label = '用户ID')
-    {
-        return $this->grid->column($field, $label);
-    }
+
 
     /**
      * 显示任务选择器

+ 1 - 1
app/Module/Task/AdminControllers/TaskCompletionLogController.php

@@ -47,7 +47,7 @@ class TaskCompletionLogController extends AdminController
 
             $grid->filter(function (Grid\Filter $filter) {
                 $filterHelper = new FilterHelper($filter, $this);
-                $filterHelper->equal();
+                $filterHelper->equalId();
                 $filterHelper->equalUserId();
                 $filterHelper->equalTaskId();
                 $filterHelper->equal('user_task_id', '用户任务ID');