diff --git a/app/controller/AdController.php b/app/controller/AdController.php index 5c17466..1ce4030 100644 --- a/app/controller/AdController.php +++ b/app/controller/AdController.php @@ -46,8 +46,20 @@ class AdController $keyword = $request->input('keyword', ''); // 关键字搜索 $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 层查询 - $result = $this->googleAdsReportService::getAdList($page, $pageSize, $keyword, $dateRange); + $result = $this->googleAdsReportService::getAdList($page, $pageSize, $keyword, $dateRange, $startDate, $endDate); return $this->successResponse($result); } @@ -59,8 +71,20 @@ class AdController $keyword = $request->input('keyword', ''); // 关键字搜索 $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 层查询 - $result = $this->googleAdsReportService::getCampaignList($page, $pageSize, $keyword, $dateRange); + $result = $this->googleAdsReportService::getCampaignList($page, $pageSize, $keyword, $dateRange, $startDate, $endDate); return $this->successResponse($result); } @@ -69,8 +93,20 @@ class AdController $keyword = $request->input('keyword', ''); // 获取关键字参数 $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 层导出数据 - return $this->googleAdsReportService::exportAdListToExcel($keyword, $dateRange); + return $this->googleAdsReportService::exportAdListToExcel($keyword, $dateRange, $startDate, $endDate); } public function exportCampaignsToExcel(Request $request) @@ -78,8 +114,20 @@ class AdController $keyword = $request->input('keyword', ''); // 获取关键字参数 $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 层导出数据 - return $this->googleAdsReportService::exportCampaignsToExcel($keyword, $dateRange); + return $this->googleAdsReportService::exportCampaignsToExcel($keyword, $dateRange, $startDate, $endDate); } public function exportGroupsToExcel(Request $request) @@ -87,8 +135,20 @@ class AdController $keyword = $request->input('keyword', ''); // 获取关键字参数 $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 层导出数据 - return $this->googleAdsReportService::exportAdGroupsToExcel($keyword, $dateRange); + return $this->googleAdsReportService::exportAdGroupsToExcel($keyword, $dateRange, $startDate, $endDate); } public function listGroups(Request $request) @@ -99,8 +159,20 @@ class AdController $keyword = $request->input('keyword', ''); // 关键字搜索 $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 层查询 - $result = $this->googleAdsReportService::getAdGroupList($page, $pageSize, $keyword, $dateRange); + $result = $this->googleAdsReportService::getAdGroupList($page, $pageSize, $keyword, $dateRange, $startDate, $endDate); return $this->successResponse($result); } diff --git a/app/service/GoogleAdsReportService.php b/app/service/GoogleAdsReportService.php index 1241841..da1fb19 100644 --- a/app/service/GoogleAdsReportService.php +++ b/app/service/GoogleAdsReportService.php @@ -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') @@ -35,25 +35,30 @@ class GoogleAdsReportService } }); - // 根据日期维度添加聚合条件 - switch ($dateRange) { - case 'Today': - $query->where('d.date', '=', date('Y-m-d')); - break; - case 'Yesterday': - $query->where('d.date', '=', date('Y-m-d', strtotime('-1 day'))); - break; - case 'Last Week': - $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week'))); - break; - case 'Last Month': - $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; + // 如果提供了 startDate 和 endDate,则根据范围查询 + if ($startDate && $endDate) { + $query->whereBetween('d.date', [$startDate, $endDate]); + } else { + // 根据日期维度添加聚合条件 + switch ($dateRange) { + case 'Today': + $query->where('d.date', '=', date('Y-m-d')); + break; + case 'Yesterday': + $query->where('d.date', '=', date('Y-m-d', strtotime('-1 day'))); + break; + case 'Last Week': + $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week'))); + break; + case 'Last Month': + $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; + } } // 获取分页数据 @@ -75,7 +80,7 @@ class GoogleAdsReportService * @param string $dateRange * @return void */ - public static function exportAdListToExcel($keyword, $dateRange) + public static function exportAdListToExcel($keyword, $dateRange, $startDate = null, $endDate = null) { // 获取所有的广告数据 $query = Ad::alias('a') @@ -93,25 +98,31 @@ class GoogleAdsReportService } }); - // 根据日期维度添加聚合条件 - switch ($dateRange) { - case 'Today': - $query->where('d.date', '=', date('Y-m-d')); - break; - case 'Yesterday': - $query->where('d.date', '=', date('Y-m-d', strtotime('-1 day'))); - break; - case 'Last Week': - $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week'))); - break; - case 'Last Month': - $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; + // 如果提供了 startDate 和 endDate,则根据范围查询 + if ($startDate && $endDate) { + $query->whereBetween('d.date', [$startDate, $endDate]); + $dateRange = $startDate. 'to'. $endDate; + } else { + // 根据日期维度添加聚合条件 + switch ($dateRange) { + case 'Today': + $query->where('d.date', '=', date('Y-m-d')); + break; + case 'Yesterday': + $query->where('d.date', '=', date('Y-m-d', strtotime('-1 day'))); + break; + case 'Last Week': + $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week'))); + break; + case 'Last Month': + $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; + } } // 获取所有广告数据 @@ -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') @@ -208,25 +219,30 @@ class GoogleAdsReportService } }); - // 根据日期维度添加聚合条件 - switch ($dateRange) { - case 'Today': - $query->where('d.date', '=', date('Y-m-d')); - break; - case 'Yesterday': - $query->where('d.date', '=', date('Y-m-d', strtotime('-1 day'))); - break; - case 'Last Week': - $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week'))); - break; - case 'Last Month': - $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; + // 如果提供了 startDate 和 endDate,则根据范围查询 + if ($startDate && $endDate) { + $query->whereBetween('d.date', [$startDate, $endDate]); + } else { + // 根据日期维度添加聚合条件 + switch ($dateRange) { + case 'Today': + $query->where('d.date', '=', date('Y-m-d')); + break; + case 'Yesterday': + $query->where('d.date', '=', date('Y-m-d', strtotime('-1 day'))); + break; + case 'Last Week': + $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week'))); + break; + case 'Last Month': + $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; + } } // 获取分页数据 @@ -249,7 +265,7 @@ class GoogleAdsReportService * @param string $dateRange * @return void */ - public static function exportCampaignsToExcel($keyword, $dateRange) + public static function exportCampaignsToExcel($keyword, $dateRange, $startDate = null, $endDate = null) { // 获取所有的广告系列数据 $query = Campaign::alias('c') @@ -265,25 +281,31 @@ class GoogleAdsReportService } }); - // 根据日期维度添加聚合条件 - switch ($dateRange) { - case 'Today': - $query->where('d.date', '=', date('Y-m-d')); - break; - case 'Yesterday': - $query->where('d.date', '=', date('Y-m-d', strtotime('-1 day'))); - break; - case 'Last Week': - $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week'))); - break; - case 'Last Month': - $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; + // 如果提供了 startDate 和 endDate,则根据范围查询 + if ($startDate && $endDate) { + $query->whereBetween('d.date', [$startDate, $endDate]); + $dateRange = $startDate. 'to'. $endDate; + } else { + // 根据日期维度添加聚合条件 + switch ($dateRange) { + case 'Today': + $query->where('d.date', '=', date('Y-m-d')); + break; + case 'Yesterday': + $query->where('d.date', '=', date('Y-m-d', strtotime('-1 day'))); + break; + case 'Last Week': + $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week'))); + break; + case 'Last Month': + $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; + } } // 获取所有广告系列数据 @@ -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') @@ -371,25 +393,30 @@ class GoogleAdsReportService } }); - // 根据日期范围添加聚合条件 - switch ($dateRange) { - case 'Today': - $query->where('d.date', '=', date('Y-m-d')); - break; - case 'Yesterday': - $query->where('d.date', '=', date('Y-m-d', strtotime('-1 day'))); - break; - case 'Last Week': - $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week'))); - break; - case 'Last Month': - $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; + // 如果提供了 startDate 和 endDate,则根据范围查询 + if ($startDate && $endDate) { + $query->whereBetween('d.date', [$startDate, $endDate]); + } else { + // 根据日期维度添加聚合条件 + switch ($dateRange) { + case 'Today': + $query->where('d.date', '=', date('Y-m-d')); + break; + case 'Yesterday': + $query->where('d.date', '=', date('Y-m-d', strtotime('-1 day'))); + break; + case 'Last Week': + $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week'))); + break; + case 'Last Month': + $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; + } } // 分页查询 @@ -422,7 +449,7 @@ class GoogleAdsReportService /** * 将广告组数据导出到 Excel 文件 */ - public static function exportAdGroupsToExcel($keyword = '', $dateRange = 'Today') + public static function exportAdGroupsToExcel($keyword = '', $dateRange = 'Today', $startDate = null, $endDate = null) { // 初始化查询 $query = AdGroup::alias('ag') @@ -439,25 +466,32 @@ class GoogleAdsReportService } }); - // 根据日期范围添加聚合条件 - switch ($dateRange) { - case 'Today': - $query->where('d.date', '=', date('Y-m-d')); - break; - case 'Yesterday': - $query->where('d.date', '=', date('Y-m-d', strtotime('-1 day'))); - break; - case 'Last Week': - $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week'))); - break; - case 'Last Month': - $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; + + // 如果提供了 startDate 和 endDate,则根据范围查询 + if ($startDate && $endDate) { + $query->whereBetween('d.date', [$startDate, $endDate]); + $dateRange = $startDate. 'to'. $endDate; + } else { + // 根据日期维度添加聚合条件 + switch ($dateRange) { + case 'Today': + $query->where('d.date', '=', date('Y-m-d')); + break; + case 'Yesterday': + $query->where('d.date', '=', date('Y-m-d', strtotime('-1 day'))); + break; + case 'Last Week': + $query->where('d.date', '>=', date('Y-m-d', strtotime('-1 week'))); + break; + case 'Last Month': + $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();