22日2203-农场统计图表增加各等级土地产出果实统计.md 5.7 KB

农场统计图表:各等级土地产出果实种类统计

任务时间: 2025年06月22日 22:03 - 22:45 任务类型: 功能开发 模块: Farm(农场模块)

任务描述

在农场统计图表页面中增加各个等级土地的产出果实种类统计功能,为每个土地等级创建独立的统计卡片,显示该土地类型产出的不同果实种类及其出现次数。使用FarmCrop模型进行统计,并包含软删除数据以提供完整的数据分析。

实现内容

1. 基础架构设计

  • 基类: BaseLandFruitStatsCard - 抽象基类,提供通用的果实种类统计功能
  • 继承: UCore\DcatAdmin\Metrics\Examples\NumberS2(单行多数字卡片)
  • 设计模式: 模板方法模式,子类只需指定土地类型ID和名称

2. 具体实现类

  • 普通土地: NormalLandFruitStatsCard (土地类型ID: 1)
  • 红土地: RedLandFruitStatsCard (土地类型ID: 2)
  • 黑土地: BlackLandFruitStatsCard (土地类型ID: 3)
  • 金土地: GoldLandFruitStatsCard (土地类型ID: 4)

3. 数据来源

  • 表: kku_farm_crop_logs(作物事件日志表)
  • 事件类型: harvested(收获事件)
  • 统计维度: 按果实种类(event_data.item_id)统计收获次数
  • 关联表: kku_item_items(物品表,获取果实名称)

4. 统计逻辑

// 从作物表中统计指定土地等级的产出果实,按果实种类分组
// 使用withTrashed()包含软删除的数据
$cropStats = FarmCrop::withTrashed()
    ->where('land_level', $this->landType)
    ->whereNotNull('final_output_item_id')
    ->select('final_output_item_id', DB::raw('COUNT(*) as crop_count'))
    ->groupBy('final_output_item_id')
    ->get();

5. 显示效果

  • 卡片数量: 4个独立卡片,每个土地等级一个
  • 显示格式: 单行多数字(NumberS2)
  • 显示内容(包含软删除数据后):
    • 普通土地产出果实统计: 萝卜(8次)、辣椒(6次)
    • 红土地产出果实统计: 萝卜(23次)、辣椒(19次)、西瓜(4次)、苹果(3次)
    • 黑土地产出果实统计: 西瓜(12次)、苹果(7次)、萝卜(2次)、南瓜(1次)、草莓(1次)
    • 金土地产出果实统计: 西瓜(6次)、草莓(4次)、南瓜(2次)、苹果(2次)
  • 排序: 按作物数量降序排列
  • 特性: 包含软删除数据,提供完整的历史统计分析

6. 页面集成

  • 控制器: app/Module/Farm/AdminControllers/FarmMetricsController.php
  • 位置: 右侧列,房屋等级排名卡片下方
  • 布局: 2x2网格布局,每行2个卡片

数据验证

通过SQL查询验证统计数据准确性:

SELECT
    land_type,
    JSON_EXTRACT(event_data, '$.item_id') as item_id,
    COUNT(*) as harvest_count
FROM kku_farm_crop_logs
WHERE event_type = 'harvested'
GROUP BY land_type, JSON_EXTRACT(event_data, '$.item_id')
ORDER BY land_type, harvest_count DESC;

验证结果(包含软删除数据):

  • 普通土地(1): 萝卜(ID:2)8次、辣椒(ID:3)6次
  • 红土地(2): 萝卜(ID:2)23次、辣椒(ID:3)19次、西瓜(ID:5)4次、苹果(ID:4)3次
  • 黑土地(3): 西瓜(ID:5)12次、苹果(ID:4)7次、萝卜(ID:2)2次、南瓜(ID:7)1次、草莓(ID:6)1次
  • 金土地(4): 西瓜(ID:5)6次、草莓(ID:6)4次、南瓜(ID:7)2次、苹果(ID:4)2次

技术特点

  1. 模块化设计: 使用抽象基类和具体实现类,便于扩展新的土地类型
  2. 数据完整性: 使用withTrashed()包含软删除数据,提供完整的历史统计分析
  3. 数据准确性: 直接从FarmCrop表统计实际作物数据,按果实种类分组
  4. 性能优化: 使用SQL聚合函数进行数据库层面统计
  5. 用户体验: 每个土地类型独立卡片,数据清晰直观
  6. 智能排序: 按作物数量降序排列,突出主要产出果实
  7. 代码复用: 继承UCore框架的NumberS2卡片类,保持UI一致性
  8. 数据关联: 自动关联物品表获取果实名称,提升可读性
  9. 软删除支持: 符合用户偏好,统计包含删除数据以提供完整数据分析

测试结果

  • ✅ 4个独立统计卡片正常显示
  • ✅ 果实种类统计数据准确无误
  • ✅ 页面布局协调美观(2x2网格)
  • ✅ 无下拉选项(符合需求)
  • ✅ 数据库查询验证通过
  • ✅ 按收获次数正确排序
  • ✅ 物品名称正确显示

提交信息

第一次提交: 6c7ec653 - 初始实现(总产量统计) 第二次提交: 102686c8 - 重构为果实种类统计 第三次提交: 48654990 - 改用FarmCrop模型进行统计 第四次提交: bac5724b - 包含软删除数据的完整统计分析 最终Message: 农场统计图表:包含软删除数据的完整统计分析

相关文件

新增文件

  • app/Module/Farm/AdminControllers/Metrics/BaseLandFruitStatsCard.php - 抽象基类
  • app/Module/Farm/AdminControllers/Metrics/NormalLandFruitStatsCard.php - 普通土地统计
  • app/Module/Farm/AdminControllers/Metrics/RedLandFruitStatsCard.php - 红土地统计
  • app/Module/Farm/AdminControllers/Metrics/BlackLandFruitStatsCard.php - 黑土地统计
  • app/Module/Farm/AdminControllers/Metrics/GoldLandFruitStatsCard.php - 金土地统计

修改文件

  • app/Module/Farm/AdminControllers/FarmMetricsController.php - 主控制器

删除文件

  • app/Module/Farm/AdminControllers/Metrics/FarmLandOutputStatsCard.php - 原总产量统计卡片

依赖模型

  • app/Module/Farm/Models/FarmCropLog.php - 作物日志模型
  • app/Module/GameItems/Models/Item.php - 物品模型

访问地址

http://kku_laravel.local.gd/admin/farm-metrics