221559-物品模块增加图表控制器实现三大材料持有排名.md 3.7 KB

物品模块增加图表控制器实现三大材料持有排名

时间: 2025-06-22 15:59
任务: 物品模块,增加图表控制器,参考 app/Module/Admin/AdminControllers/MetricsController.php,三大材料(木材/石材/钢材)的持有排名,用户排名

任务完成情况

已完成 - 成功实现物品模块图表控制器,展示三大材料持有排名功能

实现内容

1. 新增文件

图表控制器

  • 文件: app/Module/GameItems/AdminControllers/MetricsController.php
  • 功能: 物品模块图表控制器主入口
  • 路由: /admin/game-items-metrics
  • 描述: 提供物品相关的数据统计和图表展示

材料排名图表组件

  • 文件: app/Module/GameItems/AdminControllers/Metrics/MaterialRanking.php
  • 功能: 材料持有排名图表组件
  • 继承: UCore\DcatAdmin\Metrics\Examples\Ranking
  • 特性:
    • 支持三大材料(木材/石材/钢材)的排名切换
    • 显示前20名用户持有量
    • 排除冻结和过期的物品
    • 支持下拉菜单切换材料类型

2. 修复问题

ItemUser模型关系缺失

  • 文件: app/Module/GameItems/Models/ItemUser.php
  • 问题: 缺少与User模型的关系定义
  • 修复: 添加 user() 关系方法,关联到 \App\Module\User\Models\User

3. 技术实现

材料ID映射

protected $materialIds = [
    'wood' => 33,   // 木材
    'stone' => 34,  // 石材
    'steel' => 35,  // 钢材
];

数据查询逻辑

  • 使用Eloquent模型查询,避免表前缀问题
  • 按用户分组统计材料持有总量
  • 排除冻结物品 (is_frozen = 0)
  • 排除过期物品 (expire_at IS NULL)
  • 按持有量降序排列,限制前20名

排名展示格式

  • 排名序号:1, 2, 3...
  • 用户名称:优先显示username,否则显示"用户{ID}"
  • 持有数量:格式化显示,如"19,957 个"

功能验证

测试结果

✅ 页面正常加载:http://kku_laravel.local.gd/admin/game-items-metrics
✅ 下拉菜单正常工作:木材排行榜/石材排行榜/钢材排行榜
✅ 数据正确显示:显示真实的用户持有量排名
✅ 切换功能正常:可以在三种材料间正常切换

示例数据

木材排行榜前5名:

  1. urs-10003: 19,957 个
  2. urs-10387: 10,000 个
  3. urs-10038: 10,000 个
  4. urs-10362: 10,000 个
  5. urs-10004: 9,975 个

路由注册

  • 路由方式: 使用 #[Get('game-items-metrics')] 注解
  • 自动注册: 通过 config/route-attributes.php 自动扫描注册
  • 访问地址: /admin/game-items-metrics

代码提交

提交信息:

物品模块:增加图表控制器,实现三大材料持有排名功能

- 新增 app/Module/GameItems/AdminControllers/MetricsController.php 图表控制器
- 新增 app/Module/GameItems/AdminControllers/Metrics/MaterialRanking.php 材料排名图表组件
- 实现木材/石材/钢材的用户持有量排名展示(前20名)
- 支持下拉菜单切换不同材料类型的排名
- 修复 ItemUser 模型缺少 user 关系的问题
- 路由地址:/admin/game-items-metrics

提交哈希: 1db7df93

技术要点

  1. 图表组件继承: 继承自 UCore\DcatAdmin\Metrics\Examples\Ranking
  2. 模型关系: 正确定义ItemUser与User的关系
  3. 数据查询: 使用Eloquent避免表前缀问题
  4. 路由注册: 使用注解方式自动注册路由
  5. 用户体验: 提供直观的排名展示和切换功能

后续建议

  1. 可考虑添加更多图表类型(如趋势图、分布图等)
  2. 可扩展到其他物品类型的统计
  3. 可添加时间范围筛选功能
  4. 可考虑添加缓存机制提升性能