GdtCostHourLogic.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. namespace app\v1\logic\tool\advertCost;
  3. use app\adapter\GdtAdapter;
  4. use support\think\Db;
  5. class GdtCostHourLogic extends BaseAdvertLogic
  6. {
  7. public int $mediaId = 2; // 媒体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 GdtAdapter())->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. $adId = $val['adgroup_id'];
  33. $adName = $val['adgroup_name'];
  34. $cost = $val['cost']/100;
  35. if($cost==0) continue;
  36. $show = $val['view_count'];
  37. $click = $val['valid_click_count'];
  38. $convert = $val['activated_count'];
  39. // Todo 从广告名称中拆分归因数据
  40. $siteInfo = $this->getSiteInfo($adName);
  41. if(!$siteInfo['game_id'] || empty($this->siteMap[$siteInfo['site_id']])) continue;
  42. $where = [
  43. 'ad_id' => $adId,
  44. 'game_id' => $siteInfo['game_id'],
  45. 'agent_id'=> $siteInfo['agent_id'],
  46. 'site_id' => $siteInfo['site_id'],
  47. 'tdate' => $this->date,
  48. 'thour' => (int)$val['hour'],
  49. ];
  50. $hourData = [
  51. 'advertiser_id' => $account['advertiser_id'],
  52. 'ad_show' => $show,
  53. 'ad_click' => $click,
  54. 'ad_convert' => $convert,
  55. 'ori_money' => $cost,
  56. 'money' => $cost * $fandianRate,
  57. 'media_id' => $this->siteMap[$siteInfo['site_id']]['media_id'],
  58. 'auth_id' => $this->siteMap[$siteInfo['site_id']]['auth_id'],
  59. ];
  60. $hourId= $db->table($this->hourTable)->where($where)->value("id");
  61. if($hourId) {
  62. $hourData['id'] = $hourId;
  63. }
  64. // 保存小时数据
  65. $db->table($this->hourTable)->save(array_merge($hourData, $where));
  66. // 计算天的数据
  67. $adKey = $siteInfo['game_id'] . "_" . $siteInfo['site_id'] . "_" . $adId;
  68. $adData[$adKey]['game_id'] = $siteInfo['game_id'];
  69. $adData[$adKey]['agent_id'] = $siteInfo['agent_id'];
  70. $adData[$adKey]['site_id'] = $siteInfo['site_id'];
  71. $adData[$adKey]['ad_id'] = $adId;
  72. $adData[$adKey]['ad_show'] = !empty($adData[$adKey]['ad_show']) ? $adData[$adKey]['ad_show']+$show : $show;
  73. $adData[$adKey]['ad_click'] = !empty($adData[$adKey]['ad_click']) ? $adData[$adKey]['ad_click']+$click : $click;
  74. $adData[$adKey]['ad_convert'] = !empty($adData[$adKey]['ad_convert']) ? $adData[$adKey]['ad_convert']+$convert : $convert;
  75. $adData[$adKey]['cost'] = !empty($adData[$adKey]['cost']) ? $adData[$adKey]['cost']+$cost : $cost;
  76. }
  77. foreach($adData as $value){
  78. $where = [
  79. 'ad_id' => $value['ad_id'],
  80. 'game_id' => $value['game_id'],
  81. 'agent_id'=> $value['agent_id'],
  82. 'site_id' => $value['site_id'],
  83. 'tdate' => $this->date,
  84. ];
  85. $dateData = [
  86. 'advertiser_id' => $account['advertiser_id'],
  87. 'ad_show' => $value['ad_show'],
  88. 'ad_click' => $value['ad_click'],
  89. 'ad_convert'=> $value['ad_convert'],
  90. 'ori_money' => $value['cost'],
  91. 'money' => $value['cost']*$fandianRate,
  92. 'media_id' => $this->siteMap[$siteInfo['site_id']]['media_id'] ?? 0,
  93. 'auth_id' => $this->siteMap[$siteInfo['site_id']]['auth_id'] ?? 0,
  94. ];
  95. $dateId= $db->table($this->dateTable)->where($where)->value("id");
  96. if($dateId) {
  97. $dateData['id'] = $dateId;
  98. }
  99. // 保存日数据
  100. $db->table($this->dateTable)->save(array_merge($dateData, $where));
  101. }
  102. }
  103. }