fix Creative 3
This commit is contained in:
parent
2577f5df58
commit
408380bf2f
@ -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)
|
public function getCreativeInsightData($platformType, $customerIds, $page, $pageSize, $keyword, $startDate = null, $endDate = null)
|
||||||
{
|
{
|
||||||
// 1. 创建查询对象,初始化 BpsAdCreativeInsight 查询
|
// 1. 创建查询对象,初始化 BpsAdCreativeInsight 查询
|
||||||
@ -900,9 +737,9 @@ class AdsInsightService
|
|||||||
$creativeSummaryData[$creativeData->creative_id] = [
|
$creativeSummaryData[$creativeData->creative_id] = [
|
||||||
'creative_id' => $creativeData->creative_id,
|
'creative_id' => $creativeData->creative_id,
|
||||||
'creative' => $creativeData->creative_name, // 使用联接查询中的 creative_name
|
'creative' => $creativeData->creative_name, // 使用联接查询中的 creative_name
|
||||||
'creative_url' => $creativeData->creative_url, // 使用联接查询中的 creative_url
|
'creative_url' => $creativeData->creative_url?: '', // 使用联接查询中的 creative_url
|
||||||
'thumbnail_url' => $creativeData->thumbnail_url, // 使用联接查询中的 thumbnail_url
|
'thumbnail_url' => $creativeData->thumbnail_url?: '', // 使用联接查询中的 thumbnail_url
|
||||||
'title' => $creativeData->title, // 使用联接查询中的 title
|
'title' => $creativeData->title?: '', // 使用联接查询中的 title
|
||||||
'spend' => 0,
|
'spend' => 0,
|
||||||
'purchase_value' => '-',
|
'purchase_value' => '-',
|
||||||
'roas' => 0,
|
'roas' => 0,
|
||||||
|
Loading…
Reference in New Issue
Block a user