20日1154-作物日志表实施完成.md 6.7 KB

作物日志表实施完成

时间: 2025年06月20日 11:54
任务: 增加作物日志表,记录作物生长过程中的关键事件

📋 任务概述

根据用户需求,增加了一个作物日志表来记录作物生长过程中的各种关键事件:

  • 作物确认果实种类情况
  • 确认产出数量情况
  • 灾害产生情况
  • 灾害去除情况
  • 收获情况

🗄️ 数据库设计

表结构:kku_farm_crop_logs

CREATE TABLE `kku_farm_crop_logs` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id` bigint unsigned NOT NULL COMMENT '用户ID',
  `land_id` bigint unsigned NOT NULL COMMENT '土地ID',
  `crop_id` bigint unsigned NOT NULL COMMENT '作物ID',
  `seed_id` bigint unsigned NOT NULL COMMENT '种子ID',
  `event_type` varchar(50) NOT NULL COMMENT '事件类型',
  `event_data` json DEFAULT NULL COMMENT '事件详细数据',
  `growth_stage` tinyint unsigned NOT NULL COMMENT '发生时的生长阶段',
  `land_type` tinyint unsigned NOT NULL COMMENT '土地类型',
  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '事件发生时间',
  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_crop_id` (`crop_id`),
  KEY `idx_event_type` (`event_type`),
  KEY `idx_created_at` (`created_at`),
  KEY `idx_user_crop` (`user_id`, `crop_id`),
  CONSTRAINT `farm_crop_logs_crop_id_foreign` FOREIGN KEY (`crop_id`) REFERENCES `kku_farm_crops` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='作物事件日志表';

事件类型定义

事件类型 常量 描述
fruit_confirmed EVENT_FRUIT_CONFIRMED 确认果实种类
output_calculated EVENT_OUTPUT_CALCULATED 确认产出数量
disaster_occurred EVENT_DISASTER_OCCURRED 灾害产生
disaster_cleared EVENT_DISASTER_CLEARED 灾害清除
harvested EVENT_HARVESTED 收获

🏗️ 代码实现

1. 模型层 (FarmCropLog)

文件: app/Module/Farm/Models/FarmCropLog.php

核心功能:

  • ✅ 完整的模型定义和关联关系
  • ✅ 事件类型常量定义
  • ✅ 属性访问器(事件类型名称、生长阶段名称)
  • ✅ 查询作用域(按事件类型、作物、用户筛选)
  • ✅ 静态方法快速记录各种事件

静态记录方法:

FarmCropLog::logFruitConfirmed($userId, $landId, $cropId, $seedId, $eventData);
FarmCropLog::logOutputCalculated($userId, $landId, $cropId, $seedId, $eventData);
FarmCropLog::logDisasterOccurred($userId, $landId, $cropId, $seedId, $eventData);
FarmCropLog::logDisasterCleared($userId, $landId, $cropId, $seedId, $eventData);
FarmCropLog::logHarvested($userId, $landId, $cropId, $seedId, $eventData);

2. 后台管理

控制器: app/Module/Farm/AdminControllers/FarmCropLogController.php
仓库: app/Module/Farm/Repositories/FarmCropLogRepository.php

功能特性:

  • ✅ 统计卡片显示各类事件数量
  • ✅ 列表页面显示关键信息和事件摘要
  • ✅ 详情页面显示完整的JSON事件数据
  • ✅ 多维度筛选(用户、作物、事件类型、生长阶段、时间范围)
  • ✅ 只读设计(禁用新增、编辑、删除)
  • ✅ 事件类型彩色标签显示

3. 业务逻辑集成

集成位置:

  • CropLogic::updateGrowthStage() - 确认果实种类事件
  • CropLogic::calculateMatureOutput() - 确认产出数量事件
  • CropLogic::harvestCrop() - 收获事件
  • CropLogic::clearDisaster() - 灾害清除事件
  • DisasterLogic::applyDisastersToCrop() - 灾害产生事件

📊 事件数据结构

确认果实种类事件

{
  "final_output_item_id": 2,
  "growth_stage": 2,
  "land_type": 1,
  "is_mystery_seed": true,
  "selected_output": {...},
  "land_effect_applied": true
}

确认产出数量事件

{
  "base_amount": 50,
  "final_amount": 75,
  "land_bonus": 10,
  "house_bonus": 15,
  "has_disaster": false,
  "disaster_max_amount": 2000,
  "global_max_output": 3000,
  "final_output_item_id": 2
}

灾害产生事件

{
  "disaster_type": "drought",
  "disaster_info": {
    "type": "drought",
    "severity": "medium",
    "duration": 3600,
    "generated_ts": 1750390798
  },
  "growth_stage": 3,
  "land_type": 1,
  "old_land_status": 1,
  "new_land_status": 2
}

灾害清除事件

{
  "disaster_type": "drought",
  "disaster_info": {...},
  "growth_stage": 3,
  "land_type": 1,
  "has_other_active_disasters": false,
  "old_land_status": 2,
  "new_land_status": 1,
  "cleared_at": "2025-06-20 11:39:58"
}

收获事件

{
  "item_id": 2,
  "amount": 75,
  "harvest_log_id": 1,
  "growth_stage": 4,
  "land_type": 1,
  "old_stage": 4,
  "new_stage": 5,
  "land_status_before": 1,
  "land_status_after": 3
}

🎯 功能验证

测试结果

  • ✅ 数据库表创建成功
  • ✅ 模型功能完整
  • ✅ 后台管理界面正常
  • ✅ 业务逻辑集成成功
  • ✅ 事件记录功能正常
  • ✅ 数据查询和显示正确

后台管理验证

  • ✅ 路由注册成功:/admin/farm-crop-logs
  • ✅ 统计卡片显示正确
  • ✅ 列表页面功能完整
  • ✅ 详情页面数据完整
  • ✅ 筛选功能正常

📁 文件清单

新增文件

  1. app/Module/Farm/Models/FarmCropLog.php - 作物日志模型
  2. app/Module/Farm/AdminControllers/FarmCropLogController.php - 后台控制器
  3. app/Module/Farm/Repositories/FarmCropLogRepository.php - 数据仓库
  4. app/Module/Farm/Databases/GenerateSql/farm_crop_logs.sql - SQL文件

修改文件

  1. app/Module/Farm/Logics/CropLogic.php - 集成日志记录
  2. app/Module/Farm/Logics/DisasterLogic.php - 集成灾害日志

🔄 系统优势

1. 完整的事件追踪

  • 记录作物生长全生命周期的关键事件
  • 提供详细的事件上下文数据
  • 支持事件时间线查看

2. 灵活的数据结构

  • JSON字段存储事件详细数据
  • 不同事件类型有不同的数据结构
  • 易于扩展新的事件类型

3. 高效的查询性能

  • 多维度索引优化
  • 支持按用户、作物、事件类型快速查询
  • 时间范围查询优化

4. 完善的后台管理

  • 直观的统计信息展示
  • 多维度筛选功能
  • 详细的事件数据查看

✅ 任务完成状态

  • 数据库表设计和创建
  • 模型层实现
  • 后台管理功能
  • 业务逻辑集成
  • 功能测试验证
  • 文档编写

任务状态: ✅ 已完成

作物日志系统已成功实施,为农场游戏提供了完整的作物事件追踪能力,便于运营分析和问题排查。