允许查询日期范围数据

This commit is contained in:
hgc 2024-12-23 17:06:11 +08:00
parent 0d5405d21a
commit a65af85741
2 changed files with 232 additions and 126 deletions

View File

@ -46,8 +46,20 @@ class AdController
$keyword = $request->input('keyword', ''); // 关键字搜索 $keyword = $request->input('keyword', ''); // 关键字搜索
$dateRange = $request->input('date_range', 'Today'); // 日期范围 $dateRange = $request->input('date_range', 'Today'); // 日期范围
// 获取自定义日期范围
$startDate = $request->input('start_date', null); // 开始日期,默认为 null
$endDate = $request->input('end_date', null); // 结束日期,默认为 null
// 你可以进一步验证日期格式(可选)
// if ($startDate && !strtotime($startDate)) {
// return response()->json(['error' => 'Invalid start date format'], 400);
// }
// if ($endDate && !strtotime($endDate)) {
// return response()->json(['error' => 'Invalid end date format'], 400);
// }
// 调用 Service 层查询 // 调用 Service 层查询
$result = $this->googleAdsReportService::getAdList($page, $pageSize, $keyword, $dateRange); $result = $this->googleAdsReportService::getAdList($page, $pageSize, $keyword, $dateRange, $startDate, $endDate);
return $this->successResponse($result); return $this->successResponse($result);
} }
@ -59,8 +71,20 @@ class AdController
$keyword = $request->input('keyword', ''); // 关键字搜索 $keyword = $request->input('keyword', ''); // 关键字搜索
$dateRange = $request->input('date_range', 'Today'); // 日期范围 $dateRange = $request->input('date_range', 'Today'); // 日期范围
// 获取自定义日期范围
$startDate = $request->input('start_date', null); // 开始日期,默认为 null
$endDate = $request->input('end_date', null); // 结束日期,默认为 null
// 你可以进一步验证日期格式(可选)
// if ($startDate && !strtotime($startDate)) {
// return response()->json(['error' => 'Invalid start date format'], 400);
// }
// if ($endDate && !strtotime($endDate)) {
// return response()->json(['error' => 'Invalid end date format'], 400);
// }
// 调用 Service 层查询 // 调用 Service 层查询
$result = $this->googleAdsReportService::getCampaignList($page, $pageSize, $keyword, $dateRange); $result = $this->googleAdsReportService::getCampaignList($page, $pageSize, $keyword, $dateRange, $startDate, $endDate);
return $this->successResponse($result); return $this->successResponse($result);
} }
@ -69,8 +93,20 @@ class AdController
$keyword = $request->input('keyword', ''); // 获取关键字参数 $keyword = $request->input('keyword', ''); // 获取关键字参数
$dateRange = $request->input('date_range', ''); // 获取日期范围参数 $dateRange = $request->input('date_range', ''); // 获取日期范围参数
// 获取自定义日期范围
$startDate = $request->input('start_date', null); // 开始日期,默认为 null
$endDate = $request->input('end_date', null); // 结束日期,默认为 null
// 你可以进一步验证日期格式(可选)
// if ($startDate && !strtotime($startDate)) {
// return response()->json(['error' => 'Invalid start date format'], 400);
// }
// if ($endDate && !strtotime($endDate)) {
// return response()->json(['error' => 'Invalid end date format'], 400);
// }
// 调用 service 层导出数据 // 调用 service 层导出数据
return $this->googleAdsReportService::exportAdListToExcel($keyword, $dateRange); return $this->googleAdsReportService::exportAdListToExcel($keyword, $dateRange, $startDate, $endDate);
} }
public function exportCampaignsToExcel(Request $request) public function exportCampaignsToExcel(Request $request)
@ -78,8 +114,20 @@ class AdController
$keyword = $request->input('keyword', ''); // 获取关键字参数 $keyword = $request->input('keyword', ''); // 获取关键字参数
$dateRange = $request->input('date_range', ''); // 获取日期范围参数 $dateRange = $request->input('date_range', ''); // 获取日期范围参数
// 获取自定义日期范围
$startDate = $request->input('start_date', null); // 开始日期,默认为 null
$endDate = $request->input('end_date', null); // 结束日期,默认为 null
// 你可以进一步验证日期格式(可选)
// if ($startDate && !strtotime($startDate)) {
// return response()->json(['error' => 'Invalid start date format'], 400);
// }
// if ($endDate && !strtotime($endDate)) {
// return response()->json(['error' => 'Invalid end date format'], 400);
// }
// 调用 service 层导出数据 // 调用 service 层导出数据
return $this->googleAdsReportService::exportCampaignsToExcel($keyword, $dateRange); return $this->googleAdsReportService::exportCampaignsToExcel($keyword, $dateRange, $startDate, $endDate);
} }
public function exportGroupsToExcel(Request $request) public function exportGroupsToExcel(Request $request)
@ -87,8 +135,20 @@ class AdController
$keyword = $request->input('keyword', ''); // 获取关键字参数 $keyword = $request->input('keyword', ''); // 获取关键字参数
$dateRange = $request->input('date_range', ''); // 获取日期范围参数 $dateRange = $request->input('date_range', ''); // 获取日期范围参数
// 获取自定义日期范围
$startDate = $request->input('start_date', null); // 开始日期,默认为 null
$endDate = $request->input('end_date', null); // 结束日期,默认为 null
// 你可以进一步验证日期格式(可选)
// if ($startDate && !strtotime($startDate)) {
// return response()->json(['error' => 'Invalid start date format'], 400);
// }
// if ($endDate && !strtotime($endDate)) {
// return response()->json(['error' => 'Invalid end date format'], 400);
// }
// 调用 service 层导出数据 // 调用 service 层导出数据
return $this->googleAdsReportService::exportAdGroupsToExcel($keyword, $dateRange); return $this->googleAdsReportService::exportAdGroupsToExcel($keyword, $dateRange, $startDate, $endDate);
} }
public function listGroups(Request $request) public function listGroups(Request $request)
@ -99,8 +159,20 @@ class AdController
$keyword = $request->input('keyword', ''); // 关键字搜索 $keyword = $request->input('keyword', ''); // 关键字搜索
$dateRange = $request->input('date_range', 'Today'); // 日期范围 $dateRange = $request->input('date_range', 'Today'); // 日期范围
// 获取自定义日期范围
$startDate = $request->input('start_date', null); // 开始日期,默认为 null
$endDate = $request->input('end_date', null); // 结束日期,默认为 null
// 你可以进一步验证日期格式(可选)
// if ($startDate && !strtotime($startDate)) {
// return response()->json(['error' => 'Invalid start date format'], 400);
// }
// if ($endDate && !strtotime($endDate)) {
// return response()->json(['error' => 'Invalid end date format'], 400);
// }
// 调用 Service 层查询 // 调用 Service 层查询
$result = $this->googleAdsReportService::getAdGroupList($page, $pageSize, $keyword, $dateRange); $result = $this->googleAdsReportService::getAdGroupList($page, $pageSize, $keyword, $dateRange, $startDate, $endDate);
return $this->successResponse($result); return $this->successResponse($result);
} }

View File

@ -17,7 +17,7 @@ class GoogleAdsReportService
/** /**
* 获取广告列表 * 获取广告列表
*/ */
public static function getAdList($page, $pageSize, $keyword, $dateRange) public static function getAdList($page, $pageSize, $keyword, $dateRange, $startDate = null, $endDate = null)
{ {
// 基础查询:广告表和日数据表联接 // 基础查询:广告表和日数据表联接
$query = Ad::alias('a') $query = Ad::alias('a')
@ -35,25 +35,30 @@ class GoogleAdsReportService
} }
}); });
// 根据日期维度添加聚合条件 // 如果提供了 startDate 和 endDate则根据范围查询
switch ($dateRange) { if ($startDate && $endDate) {
case 'Today': $query->whereBetween('d.date', [$startDate, $endDate]);
$query->where('d.date', '=', date('Y-m-d')); } else {
break; // 根据日期维度添加聚合条件
case 'Yesterday': switch ($dateRange) {
$query->where('d.date', '=', date('Y-m-d', strtotime('-1 day'))); case 'Today':
break; $query->where('d.date', '=', date('Y-m-d'));
case 'Last Week': break;
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week'))); case 'Yesterday':
break; $query->where('d.date', '=', date('Y-m-d', strtotime('-1 day')));
case 'Last Month': break;
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 month'))); case 'Last Week':
break; $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week')));
case 'Last Year': break;
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 year'))); case 'Last Month':
break; $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 month')));
default: break;
break; case 'Last Year':
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 year')));
break;
default:
break;
}
} }
// 获取分页数据 // 获取分页数据
@ -75,7 +80,7 @@ class GoogleAdsReportService
* @param string $dateRange * @param string $dateRange
* @return void * @return void
*/ */
public static function exportAdListToExcel($keyword, $dateRange) public static function exportAdListToExcel($keyword, $dateRange, $startDate = null, $endDate = null)
{ {
// 获取所有的广告数据 // 获取所有的广告数据
$query = Ad::alias('a') $query = Ad::alias('a')
@ -93,25 +98,31 @@ class GoogleAdsReportService
} }
}); });
// 根据日期维度添加聚合条件 // 如果提供了 startDate 和 endDate则根据范围查询
switch ($dateRange) { if ($startDate && $endDate) {
case 'Today': $query->whereBetween('d.date', [$startDate, $endDate]);
$query->where('d.date', '=', date('Y-m-d')); $dateRange = $startDate. 'to'. $endDate;
break; } else {
case 'Yesterday': // 根据日期维度添加聚合条件
$query->where('d.date', '=', date('Y-m-d', strtotime('-1 day'))); switch ($dateRange) {
break; case 'Today':
case 'Last Week': $query->where('d.date', '=', date('Y-m-d'));
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week'))); break;
break; case 'Yesterday':
case 'Last Month': $query->where('d.date', '=', date('Y-m-d', strtotime('-1 day')));
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 month'))); break;
break; case 'Last Week':
case 'Last Year': $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week')));
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 year'))); break;
break; case 'Last Month':
default: $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 month')));
break; break;
case 'Last Year':
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 year')));
break;
default:
break;
}
} }
// 获取所有广告数据 // 获取所有广告数据
@ -192,7 +203,7 @@ class GoogleAdsReportService
/** /**
* 获取广告系列列表 * 获取广告系列列表
*/ */
public static function getCampaignList($page, $pageSize, $keyword, $dateRange) public static function getCampaignList($page, $pageSize, $keyword, $dateRange, $startDate = null, $endDate = null)
{ {
// 基础查询:广告活动和日数据表联接 // 基础查询:广告活动和日数据表联接
$query = Campaign::alias('c') $query = Campaign::alias('c')
@ -208,25 +219,30 @@ class GoogleAdsReportService
} }
}); });
// 根据日期维度添加聚合条件 // 如果提供了 startDate 和 endDate则根据范围查询
switch ($dateRange) { if ($startDate && $endDate) {
case 'Today': $query->whereBetween('d.date', [$startDate, $endDate]);
$query->where('d.date', '=', date('Y-m-d')); } else {
break; // 根据日期维度添加聚合条件
case 'Yesterday': switch ($dateRange) {
$query->where('d.date', '=', date('Y-m-d', strtotime('-1 day'))); case 'Today':
break; $query->where('d.date', '=', date('Y-m-d'));
case 'Last Week': break;
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week'))); case 'Yesterday':
break; $query->where('d.date', '=', date('Y-m-d', strtotime('-1 day')));
case 'Last Month': break;
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 month'))); case 'Last Week':
break; $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week')));
case 'Last Year': break;
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 year'))); case 'Last Month':
break; $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 month')));
default: break;
break; case 'Last Year':
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 year')));
break;
default:
break;
}
} }
// 获取分页数据 // 获取分页数据
@ -249,7 +265,7 @@ class GoogleAdsReportService
* @param string $dateRange * @param string $dateRange
* @return void * @return void
*/ */
public static function exportCampaignsToExcel($keyword, $dateRange) public static function exportCampaignsToExcel($keyword, $dateRange, $startDate = null, $endDate = null)
{ {
// 获取所有的广告系列数据 // 获取所有的广告系列数据
$query = Campaign::alias('c') $query = Campaign::alias('c')
@ -265,25 +281,31 @@ class GoogleAdsReportService
} }
}); });
// 根据日期维度添加聚合条件 // 如果提供了 startDate 和 endDate则根据范围查询
switch ($dateRange) { if ($startDate && $endDate) {
case 'Today': $query->whereBetween('d.date', [$startDate, $endDate]);
$query->where('d.date', '=', date('Y-m-d')); $dateRange = $startDate. 'to'. $endDate;
break; } else {
case 'Yesterday': // 根据日期维度添加聚合条件
$query->where('d.date', '=', date('Y-m-d', strtotime('-1 day'))); switch ($dateRange) {
break; case 'Today':
case 'Last Week': $query->where('d.date', '=', date('Y-m-d'));
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week'))); break;
break; case 'Yesterday':
case 'Last Month': $query->where('d.date', '=', date('Y-m-d', strtotime('-1 day')));
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 month'))); break;
break; case 'Last Week':
case 'Last Year': $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week')));
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 year'))); break;
break; case 'Last Month':
default: $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 month')));
break; break;
case 'Last Year':
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 year')));
break;
default:
break;
}
} }
// 获取所有广告系列数据 // 获取所有广告系列数据
@ -354,7 +376,7 @@ class GoogleAdsReportService
/** /**
* 获取广告系列列表 * 获取广告系列列表
*/ */
public static function getAdGroupList($page, $pageSize, $keyword, $dateRange) public static function getAdGroupList($page, $pageSize, $keyword, $dateRange, $startDate = null, $endDate = null)
{ {
// 初始化查询 // 初始化查询
$query = AdGroup::alias('ag') $query = AdGroup::alias('ag')
@ -371,25 +393,30 @@ class GoogleAdsReportService
} }
}); });
// 根据日期范围添加聚合条件 // 如果提供了 startDate 和 endDate则根据范围查询
switch ($dateRange) { if ($startDate && $endDate) {
case 'Today': $query->whereBetween('d.date', [$startDate, $endDate]);
$query->where('d.date', '=', date('Y-m-d')); } else {
break; // 根据日期维度添加聚合条件
case 'Yesterday': switch ($dateRange) {
$query->where('d.date', '=', date('Y-m-d', strtotime('-1 day'))); case 'Today':
break; $query->where('d.date', '=', date('Y-m-d'));
case 'Last Week': break;
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week'))); case 'Yesterday':
break; $query->where('d.date', '=', date('Y-m-d', strtotime('-1 day')));
case 'Last Month': break;
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 month'))); case 'Last Week':
break; $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week')));
case 'Last Year': break;
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 year'))); case 'Last Month':
break; $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 month')));
default: break;
break; case 'Last Year':
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 year')));
break;
default:
break;
}
} }
// 分页查询 // 分页查询
@ -422,7 +449,7 @@ class GoogleAdsReportService
/** /**
* 将广告组数据导出到 Excel 文件 * 将广告组数据导出到 Excel 文件
*/ */
public static function exportAdGroupsToExcel($keyword = '', $dateRange = 'Today') public static function exportAdGroupsToExcel($keyword = '', $dateRange = 'Today', $startDate = null, $endDate = null)
{ {
// 初始化查询 // 初始化查询
$query = AdGroup::alias('ag') $query = AdGroup::alias('ag')
@ -439,25 +466,32 @@ class GoogleAdsReportService
} }
}); });
// 根据日期范围添加聚合条件
switch ($dateRange) { // 如果提供了 startDate 和 endDate则根据范围查询
case 'Today': if ($startDate && $endDate) {
$query->where('d.date', '=', date('Y-m-d')); $query->whereBetween('d.date', [$startDate, $endDate]);
break; $dateRange = $startDate. 'to'. $endDate;
case 'Yesterday': } else {
$query->where('d.date', '=', date('Y-m-d', strtotime('-1 day'))); // 根据日期维度添加聚合条件
break; switch ($dateRange) {
case 'Last Week': case 'Today':
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week'))); $query->where('d.date', '=', date('Y-m-d'));
break; break;
case 'Last Month': case 'Yesterday':
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 month'))); $query->where('d.date', '=', date('Y-m-d', strtotime('-1 day')));
break; break;
case 'Last Year': case 'Last Week':
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 year'))); $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week')));
break; break;
default: case 'Last Month':
break; $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 month')));
break;
case 'Last Year':
$query->where('d.date', '>=', date('Y-m-d', strtotime('-1 year')));
break;
default:
break;
}
} }
// 获取所有广告组数据 // 获取所有广告组数据
$ad_groups = $query->select(); $ad_groups = $query->select();