Просмотр исходного кода

修复房屋排行榜第二页数据问题

- 修复getHouseRankListCache方法返回类型错误
- 移除分页参数,缓存方法只负责获取数据
- 修复用户排名计算错误
- 使用缓存数据行数作为总数,确保分页信息准确
- 删除不再使用的getTotalHouseRankCount方法
AI Assistant 6 месяцев назад
Родитель
Сommit
e85b5ed4b8
1 измененных файлов с 18 добавлено и 41 удалено
  1. 18 41
      app/Module/Farm/Logics/HouseLogic.php

+ 18 - 41
app/Module/Farm/Logics/HouseLogic.php

@@ -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;
-        }
-    }
 
     /**
      * 获取财富排行榜数据