public function get_init_params($chargers, $applicant, $options) { $param = json_decode($_REQUEST['adids'], true)['range']; $ad_service = new AD(); $invoice_service = new Invoice(); $quote_res = array(); $ad_id = ''; foreach ($param as $str) { $ad_id = $str['ad_ids'][0]; $res = $ad_service->get_quote_by_ads($str['start'], $str['end'], implode("','", $str['ad_ids'])); foreach ($res as $quote) { // 判断是否存在已经开过发票的广告 $nums = $invoice_service->is_invoice($quote['ad_id'], $quote['quote_start_date'], $quote['quote_end_date']); if ($nums > 0) { $this->exit_with_error(50, '此广告已开过发票,点击确定返回发票页!', 403); } if (isset($quote['cpa_after'])) { unset($quote['cpa_after']); } if (isset($quote['quote_rmb_after'])) { unset($quote['quote_rmb_after']); } array_push($quote_res, $quote); } } $ad_info = $ad_service->get_ad_info_by_id($ad_id); $agreement_service = new Agreement(); $agreement = $agreement_service->get_agreement_by_id(array('id' => $ad_info['agreement_id'])); // 结算单收款方信息 $accept = InvoiceModel::$ACCEPT[$agreement['company_dianjoy']]; $init = array('apply_time' => date('Y-m-d'), 'start' => date_format(date_create($quote_res[0]['quote_start_date']), 'Y-m'), 'agreement_number' => $agreement['agreement_id'], 'company' => $agreement['company'], 'company_short' => $agreement['company_short'], 'cycle' => $agreement['cycle'], 'rmb' => $agreement['rmb'], 'agreement_comment' => $agreement['comment'], 'ad_name' => $agreement['ad_name'], 'sign_date' => $agreement['sign_date'], 'type' => 0, 'content_type' => 0, 'company_dianjoy' => $agreement['company_dianjoy'], 'accept_company' => $accept['accept_company'], 'accept_bank' => $accept['accept_bank'], 'accept_account' => $accept['accept_account'], 'chargers' => $chargers, 'applicant' => $applicant['NAME'], 'products' => $quote_res); $this->output(array('code' => 0, 'msg' => 'init', 'invoice' => $init, 'options' => array_merge(array('init' => true), $options))); }
public function get_stat_by_date($id) { $today = date('Y-m-d'); $start = empty($_GET['start']) ? $today : $_GET['start']; $end = empty($_GET['end']) ? $today : $_GET['end']; $ad_service = new AD(); $ad = $ad_service->get_ad_info_by_id($id); $transferStat_service = new TransferStat(); $transfer_res = $transferStat_service->get_ad_transfer_by_date($start, $end, $id); $happy_lock_transfer = $transferStat_service->get_ad_happy_lock_transfer_by_date($start, $end, $id); $adminStat_service = new AdminTaskStat(); $task = $adminStat_service->get_ad_task_outcome_by_date($start, $end, $id); $limited_task = $adminStat_service->get_ad_limited_task_outcome_by_date($start, $end, $id); $es_task = $adminStat_service->get_ad_happy_lock_task_by_date($start, $end, $id); $es_limited_task = $adminStat_service->get_ad_happy_lock_limited_task_by_date($start, $end, $id); $click = $transferStat_service->get_offer_click_total_by_id($start, $end, $id); $install = $transferStat_service->get_offer_install_stat_ad_by_id($start, $end, $id); if ($ad['ad_app_type'] == 2) { $cpa = $transferStat_service->get_ios_cpa_by_ad($start, $end, $id); } $ymds = array_unique(array_merge(array_keys((array) $transfer_res), array_keys((array) $task), array_keys((array) $limited_task), array_keys((array) $click), array_keys((array) $install))); sort($ymds); $happy_lock_task = array(); foreach ($es_task['aggregations']['all_dates']['buckets'] as $ad_task) { $happy_lock_task[substr($ad_task['key_as_string'], 0, 10)] = $ad_task['sum_rmb']['value']; } $happy_lock_limited_task = array(); foreach ($es_limited_task['aggregations']['all_ad_ids']['buckets'] as $ad_task) { $happy_lock_limited_task[substr($ad_task['key_as_string'], 0, 10)] = $ad_task['sum_rmb']['value']; } $result = array_merge($ad, array('start' => $start, 'end' => $end, 'cid' => $ad['cid'], 'channel' => $ad['channel'], 'ctime' => substr($ad['create_time'], 5, 5), 'ymd' => array(), 'rmb1' => 0, 'device1' => 0, 'click' => 0, 'task_rmb' => 0, 'cpa' => 0, 'ad_app_type' => $ad['ad_app_type'] == 1 ? 'android' : 'ios', 'is_ios' => $ad['ad_app_type'] == 2, 'install' => 0, 'callback' => 0)); foreach ($ymds as $key) { $ymd = array('date' => $key, 'rmb1' => ($transfer_res[$key]['rmb'] - $happy_lock_transfer[$key] / 2) / 100, 'device1' => (int) $transfer_res[$key]['transfer'], 'click' => (int) $click[$key], 'task_rmb' => ($task[$key] + $limited_task[$key] - $happy_lock_task[$key] / 2 - $happy_lock_limited_task[$key] / 2) / 100, 'cpa' => (int) $cpa[$key], 'ratio' => $cpa && $click ? round($cpa[$key] / $click[$key] * 100, 2) : 0, 'install' => $install[$key]); $result['ymd'][] = $ymd; $result['rmb1'] += $ymd['rmb1']; $result['device1'] += $ymd['device1']; $result['click'] += $ymd['click']; $result['task_rmb'] += $ymd['task_rmb']; $result['cpa'] += $ymd['cpa']; $result['install'] += $ymd['install']; } $result['ratio'] = $result['click'] ? round($result['cpa'] / $result['click'] * 100, 2) : 0; $this->output(array('code' => 0, 'msg' => 'get', 'list' => $result['ymd'])); }
public function get_daily_ad_stat($id, $start, $end) { $redis = $this->get_redis(); $ad_service = new AD(); $ad_info = $ad_service->get_ad_info_by_id($id); $ad_transfer_service = new AdTransferStat(); $transfer = $ad_transfer_service->get_ad_transfer_stat_by_ad($id, $start, $end); $happy_lock_transfer = $ad_transfer_service->get_ad_transfer_by_user($id, $start, $end, HappylockStat::HAPPY_LOCK_USER_ID); $magic_transfer = $ad_transfer_service->get_ad_transfer_by_user($id, $start, $end, HappylockStat::MAGIC_USER_ID); $task_stat_service = new TaskStat(); $task = $task_stat_service->get_ad_task_outcome_by_date($start, $end, $id); $limited_task = $task_stat_service->get_ad_limit_task_outcome_by_date($start, $end, $id); $happy_lock_service = new HappylockStat(); $happy_lock_task = $happy_lock_service->get_ad_happy_lock_task_stat($id, $start, $end, TaskStat::TASK_ES_TYPE); $happy_lock_limited_task = $happy_lock_service->get_ad_happy_lock_task_stat($id, $start, $end, TaskStat::LIMITED_TASK_ES_TYPE); $quote_service = new QuoteStat(); $quote = $quote_service->get_ad_quote($id, $start, $end); $total = array('transfer' => 0, 'cpa' => 0, 'income' => 0, 'outcome' => 0); $total_cost = 0; $out = 0; $result['list'] = array(); for ($stamp = strtotime($start); $stamp <= strtotime($end); $stamp += 86400) { $date = date("Y-m-d", $stamp); $value = json_decode($redis->get('admin_stat_daily_ratio_' . $date), true); $total_cost += $value['total_cost']; $out += $value['out']; $stat = array('date' => $date, 'transfer' => (int) $transfer[$date]['transfer_total'], 'cpa' => (int) $quote[$date]['nums'], 'quote_rmb' => isset($quote[$date]) ? $quote[$date]['quote_rmb'] : $ad_info['quote_rmb'], 'ratio' => $transfer[$date]['transfer_total'] ? round((int) $quote[$date]['nums'] / (int) $transfer[$date]['transfer_total'] * 100, 2) : 0, 'real' => $transfer[$date]['transfer_total'] ? round((int) $quote[$date]['nums'] * (int) $quote[$date]['quote_rmb'] / (int) $transfer[$date]['transfer_total'] / 100, 2) : 0, 'outcome' => $transfer[$date]['rmb_total'] + $task[$date] + $limited_task[$date] - ($happy_lock_transfer[$date]['rmb'] + $happy_lock_task[$date] + $happy_lock_limited_task[$date]) / 2 - $magic_transfer[$date]['rmb'], 'income' => (int) $quote[$date]['nums'] * (int) $quote[$date]['quote_rmb']); $result['list'][] = $stat; foreach ($total as $key => $value) { $total[$key] += $stat[$key]; } } $tmp_out = $out == 0 ? 1 : $out; $ratio = $total_cost / $tmp_out; $total['ratio'] = $total['transfer'] ? round((int) $total['cpa'] / (int) $total['transfer'] * 100, 2) : 0; $total['real'] = $total['transfer'] ? round((int) $total['income'] / (int) $total['transfer'] / 100, 2) : 0; $total['is_amount'] = true; $result['list'][] = $total; foreach ($result['list'] as $key => $value) { $result['list'][$key]['profit'] = round($value['income'] * TAX_RATIO - $value['outcome'] * $ratio, 2); } $is_admin = $_SESSION['admin_role'] != Admin::SALE && $_SESSION['admin_role'] != Admin::SALE_MANAGER; if (!$is_admin) { $admin_service = new Admin(); $ad_info = $admin_service->check_ad_info_for_sale($ad_info); } $ad_info['is_admin'] = $is_admin; $result['ad'] = $ad_info; return $result; }