webman_ad/app/controller/BpsAdController.php
2025-01-10 21:24:15 +08:00

425 lines
17 KiB
PHP

<?php
namespace app\controller;
use app\service\GoogleAdsAdService;
use app\service\GoogleAdsCampaignService;
use app\service\GoogleAdsGroupService;
//use app\service\GoogleAdsReportService;
use app\service\AdsInsightService;
use app\service\GoogleOAuthService;
use app\service\BpsAdAccountService;
use DI\Annotation\Inject;
use support\Request;
use support\Response;
class BpsAdController
{
/**
* @Inject
* @var AdsInsightService
*/
private $adsInsightService;
/**
* @Inject
* @var GoogleAdsGroupService
*/
private $googleAdsGroupService;
/**
* @Inject
* @var GoogleAdsAdService
*/
private $googleAdsAdService;
/**
* @Inject
* @var GoogleAdsCampaignService
*/
private $googleAdsCampaignService;
/**
* @Inject
* @var GoogleOAuthService
*/
private $googleOAuthService;
/**
* @Inject
* @var BpsAdAccountService
*/
private $bpsAdAccountService;
public function listThirdUsers(Request $request)
{
$options = $request->all();
$options['jwtClaims'] = $request->jwtClaims;
// 获取请求参数
$page = $options['pageNo'] ?? 1; // 页码
$pageSize = $options['pageSize'] ?? 1000; // 每页数量
$keyword = $options['conditions']['keyword'] ?? ''; // 关键字搜索
$platformType = $options['conditions']['platformType'] ?? 0; // 平台类型
$startDate = $options['conditions']['startDate'] ?? null; // 开始日期
$endDate = $options['conditions']['endDate'] ?? null; // 结束日期
// dump($options);
// 根据 platformType 获取第三方用户数据
if ($platformType === 1) {
// 获取 Facebook 第三方用户数据
$users = $this->bpsAdAccountService->getMetaThirdUsers(['uid' => $options['jwtClaims']['uid']]);
} elseif ($platformType === 2) {
// 获取 Google 第三方用户数据
$users = $this->bpsAdAccountService->getGoogleThirdUsers(['uid' => $options['jwtClaims']['uid']]);
} elseif ($platformType === 3) {
// 获取 TikTok 第三方用户数据
$users = $this->bpsAdAccountService->getTiktokThirdUsers(['uid' => $options['jwtClaims']['uid']]);
} else {
// 根据 JWT claims 获取所有平台的第三方用户
$users = $this->bpsAdAccountService->getAllThirdUsers(['uid' => $options['jwtClaims']['uid']]);
}
if (empty($users)) {
return $this->errorResponse(1, 'no data');
}
// 获取客户 ID 数组,并去重
$userIds = array_unique(array_column($users, 'id'));
// 调用 Service 层查询第三方用户数据列表
$result = $this->adsInsightService::getThirdUserList(
$platformType, // 平台类型
$userIds, // 第三方用户 ID 数组
$page, // 页码
$pageSize, // 每页数量
$keyword, // 关键字
$startDate, // 开始日期
$endDate // 结束日期
);
// 返回结果
return $this->successResponse($result, $request);
}
public function listAds(Request $request)
{
$options = $request->all();
$options['jwtClaims'] = $request->jwtClaims;
// 获取请求参数
$page = $options['pageNo'] ?? 1; // 页码
$pageSize = $options['pageSize'] ?? 1000; // 每页数量
$keyword = $options['conditions']['keyword'] ?? ''; // 关键字搜索
$platformType = $options['conditions']['platformType'] ?? 0; // 平台类型
$status = $options['conditions']['status'] ?? 0; // 平台类型
$startDate = $options['conditions']['startDate'] ?? null; // 开始日期
$endDate = $options['conditions']['endDate'] ?? null; // 结束日期
// $dateRange = 'Last Week'; // 默认日期范围
// 根据 platformType 获取广告账户
if ($platformType === 1) {
if (!$request->refresh_token_facebook) {
return $this->errorResponse(0, 'no data');
}
$accounts = $this->bpsAdAccountService->getMetaAdAccounts(['refresh_token' => $request->refresh_token_facebook]);
} elseif ($platformType === 2) {
if (!$request->refresh_token_google) {
return $this->errorResponse(0, 'no data');
}
$accounts = $this->bpsAdAccountService->getGoogleAdAccounts(['refresh_token' => $request->refresh_token_google]);
} elseif ($platformType === 3) {
if (!$request->refresh_token_tiktok) {
return $this->errorResponse(0, 'no data');
}
$accounts = $this->bpsAdAccountService->getTiktokAdAccounts(['refresh_token' => $request->refresh_token_tiktok]);
} else {
// TODO: 匹配jwt的商户id还是登录用户id
$accounts = $this->bpsAdAccountService->getAllAdAccounts(['uid' => $options['jwtClaims']['uid']]);
}
if (empty($accounts)) {
return $this->successResponse([],$request);
}
// 获取客户ID数组
$accountIds = array_column($accounts, 'account_id');
// 调用 Service 层查询广告列表
$result = $this->adsInsightService::getAdList(
$platformType, // 平台类型
$accountIds, // 客户 ID 数组
$page, // 页码
$pageSize, // 每页数量
$keyword, // 关键字
$startDate, // 开始日期
$endDate, // 结束日期
$status
);
// 返回结果
return $this->successResponse($result, $request);
}
public function listCampaigns(Request $request)
{
$options = $request->all();
$options['jwtClaims'] = $request->jwtClaims;
// 获取请求参数
$page = $options['pageNo'] ?? 1; // 页码
$pageSize = $options['pageSize'] ?? 1000; // 每页数量
$keyword = $options['conditions']['keyword'] ?? ''; // 关键字搜索
$platformType = $options['conditions']['platformType'] ?? 0; // 关键字搜索
$status = $options['conditions']['status'] ?? 0; // 平台类型
$startDate = $options['conditions']['startDate'] ?? null; // 开始日期
$endDate = $options['conditions']['endDate'] ?? null; // 结束日期
// $dateRange = 'Last Week'; // 默认日期范围
// 根据 platformType 获取广告账户
if ($platformType === 1) {
if (!$request->refresh_token_facebook) {
return $this->errorResponse(0, 'no data');
}
$accounts = $this->bpsAdAccountService->getMetaAdAccounts(['refresh_token' => $request->refresh_token_facebook]);
} elseif ($platformType === 2) {
if (!$request->refresh_token_google) {
return $this->errorResponse(0, 'no data');
}
$accounts = $this->bpsAdAccountService->getGoogleAdAccounts(['refresh_token' => $request->refresh_token_google]);
} elseif ($platformType === 3) {
if (!$request->refresh_token_tiktok) {
return $this->errorResponse(0, 'no data');
}
$accounts = $this->bpsAdAccountService->getTiktokAdAccounts(['refresh_token' => $request->refresh_token_tiktok]);
} else {
// TODO: 匹配jwt的商户id还是登录用户id
$accounts = $this->bpsAdAccountService->getAllAdAccounts(['uid' => $options['jwtClaims']['uid']]);
}
if (empty($accounts)) {
return $this->successResponse([],$request);
}
// 获取客户ID数组
$accountIds = array_column($accounts, 'account_id');
// 调用 Service 层查询
$result = $this->adsInsightService::getCampaignList(
$platformType,
$accountIds, // 客户 ID 数组
$page, // 页码
$pageSize, // 每页数量
$keyword, // 关键字
$startDate, // 开始日期
$endDate, // 结束日期
$status
);
return $this->successResponse($result, $request);
// return $this->errorResponse(300,'授权失败');
}
public function listAdsets(Request $request)
{
$options = $request->all();
$options['jwtClaims'] = $request->jwtClaims;
// 获取请求参数
$page = $options['pageNo'] ?? 1; // 页码
$pageSize = $options['pageSize'] ?? 1000; // 每页数量
$keyword = $options['conditions']['keyword'] ?? ''; // 关键字搜索
$platformType = $options['conditions']['platformType'] ?? 0; // 平台类型
$status = $options['conditions']['status'] ?? 0; // 平台类型
$startDate = $options['conditions']['startDate'] ?? null; // 开始日期
$endDate = $options['conditions']['endDate'] ?? null; // 结束日期
// $dateRange = 'Last Week'; // 默认日期范围
// 根据 platformType 获取广告账户
if ($platformType === 1) {
if (!$request->refresh_token_facebook) {
return $this->errorResponse(0, 'no data');
}
$accounts = $this->bpsAdAccountService->getMetaAdAccounts(['refresh_token' => $request->refresh_token_facebook]);
} elseif ($platformType === 2) {
if (!$request->refresh_token_google) {
return $this->errorResponse(0, 'no data');
}
$accounts = $this->bpsAdAccountService->getGoogleAdAccounts(['refresh_token' => $request->refresh_token_google]);
} elseif ($platformType === 3) {
if (!$request->refresh_token_tiktok) {
return $this->errorResponse(0, 'no data');
}
$accounts = $this->bpsAdAccountService->getTiktokAdAccounts(['refresh_token' => $request->refresh_token_tiktok]);
} else {
// TODO: 匹配jwt的商户id还是登录用户id
$accounts = $this->bpsAdAccountService->getAllAdAccounts(['uid' => $options['jwtClaims']['uid']]);
}
if (empty($accounts)) {
return $this->successResponse([],$request);
}
// 获取客户ID数组
$accountIds = array_column($accounts, 'account_id');
// dump($accountIds);
// 调用 Service 层查询广告组列表
$result = $this->adsInsightService::getAdsetList(
$platformType,
$accountIds, // 客户 ID 数组
$page, // 页码
$pageSize, // 每页数量
$keyword, // 关键字
$startDate, // 开始日期
$endDate, // 结束日期
$status
);
// 返回结果
return $this->successResponse($result, $request);
}
public function listCreatives(Request $request)
{
$options = $request->all();
$options['jwtClaims'] = $request->jwtClaims;
// 获取请求参数
$page = $options['pageNo'] ?? 1; // 页码
$pageSize = $options['pageSize'] ?? 1000; // 每页数量
$keyword = $options['conditions']['keyword'] ?? ''; // 关键字搜索
$platformType = $options['conditions']['platformType'] ?? 0; // 平台类型
$startDate = $options['conditions']['startDate'] ?? null; // 开始日期
$endDate = $options['conditions']['endDate'] ?? null; // 结束日期
// $dateRange = 'Last Week'; // 默认日期范围
// 根据 platformType 获取广告账户
if ($platformType === 1) {
if (!$request->refresh_token_facebook) {
return $this->errorResponse(0, 'no data');
}
$accounts = $this->bpsAdAccountService->getMetaAdAccounts(['refresh_token' => $request->refresh_token_facebook]);
} elseif ($platformType === 2) {
if (!$request->refresh_token_google) {
return $this->errorResponse(0, 'no data');
}
$accounts = $this->bpsAdAccountService->getGoogleAdAccounts(['refresh_token' => $request->refresh_token_google]);
} elseif ($platformType === 3) {
if (!$request->refresh_token_tiktok) {
return $this->errorResponse(0, 'no data');
}
$accounts = $this->bpsAdAccountService->getTiktokAdAccounts(['refresh_token' => $request->refresh_token_tiktok]);
} else {
// TODO: 匹配jwt的商户id还是登录用户id
$accounts = $this->bpsAdAccountService->getAllAdAccounts(['uid' => $options['jwtClaims']['uid']]);
}
if (empty($accounts)) {
return $this->successResponse([],$request);
}
// 获取客户ID数组
$accountIds = array_column($accounts, 'account_id');
// dump($accountIds);
// 调用 Service 层查询广告组列表
$result = $this->adsInsightService->getCreativeInsightData(
$platformType,
$accountIds, // 客户 ID 数组
$page, // 页码
$pageSize, // 每页数量
$keyword, // 关键字
$startDate, // 开始日期
$endDate // 结束日期
);
// 返回结果
return $this->successResponse($result, $request);
}
public function listCharts(Request $request)
{
$options = $request->all();
$options['jwtClaims'] = $request->jwtClaims;
// 获取请求参数
$cycle = $options['conditions']['cycle'] ?? 3; // 页码
$platformType = $options['conditions']['platformType'] ?? 0; // 平台类型
$startDate = $options['conditions']['startDate'] ?? null; // 开始日期
$endDate = $options['conditions']['endDate'] ?? null; // 结束日期
// $dateRange = 'Last Week'; // 默认日期范围
// 根据 platformType 获取广告账户
if ($platformType === 1) {
if (!$request->refresh_token_facebook) {
return $this->errorResponse(0, 'no data');
}
$accounts = $this->bpsAdAccountService->getMetaAdAccounts(['refresh_token' => $request->refresh_token_facebook]);
} elseif ($platformType === 2) {
if (!$request->refresh_token_google) {
return $this->errorResponse(0, 'no data');
}
$accounts = $this->bpsAdAccountService->getGoogleAdAccounts(['refresh_token' => $request->refresh_token_google]);
} elseif ($platformType === 3) {
if (!$request->refresh_token_tiktok) {
return $this->errorResponse(0, 'no data');
}
$accounts = $this->bpsAdAccountService->getTiktokAdAccounts(['refresh_token' => $request->refresh_token_tiktok]);
} else {
// TODO: 匹配jwt的商户id还是登录用户id
$accounts = $this->bpsAdAccountService->getAllAdAccounts(['uid' => $options['jwtClaims']['uid']]);
}
if (empty($accounts)) {
return $this->successResponse([],$request);
}
// 获取客户ID数组
$accountIds = array_column($accounts, 'account_id');
// dump($accountIds);
// 调用 Service 层查询广告组列表
$result = $this->adsInsightService->getAdCycleInsight(
$platformType,
$accountIds, // 客户 ID 数组
$cycle, // 页码
$startDate, // 开始日期
$endDate // 结束日期
);
// 返回结果
return $this->successResponse($result, $request);
}
// 可以加入一些公共方法
protected function successResponse($data, Request $request): Response
{
if ($request->jwtNewToken) {
return new Response(200,
[
'Content-Type' => 'application/json',
'X-New-Token' => $request->jwtNewToken
],
json_encode($data, JSON_UNESCAPED_UNICODE));
} else {
return Json([
'code' => 0,
'msg' => 'ok',
'data' => $data,
]);
}
}
protected function errorResponse($code, $message, $data = []): Response
{
return Json([
'code' => $code,
'msg' => $message ?: 'error',
'data' => $data
]);
}
}