101640-修复房屋排行榜功能.md 4.0 KB

修复房屋排行榜功能

任务时间: 2025年06月10日 16:40
任务状态: ✅ 已完成
提交哈希: fda9514c

任务概述

修复房屋排行榜功能中的多个问题,包括数据不返回、缺少缓存机制、没有限制排行榜数量等问题。

问题分析

1. 主要问题

  • 请求ID: 6847e41ed1057
  • 现象: 房屋排行榜请求返回的 houseRank.list 为空,只有分页信息和用户排名
  • 根本原因: Handler中 pageSize 参数为0,导致查询限制为0,无法获取数据

2. 问题根源

  1. 参数处理错误: $page->getPerPage() 在请求中没有 perPage 字段时返回0
  2. 调试代码残留: HouseLogic.php 中有 dd() 语句阻止程序继续执行
  3. 缺少缓存机制: 每次请求都直接查询数据库
  4. 没有数量限制: 排行榜可能返回大量数据影响性能

修复内容

1. 修复Handler参数处理

文件: app/Module/AppGame/Handler/House/RankHandler.php

// 修复前
$pageSize = $page ? $page->getPerPage() : 20;

// 修复后  
$pageSize = $page && $page->getPerPage() > 0 ? $page->getPerPage() : 20;

说明: 当 getPerPage() 返回0或空值时,使用默认值20

2. 优化排行榜逻辑

文件: app/Module/Farm/Logics/HouseLogic.php

2.1 限制前100名

  • 设置 $maxRankLimit = 100 限制只显示前100名
  • 超出范围的请求返回空结果
  • 调整查询限制确保不超过前100名

2.2 增加10分钟缓存

// 缓存键
$cacheKey = $this->cachePrefix . 'house_rank:top100';

// 缓存前100名数据10分钟
Cache::put($cacheKey, $cachedRankList, 600);

2.3 优化用户排名查询

  • 增加用户排名缓存机制
  • 超出前100名的用户返回0表示未上榜
  • 缓存用户排名10分钟

2.4 修复总数统计

// 限制总数不超过100
return min($actualCount, 100);

3. 移除调试代码

  • 删除 dd($rankItems,$rankList); 语句
  • 清理临时调试日志

测试验证

测试命令

php artisan debug:reproduce-error 6847e41ed1057

修复前响应

{
  "houseRank": {
    "page": {
      "currentPage": "1",
      "lastPage": "1", 
      "total": "4"
    },
    "userRank": "1",
    "reason": "1"
  }
}

修复后响应

{
  "houseRank": {
    "page": {
      "currentPage": "1",
      "perPage": "20",
      "lastPage": "1",
      "total": "4"
    },
    "userRank": "1", 
    "reason": "1",
    "list": [
      {
        "rank": "1",
        "level": "12",
        "userId": "10006",
        "reason": "1",
        "nickname": "10006"
      },
      {
        "rank": "2", 
        "level": "1",
        "userId": "10000",
        "reason": "1",
        "nickname": "10000"
      },
      {
        "rank": "3",
        "level": "1", 
        "userId": "10001",
        "reason": "1",
        "nickname": "10001"
      },
      {
        "rank": "4",
        "level": "1",
        "userId": "10002", 
        "reason": "1",
        "nickname": "10002"
      }
    ]
  }
}

功能特性

1. 性能优化

  • 缓存机制: 前100名数据缓存10分钟
  • 用户排名缓存: 个人排名缓存10分钟
  • 数量限制: 只查询前100名,减少数据库压力

2. 用户体验

  • 排名显示: 正确显示用户在前100名中的排名
  • 未上榜处理: 超出前100名的用户显示排名为0
  • 分页支持: 支持分页查询前100名数据

3. 数据一致性

  • 排序规则: 按房屋等级降序,同等级按升级时间升序
  • 实时更新: 缓存过期后自动更新最新排行榜数据

相关文件

  • app/Module/AppGame/Handler/House/RankHandler.php - 请求处理器
  • app/Module/Farm/Logics/HouseLogic.php - 排行榜业务逻辑
  • app/Module/Farm/Services/HouseService.php - 服务层接口
  • app/Module/AppGame/Proto/HouseRankDto.php - Protobuf转换
  • app/Module/Farm/Dtos/HouseRankDto.php - 数据传输对象

任务状态

✅ 已完成 - 房屋排行榜功能已修复,支持前100名限制、10分钟缓存和正确的数据返回