|
|
@@ -275,7 +275,18 @@ class HouseLogic
|
|
|
// 限制只显示前100名
|
|
|
$maxRankLimit = 100;
|
|
|
$offset = ($page - 1) * $pageSize;
|
|
|
- $cachedRankList = $this->getHouseRankListCache($userId, $page, $pageSize);
|
|
|
+ // 如果请求的数据超出前100名,返回空结果
|
|
|
+ if ($offset >= $maxRankLimit) {
|
|
|
+ // 先获取缓存数据来计算实际总数
|
|
|
+ $cachedRankList = $this->getHouseRankListCache();
|
|
|
+ return new HouseRankDto([], 0, 1, [
|
|
|
+ 'page' => $page,
|
|
|
+ 'per_page' => $pageSize,
|
|
|
+ 'total' => count($cachedRankList)
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+
|
|
|
+ $cachedRankList = $this->getHouseRankListCache();
|
|
|
// 调整查询限制,确保不超过前100名
|
|
|
$actualLimit = min($pageSize, $maxRankLimit - $offset);
|
|
|
// 从缓存数据中获取当前页的数据
|
|
|
@@ -289,12 +300,11 @@ class HouseLogic
|
|
|
}
|
|
|
|
|
|
// 查询用户自己的排名
|
|
|
-
|
|
|
$userRank = 0;
|
|
|
foreach ($cachedRankList as $index => $item) {
|
|
|
if ($item->user_id == $userId) {
|
|
|
- $rank = $offset + $index + 1;
|
|
|
- $userRank = $rank;
|
|
|
+ $userRank = $index + 1; // 用户在整个排行榜中的排名
|
|
|
+ break; // 找到后立即退出循环
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -302,7 +312,7 @@ class HouseLogic
|
|
|
$pageInfo = [
|
|
|
'page' => $page,
|
|
|
'per_page' => $pageSize,
|
|
|
- 'total' => min($maxRankLimit, $this->getTotalHouseRankCount())
|
|
|
+ 'total' => count($cachedRankList) // 直接使用缓存数据的行数
|
|
|
];
|
|
|
|
|
|
return new HouseRankDto($rankItems, $userRank, 1, $pageInfo);
|
|
|
@@ -311,28 +321,14 @@ class HouseLogic
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 排行榜缓存
|
|
|
+ * 获取房屋排行榜缓存数据
|
|
|
*
|
|
|
- * @param int $userId
|
|
|
- * @param int $page
|
|
|
- * @param int $pageSize
|
|
|
- * @return HouseRankDto
|
|
|
+ * @return array
|
|
|
*/
|
|
|
- protected function getHouseRankListCache(int $userId, int $page = 1, int $pageSize = 20): array
|
|
|
+ protected function getHouseRankListCache(): array
|
|
|
{
|
|
|
-
|
|
|
// 限制只显示前100名
|
|
|
$maxRankLimit = 100;
|
|
|
- $offset = ($page - 1) * $pageSize;
|
|
|
-
|
|
|
- // 如果请求的数据超出前100名,返回空结果
|
|
|
- if ($offset >= $maxRankLimit) {
|
|
|
- return new HouseRankDto([], 0, 1, [
|
|
|
- 'page' => $page,
|
|
|
- 'per_page' => $pageSize,
|
|
|
- 'total' => min($maxRankLimit, $this->getTotalHouseRankCount())
|
|
|
- ]);
|
|
|
- }
|
|
|
|
|
|
|
|
|
// 尝试从缓存获取排行榜数据
|
|
|
@@ -368,26 +364,7 @@ class HouseLogic
|
|
|
}
|
|
|
|
|
|
|
|
|
- /**
|
|
|
- * 获取房屋排行榜总数(限制前100名)
|
|
|
- *
|
|
|
- * @return int
|
|
|
- */
|
|
|
- private function getTotalHouseRankCount(): int
|
|
|
- {
|
|
|
- try {
|
|
|
- // 获取实际用户总数,但最多返回100
|
|
|
- $actualCount = FarmUser::count();
|
|
|
|
|
|
- return min($actualCount, 100);
|
|
|
- } catch (\Exception $e) {
|
|
|
- Log::error('获取房屋排行榜总数失败', [
|
|
|
- 'error' => $e->getMessage()
|
|
|
- ]);
|
|
|
-
|
|
|
- return 0;
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
/**
|
|
|
* 获取财富排行榜数据
|