限制 使用当前主体下的所有账号ID查询数据
This commit is contained in:
parent
dbdca8658d
commit
f3cbaa3854
@ -6,6 +6,7 @@ use app\service\GoogleAdsCampaignService;
|
||||
use app\service\GoogleAdsGroupService;
|
||||
use app\service\GoogleAdsAdService;
|
||||
use app\service\GoogleAdsReportService;
|
||||
use app\service\GoogleOAuthService;
|
||||
use support\Request;
|
||||
use support\Response;
|
||||
use DI\Annotation\Inject;
|
||||
@ -38,6 +39,12 @@ class AdController
|
||||
*/
|
||||
private $googleAdsCampaignService;
|
||||
|
||||
/**
|
||||
* @Inject
|
||||
* @var GoogleOAuthService
|
||||
*/
|
||||
private $googleOAuthService;
|
||||
|
||||
public function listAds(Request $request)
|
||||
{
|
||||
// 获取请求参数
|
||||
@ -57,9 +64,12 @@ class AdController
|
||||
// if ($endDate && !strtotime($endDate)) {
|
||||
// return response()->json(['error' => 'Invalid end date format'], 400);
|
||||
// }
|
||||
$customerIds = [8452924576,6977154211,1401879025];
|
||||
// $customerIds = [8452924576,6977154211,1401879025];
|
||||
$customers = $this->googleOAuthService->getGoogleAdCustomers(['refresh_token' => $request->refresh_token]);
|
||||
$customerIds = array_column($customers, 'customer_id');
|
||||
// dump($customers);
|
||||
// 调用 Service 层查询
|
||||
$result = $this->googleAdsReportService::getAdList($customerIds,$page, $pageSize, $keyword, $dateRange, $startDate, $endDate);
|
||||
$result = $this->googleAdsReportService::getAdList($customerIds, $page, $pageSize, $keyword, $dateRange, $startDate, $endDate);
|
||||
return $this->successResponse($result);
|
||||
}
|
||||
|
||||
@ -75,7 +85,9 @@ class AdController
|
||||
$startDate = $request->input('start_date', null); // 开始日期,默认为 null
|
||||
$endDate = $request->input('end_date', null); // 结束日期,默认为 null
|
||||
|
||||
$customerId = 4060397299;
|
||||
// $customerId = 4060397299;
|
||||
$customers = $this->googleOAuthService->getGoogleAdCustomers(['refresh_token' => $request->refresh_token]);
|
||||
$customerIds = array_column($customers, 'customer_id');
|
||||
|
||||
// 你可以进一步验证日期格式(可选)
|
||||
// if ($startDate && !strtotime($startDate)) {
|
||||
@ -86,7 +98,7 @@ class AdController
|
||||
// }
|
||||
|
||||
// 调用 Service 层查询
|
||||
$result = $this->googleAdsReportService->getAssetConversionData($customerId,$page, $pageSize, $keyword, $dateRange, $startDate, $endDate);
|
||||
$result = $this->googleAdsReportService->getAssetConversionData($customerIds, $page, $pageSize, $keyword, $dateRange, $startDate, $endDate);
|
||||
return $this->successResponse($result);
|
||||
}
|
||||
|
||||
@ -109,9 +121,11 @@ class AdController
|
||||
// if ($endDate && !strtotime($endDate)) {
|
||||
// return response()->json(['error' => 'Invalid end date format'], 400);
|
||||
// }
|
||||
$customerIds = [8452924576,6977154211,1401879025];
|
||||
// $customerIds = [8452924576, 6977154211, 1401879025];
|
||||
$customers = $this->googleOAuthService->getGoogleAdCustomers(['refresh_token' => $request->refresh_token]);
|
||||
$customerIds = array_column($customers, 'customer_id');
|
||||
// 调用 Service 层查询
|
||||
$result = $this->googleAdsReportService::getCampaignList($customerIds,$page, $pageSize, $keyword, $dateRange, $startDate, $endDate);
|
||||
$result = $this->googleAdsReportService::getCampaignList($customerIds, $page, $pageSize, $keyword, $dateRange, $startDate, $endDate);
|
||||
return $this->successResponse($result);
|
||||
// return $this->errorResponse(300,'授权失败');
|
||||
}
|
||||
@ -133,8 +147,10 @@ class AdController
|
||||
// return response()->json(['error' => 'Invalid end date format'], 400);
|
||||
// }
|
||||
|
||||
$customers = $this->googleOAuthService->getGoogleAdCustomers(['refresh_token' => $request->refresh_token]);
|
||||
$customerIds = array_column($customers, 'customer_id');
|
||||
// 调用 service 层导出数据
|
||||
return $this->googleAdsReportService::exportAdListToExcel($keyword, $dateRange, $startDate, $endDate);
|
||||
return $this->googleAdsReportService::exportAdListToExcel($customerIds, $keyword, $dateRange, $startDate, $endDate);
|
||||
}
|
||||
|
||||
public function exportCampaignsToExcel(Request $request)
|
||||
@ -153,9 +169,11 @@ class AdController
|
||||
// if ($endDate && !strtotime($endDate)) {
|
||||
// return response()->json(['error' => 'Invalid end date format'], 400);
|
||||
// }
|
||||
|
||||
$customers = $this->googleOAuthService->getGoogleAdCustomers(['refresh_token' => $request->refresh_token]);
|
||||
$customerIds = array_column($customers, 'customer_id');
|
||||
// dump($customerIds);
|
||||
// 调用 service 层导出数据
|
||||
return $this->googleAdsReportService::exportCampaignsToExcel($keyword, $dateRange, $startDate, $endDate);
|
||||
return $this->googleAdsReportService->exportCampaignsToExcel($customerIds,$keyword, $dateRange, $startDate, $endDate);
|
||||
}
|
||||
|
||||
public function exportGroupsToExcel(Request $request)
|
||||
@ -167,6 +185,9 @@ class AdController
|
||||
$startDate = $request->input('start_date', null); // 开始日期,默认为 null
|
||||
$endDate = $request->input('end_date', null); // 结束日期,默认为 null
|
||||
|
||||
$customers = $this->googleOAuthService->getGoogleAdCustomers(['refresh_token' => $request->refresh_token]);
|
||||
$customerIds = array_column($customers, 'customer_id');
|
||||
|
||||
// 你可以进一步验证日期格式(可选)
|
||||
// if ($startDate && !strtotime($startDate)) {
|
||||
// return response()->json(['error' => 'Invalid start date format'], 400);
|
||||
@ -176,7 +197,7 @@ class AdController
|
||||
// }
|
||||
|
||||
// 调用 service 层导出数据
|
||||
return $this->googleAdsReportService::exportAdGroupsToExcel($keyword, $dateRange, $startDate, $endDate);
|
||||
return $this->googleAdsReportService->exportAdGroupsToExcel($customerIds,$keyword, $dateRange, $startDate, $endDate);
|
||||
}
|
||||
|
||||
public function listGroups(Request $request)
|
||||
@ -198,9 +219,11 @@ class AdController
|
||||
// if ($endDate && !strtotime($endDate)) {
|
||||
// return response()->json(['error' => 'Invalid end date format'], 400);
|
||||
// }
|
||||
$customerIds = [8452924576,6977154211,1401879025];
|
||||
//$customerIds = [8452924576,6977154211,1401879025];
|
||||
$customers = $this->googleOAuthService->getGoogleAdCustomers(['refresh_token' => $request->refresh_token]);
|
||||
$customerIds = array_column($customers, 'customer_id');
|
||||
// 调用 Service 层查询
|
||||
$result = $this->googleAdsReportService::getAdGroupList($customerIds,$page, $pageSize, $keyword, $dateRange, $startDate, $endDate);
|
||||
$result = $this->googleAdsReportService::getAdGroupList($customerIds, $page, $pageSize, $keyword, $dateRange, $startDate, $endDate);
|
||||
return $this->successResponse($result);
|
||||
}
|
||||
|
||||
@ -223,19 +246,19 @@ $customerIds = [8452924576,6977154211,1401879025];
|
||||
*/
|
||||
public function updateCampaignStatus(Request $request): Response
|
||||
{
|
||||
$campaignStatus = [
|
||||
$campaignStatus = [
|
||||
0, // UNSPECIFIED
|
||||
1, // UNKNOWN
|
||||
2, // ENABLED
|
||||
3, // PAUSED
|
||||
4, // REMOVED
|
||||
];
|
||||
$requestData = $request->all(); // 获取请求数据
|
||||
$requestData['refresh_token'] = $request->refresh_token;
|
||||
$requestData = $request->all(); // 获取请求数据
|
||||
$requestData['refresh_token'] = $request->refresh_token;
|
||||
$requestData['login_customer_id'] = $request->login_customer_id;
|
||||
// dump($requestData);
|
||||
|
||||
$status = $requestData['status'];
|
||||
$status = $requestData['status'];
|
||||
if (!in_array($status, $campaignStatus)) {
|
||||
return $this->errorResponse(101, 'status参数错误');
|
||||
}
|
||||
@ -303,12 +326,12 @@ $customerIds = [8452924576,6977154211,1401879025];
|
||||
4 // REMOVED
|
||||
];
|
||||
|
||||
$requestData = $request->all(); // 获取请求数据
|
||||
$requestData['refresh_token'] = $request->refresh_token;
|
||||
$requestData = $request->all(); // 获取请求数据
|
||||
$requestData['refresh_token'] = $request->refresh_token;
|
||||
$requestData['login_customer_id'] = $request->login_customer_id;
|
||||
// dump($requestData);
|
||||
|
||||
$status = $requestData['status'];
|
||||
$status = $requestData['status'];
|
||||
// $options['bid_micro_amount'] = $options['amount'] * 1000000 < 0 ? 0 : $options['amount'] * 1000000;
|
||||
if (!in_array($status, $adGroupStatus)) {
|
||||
return $this->errorResponse(101, 'status参数错误');
|
||||
@ -337,12 +360,12 @@ $customerIds = [8452924576,6977154211,1401879025];
|
||||
4 // REMOVED
|
||||
];
|
||||
|
||||
$requestData = $request->all(); // 获取请求数据
|
||||
$requestData['refresh_token'] = $request->refresh_token;
|
||||
$requestData = $request->all(); // 获取请求数据
|
||||
$requestData['refresh_token'] = $request->refresh_token;
|
||||
$requestData['login_customer_id'] = $request->login_customer_id;
|
||||
// dump($requestData);
|
||||
|
||||
$status = $requestData['status'];
|
||||
$status = $requestData['status'];
|
||||
if (!in_array($status, $adStatus)) {
|
||||
return $this->errorResponse(101, 'status参数错误');
|
||||
}
|
||||
|
@ -200,8 +200,11 @@ class GoogleAdsReportService
|
||||
* @param string $dateRange
|
||||
* @return void
|
||||
*/
|
||||
public static function exportAdListToExcel($keyword, $dateRange, $startDate = null, $endDate = null)
|
||||
public static function exportAdListToExcel($customerIds,$keyword, $dateRange, $startDate = null, $endDate = null)
|
||||
{
|
||||
if (empty($customerIds)) {
|
||||
return [];
|
||||
}
|
||||
// 基础查询:广告表和日数据表联接
|
||||
$query = Ad::alias('a')
|
||||
->cache(false) // 强制不使用缓存
|
||||
@ -244,6 +247,7 @@ class GoogleAdsReportService
|
||||
COALESCE(SUM(d.impressions), -1) as reach,
|
||||
-1 as roas, -1 as be_roas, -1 as revenue, -1 as profit, -1 as delivery')
|
||||
->group('a.ad_id, a.ad_name, a.status, a.customer_id, a.ad_group_id, g.ad_group_name, a.campaign_id, c.campaign_name')
|
||||
->where('a.customer_id', 'in', $customerIds)
|
||||
->where(function ($query) use ($keyword) {
|
||||
if ($keyword) {
|
||||
$query->where('a.ad_name', 'like', '%' . $keyword . '%');
|
||||
@ -531,8 +535,12 @@ class GoogleAdsReportService
|
||||
* @param string $dateRange
|
||||
* @return void
|
||||
*/
|
||||
public static function exportCampaignsToExcel($keyword, $dateRange, $startDate = null, $endDate = null)
|
||||
public function exportCampaignsToExcel($customerIds,$keyword, $dateRange, $startDate = null, $endDate = null)
|
||||
{
|
||||
if(empty($customerIds)){
|
||||
return [];
|
||||
}
|
||||
|
||||
// 动态构建日期条件
|
||||
$dateCondition = '';
|
||||
if ($startDate && $endDate) {
|
||||
@ -571,6 +579,7 @@ class GoogleAdsReportService
|
||||
COALESCE(SUM(d.impressions), -1) as reach,
|
||||
-1 as roas, -1 as be_roas, -1 as revenue, -1 as profit, -1 as delivery')
|
||||
->group('c.campaign_id, c.status, c.customer_id, c.campaign_name')
|
||||
->where('c.customer_id', 'in', $customerIds)
|
||||
->where(function ($query) use ($keyword) {
|
||||
if ($keyword) {
|
||||
$query->where('c.campaign_name', 'like', '%' . $keyword . '%');
|
||||
@ -842,8 +851,11 @@ class GoogleAdsReportService
|
||||
/**
|
||||
* 将广告组数据导出到 Excel 文件
|
||||
*/
|
||||
public static function exportAdGroupsToExcel($keyword = '', $dateRange = 'Today', $startDate = null, $endDate = null)
|
||||
public function exportAdGroupsToExcel($customerIds,$keyword = '', $dateRange = 'Today', $startDate = null, $endDate = null)
|
||||
{
|
||||
if(empty($customerIds)){
|
||||
return [];
|
||||
}
|
||||
// 动态构建日期条件
|
||||
$dateCondition = '';
|
||||
if ($startDate && $endDate) {
|
||||
@ -883,6 +895,7 @@ class GoogleAdsReportService
|
||||
COALESCE(SUM(d.impressions), -1) as reach,
|
||||
-1 as roas, -1 as be_roas, -1 as revenue, -1 as profit, -1 as delivery')
|
||||
->group('ag.ad_group_id, ag.ad_group_name, ag.status, ag.campaign_id, c.campaign_name, ag.customer_id')
|
||||
->where('ag.customer_id', 'in', $customerIds) // 添加 customerIds 条件
|
||||
->where(function ($query) use ($keyword) {
|
||||
if ($keyword) {
|
||||
$query->where('ag.ad_group_name', 'like', '%' . $keyword . '%');
|
||||
@ -977,7 +990,7 @@ class GoogleAdsReportService
|
||||
* @param int $pageSize 每页数量
|
||||
* @return array
|
||||
*/
|
||||
public function getAssetConversionData($customerId, $page, $pageSize, $keyword, $dateRange, $startDate = null, $endDate = null)
|
||||
public function getAssetConversionData($customerIds, $page, $pageSize, $keyword, $dateRange, $startDate = null, $endDate = null)
|
||||
{
|
||||
|
||||
$isSameMonth = true; // 判断是否跨月
|
||||
@ -998,7 +1011,20 @@ class GoogleAdsReportService
|
||||
$query->where('a.asset_name', 'like', '%' . $keyword . '%'); // 关键词模糊匹配
|
||||
}
|
||||
});
|
||||
$adIdsQuery->where('a.customer_id', '=', $customerId);
|
||||
|
||||
// 如果提供了 customerIds,增加查询条件
|
||||
if (!empty($customerIds)) {
|
||||
$adIdsQuery->whereIn('a.customer_id', $customerIds); // 添加 customer_id 的查询约束
|
||||
} else {
|
||||
return [
|
||||
'data' => [],
|
||||
'chat_1_data' => [], // 返回按月汇总的 chat_data
|
||||
'total' => 0,
|
||||
'current_page' => 1,
|
||||
'last_page' => 1,
|
||||
];
|
||||
}
|
||||
|
||||
// 日期范围处理,筛选 AssetRelation 的 date 字段
|
||||
if ($startDate && $endDate) {
|
||||
$adIdsQuery->whereBetween('r.date', [$startDate, $endDate]);
|
||||
|
@ -88,30 +88,30 @@ class GoogleOAuthService
|
||||
}
|
||||
|
||||
//保存或更新某个主体部广告账号
|
||||
public function saveThirdUserAdvertiser($customer_id, $third_user_id,$login_customer_id,$customer)
|
||||
public function saveThirdUserAdvertiser($customer_id, $third_user_id, $login_customer_id, $customer)
|
||||
{
|
||||
// 确保 customer_id 和 third_user_id 是字符串
|
||||
$customer_id = (string) $customer_id;
|
||||
$tableName = 'bps_third_user_advertiser';
|
||||
$tableName = getenv('DB_PG_SCHEMA') ? getenv('DB_PG_SCHEMA') . '.' . $tableName : 'bps' . $tableName;
|
||||
$data = [
|
||||
// 确保 customer_id 和 third_user_id 是字符串
|
||||
$customer_id = (string)$customer_id;
|
||||
$tableName = 'bps_third_user_advertiser';
|
||||
$tableName = getenv('DB_PG_SCHEMA') ? getenv('DB_PG_SCHEMA') . '.' . $tableName : 'bps' . $tableName;
|
||||
$data = [
|
||||
'doc_' => $third_user_id,
|
||||
'advertiser_id' => $customer_id,
|
||||
'advertiser_name' => $customer['descriptive_name'],
|
||||
'google_login_customer_id' => $login_customer_id,
|
||||
];
|
||||
if($customer['manager'] === true){
|
||||
if ($customer['manager'] === true) {
|
||||
$data['google_manager'] = 't';
|
||||
}else{
|
||||
} else {
|
||||
$data['google_manager'] = 'f';
|
||||
}
|
||||
if($customer['test_account'] === true){
|
||||
if ($customer['test_account'] === true) {
|
||||
$data['google_test_account'] = 't';
|
||||
}else{
|
||||
} else {
|
||||
$data['google_test_account'] = 'f';
|
||||
}
|
||||
// dump($data);
|
||||
$sql = "
|
||||
$sql = "
|
||||
INSERT INTO {$tableName}
|
||||
(advertiser_id,advertiser_name, doc_,google_login_customer_id,google_manager,google_test_account)
|
||||
VALUES (:advertiser_id, :advertiser_name,:doc_,:google_login_customer_id,:google_manager,:google_test_account)
|
||||
@ -271,12 +271,24 @@ class GoogleOAuthService
|
||||
*/
|
||||
public function getGoogleAdCustomers($options = [])
|
||||
{
|
||||
// 获取符合条件的客户ID数组
|
||||
$customers = ThirdUserAdvertiser::alias('tua')
|
||||
->join('bps.bps_third_user tu', 'tua.doc_ = tu.id') // 连接 bps_third_user 表
|
||||
->where('tu.third_type', 'google') // 筛选 third_type 为 google 的记录
|
||||
->field('CAST(tua.advertiser_id AS BIGINT) as customer_id,tua.google_login_customer_id as login_customer_id,tua.google_test_account as test_account,tua.google_manager as manager, tu.access_token as refresh_token') // 获取 advertiser_id 字段
|
||||
->select(); // 执行查询
|
||||
if (!empty($options)) {
|
||||
$refreshToken = $options['refresh_token'];
|
||||
// 获取符合条件的客户ID数组
|
||||
$customers = ThirdUserAdvertiser::alias('tua')
|
||||
->join('bps.bps_third_user tu', 'tua.doc_ = tu.id') // 连接 bps_third_user 表
|
||||
->where('tu.third_type', 'google') // 筛选 third_type 为 google 的记录
|
||||
->where('tu.access_token', $refreshToken) // 筛选 third_type 为 google 的记录
|
||||
->field('CAST(tua.advertiser_id AS BIGINT) as customer_id,tua.google_login_customer_id as login_customer_id,tua.google_test_account as test_account,tua.google_manager as manager, tu.access_token as refresh_token') // 获取 advertiser_id 字段
|
||||
->select(); // 执行查询
|
||||
} else {
|
||||
// 获取符合条件的客户ID数组
|
||||
$customers = ThirdUserAdvertiser::alias('tua')
|
||||
->join('bps.bps_third_user tu', 'tua.doc_ = tu.id') // 连接 bps_third_user 表
|
||||
->where('tu.third_type', 'google') // 筛选 third_type 为 google 的记录
|
||||
->field('CAST(tua.advertiser_id AS BIGINT) as customer_id,tua.google_login_customer_id as login_customer_id,tua.google_test_account as test_account,tua.google_manager as manager, tu.access_token as refresh_token') // 获取 advertiser_id 字段
|
||||
->select(); // 执行查询
|
||||
}
|
||||
|
||||
|
||||
// 如果没有找到符合条件的广告主,抛出异常
|
||||
if ($customers->isEmpty()) {
|
||||
|
Loading…
Reference in New Issue
Block a user