webman_ad/app/event/GoogleAdsDateDatas.php

152 lines
4.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\event;
use app\service\GoogleAdsCampaignService;
use app\service\GoogleOAuthService;
use Google\ApiCore\ApiException;
use support\Response;
use DI\Annotation\Inject;
use Webman\RedisQueue\Redis;
use Webman\RedisQueue\Client;
//use QL\QueryList;
class GoogleAdsDateDatas
{
/**
* @Inject
* @var GoogleOAuthService
*/
private $googleOAuthService;
const event = 'googleads:datedatas:event';
const queue = 'googleads:datedatas:queue';
const task = 'googleads:datedatas:task';
//同步某段时间成效默认新绑定用户触发7天历史数据
public function syncDateRangeDatas($options = [])
{
// 获取 startDate 和 endDate
$startDate = $options['startDate'];
$endDate = $options['endDate'];
// 验证日期格式
if (!strtotime($startDate) || !strtotime($endDate)) {
throw new \InvalidArgumentException('Invalid date format for startDate or endDate');
}
// 将日期转换为 DateTime 对象
$startDate = new \DateTime($startDate);
$endDate = new \DateTime($endDate);
// 获取队列名称
$queue = self::queue;
// 获取客户数据
$customers = $this->googleOAuthService->getGoogleAdCustomers($options);
// 遍历每一天的日期
$interval = new \DateInterval('P1D'); // 1天间隔
$dateRange = new \DatePeriod($startDate, $interval, $endDate->modify('+1 day')); // 包含 endDate
foreach ($dateRange as $date) {
$currentDate = $date->format('Y-m-d'); // 格式化日期为 Y-m-d // 遍历每个客户
foreach ($customers as $customer) {
if ($customer['login_customer_id'] > 0) {
$customer['date'] = $currentDate; // 设置当前日期
Redis::send($queue, $customer, rand(1, 10)); // 发送到 Redis 队列
}
}
}
//同步消息到同步任务表
// $queueTask = self::task;
// $taskInfo = [
// 'ecommerce' => 1001,
// 'ecommerce_shop_id' => $options['date'],
// 'task_type' => 'InsightsMerge',
// 'remain' => 1
// ];
// Client::send($queueTask, $taskInfo, 30);
return self::event . ' send queue ok';
}
//同步某天成效 2025-2-11作废改用syncDateRangeDatas
public function syncDateDatas($options = [])
{
$queue = self::queue;
$customers = $this->googleOAuthService->getGoogleAdCustomers($options);
foreach ($customers as $customer) {
if ($customer['login_customer_id'] > 0) {
$customer['date'] = $options['date'];
Redis::send($queue, $customer, rand(1, 10));
}
}
//同步消息到同步任务表
// $queueTask = self::task;
// $taskInfo = [
// 'ecommerce' => 1001,
// 'ecommerce_shop_id' => $options['date'],
// 'task_type' => 'InsightsMerge',
// 'remain' => 1
// ];
// Client::send($queueTask, $taskInfo, 30);
return self::event . ' send queue ok';
}
/**
* get date datas
* @throws ApiException
*/
public function getDateDatas($customer)
{
if ($customer['login_customer_id'] > 0 && ((isset($customer['manager']) && $customer['manager'] === false))) {
// dump($customer);
$googleAdsCampaignService = new googleAdsCampaignService($customer['customer_id']);
// dump($customer['customer_id'],$customer, $options['date']);
$googleAdsCampaignService->runListDateDatas($customer['customer_id'], $customer, $customer['date']);
}
// $this->googleAdsCampaignService->runListDateDatas($options['customer_id'], $options['date']);
// return $this->successResponse(['data' => $resourceName]);
}
/**
* 通知到同步task todo
* @throws ApiException
*/
public function noticeDateDatas($taskInfo)
{
}
// 可以加入一些公共方法
protected function successResponse($data): Response
{
return Json([
'code' => 0,
'msg' => 'ok',
'data' => $data,
]);
}
protected function errorResponse($code, $message, $data = []): Response
{
return Json([
'code' => $code,
'msg' => $message ?: 'error',
'data' => $data
]);
}
}