Browse Source

代码优化

PC-202304251453\Administrator 3 months ago
parent
commit
38f5f1b026

+ 24 - 0
app/adapter/GdtAdapter.php

@@ -100,4 +100,28 @@ class GdtAdapter
 
         return $data;
     }
+
+    public function getVideo($advertiserId, $accessToken, $videoIds): array
+    {
+        $nonce = md5(time().rand(00000, 99999));
+        $url = 'https://api.e.qq.com/v3.0/videos/get?access_token='.$accessToken.'&timestamp='.time().'&nonce='.$nonce;
+
+        $request_data = [
+            'account_id' => $advertiserId,
+            'filtering' => json_encode([
+                [
+                    'field' => 'media_id',
+                    'operator' => 'IN',
+                    'values' => $videoIds,
+                ]
+            ]),
+        ];
+
+        $url = $url."&".http_build_query($request_data);
+        $httpClient = new Client(['timeout' => 10]);
+        $res = $httpClient->request('GET', $url);
+        $result = json_decode($res->getBody(), true);
+
+        return $result['data']['list'] ?? [];
+    }
 }

+ 5 - 5
app/command/CostGdt.php

@@ -20,10 +20,10 @@ class CostGdt extends Command
      */
     protected function configure()
     {
-        // 用法示例 php webman cost:gdt date api_id advertiser_ids
+        // 用法示例 php webman cost:gdt date pmid advertiser_ids
         // php webman cost:gdt 2025-07-30,2025-07-31 0 54970254,60853999
         $this->addArgument('date', InputArgument::OPTIONAL, '日期范围');
-        $this->addArgument('api_id', InputArgument::OPTIONAL, '需要拉取的API配置ID');
+        $this->addArgument('pmid', InputArgument::OPTIONAL, '需要拉取的API配置ID');
         $this->addArgument('advertiser_ids', InputArgument::OPTIONAL, '需要拉取的广告账户');
     }
 
@@ -35,7 +35,7 @@ class CostGdt extends Command
     protected function execute(InputInterface $input, OutputInterface $output): int
     {
         $date = $input->getArgument('date');
-        $apiId = (int)$input->getArgument('api_id');
+        $pmid = (int)$input->getArgument('pmid');
         $advertiserIds = $input->getArgument('advertiser_ids');
 
         $params = [];
@@ -44,8 +44,8 @@ class CostGdt extends Command
             $params['date'] = explode(',', $date);
         }
 
-        if($apiId){
-            $params['api_id'] = $apiId;
+        if($pmid){
+            $params['pmid'] = $pmid;
         }
 
         if($advertiserIds){

+ 5 - 5
app/command/CostGdtVideo.php

@@ -20,10 +20,10 @@ class CostGdtVideo extends Command
      */
     protected function configure()
     {
-        // 用法示例 php webman cost:gdt_video date api_id advertiser_ids
+        // 用法示例 php webman cost:gdt_video date pmid advertiser_ids
         // php webman cost:gdt_video 2025-07-30,2025-07-31 0 54970254,60853999
         $this->addArgument('date', InputArgument::OPTIONAL, '日期范围');
-        $this->addArgument('api_id', InputArgument::OPTIONAL, '需要拉取的API配置ID');
+        $this->addArgument('pmid', InputArgument::OPTIONAL, '需要拉取的API配置ID');
         $this->addArgument('advertiser_ids', InputArgument::OPTIONAL, '需要拉取的广告账户');
     }
 
@@ -38,7 +38,7 @@ class CostGdtVideo extends Command
         $date = $input->getArgument('date');
         $date = $date ?: $ydate;
 
-        $apiId = (int)$input->getArgument('api_id');
+        $pmid = (int)$input->getArgument('pmid');
         $advertiserIds = $input->getArgument('advertiser_ids');
 
         $params = [];
@@ -47,8 +47,8 @@ class CostGdtVideo extends Command
             $params['date'] = explode(',', $date);
         }
 
-        if($apiId){
-            $params['api_id'] = $apiId;
+        if($pmid){
+            $params['pmid'] = $pmid;
         }
 
         if($advertiserIds){

+ 8 - 8
app/command/CostTt.php → app/command/CostToutiao.php

@@ -2,7 +2,7 @@
 
 namespace app\command;
 
-use app\v1\logic\tool\advertCost\TtCostHourLogic;
+use app\v1\logic\tool\advertCost\ToutiaoCostHourLogic;
 use Symfony\Component\Console\Command\Command;
 use Symfony\Component\Console\Attribute\AsCommand;
 use Symfony\Component\Console\Input\InputInterface;
@@ -11,7 +11,7 @@ use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Output\OutputInterface;
 
 #[AsCommand('cost:tt', 'cost tt')]
-class CostTt extends Command
+class CostToutiao extends Command
 {
     /**
      * 自定义脚本示例
@@ -19,10 +19,10 @@ class CostTt extends Command
      */
     protected function configure()
     {
-        // 用法示例 php webman cost:tt date api_id advertiser_ids
+        // 用法示例 php webman cost:tt date pmid advertiser_ids
         // php webman cost:tt 2025-07-30,2025-07-31 0 54970254,60853999
         $this->addArgument('date', InputArgument::OPTIONAL, '日期范围');
-        $this->addArgument('api_id', InputArgument::OPTIONAL, '需要拉取的API配置ID');
+        $this->addArgument('pmid', InputArgument::OPTIONAL, '需要拉取的API配置ID');
         $this->addArgument('advertiser_ids', InputArgument::OPTIONAL, '需要拉取的广告账户');
     }
 
@@ -34,7 +34,7 @@ class CostTt extends Command
     protected function execute(InputInterface $input, OutputInterface $output): int
     {
         $date = $input->getArgument('date');
-        $apiId = (int)$input->getArgument('api_id');
+        $pmid = (int)$input->getArgument('pmid');
         $advertiserIds = $input->getArgument('advertiser_ids');
 
         $params = [];
@@ -43,8 +43,8 @@ class CostTt extends Command
             $params['date'] = explode(',', $date);
         }
 
-        if($apiId){
-            $params['api_id'] = $apiId;
+        if($pmid){
+            $params['pmid'] = $pmid;
         }
 
         if($advertiserIds){
@@ -53,7 +53,7 @@ class CostTt extends Command
 
         $output->writeln("\ntt cost sta:" . json_encode($params, JSON_UNESCAPED_UNICODE));
 
-        $res = (new TtCostHourLogic)->run($params);
+        $res = (new ToutiaoCostHourLogic)->run($params);
 
         $output->writeln("\ntt cost end:" . $res);
 

+ 8 - 8
app/command/CostTtVideo.php → app/command/CostToutiaoVideo.php

@@ -2,7 +2,7 @@
 
 namespace app\command;
 
-use app\v1\logic\tool\advertCost\TtCostVideoLogic;
+use app\v1\logic\tool\advertCost\ToutiaoCostVideoLogic;
 use Symfony\Component\Console\Command\Command;
 use Symfony\Component\Console\Attribute\AsCommand;
 use Symfony\Component\Console\Input\InputInterface;
@@ -11,7 +11,7 @@ use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Output\OutputInterface;
 
 #[AsCommand('cost:tt_video', 'cost tt_video')]
-class CostTtVideo extends Command
+class CostToutiaoVideo extends Command
 {
     /**
      * 自定义脚本示例
@@ -19,10 +19,10 @@ class CostTtVideo extends Command
      */
     protected function configure()
     {
-        // 用法示例 php webman cost:tt_video date api_id advertiser_ids
+        // 用法示例 php webman cost:tt_video date pmid advertiser_ids
         // php webman cost:tt_video 2025-07-30,2025-07-31 0 54970254,60853999
         $this->addArgument('date', InputArgument::OPTIONAL, '日期范围');
-        $this->addArgument('api_id', InputArgument::OPTIONAL, '需要拉取的API配置ID');
+        $this->addArgument('pmid', InputArgument::OPTIONAL, '需要拉取的API配置ID');
         $this->addArgument('advertiser_ids', InputArgument::OPTIONAL, '需要拉取的广告账户');
     }
 
@@ -37,7 +37,7 @@ class CostTtVideo extends Command
         $date = $input->getArgument('date');
         $date = $date ?: $ydate;
 
-        $apiId = (int)$input->getArgument('api_id');
+        $pmid = (int)$input->getArgument('pmid');
         $advertiserIds = $input->getArgument('advertiser_ids');
 
         $params = [];
@@ -46,8 +46,8 @@ class CostTtVideo extends Command
             $params['date'] = explode(',', $date);
         }
 
-        if($apiId){
-            $params['api_id'] = $apiId;
+        if($pmid){
+            $params['pmid'] = $pmid;
         }
 
         if($advertiserIds){
@@ -56,7 +56,7 @@ class CostTtVideo extends Command
 
         $output->writeln("\ntt cost sta:" . json_encode($params, JSON_UNESCAPED_UNICODE));
 
-        $res = (new TtCostVideoLogic())->run($params);
+        $res = (new ToutiaoCostVideoLogic())->run($params);
 
         $output->writeln("\ntt cost end:" . $res);
 

+ 2 - 2
app/process/advertCost/TtCostHour.php

@@ -2,7 +2,7 @@
 
 namespace app\process\advertCost;
 use Workerman\Crontab\Crontab;
-use app\v1\logic\tool\advertCost\TtCostHourLogic;
+use app\v1\logic\tool\advertCost\ToutiaoCostHourLogic;
 
 class TtCostHour
 {
@@ -10,7 +10,7 @@ class TtCostHour
     {
         // 每 10分钟执行一次
         new Crontab('0 */10 * * * *', function() {
-            (new TtCostHourLogic())->run();
+            (new ToutiaoCostHourLogic())->run();
         });
     }
 }

+ 2 - 2
app/process/advertCost/TtCostVideo.php

@@ -2,7 +2,7 @@
 
 namespace app\process\advertCost;
 use Workerman\Crontab\Crontab;
-use app\v1\logic\tool\advertCost\TtCostVideoLogic;
+use app\v1\logic\tool\advertCost\ToutiaoCostVideoLogic;
 
 class TtCostVideo
 {
@@ -14,7 +14,7 @@ class TtCostVideo
             $params = [
                 'date' => [date('Y-m-d', strtotime('-1 day'))]
             ];
-            (new TtCostVideoLogic())->run($params);
+            (new ToutiaoCostVideoLogic())->run($params);
         });
     }
 }

+ 19 - 56
app/v1/logic/tool/advertCost/BaseAdvertLogic.php

@@ -3,7 +3,6 @@
 namespace app\v1\logic\tool\advertCost;
 
 use app\v1\logic\advert\AgentSiteLogic;
-use GuzzleHttp\Client;
 use plugin\saiadmin\app\model\system\SystemUser;
 use support\think\Db;
 
@@ -24,7 +23,7 @@ abstract class BaseAdvertLogic
 
     protected array $siteMap=[];
 
-    protected int $apiId=0;
+    protected int $pmid=0;
     private array $adminUserMap=[];
 
     public function run($params=[])
@@ -48,8 +47,8 @@ abstract class BaseAdvertLogic
         }
 
         // 重跑用,传int
-        if(!empty($params['api_id'])){
-            $this->apiId = $params['api_id'];
+        if(!empty($params['pmid'])){
+            $this->pmid = $params['pmid'];
         }
 
         $this->siteMap = (new AgentSiteLogic())->getSiteAuth();
@@ -114,67 +113,31 @@ abstract class BaseAdvertLogic
     }
 
     // 获取需要拉取消耗的媒体账户
-    protected function getTtAccountList(): array
+    protected function getAdvertiserMap($mediaId): array
     {
-        $table = "ad_jrtt_account_list";
-        $where = [
-            "status" => 1
-        ];
-
-        if($this->advertiserIds){
-            $where['advertiser_id'] = $this->advertiserIds;
-        }
-
-        return Db::connect('db_advert')
-            ->table($table)
-            ->where($where)
-            ->column("pmid, advertiser_id, advertiser_name, son_fandian");
-    }
+        $advertiserListTable = "ad_advertiser_list"; // 子账户列表
+        $advertiserPmTable = "ad_advertiser_pm"; // 管家户,包含token
 
-    protected function getTtTokenMap(): array
-    {
-        $table = "ad_jrtt_account";
         $where = [
-            "status" => 1
-        ];
-
-        if($this->apiId){
-            $where['id'] = $this->apiId;
-        }
-
-        return Db::connect('db_advert')->table($table)->where($where)->column("access_token", "id");
-    }
-
-
-    // 获取需要拉取消耗的媒体账户
-    protected function getGdtAccountList(): array
-    {
-        $table = "ad_gdt_account_list";
-        $where = [
-            "status" => 1
+            "a.status" => 1,
+            "b.status" => 1,
+            "a.media_id" => $mediaId
         ];
 
         if($this->advertiserIds){
-            $where['advertiser_id'] = $this->advertiserIds;
+            $where['a.advertiser_id'] = $this->advertiserIds;
         }
 
-        return Db::connect('db_advert')
-            ->table($table)
-            ->where($where)
-            ->column("pmid, advertiser_id, advertiser_name, son_fandian");
-    }
-
-    protected function getGdtTokenMap(): array
-    {
-        $table = "ad_gdt_account";
-        $where = [
-            "status" => 1
-        ];
-
-        if($this->apiId){
-            $where['id'] = $this->apiId;
+        if($this->pmid){
+            $where['a.pmid'] = $this->pmid;
         }
 
-        return Db::connect('db_advert')->table($table)->where($where)->column("access_token", "id");
+        $list = Db::connect('db_advert')
+            ->table($advertiserListTable)->alias("a")
+            ->join("{$advertiserPmTable} b", "a.pmid=b.id")
+            ->field("a.*, b.app_id, b.access_token, b.fandian")
+            ->where($where)->select()->toArray();
+
+        return $list ? array_column($list, null, "advertiser_id") : [];
     }
 }

+ 5 - 7
app/v1/logic/tool/advertCost/GdtCostHourLogic.php

@@ -3,22 +3,20 @@
 namespace app\v1\logic\tool\advertCost;
 
 use app\adapter\GdtAdapter;
-use GuzzleHttp\Client;
 use support\think\Db;
 
 class GdtCostHourLogic extends BaseAdvertLogic
 {
+    public int $mediaId = 2;    // 媒体ID
+
     // 执行正文
     protected function initStart(): void
     {
-        $tokenMap = $this->getGdtTokenMap();
-
-        $accountList = $this->getGdtAccountList();
-
+        $advertiserList = $this->getAdvertiserMap($this->mediaId);
         // 循环执行
-        foreach ($accountList as $account)
+        foreach ($advertiserList as $account)
         {
-            $accessToken = $tokenMap[$account['pmid']] ?? "";
+            $accessToken = $account['access_token'] ?? "";
             if(!$accessToken) continue;
 
             // 获取消耗

+ 6 - 31
app/v1/logic/tool/advertCost/GdtCostVideoLogic.php

@@ -8,17 +8,17 @@ use support\think\Db;
 
 class GdtCostVideoLogic extends BaseAdvertLogic
 {
+    public int $mediaId = 2;    // 媒体ID
+
     // 执行正文
     protected function initStart(): void
     {
-        $tokenMap = $this->getGdtTokenMap();
-
-        $accountList = $this->getGdtAccountList();
+        $advertiserList = $this->getAdvertiserMap($this->mediaId);
 
         // 循环执行
-        foreach ($accountList as $account)
+        foreach ($advertiserList as $account)
         {
-            $accessToken = $tokenMap[$account['pmid']] ?? "";
+            $accessToken = $account['access_token'] ?? "";
             if(!$accessToken) continue;
 
             // 获取消耗
@@ -33,31 +33,6 @@ class GdtCostVideoLogic extends BaseAdvertLogic
         }
     }
 
-    // 获取素材id信息 $mediaIds 最多100个
-    protected function getGdtVideo($advertiserId, $accessToken, $videoIds): array
-    {
-        $nonce = md5(time().rand(00000, 99999));
-        $url = 'https://api.e.qq.com/v3.0/videos/get?access_token='.$accessToken.'&timestamp='.time().'&nonce='.$nonce;
-
-        $request_data = [
-            'account_id' => $advertiserId,
-            'filtering' => json_encode([
-                [
-                    'field' => 'media_id',
-                    'operator' => 'IN',
-                    'values' => $videoIds,
-                ]
-            ]),
-        ];
-
-        $url = $url."&".http_build_query($request_data);
-        $httpClient = new Client(['timeout' => 10]);
-        $res = $httpClient->request('GET', $url);
-        $result = json_decode($res->getBody(), true);
-
-        return $result['data']['list'] ?? [];
-    }
-
     protected function getGdtVideoNameMap($advertiserId, $accessToken, $dataList)
     {
         if(!$dataList) return $dataList;
@@ -68,7 +43,7 @@ class GdtCostVideoLogic extends BaseAdvertLogic
         $videoIdList = array_chunk($videoMaterialIds, 100);
         $videoList = [];
         foreach ($videoIdList as $videoIds) {
-            $videos = $this->getGdtVideo($advertiserId, $accessToken, $videoIds);
+            $videos = (new GdtAdapter())->getVideo($advertiserId, $accessToken, $videoIds);
             $videoList = array_merge($videoList, $videos);
         }
 

+ 6 - 8
app/v1/logic/tool/advertCost/TtCostHourLogic.php → app/v1/logic/tool/advertCost/ToutiaoCostHourLogic.php

@@ -3,22 +3,20 @@
 namespace app\v1\logic\tool\advertCost;
 
 use app\adapter\ToutiaoAdapter;
-use GuzzleHttp\Client;
 use support\think\Db;
 
-class TtCostHourLogic extends BaseAdvertLogic
+class ToutiaoCostHourLogic extends BaseAdvertLogic
 {
+    public int $mediaId = 1;    // 媒体ID
+
     // 执行正文
     protected function initStart(): void
     {
-        $tokenMap = $this->getTtTokenMap();
-
-        $accountList = $this->getTtAccountList();
-
+        $advertiserList = $this->getAdvertiserMap($this->mediaId);
         // 循环执行
-        foreach ($accountList as $account)
+        foreach ($advertiserList as $account)
         {
-            $accessToken = $tokenMap[$account['pmid']] ?? "";
+            $accessToken = $account['access_token'] ?? "";
             if(!$accessToken) continue;
 
             // 获取消耗

+ 6 - 8
app/v1/logic/tool/advertCost/TtCostVideoLogic.php → app/v1/logic/tool/advertCost/ToutiaoCostVideoLogic.php

@@ -3,22 +3,20 @@
 namespace app\v1\logic\tool\advertCost;
 
 use app\adapter\ToutiaoAdapter;
-use GuzzleHttp\Client;
 use support\think\Db;
 
-class TtCostVideoLogic extends BaseAdvertLogic
+class ToutiaoCostVideoLogic extends BaseAdvertLogic
 {
+    public int $mediaId = 1;    // 媒体ID
+
     // 执行正文
     protected function initStart(): void
     {
-        $tokenMap = $this->getTtTokenMap();
-
-        $accountList = $this->getTtAccountList();
-
+        $advertiserList = $this->getAdvertiserMap($this->mediaId);
         // 循环执行
-        foreach ($accountList as $account)
+        foreach ($advertiserList as $account)
         {
-            $accessToken = $tokenMap[$account['pmid']] ?? "";
+            $accessToken = $account['access_token'] ?? "";
             if(!$accessToken) continue;
 
             // 获取消耗