221859-农场作物增加土地等级字段.md 4.4 KB

农场作物增加土地等级字段

任务概述

为 FarmCrop 模型增加土地等级字段,种植时记录当前土地等级,后续确认作物产出使用该字段的等级,避免土地升级后影响已种植作物的产出计算。

执行时间

  • 开始时间:2025年06月22日 18:59
  • 完成时间:2025年06月22日 19:00
  • 总耗时:约1分钟

主要修改

1. 数据库结构修改

  • 文件app/Module/Farm/Databases/Migrations/add_land_level_to_farm_crops.sql
  • 修改内容
    • kku_farm_crops 表增加 land_level 字段(tinyint unsigned,默认值1)
    • 添加索引 idx_land_level 提高查询性能
    • 更新现有28条记录的土地等级数据

2. 模型层修改

  • 文件app/Module/Farm/Models/FarmCrop.php
  • 修改内容
    • 增加 @property int $land_level 注释
    • $fillable 数组中添加 land_level 字段

3. 业务逻辑修改

  • 文件app/Module/Farm/Logics/CropLogic.php
  • 修改内容
    • 种植逻辑:在 plantCrop 方法中记录 $crop->land_level = $land->land_type
    • 产出计算:在 calculateMatureOutput 方法中使用作物记录的土地等级而不是当前土地等级
    • 日志记录:所有作物事件日志记录中使用 $crop->land_level 字段

4. 后台管理界面修改

  • 文件app/Module/Farm/AdminControllers/FarmCropController.php
  • 修改内容
    • 列表页面:增加土地等级列,显示格式为 "土地类型名称(等级)"
    • 详情页面:增加土地等级字段显示
    • 编辑页面:增加土地等级下拉选择框,支持手动修改

功能特点

1. 数据一致性

  • 种植时记录土地等级,确保后续产出计算使用固定的等级
  • 避免土地升级后影响已种植作物的产出计算
  • 所有相关日志记录使用统一的土地等级字段

2. 后台管理

  • 列表页面直观显示土地等级信息
  • 支持手动编辑土地等级(用于数据修复)
  • 详情页面完整显示作物信息

3. 向后兼容

  • 现有数据自动更新为当前土地等级
  • 不影响现有功能的正常运行

测试验证

1. 数据库测试

  • ✅ 成功添加 land_level 字段
  • ✅ 成功更新28条现有记录
  • ✅ 索引创建成功

2. 后台界面测试

  • ✅ 列表页面正确显示土地等级(如:普通土地(1)、红土地(2))
  • ✅ 详情页面正确显示土地等级信息
  • ✅ 编辑页面支持土地等级选择和修改

3. 日志记录测试

  • ✅ 作物事件日志正确记录 land_type 字段
  • ✅ 事件详情显示完整的土地等级信息
  • ✅ 数据一致性良好

技术要点

1. 字段设计

  • 使用 tinyint unsigned 类型,节省存储空间
  • 默认值为1(普通土地等级)
  • 添加适当的注释说明字段用途

2. 业务逻辑

  • 种植时记录:$crop->land_level = $land->land_type
  • 产出计算时使用:$landType = FarmLandType::find($crop->land_level)
  • 日志记录时使用:'land_type' => $crop->land_level

3. 后台展示

  • 使用土地类型名称+等级的友好显示格式
  • 支持下拉选择框进行编辑
  • 提供帮助文本说明字段用途

影响范围

  • ✅ 数据库结构:新增字段,不影响现有数据
  • ✅ 种植功能:增强功能,不影响现有逻辑
  • ✅ 产出计算:优化逻辑,提高准确性
  • ✅ 后台管理:增强功能,提供更好的管理体验
  • ✅ 日志记录:数据更准确,便于追踪

提交信息

农场作物增加土地等级字段功能

- 为 farm_crops 表增加 land_level 字段,记录种植时的土地等级
- 更新 FarmCrop 模型,增加 land_level 字段定义和 fillable 配置
- 修改种植逻辑,在 CropLogic::plantCrop 中记录当前土地等级
- 更新产出计算逻辑,使用作物记录的 land_level 而不是当前土地等级
- 修改所有作物日志记录,使用 crop->land_level 字段确保一致性
- 更新后台管理界面,增加土地等级字段的显示、编辑和筛选功能
- 数据库迁移:更新现有 28 条作物记录的土地等级数据

功能说明:
- 种植时记录土地等级,后续确认作物产出使用该字段的等级
- 避免土地升级后影响已种植作物的产出计算
- 保证作物产出计算的一致性和准确性

任务状态

已完成 - 所有功能已实现并测试通过,代码已提交到远程仓库