From 408380bf2f2c199f8962d13c70197dc7a87f0c70 Mon Sep 17 00:00:00 2001 From: huangguancheng Date: Fri, 10 Jan 2025 20:31:27 +0800 Subject: [PATCH] fix Creative 3 --- app/service/AdsInsightService.php | 169 +----------------------------- 1 file changed, 3 insertions(+), 166 deletions(-) diff --git a/app/service/AdsInsightService.php b/app/service/AdsInsightService.php index 1868ccb..3a76cc4 100644 --- a/app/service/AdsInsightService.php +++ b/app/service/AdsInsightService.php @@ -664,169 +664,6 @@ class AdsInsightService } - /** - * 获取广告资产报告 - * - * @param string $keyword 关键词(广告素材名称模糊搜索) - * @param string $dateRange 日期范围:Today, Yesterday, Last Week, Last Month, Last Year - * @param string|null $startDate 起始日期(可选) - * @param string|null $endDate 结束日期(可选) - * @param int $page 当前页码 - * @param int $pageSize 每页数量 - * @return array - */ - public function getCreativeInsightData11111($platformType, $customerIds, $page, $pageSize, $keyword, $startDate = null, $endDate = null) - { - // 1. 获取符合条件的 ad_id 列表,并且筛选 AssetRelation 的 date 字段 - $adIdsQuery = AssetRelation::alias('r') - ->leftJoin('bps.bps_google_ads_asset a', 'r.asset_id = a.asset_id') // 关联资产表 - ->where(function ($query) use ($keyword) { - if ($keyword) { - $query->where('a.asset_name', 'like', '%' . $keyword . '%'); // 关键词模糊匹配 - } - }); - - // 如果提供了 customerIds,增加查询条件 - if (!empty($customerIds)) { - $adIdsQuery->whereIn('a.customer_id', $customerIds); // 添加 customer_id 的查询约束 - } else { - return [ - 'data' => [], - 'total' => 0, - 'statistics' => [], - 'pagination' => [ - 'startIndex' => 0, - 'maxResults' => $pageSize, - 'count' => 0, - 'pageNo' => 1, - 'pageSize' => $pageSize, - 'pages' => 1 - ] - ]; - } - - // 日期范围处理,筛选 AssetRelation 的 date 字段 - if ($startDate && $endDate) { - $adIdsQuery->whereBetween('r.date', [$startDate, $endDate]); - } - - // 获取唯一的 ad_id 列表 - $adIds = $adIdsQuery->distinct(true)->column('r.ad_id'); - - // 2. 根据 ad_id 和日期范围去查询 DayData 表,按 ad_id 聚合统计 - $dayDataQuery = DayData::alias('d') - ->whereIn('d.ad_id', $adIds) // 使用 ad_id 过滤 - ->where(function ($query) use ($startDate, $endDate) { - // 日期范围的筛选 - if ($startDate && $endDate) { - $query->whereBetween('d.date', [$startDate, $endDate]); - } - }); - - - $dayDataQuery->group('d.ad_id,d.ad_name, d.ad_resource_name, d.ad_group_id, d.campaign_id, d.customer_id'); // 按 ad_id 聚合 - $dayDataQuery->field([ - 'd.ad_id', - ThinkDb::raw('SUM(d.cost_micros) / 1000000 AS total_spend'), - ThinkDb::raw('SUM(d.conversions_value) AS total_conversions_value'), - ThinkDb::raw('SUM(d.conversions) AS total_conversions'), - ThinkDb::raw('SUM(d.impressions) AS total_impressions'), - ThinkDb::raw('SUM(d.clicks) AS total_clicks') - ]); - - // 获取聚合数据 - $aggregatedData = $dayDataQuery->select(); - - // 3. 获取与 ad_id 关联的 asset_id 以及相关数据 - $assetRelationsQuery = AssetRelation::whereIn('ad_id', $adIds) - ->whereBetween('date', [$startDate, $endDate]) // 加上 AssetRelation 的 date 过滤 - ->field(['asset_id', 'ad_id'])->select(); - - // 4. 汇总每个 asset_id 下的所有 ad_id 的聚合数据 - $assetSummaryData = []; - $statisticsData = $this->initializeStatistics(); // 初始化统计数据 - - foreach ($assetRelationsQuery as $assetRelation) { - $adStatsCollection = $aggregatedData->where('ad_id', $assetRelation->ad_id); - - if (!$adStatsCollection->isEmpty()) { - if (!isset($assetSummaryData[$assetRelation->asset_id])) { - $assetSummaryData[$assetRelation->asset_id] = [ - 'creative_id' => $assetRelation->asset_id, - 'creative' => '-', - 'creative_type' => 0, - 'creative_url' => '-', - 'spend' => 0, - 'purchase_value' => '-', - 'roas' => 0, - 'cpa' => '-', - 'cpc_link_click' => '-', - 'cpm' => '-', - 'cpc_all' => '-', - 'aov' => '-', - 'click_to_atc_ratio' => '-', - 'atc_to_purchase_ratio' => '-', - 'purchases' => '-', - 'first_frame_retention' => '-', - 'thumbstop' => '-', - 'ctr_outbound' => '-', - 'click_to_purchase' => '-', - 'ctr_all' => '-', - 'video_plays_25_rate' => '-', - 'video_plays_50_rate' => '-', - 'video_plays_75_rate' => '-', - 'video_plays_100_rate' => '-', - 'hold_rate' => '-', - 'total_conversions_value' => 0, - 'total_conversions' => 0, - 'total_impressions' => 0, - 'ad_count' => 0 - ]; - } - - // 更新每个广告素材的统计数据 - foreach ($adStatsCollection as $adStats) { - $assetSummaryData[$assetRelation->asset_id]['spend'] += $adStats->total_spend; - $assetSummaryData[$assetRelation->asset_id]['total_conversions_value'] += $adStats->total_conversions_value; - $assetSummaryData[$assetRelation->asset_id]['total_conversions'] += $adStats->total_conversions; - $assetSummaryData[$assetRelation->asset_id]['total_impressions'] += $adStats->total_impressions; - - // 汇总 statisticsData - $statisticsData['spend'] += $adStats->total_spend; - $statisticsData['conversions_value'] += $adStats->total_conversions_value; - $statisticsData['total_conversions'] += $adStats->total_conversions; - $statisticsData['total_impressions'] += $adStats->total_impressions; - } - - // 计算 ROAS - $roas = $assetSummaryData[$assetRelation->asset_id]['spend'] > 0 ? - $assetSummaryData[$assetRelation->asset_id]['total_conversions_value'] / $assetSummaryData[$assetRelation->asset_id]['spend'] : - 0; - $assetSummaryData[$assetRelation->asset_id]['roas'] = $roas > 0 ? number_format($roas, 2) . 'X' : '-'; - - // 填充 ad_count 和 creative_data - $assetSummaryData[$assetRelation->asset_id]['ad_count'] = count($adStatsCollection); - $assetSummaryData[$assetRelation->asset_id]['creative'] = $adStatsCollection[0]->ad_name; // 假设第一个 ad 的名称作为 creative_name - } - } - - // 返回分页数据 - return [ - 'data' => array_values($assetSummaryData), - 'total' => count($assetSummaryData), - 'statistics' => $statisticsData, // 汇总的统计数据 - 'pagination' => [ - 'startIndex' => ($page - 1) * $pageSize, - 'maxResults' => $pageSize, - 'count' => count($assetSummaryData), - 'pageNo' => $page, - 'pageSize' => $pageSize, - 'pages' => ceil(count($assetSummaryData) / $pageSize) - ] - ]; - } - - public function getCreativeInsightData($platformType, $customerIds, $page, $pageSize, $keyword, $startDate = null, $endDate = null) { // 1. 创建查询对象,初始化 BpsAdCreativeInsight 查询 @@ -900,9 +737,9 @@ class AdsInsightService $creativeSummaryData[$creativeData->creative_id] = [ 'creative_id' => $creativeData->creative_id, 'creative' => $creativeData->creative_name, // 使用联接查询中的 creative_name - 'creative_url' => $creativeData->creative_url, // 使用联接查询中的 creative_url - 'thumbnail_url' => $creativeData->thumbnail_url, // 使用联接查询中的 thumbnail_url - 'title' => $creativeData->title, // 使用联接查询中的 title + 'creative_url' => $creativeData->creative_url?: '', // 使用联接查询中的 creative_url + 'thumbnail_url' => $creativeData->thumbnail_url?: '', // 使用联接查询中的 thumbnail_url + 'title' => $creativeData->title?: '', // 使用联接查询中的 title 'spend' => 0, 'purchase_value' => '-', 'roas' => 0,