ToutiaoCostHourLogic.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <?php
  2. namespace app\v1\logic\tool\advertCost;
  3. use app\adapter\ToutiaoAdapter;
  4. use support\think\Db;
  5. class ToutiaoCostHourLogic extends BaseAdvertLogic
  6. {
  7. public int $mediaId = 1; // 媒体ID
  8. // 执行正文
  9. protected function initStart(): void
  10. {
  11. $advertiserList = $this->getAdvertiserMap($this->mediaId);
  12. // 循环执行
  13. foreach ($advertiserList as $account)
  14. {
  15. $accessToken = $account['access_token'] ?? "";
  16. if(!$accessToken) continue;
  17. // 获取消耗
  18. $dataList = (new ToutiaoAdapter)->getHourlyCost($account['advertiser_id'], $accessToken, $this->date);
  19. // 整理数据入库
  20. $this->organizeDataList($account, $dataList);
  21. }
  22. }
  23. // 整理入库数据列表
  24. protected function organizeDataList($account, $dataList): void
  25. {
  26. if(!$dataList) return;
  27. $db = Db::connect('db_advert');
  28. // 返点率
  29. $fandianRate = ($account['son_fandian']>1) ? (1/$account['son_fandian']) : $account['son_fandian'];
  30. $adData = [];
  31. foreach ($dataList as $val) {
  32. $cost = $val['metrics']['stat_cost'];
  33. if($cost=='0.00') continue;
  34. $adId = $val['dimensions']['cdp_project_id'];
  35. $adName = $val['dimensions']['cdp_project_name'];
  36. $show = $val['metrics']['show_cnt'];
  37. $click = $val['metrics']['click_cnt'];
  38. $convert = $val['metrics']['convert_cnt'];
  39. $hour = (int)explode(' ',$val['dimensions']['stat_time_hour'])[1];
  40. // Todo 从广告名称中拆分归因数据
  41. $siteInfo = $this->getSiteInfo($adName);
  42. $game_id = $siteInfo['game_id'] ?? 0;
  43. $agent_id = $siteInfo['agent_id'] ?? 0;
  44. $site_id = $siteInfo['site_id'] ?? 0;
  45. // 广告名获取不到则获取监测链接或者下载链接
  46. if(!$game_id || empty($this->siteMap[$site_id])){
  47. $tjurl = $val['dimensions']['ad_platform_cdp_project_action_track_url'];
  48. if(!$tjurl){
  49. $tjurl = $val['dimensions']['ad_platform_cdp_project_download_url'];
  50. }
  51. $siteInfo = $this->getSiteInfo($tjurl);
  52. $game_id = $siteInfo['game_id'] ?? 0;
  53. $agent_id = $siteInfo['agent_id'] ?? 0;
  54. $site_id = $siteInfo['site_id'] ?? 0;
  55. }
  56. if(!$game_id || empty($this->siteMap[$site_id])) continue;
  57. $where = [
  58. 'ad_id' => $adId,
  59. 'game_id' => $game_id,
  60. 'agent_id'=> $agent_id,
  61. 'site_id' => $site_id,
  62. 'tdate' => $this->date,
  63. 'thour' => $hour,
  64. ];
  65. $hourData = [
  66. 'advertiser_id' => $account['advertiser_id'],
  67. 'ad_show' => $show,
  68. 'ad_click' => $click,
  69. 'ad_convert' => $convert,
  70. 'ori_money' => $cost,
  71. 'money' => $cost * $fandianRate,
  72. 'media_id' => $this->siteMap[$site_id]['media_id'] ?? 0,
  73. 'auth_id' => $this->siteMap[$site_id]['auth_id'] ?? 0,
  74. ];
  75. $hourId= $db->table($this->hourTable)->where($where)->value("id");
  76. if($hourId) {
  77. $hourData['id'] = $hourId;
  78. }
  79. // 保存小时数据
  80. $db->table($this->hourTable)->save(array_merge($hourData, $where));
  81. // 计算天的数据
  82. $adKey = $game_id . "_" . $site_id . "_" . $adId;
  83. $adData[$adKey]['game_id'] = $game_id;
  84. $adData[$adKey]['agent_id'] = $agent_id;
  85. $adData[$adKey]['site_id'] = $site_id;
  86. $adData[$adKey]['ad_id'] = $adId;
  87. $adData[$adKey]['ad_show'] = !empty($adData[$adKey]['ad_show']) ? $adData[$adKey]['ad_show']+$show : $show;
  88. $adData[$adKey]['ad_click'] = !empty($adData[$adKey]['ad_click']) ? $adData[$adKey]['ad_click']+$click : $click;
  89. $adData[$adKey]['ad_convert'] = !empty($adData[$adKey]['ad_convert']) ? $adData[$adKey]['ad_convert']+$convert : $convert;
  90. $adData[$adKey]['cost'] = !empty($adData[$adKey]['cost']) ? $adData[$adKey]['cost']+$cost : $cost;
  91. }
  92. foreach($adData as $value){
  93. $where = [
  94. 'ad_id' => $value['ad_id'],
  95. 'game_id' => $value['game_id'],
  96. 'agent_id'=> $value['agent_id'],
  97. 'site_id' => $value['site_id'],
  98. 'tdate' => $this->date,
  99. ];
  100. $dateData = [
  101. 'advertiser_id' => $account['advertiser_id'],
  102. 'ad_show' => $value['ad_show'],
  103. 'ad_click' => $value['ad_click'],
  104. 'ad_convert'=> $value['ad_convert'],
  105. 'ori_money' => $value['cost'],
  106. 'money' => $value['cost']*$fandianRate,
  107. 'media_id' => $this->siteMap[$site_id]['media_id'],
  108. 'auth_id' => $this->siteMap[$site_id]['auth_id'],
  109. ];
  110. $dateId= $db->table($this->dateTable)->where($where)->value("id");
  111. if($dateId) {
  112. $dateData['id'] = $dateId;
  113. }
  114. // 保存日数据
  115. $db->table($this->dateTable)->save(array_merge($dateData, $where));
  116. }
  117. }
  118. }