|
@@ -0,0 +1,111 @@
|
|
|
|
|
+# 物品模块增加图表控制器实现三大材料持有排名
|
|
|
|
|
+
|
|
|
|
|
+**时间**: 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映射
|
|
|
|
|
+```php
|
|
|
|
|
+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. 可考虑添加缓存机制提升性能
|