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']));
 }
Exemplo n.º 3
0
 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;
 }