425 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			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->successResponse(['data'=>[]],$request);
 | |
|         }
 | |
| 
 | |
| // 获取客户 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->successResponse(['data'=>[]],$request);
 | |
|             }
 | |
|             $accounts = $this->bpsAdAccountService->getMetaAdAccounts(['refresh_token' => $request->refresh_token_facebook]);
 | |
|         } elseif ($platformType === 2) {
 | |
|             if (!$request->refresh_token_google) {
 | |
|                return $this->successResponse(['data'=>[]],$request);
 | |
|             }
 | |
|             $accounts = $this->bpsAdAccountService->getGoogleAdAccounts(['refresh_token' => $request->refresh_token_google]);
 | |
|         } elseif ($platformType === 3) {
 | |
|             if (!$request->refresh_token_tiktok) {
 | |
|                return $this->successResponse(['data'=>[]],$request);
 | |
|             }
 | |
|             $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(['data'=>[]],$request);
 | |
|         }
 | |
| 
 | |
|         // 获取客户ID数组
 | |
|         $accountIds = array_unique(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->successResponse(['data'=>[]],$request);
 | |
|             }
 | |
|             $accounts = $this->bpsAdAccountService->getMetaAdAccounts(['refresh_token' => $request->refresh_token_facebook]);
 | |
|         } elseif ($platformType === 2) {
 | |
|             if (!$request->refresh_token_google) {
 | |
|                return $this->successResponse(['data'=>[]],$request);
 | |
|             }
 | |
|             $accounts = $this->bpsAdAccountService->getGoogleAdAccounts(['refresh_token' => $request->refresh_token_google]);
 | |
|         } elseif ($platformType === 3) {
 | |
|             if (!$request->refresh_token_tiktok) {
 | |
|                return $this->successResponse(['data'=>[]],$request);
 | |
|             }
 | |
|             $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(['data'=>[]],$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->successResponse(['data'=>[]],$request);
 | |
|             }
 | |
|             $accounts = $this->bpsAdAccountService->getMetaAdAccounts(['refresh_token' => $request->refresh_token_facebook]);
 | |
|         } elseif ($platformType === 2) {
 | |
|             if (!$request->refresh_token_google) {
 | |
|                 return $this->successResponse(['data'=>[]],$request);
 | |
|             }
 | |
|             $accounts = $this->bpsAdAccountService->getGoogleAdAccounts(['refresh_token' => $request->refresh_token_google]);
 | |
|         } elseif ($platformType === 3) {
 | |
|             if (!$request->refresh_token_tiktok) {
 | |
|                 return $this->successResponse(['data'=>[]],$request);
 | |
|             }
 | |
|             $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(['data'=>[]],$request);
 | |
|         }
 | |
| 
 | |
|         // 获取客户ID数组
 | |
|         $accountIds = array_unique(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->successResponse(['data'=>[]],$request);
 | |
|             }
 | |
|             $accounts = $this->bpsAdAccountService->getMetaAdAccounts(['refresh_token' => $request->refresh_token_facebook]);
 | |
|         } elseif ($platformType === 2) {
 | |
|             if (!$request->refresh_token_google) {
 | |
|                 return $this->successResponse(['data'=>[]],$request);
 | |
|             }
 | |
|             $accounts = $this->bpsAdAccountService->getGoogleAdAccounts(['refresh_token' => $request->refresh_token_google]);
 | |
|         } elseif ($platformType === 3) {
 | |
|             if (!$request->refresh_token_tiktok) {
 | |
|                 return $this->successResponse(['data'=>[]],$request);
 | |
|             }
 | |
|             $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(['data'=>[]],$request);
 | |
|         }
 | |
| 
 | |
|         // 获取客户ID数组
 | |
|         $accountIds = array_unique(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->successResponse(['data'=>[]],$request);
 | |
|             }
 | |
|             $accounts = $this->bpsAdAccountService->getMetaAdAccounts(['refresh_token' => $request->refresh_token_facebook]);
 | |
|         } elseif ($platformType === 2) {
 | |
|             if (!$request->refresh_token_google) {
 | |
|                return $this->successResponse(['data'=>[]],$request);
 | |
|             }
 | |
|             $accounts = $this->bpsAdAccountService->getGoogleAdAccounts(['refresh_token' => $request->refresh_token_google]);
 | |
|         } elseif ($platformType === 3) {
 | |
|             if (!$request->refresh_token_tiktok) {
 | |
|                return $this->successResponse(['data'=>[]],$request);
 | |
|             }
 | |
|             $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(['data'=>[]],$request);
 | |
|         }
 | |
| 
 | |
|         // 获取客户ID数组
 | |
|         $accountIds = array_unique(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
 | |
|         ]);
 | |
|     }
 | |
| 
 | |
| }
 | 
