This commit is contained in:
wong
2026-01-19 10:51:18 +08:00
parent 28f4479d3c
commit 3a0621aab8

View File

@@ -11,9 +11,9 @@ use app\api\controller\MessageController;
class MessageChatroomListJob class MessageChatroomListJob
{ {
/** /**
* 最大同步页数 * 最大同步页数0表示不限制同步所有页面
*/ */
const MAX_SYNC_PAGES = 1; const MAX_SYNC_PAGES = 0;
/** /**
* 队列任务处理 * 队列任务处理
@@ -96,17 +96,46 @@ class MessageChatroomListJob
$data = []; $data = [];
} }
// 判断是否有下一页,且未超过最大同步页数 // 获取 results 数组(实际的数据列表)
if (!empty($data) && is_array($data) && count($data) > 0) { $results = isset($data['results']) && is_array($data['results']) ? $data['results'] : [];
$nextPageIndex = $pageIndex + 1; $resultsCount = count($results);
// 检查是否超过最大同步页数
if ($nextPageIndex < self::MAX_SYNC_PAGES) { Log::info("获取到 {$resultsCount} 条群聊记录,页码:{$pageIndex},页大小:{$pageSize}");
// 有下一页且未超过最大页数,将下一页任务添加到队列
$this->addNextPageToQueue($nextPageIndex, $pageSize); // 判断是否有下一页
Log::info('添加下一页任务到队列,页码:' . $nextPageIndex); // 1. 如果返回的数据量等于页大小,说明可能还有下一页
} else { // 2. 或者检查是否有 total 字段,通过计算判断是否有下一页
Log::info('已达到最大同步页数(' . self::MAX_SYNC_PAGES . '),停止添加下一页任务'); $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; return true;