diff --git a/app/service/AdsInsightService.php b/app/service/AdsInsightService.php index f52be73..33e2f78 100644 --- a/app/service/AdsInsightService.php +++ b/app/service/AdsInsightService.php @@ -829,7 +829,15 @@ class AdsInsightService ]); // 6. 执行查询并获取聚合结果 - $aggregatedData = $creativeDataQuery->select(); +// $aggregatedData = $creativeDataQuery->select(); + // 6. 执行查询并获取聚合结果 + $aggregatedData = $creativeDataQuery->select()->toArray(); // 转换为数组处理 + $totalRecords = count($aggregatedData); // 总记录数 + + // 计算分页起始索引 + $startIndex = ($page - 1) * $pageSize; + + // 打印调试 SQL 查询 //$sql = $creativeDataQuery->getLastSql(); // dump($sql); @@ -842,15 +850,16 @@ class AdsInsightService // 8. 遍历查询结果并计算每个 creative 的相关统计数据 foreach ($aggregatedData as $creativeData) { // 初始化该 creative_id 的数据(如果不存在) - if (!isset($creativeSummaryData[$creativeData->creative_id])) { - $creativeSummaryData[$creativeData->creative_id] = [ - 'creative_id' => $creativeData->creative_id, - 'platform' => $creativeData->platform, - 'creative' => $creativeData->creative_name, // 使用联接查询中的 creative_name - 'creative_type' => $creativeData->creative_type, // 使用联接查询中的 creative_name - 'creative_url' => $creativeData->creative_url ?: '', // 使用联接查询中的 creative_url - 'thumbnail_url' => $creativeData->thumbnail_url ?: '', // 使用联接查询中的 thumbnail_url - 'title' => $creativeData->title ?: '', // 使用联接查询中的 title + $creativeId = $creativeData['creative_id']; + if (!isset($creativeSummaryData[$creativeId])) { + $creativeSummaryData[$creativeId] = [ + 'creative_id' => $creativeData['creative_id'], + 'platform' => $creativeData['platform'], + 'creative' => $creativeData['creative_name'], + 'creative_type' => $creativeData['creative_type'], + 'creative_url' => $creativeData['creative_url'] ?? '', + 'thumbnail_url' => $creativeData['thumbnail_url'] ?? '', + 'title' => $creativeData['title'] ?? '', 'spend' => 0, 'purchases_value' => 0, 'roas' => 0, @@ -882,21 +891,21 @@ class AdsInsightService } // 更新该 creative_id 的统计数据 - $creativeSummaryData[$creativeData->creative_id]['spend'] += $creativeData->total_spend; - $creativeSummaryData[$creativeData->creative_id]['purchases_value'] += $creativeData->total_purchases_value; - $creativeSummaryData[$creativeData->creative_id]['purchases'] += $creativeData->total_purchases; - $creativeSummaryData[$creativeData->creative_id]['impressions'] += $creativeData->total_impressions; - $creativeSummaryData[$creativeData->creative_id]['clicks'] += $creativeData->total_clicks; - $creativeSummaryData[$creativeData->creative_id]['revenue'] += $creativeData->total_revenue; - $creativeSummaryData[$creativeData->creative_id]['video_plays_25_rate'] += $creativeData->video_plays_25_rate; - $creativeSummaryData[$creativeData->creative_id]['video_plays_50_rate'] += $creativeData->video_plays_50_rate; - $creativeSummaryData[$creativeData->creative_id]['video_plays_75_rate'] += $creativeData->video_plays_75_rate; - $creativeSummaryData[$creativeData->creative_id]['video_plays_100_rate'] += $creativeData->video_plays_100_rate; + $creativeSummaryData[$creativeId]['spend'] += $creativeData['total_spend']; + $creativeSummaryData[$creativeId]['purchases_value'] += $creativeData['total_purchases_value']; + $creativeSummaryData[$creativeId]['purchases'] += $creativeData['total_purchases']; + $creativeSummaryData[$creativeId]['impressions'] += $creativeData['total_impressions']; + $creativeSummaryData[$creativeId]['clicks'] += $creativeData['total_clicks']; + $creativeSummaryData[$creativeId]['revenue'] += $creativeData['total_revenue']; + $creativeSummaryData[$creativeId]['video_plays_25_rate'] += $creativeData['video_plays_25_rate']; + $creativeSummaryData[$creativeId]['video_plays_50_rate'] += $creativeData['video_plays_50_rate']; + $creativeSummaryData[$creativeId]['video_plays_75_rate'] += $creativeData['video_plays_75_rate']; + $creativeSummaryData[$creativeId]['video_plays_100_rate'] += $creativeData['video_plays_100_rate']; // 计算 ROAS - $roas = $creativeSummaryData[$creativeData->creative_id]['spend'] > 0 - ? $creativeSummaryData[$creativeData->creative_id]['revenue'] / $creativeSummaryData[$creativeData->creative_id]['spend'] + $roas = $creativeSummaryData[$creativeId]['spend'] > 0 + ? $creativeSummaryData[$creativeId]['revenue'] / $creativeSummaryData[$creativeId]['spend'] : 0; - $creativeSummaryData[$creativeData->creative_id]['roas'] = $roas > 0 ? number_format($roas, 2) . 'X' : '-'; + $creativeSummaryData[$creativeId]['roas'] = $roas > 0 ? number_format($roas, 2) . 'X' : '-'; // 填充广告计数 // $creativeSummaryData[$creativeData->creative_id]['ad_count'] = rand(10, 200); // 每个 creative_id 对应一个广告 @@ -1009,11 +1018,11 @@ class AdsInsightService // 添加更多的格式化字段 ]; }, $creativeSummaryData); - - +// $formattedData = array_values($creativeSummaryData); // 未分页处理 + $pagedData = array_slice($creativeSummaryData, $startIndex, $pageSize); // 分页处理 // 9. 返回分页数据 return [ - 'data' => array_values($formattedData), + 'data' => $pagedData, 'total' => count($creativeSummaryData), 'statistics' => $statistics, // 汇总的统计数据 'pagination' => [