GdtCostHourLogic.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php
  2. namespace app\v1\logic\tool\advertCost;
  3. use app\adapter\GdtAdapter;
  4. use GuzzleHttp\Client;
  5. use support\think\Db;
  6. class GdtCostHourLogic extends BaseAdvertLogic
  7. {
  8. // 执行正文
  9. protected function initStart(): void
  10. {
  11. $tokenMap = $this->getGdtTokenMap();
  12. $accountList = $this->getGdtAccountList();
  13. // 循环执行
  14. foreach ($accountList as $account)
  15. {
  16. $accessToken = $tokenMap[$account['pmid']] ?? "";
  17. if(!$accessToken) continue;
  18. // 获取消耗
  19. $dataList = (new GdtAdapter())->getHourlyCost($account['advertiser_id'], $accessToken, $this->date);
  20. // 整理数据入库
  21. $this->organizeDataList($account, $dataList);
  22. }
  23. }
  24. // 整理入库数据列表
  25. protected function organizeDataList($account, $dataList): void
  26. {
  27. if(!$dataList) return;
  28. $db = Db::connect('db_advert');
  29. // 返点率
  30. $fandianRate = ($account['son_fandian']>1) ? (1/$account['son_fandian']) : $account['son_fandian'];
  31. $adData = [];
  32. foreach ($dataList as $val) {
  33. $adId = $val['adgroup_id'];
  34. $adName = $val['adgroup_name'];
  35. $cost = $val['cost']/100;
  36. if($cost==0) continue;
  37. $show = $val['view_count'];
  38. $click = $val['valid_click_count'];
  39. $convert = $val['activated_count'];
  40. // Todo 从广告名称中拆分归因数据
  41. $siteInfo = $this->getSiteInfo($adName);
  42. if(!$siteInfo['game_id'] || empty($this->siteMap[$siteInfo['site_id']])) continue;
  43. $where = [
  44. 'ad_id' => $adId,
  45. 'game_id' => $siteInfo['game_id'],
  46. 'agent_id'=> $siteInfo['agent_id'],
  47. 'site_id' => $siteInfo['site_id'],
  48. 'tdate' => $this->date,
  49. 'thour' => (int)$val['hour'],
  50. ];
  51. $hourData = [
  52. 'advertiser_id' => $account['advertiser_id'],
  53. 'ad_show' => $show,
  54. 'ad_click' => $click,
  55. 'ad_convert' => $convert,
  56. 'ori_money' => $cost,
  57. 'money' => $cost * $fandianRate,
  58. 'media_id' => $this->siteMap[$siteInfo['site_id']]['media_id'],
  59. 'auth_id' => $this->siteMap[$siteInfo['site_id']]['auth_id'],
  60. ];
  61. $hourId= $db->table($this->hourTable)->where($where)->value("id");
  62. if($hourId) {
  63. $hourData['id'] = $hourId;
  64. }
  65. // 保存小时数据
  66. $db->table($this->hourTable)->save(array_merge($hourData, $where));
  67. // 计算天的数据
  68. $adKey = $siteInfo['game_id'] . "_" . $siteInfo['site_id'] . "_" . $adId;
  69. $adData[$adKey]['game_id'] = $siteInfo['game_id'];
  70. $adData[$adKey]['agent_id'] = $siteInfo['agent_id'];
  71. $adData[$adKey]['site_id'] = $siteInfo['site_id'];
  72. $adData[$adKey]['ad_id'] = $adId;
  73. $adData[$adKey]['ad_show'] = !empty($adData[$adKey]['ad_show']) ? $adData[$adKey]['ad_show']+$show : $show;
  74. $adData[$adKey]['ad_click'] = !empty($adData[$adKey]['ad_click']) ? $adData[$adKey]['ad_click']+$click : $click;
  75. $adData[$adKey]['ad_convert'] = !empty($adData[$adKey]['ad_convert']) ? $adData[$adKey]['ad_convert']+$convert : $convert;
  76. $adData[$adKey]['cost'] = !empty($adData[$adKey]['cost']) ? $adData[$adKey]['cost']+$cost : $cost;
  77. }
  78. foreach($adData as $value){
  79. $where = [
  80. 'ad_id' => $value['ad_id'],
  81. 'game_id' => $value['game_id'],
  82. 'agent_id'=> $value['agent_id'],
  83. 'site_id' => $value['site_id'],
  84. 'tdate' => $this->date,
  85. ];
  86. $dateData = [
  87. 'advertiser_id' => $account['advertiser_id'],
  88. 'ad_show' => $value['ad_show'],
  89. 'ad_click' => $value['ad_click'],
  90. 'ad_convert'=> $value['ad_convert'],
  91. 'ori_money' => $value['cost'],
  92. 'money' => $value['cost']*$fandianRate,
  93. 'media_id' => $this->siteMap[$siteInfo['site_id']]['media_id'] ?? 0,
  94. 'auth_id' => $this->siteMap[$siteInfo['site_id']]['auth_id'] ?? 0,
  95. ];
  96. $dateId= $db->table($this->dateTable)->where($where)->value("id");
  97. if($dateId) {
  98. $dateData['id'] = $dateId;
  99. }
  100. // 保存日数据
  101. $db->table($this->dateTable)->save(array_merge($dateData, $where));
  102. }
  103. }
  104. }