From 3a0621aab8ca44a54b6c95aede72b34c79e61225 Mon Sep 17 00:00:00 2001 From: wong <106998207@qq.com> Date: Mon, 19 Jan 2026 10:51:18 +0800 Subject: [PATCH] 1 --- .../job/MessageChatroomListJob.php | 53 ++++++++++++++----- 1 file changed, 41 insertions(+), 12 deletions(-) diff --git a/Server/application/job/MessageChatroomListJob.php b/Server/application/job/MessageChatroomListJob.php index 9f23e48a..1f4e9187 100644 --- a/Server/application/job/MessageChatroomListJob.php +++ b/Server/application/job/MessageChatroomListJob.php @@ -11,9 +11,9 @@ use app\api\controller\MessageController; class MessageChatroomListJob { /** - * 最大同步页数 + * 最大同步页数(0表示不限制,同步所有页面) */ - const MAX_SYNC_PAGES = 1; + const MAX_SYNC_PAGES = 0; /** * 队列任务处理 @@ -96,17 +96,46 @@ class MessageChatroomListJob $data = []; } - // 判断是否有下一页,且未超过最大同步页数 - if (!empty($data) && is_array($data) && count($data) > 0) { - $nextPageIndex = $pageIndex + 1; - // 检查是否超过最大同步页数 - if ($nextPageIndex < self::MAX_SYNC_PAGES) { - // 有下一页且未超过最大页数,将下一页任务添加到队列 - $this->addNextPageToQueue($nextPageIndex, $pageSize); - Log::info('添加下一页任务到队列,页码:' . $nextPageIndex); - } else { - Log::info('已达到最大同步页数(' . self::MAX_SYNC_PAGES . '),停止添加下一页任务'); + // 获取 results 数组(实际的数据列表) + $results = isset($data['results']) && is_array($data['results']) ? $data['results'] : []; + $resultsCount = count($results); + + Log::info("获取到 {$resultsCount} 条群聊记录,页码:{$pageIndex},页大小:{$pageSize}"); + + // 判断是否有下一页 + // 1. 如果返回的数据量等于页大小,说明可能还有下一页 + // 2. 或者检查是否有 total 字段,通过计算判断是否有下一页 + $hasNextPage = false; + + if ($resultsCount > 0) { + // 方法1: 如果返回的数据量等于页大小,可能还有下一页 + if ($resultsCount >= $pageSize) { + $hasNextPage = true; + Log::info("返回数据量({$resultsCount})等于或大于页大小({$pageSize}),可能存在下一页"); } + + // 方法2: 如果有 total 字段,通过计算判断 + if (isset($data['total']) && is_numeric($data['total'])) { + $total = intval($data['total']); + $currentPageEnd = ($pageIndex + 1) * $pageSize; + $hasNextPage = ($currentPageEnd < $total); + Log::info("根据 total({$total})计算,当前页结束位置:{$currentPageEnd},是否有下一页:" . ($hasNextPage ? '是' : '否')); + } + } + + // 如果有下一页,且未超过最大同步页数,添加下一页任务 + if ($hasNextPage) { + $nextPageIndex = $pageIndex + 1; + + // 检查是否超过最大同步页数(0表示不限制) + if (self::MAX_SYNC_PAGES == 0 || $nextPageIndex < self::MAX_SYNC_PAGES) { + $this->addNextPageToQueue($nextPageIndex, $pageSize); + Log::info("添加下一页任务到队列,页码:{$nextPageIndex}"); + } else { + Log::info("已达到最大同步页数(" . self::MAX_SYNC_PAGES . "),停止添加下一页任务"); + } + } else { + Log::info("没有更多页面需要同步,页码:{$pageIndex},返回数据量:{$resultsCount}"); } return true;