getAdvertiserMap($this->mediaId); // 循环执行 foreach ($advertiserList as $account) { $accessToken = $account['access_token'] ?? ""; if(!$accessToken) continue; // 获取消耗 $dataList = (new GdtAdapter())->getHourlyCost($account['advertiser_id'], $accessToken, $this->date); // 整理数据入库 $this->organizeDataList($account, $dataList); } } // 整理入库数据列表 protected function organizeDataList($account, $dataList): void { if(!$dataList) return; $db = Db::connect('db_advert'); // 返点率 $fandianRate = ($account['son_fandian']>1) ? (1/$account['son_fandian']) : $account['son_fandian']; $adData = []; foreach ($dataList as $val) { $adId = $val['adgroup_id']; $adName = $val['adgroup_name']; $cost = $val['cost']/100; if($cost==0) continue; $show = $val['view_count']; $click = $val['valid_click_count']; $convert = $val['activated_count']; // Todo 从广告名称中拆分归因数据 $siteInfo = $this->getSiteInfo($adName); if(!$siteInfo['game_id'] || empty($this->siteMap[$siteInfo['site_id']])) continue; $where = [ 'ad_id' => $adId, 'game_id' => $siteInfo['game_id'], 'agent_id'=> $siteInfo['agent_id'], 'site_id' => $siteInfo['site_id'], 'tdate' => $this->date, 'thour' => (int)$val['hour'], ]; $hourData = [ 'advertiser_id' => $account['advertiser_id'], 'ad_show' => $show, 'ad_click' => $click, 'ad_convert' => $convert, 'ori_money' => $cost, 'money' => $cost * $fandianRate, 'media_id' => $this->siteMap[$siteInfo['site_id']]['media_id'], 'auth_id' => $this->siteMap[$siteInfo['site_id']]['auth_id'], ]; $hourId= $db->table($this->hourTable)->where($where)->value("id"); if($hourId) { $hourData['id'] = $hourId; } // 保存小时数据 $db->table($this->hourTable)->save(array_merge($hourData, $where)); // 计算天的数据 $adKey = $siteInfo['game_id'] . "_" . $siteInfo['site_id'] . "_" . $adId; $adData[$adKey]['game_id'] = $siteInfo['game_id']; $adData[$adKey]['agent_id'] = $siteInfo['agent_id']; $adData[$adKey]['site_id'] = $siteInfo['site_id']; $adData[$adKey]['ad_id'] = $adId; $adData[$adKey]['ad_show'] = !empty($adData[$adKey]['ad_show']) ? $adData[$adKey]['ad_show']+$show : $show; $adData[$adKey]['ad_click'] = !empty($adData[$adKey]['ad_click']) ? $adData[$adKey]['ad_click']+$click : $click; $adData[$adKey]['ad_convert'] = !empty($adData[$adKey]['ad_convert']) ? $adData[$adKey]['ad_convert']+$convert : $convert; $adData[$adKey]['cost'] = !empty($adData[$adKey]['cost']) ? $adData[$adKey]['cost']+$cost : $cost; } foreach($adData as $value){ $where = [ 'ad_id' => $value['ad_id'], 'game_id' => $value['game_id'], 'agent_id'=> $value['agent_id'], 'site_id' => $value['site_id'], 'tdate' => $this->date, ]; $dateData = [ 'advertiser_id' => $account['advertiser_id'], 'ad_show' => $value['ad_show'], 'ad_click' => $value['ad_click'], 'ad_convert'=> $value['ad_convert'], 'ori_money' => $value['cost'], 'money' => $value['cost']*$fandianRate, 'media_id' => $this->siteMap[$siteInfo['site_id']]['media_id'] ?? 0, 'auth_id' => $this->siteMap[$siteInfo['site_id']]['auth_id'] ?? 0, ]; $dateId= $db->table($this->dateTable)->where($where)->value("id"); if($dateId) { $dateData['id'] = $dateId; } // 保存日数据 $db->table($this->dateTable)->save(array_merge($dateData, $where)); } } }