$value) { $pro_id1[] = $value['id']; } if (!empty($pro_id1)) { $pro_id2 = array_merge($pro_id1, array(get_pid())); } else { $pro_id2 = array(get_pid()); } // $map['promote_id'] = array('in', $pro_id2); if ($_REQUEST['user_account'] == '%') { $map['user_account'] = array('like', '%\\' . $_REQUEST['user_account'] . '%'); unset($_REQUEST['user_account']); } elseif ($_REQUEST['user_account'] == 0) { $map['user_account'] = array('like', '%' . $_REQUEST['user_account'] . '%'); unset($_REQUEST['user_account']); } elseif (isset($_REQUEST['user_account']) && trim($_REQUEST['user_account'])) { $map['user_account'] = array('like', '%' . $_REQUEST['user_account'] . '%'); unset($_REQUEST['user_account']); } if (isset($_REQUEST['game_appid']) && $_REQUEST['game_appid'] != '' && $_REQUEST['game_appid'] != 0) { $map['game_id'] = $_REQUEST['game_appid']; } if ($_REQUEST['promote_id'] > 0) { if (PID == $_REQUEST['promote_id']) { $map['promote_id'] = PID; } else { $pro_id1 = get_prmoote_chlid_account($_REQUEST['promote_id']); $pro_arr = array_column($pro_id1, 'id'); $pro_arr[] = $_REQUEST['promote_id']; $map['promote_id'] = array('in', $pro_arr); } } if (isset($_REQUEST['order_number']) && trim($_REQUEST['order_number'])) { $map['pay_order_number'] = array('like', '%' . $_REQUEST['order_number'] . '%'); unset($_REQUEST['order_number']); } if (!empty($_REQUEST['time_start']) || !empty($_REQUEST['time_end'])) { $map['pay_time'] = array('BETWEEN', array(strtotime($_REQUEST['time_start']), $_REQUEST['time_end'] == '' ? time() : strtotime($_REQUEST['time_end']) + 24 * 60 * 60 - 1)); unset($_REQUEST['time_start']); unset($_REQUEST['time_end']); } if (I('request.version', 1) == 1) { $map['pay_way'] = array('neq', -1); } else { $map['pay_way'] = array('eq', -1); } if (isset($_REQUEST['sdk_version']) && trim($_REQUEST['sdk_version'])) { $map['sdk_version'] = (int)$_REQUEST['sdk_version']; unset($_REQUEST['sdk_version']); } $map['pay_status'] = 1; $map['is_check'] = array('neq', 2); $total1 = M('spend', "tab_")->where($map)->sum('pay_amount'); $total2 = M('spend', "tab_")->where($map)->sum('cost'); $this->assign("total_amount", $total1); $this->assign("total_cost", $total2); $this->meta_title = "用户充值"; $this->lists("Spend", $p, $map); } public function register($p = 0) { $page = intval($p); $page = $page ? $page : 1; //默认显示第一页数据 $row = 10; if (isset($_REQUEST['row'])) { $row = $_REQUEST['row']; } else { $row = 10; } if ($_REQUEST['promote_id'] > 0) { if (PID == $_REQUEST['promote_id']) { $map['tab_user.promote_id'] = $_REQUEST['promote_id']; } else { $pro_id = get_prmoote_chlid_account($_REQUEST['promote_id']); foreach ($pro_id as $key => $value) { $pro_id1[] = $value['id']; } if (!empty($pro_id1)) { $pro_id2 = array_merge($pro_id1, [$_REQUEST['promote_id']]); } else { $pro_id2 = $_REQUEST['promote_id']; } $map['tab_user.promote_id'] = array('in', $pro_id2); } } else { $pro_id = get_prmoote_chlid_account(session('promote_auth.pid')); foreach ($pro_id as $key => $value) { $pro_id1[] = $value['id']; } if (!empty($pro_id1)) { $pro_id2 = array_merge($pro_id1, array(get_pid())); } else { $pro_id2 = array(get_pid()); } $map['tab_user.promote_id'] = array('in', $pro_id2); } if ($_REQUEST['user_account'] == '%') { $map['tab_user.account'] = array('like', '%\\' . $_REQUEST['user_account'] . '%'); } elseif (isset($_REQUEST['user_account']) && $_REQUEST['user_account'] == 0) { $map['tab_user.account'] = array('like', '%' . $_REQUEST['user_account'] . '%'); } elseif (isset($_REQUEST['user_account']) && trim($_REQUEST['user_account'])) { $map['tab_user.account'] = array('like', '%' . $_REQUEST['user_account'] . '%'); } if (isset($_REQUEST['game_appid']) && $_REQUEST['game_appid'] != 0) { $map['tab_user.fgame_id'] = $_REQUEST['game_appid']; } if (isset($_REQUEST['sdk_version']) && (int)$_REQUEST['sdk_version'] > 0) { $map['tab_user_play.sdk_version'] = (int)$_REQUEST['sdk_version']; } if (!empty($_REQUEST['time_start']) && !empty($_REQUEST['time_end'])) { $map['tab_user.register_time'] = array('BETWEEN', array(strtotime($_REQUEST['time_start']), strtotime($_REQUEST['time_end']) + 24 * 60 * 60 - 1)); } elseif (!empty($_REQUEST['time_start']) && empty($_REQUEST['time_end'])) { $map['tab_user.register_time'] = array('egt', strtotime($_REQUEST['time_start'])); } elseif (empty($_REQUEST['time_start']) && !empty($_REQUEST['time_end'])) { $map['tab_user.register_time'] = array('elt', strtotime($_REQUEST['time_end']) + 24 * 60 * 60 - 1); } if (!empty($_REQUEST['start']) && !empty($_REQUEST['end'])) { $map['tab_user.register_time'] = array('BETWEEN', array(strtotime($_REQUEST['start']), strtotime($_REQUEST['end']) + 24 * 60 * 60 - 1)); } $map['tab_user.is_check'] = array('neq', 2); $map['tab_user.puid'] = 0; $data = D('User') ->field('tab_user.*,tab_user_play.server_name,tab_user_play.sdk_version') ->join('left join tab_user_play on tab_user.id = tab_user_play.user_id') ->where('tab_user.fgame_id = tab_user_play.game_id or tab_user.fgame_id is null') ->where($map) ->order('tab_user.id desc') ->group('tab_user.account') ->page($page, $row) ->select(); $count = count($data); $parameter = $_REQUEST; $parameter['p'] = I('get.p', 1); $parameter['row'] = I('get.row'); $page = set_pagination($count, $row, $parameter); if ($page) { $this->assign('_page', $page); } $this->assign('p', $page); $this->assign('count', $count); $this->assign('list_data', $data); $this->meta_title = '注册明细'; $this->display(); } /** *我的对账单 */ public function bill() { $map['promote_id'] = get_pid(); if (isset($_REQUEST['bill_number']) && !empty($_REQUEST['bill_number'])) { $map['bill_number'] = $_REQUEST['bill_number']; } if (isset($_REQUEST['game_id']) && !empty($_REQUEST['game_id'])) { $map['game_id'] = $_REQUEST['game_id']; } if (!empty($_REQUEST['timestart']) && !empty($_REQUEST['timeend'])) { $map['bill_start_time'] = array('egt', strtotime($_REQUEST['timestart'])); $map['bill_end_time'] = array('elt', strtotime($_REQUEST['timeend']) + 24 * 3600 - 1); } $model = array( 'm_name' => 'bill', 'map' => $map, 'template_list' => 'bill', 'title' => '我的对账单', ); $user = A('User', 'Event'); $user->bill_list($model, $_GET['p']); } /** *我的结算 */ public function my_earning($p = 1) { $pro_map['id'] = get_pid(); $pro = M("promote", "tab_")->where($pro_map)->find(); $map['promote_id'] = get_pid(); if ($pro['parent_id'] == 0) { if (isset($_REQUEST['settlement_number']) && !empty($_REQUEST['settlement_number'])) { $map['settlement_number'] = ['like', '%' . $_REQUEST['settlement_number'] . '%']; } if (!empty($_REQUEST['timestart']) && !empty($_REQUEST['timeend'])) { /*$map['bill_start_time'] = array('egt',strtotime($_REQUEST['timestart'])); $map['bill_end_time'] = array('elt',strtotime($_REQUEST['timeend'])+24*3600-1);*/ $map['starttime'] = array('egt', strtotime($_REQUEST['timestart'])); $map['endtime'] = array('elt', strtotime($_REQUEST['timeend']) + 24 * 3600 - 1); } elseif (!empty($_REQUEST['timestart']) && empty($_REQUEST['timeend'])) { $map['starttime'] = array('egt', strtotime($_REQUEST['timestart'])); } elseif (empty($_REQUEST['timestart']) && !empty($_REQUEST['timeend'])) { $map['endtime'] = array('elt', strtotime($_REQUEST['timeend']) + 24 * 3600 - 1); } $model = array( 'm_name' => 'TotalSettlement', 'map' => $map, 'fields' => true, 'order' => 'create_time desc ', 'template_list' => 'my_earning', 'title' => '我的结算', ); } else { if (isset($_REQUEST['settlement_number']) && !empty($_REQUEST['settlement_number'])) { $map['settlement_number'] = ['like', '%' . $_REQUEST['settlement_number'] . '%']; } if (!empty($_REQUEST['timestart']) && !empty($_REQUEST['timeend'])) { $map['settlement_start_time'] = array('egt', strtotime($_REQUEST['timestart'])); $map['settlement_end_time'] = array('elt', strtotime($_REQUEST['timeend']) + 24 * 3600 - 1); } elseif (!empty($_REQUEST['timestart']) && empty($_REQUEST['timeend'])) { $map['settlement_start_time'] = array('egt', strtotime($_REQUEST['timestart'])); } elseif (empty($_REQUEST['timestart']) && !empty($_REQUEST['timeend'])) { $map['settlement_end_time'] = array('elt', strtotime($_REQUEST['timeend']) + 24 * 3600 - 1); } $model = array( 'm_name' => 'son_settlement', 'fields' => 'settlement_number,settlement_start_time,create_time, settlement_end_time,game_id,game_name,promote_id, promote_account,pattern,bind_coin_status,floor(sum(sum_money*100))/100 as sum_money, sum(reg_number) as reg_number,ratio,money,floor(sum(jie_money*100))/100 as jie_money,status,ti_status', 'map' => $map, 'template_list' => 'my_earning_sub', 'order' => 'create_time desc', 'group' => 'settlement_number, create_time', 'title' => '我的结算', ); } $user = A('User', 'Event'); $this->assign("parent_id", $pro['parent_id']); $user->shou_list($model, $p); } /** *子渠道结算单 */ public function son_earning_($p = 1) { if (PLEVEL == 0) { if (isset($_REQUEST['timestart']) && isset($_REQUEST['timeend']) && !empty($_REQUEST['timestart']) && !empty($_REQUEST['timeend'])) { $starttime = strtotime($_REQUEST['timestart']); $endtime = strtotime($_REQUEST['timeend']) + 24 * 60 * 60 - 1; $this->assign('starttime', $starttime); $this->assign('endtime', $endtime); $map[0]['register_time'] = array('BETWEEN', array($starttime, $endtime)); $map[1]['pay_time'] = array('BETWEEN', array($starttime, $endtime)); unset($_REQUEST['timestart']); unset($_REQUEST['timeend']); $map[1]['parent_id'] = $map[0]['u.parent_id'] = PID; if (isset($_REQUEST['ch_promote_id']) && !empty($_REQUEST['ch_promote_id'])) { $map[1]['s.promote_id'] = $map[0]['u.promote_id'] = $_REQUEST['ch_promote_id']; } $model = array( 'title' => '子渠道结算单', 'template_list' => 'son_earning', ); $user = A('User', 'Event'); $user->check_bill($model, $p, $map); } else { $this->display(); } } else { $model = array( 'm_name' => 'SonSettlement', 'order' => 'id ', 'title' => '结算账单', 'template_list' => 'son_earning', ); $user = A('User', 'Event'); $user->money_list($model, $p); } } //子渠道结算单 public function son_list($p = 0) { if (!empty($_REQUEST['timestart']) && !empty($_REQUEST['timeend'])) { $map['settlement_start_time'] = array('egt', strtotime($_REQUEST['timestart'])); $map['settlement_end_time'] = array('elt', strtotime($_REQUEST['timeend']) + 86399); } elseif (!empty($_REQUEST['timestart']) && empty($_REQUEST['timeend'])) { $map['settlement_start_time'] = array('egt', strtotime($_REQUEST['timestart'])); $map['settlement_end_time'] = array('elt', time()); } elseif (empty($_REQUEST['timestart']) && !empty($_REQUEST['timeend'])) { $map['settlement_end_time'] = array('elt', strtotime($_REQUEST['timeend']) + 86399); } if (!empty($_REQUEST['start']) && !empty($_REQUEST['end'])) { $start = strtotime($_REQUEST['start']); $end = strtotime($_REQUEST['end']) + 86399; $map['create_time'] = array('BETWEEN', array($start, $end)); } elseif (!empty($_REQUEST['start']) && empty($_REQUEST['end'])) { $start = strtotime($_REQUEST['start']); $end = time(); $map['create_time'] = array('BETWEEN', array($start, $end)); } elseif (empty($_REQUEST['start']) && !empty($_REQUEST['end'])) { $end = strtotime($_REQUEST['end']) + 86399; $map['create_time'] = array('elt', $end); } if (!empty($_REQUEST['ch_promote_id'])) { $map['promote_id'] = $_REQUEST['ch_promote_id']; } else { $promote = M('Promote', 'tab_')->field('id')->where(['parent_id' => PID])->select(); $zi_p = implode(',', array_column($promote, 'id')); $map['promote_id'] = array('in', "$zi_p"); } $model = array( 'm_name' => 'SonSettlement', 'fields' => array( 'settlement_number', 'settlement_start_time', 'settlement_end_time', 'promote_id', 'promote_account', 'bind_coin_status', 'FLOOR(sum(sum_money*100))/100 as sum_money', 'sum(reg_number) as reg_number', 'FLOOR(sum(jie_money*100))/100 as jie_money', 'ti_status', 'create_time' ), 'order' => 'create_time desc', 'group' => 'settlement_number,create_time', 'title' => '子渠道结算单', 'template_list' => 'son_list', ); $user = A('User', 'Event'); $user->money_list($model, $p, $map); } /** *子渠道结算单 */ public function son_earning($p = 0) { if (!empty($_REQUEST['timestart']) || !empty($_REQUEST['timeend'])) { $starttime = empty($_REQUEST['timestart']) ? strtotime("-7 day {$_REQUEST['timeend']}") : strtotime($_REQUEST['timestart']); $endtime = empty($_REQUEST['timeend']) ? mktime(23, 59, 59, date('m'), date('d') - 1, date('Y')) : strtotime($_REQUEST['timeend']) + 24 * 60 * 60 - 1; $this->assign('starttime', date('Y-m-d', $starttime)); $this->assign('endtime', date('Y-m-d', $endtime)); $mapp['u.register_time'] = array('BETWEEN', array($starttime, $endtime)); $mapp['u.' . SETTLEMENT_GRADE] = 0; $map['s.pay_time'] = array('BETWEEN', array($starttime, $endtime)); $map['s.pay_status'] = 1; $map['s.' . SETTLEMENT_GRADE] = 0; if ($_REQUEST['bind_coin'] == 0) { $map['s.pay_way'] = array('neq', -1); } unset($_REQUEST['timestart']); unset($_REQUEST['timeend']); if (isset($_REQUEST['ch_promote_id']) && !empty($_REQUEST['ch_promote_id'])) { $chid = $_REQUEST['ch_promote_id']; $promote_child = get_sub_channel_id($chid, PRO_GRADE + 1); $map['s.promote_id'] = $mapp['u.promote_id'] = array('in', $promote_child); } else { $promote_child = get_zi_promote_id(PID); if (empty($promote_child)) { $this->error('该渠道无子渠道'); } $map['s.promote_id'] = $mapp['u.promote_id'] = array('in', $promote_child); } $model = array( 'fields' => 'sum(s.pay_amount) as total_amount,s.promote_account,s.promote_id,s.game_name,s.game_id,s.sub_status', 'm_name' => 'Spend', 'title' => '子渠道结算单', 'template_list' => 'son_earning', 'join' => 'tab_apply on tab_Spend.game_id=tab_apply.game_id and tab_Spend.promote_id=tab_apply.promote_id', 'group' => 's.promote_id,s.game_id', 'currentid' => $chid ? $chid : '', ); $mmap = array($mapp, $map); $user = A('User', 'Event'); $user->check_child_bill($model, $p, $mmap); } else { $this->meta_title = '子渠道结算'; $this->display(); } } public function generatesub() { //$data = $_REQUEST; if (empty($_REQUEST['ids'])) { $this->error('请选择要结算的数据'); } else { $settData = array(); $settlement_number = 'js_' . date('YmdHis', time()) . rand(100, 999); $create_time = time(); $start = $_REQUEST['timestart']; $end = $_REQUEST['timeend']; foreach ($_REQUEST['ids'] as $key => $value) { $data = json_decode($value, true); $data['settlement_number'] = $settlement_number; $data['create_time'] = time(); $data['settlement_start_time'] = strtotime($data['settlement_start_time']); $data['settlement_end_time'] = strtotime($data['settlement_end_time']); switch ($data['cooperation']) { case 'CPS': $data['pattern'] = 0; $cps = $data['ratio']; $data['jie_money'] = round(($cps * $data['sum_money']) / 100, 2); break; case 'CPA': $data['pattern'] = 1; $cpa = $data['money']; $data['jie_money'] = round($cpa * $data['reg_number'], 2); break; } $userMap['register_time'] = array('BETWEEN', array($data['settlement_start_time'], $data['settlement_end_time'] + 86399)); $userMap['fgame_id'] = $data['game_id']; $userMap[SETTLEMENT_GRADE] = $spendMap[SETTLEMENT_GRADE] = 0; $userMap['promote_id'] = $spendMap['promote_id'] = array('in', $data['tpid']); $spendMap['game_id'] = $data['game_id']; $spendMap['pay_time'] = $userMap['register_time']; $user = M('user', 'tab_')->where($userMap)->save(array(SETTLEMENT_GRADE => 1)); $spend = M('spend', 'tab_')->where($spendMap)->save(array(SETTLEMENT_GRADE => 1)); $settData[$key] = $data; } $result = M('SonSettlement', 'tab_')->addAll($settData); if ($result) { /*$this->success('生成结算单成功!',U('son_earning?success=1',array('timestart' => $start,'timeend' => $end)),true);*/ $this->success('生成结算单成功!', U('son_list'), true); } else { $this->error('生成结算单失败!', U('son_earning?fall=1', array('timestart' => $start, 'timeend' => $end)), true); } } $this->error('生成结算单失败!!!', U('son_earning?fall=1', array('timestart' => $start, 'timeend' => $end)), true); } //申请提现 public function apply_withdraw($id, $op = 0) { $map['id'] = $id; $with = M("withdraw", "tab_"); $totalSett = M("TotalSettlement", "tab_")->where($map)->find(); $with_map['settlement_number'] = $totalSett['settlement_number']; $fid = $with->where($with_map)->find(); if ($fid == null) { $add['settlement_number'] = $totalSett['settlement_number']; $add['sum_money'] = $totalSett['jie_money'] ? $totalSett['jie_money'] : $totalSett['sum_money']; $add['promote_id'] = $totalSett['promote_id']; $add['promote_account'] = $totalSett['promote_account']; $add['create_time'] = time(); $add['status'] = 0; $with->add($add); M("TotalSettlement", "tab_")->where($map)->save(array('ti_status' => 0)); $settMap['promote_id'] = $totalSett['promote_id']; $settMap['starttime'] = $totalSett['starttime']; $settMap['endtime'] = $totalSett['endtime']; $settMap['create_time'] = $totalSett['create_time']; M("settlement", "tab_")->where($settMap)->save(array('ti_status' => 0)); echo json_encode(array("status" => 1)); } else { if ($op > 0) { $with->where($with_map)->setField('status', 0); M("settlement", "tab_")->where($map)->setField('ti_status', 0); M("TotalSettlement", "tab_")->where($map)->save(array('ti_status' => 0)); echo json_encode(array("status" => 1)); } else { echo json_encode(array("status" => 0)); } } } //申请提现 public function son_apply_withdraw($settlement_number = '') { $map['settlement_number'] = $settlement_number; $with_map['settlement_number'] = $totalSett['settlement_number']; $result = M("SonSettlement", "tab_")->where($map)->save(array('ti_status' => 0)); if ($result !== false) { echo json_encode(array("status" => 1)); } else { echo json_encode(array("status" => 0)); } } public function audit_withdraw($settlement_number = '') { $map['settlement_number'] = $settlement_number; $with_map['settlement_number'] = $totalSett['settlement_number']; $result = M("SonSettlement", "tab_")->where($map)->save(array('ti_status' => 1)); if ($result !== false) { $this->success('审核成功'); } else { $this->error('审核失败'); } } public function arpu_analysis() { $this->meta_title = "ARPU统计"; A('User', 'Event')->arpu_analysis(); } public function cha_userarpu($p = 0) { $page = intval($p); $page = $page ? $page : 1; //默认显示第一页数据arraypage $arraypage = $page ? $page : 1; //默认显示第一页数据 $row = 10; if (isset($_REQUEST['row'])) { $row = $_REQUEST['row']; } else { $row = 10; } $time = $_REQUEST['time']; $promote_id = $_REQUEST['promote_id']; /* if ($promote_id <1) { $pid = D('Promote')->get_child_promote(PID,'id'); if (empty($pid[0])) { $promote_id = PID; } else { $id = implode(',',array_column($pid,'id')); $promote_id = PID.','.$id; } } */ $join = "left join tab_user u on u.fgame_id = tab_game.id"; if ($time == '') { $this->error('参数错误,缺少时间'); } else { $map['register_time'] = array('between', array(strtotime($time), strtotime($time) + 24 * 60 * 60 - 1)); } /* if($promote_id!=''){ $map_list['promote_id']=array('in',$promote_id); $map['promote_id']=array('in',$promote_id); $join .= " AND u.promote_id = {$promote_id}"; } */ if ($promote_id > 0) { if (PID == $promote_id) { $pro_arr[] = PID; } else { $pro_id1 = get_prmoote_chlid_account2($promote_id); $pro_arr = array_column($pro_id1, 'id'); $pro_arr[] = $promote_id; } $map['promote_id'] = array('in', $pro_arr); $map_list['promote_id'] = array('in', $pro_arr); $promote_id = implode(',', $pro_arr); $join .= " AND u.promote_id in ({$promote_id})"; } else { $pid = D('Promote')->get_child_promote(PID, 'id'); if (empty($pid[0])) { $pro_arr[] = PID; } else { $pro_arr = array_column($pid, 'id'); $pro_arr[] = PID; } $map['promote_id'] = array('in', $pro_arr); $map_list['promote_id'] = array('in', $pro_arr); $promote_id = implode(',', $pro_arr); $join .= " AND u.promote_id in ({$promote_id})"; } $spend2 = D('Spend'); $data = M('Game', 'tab_')->field('id as game_id, game_name')->order('id desc')->select(); foreach ($data as $key => $value) { $game_id = $value['game_id']; $map_list['game_id'] = $game_id; $user = M('User', 'tab_'); $spend = M('spend', 'tab_'); //新增人数 $rdata = $user ->field('count(id) as register_num') ->where(array('fgame_id' => $game_id)) ->where(array_merge($map, ['puid' => 0])) ->find(); $data[$key]['register_num'] = $rdata['register_num']; //活跃玩家 //$data[$key]['act_user'] = $this->count_act_user($time,$game_id,$promote_id); $activedata = D('User')->login_count_by_time(strtotime($time), strtotime($time) + 86399, $game_id, $promote_id); $data[$key]['act_user'] = $activedata[0]['login_num'] ? $activedata[0]['login_num'] : 0; //1日留存 $mapl = $map_list; $mapl["FROM_UNIXTIME(register_time,'%Y-%m-%d')"] = $time; $mapl['tab_user.promote_id'] = $mapl['promote_id']; $mapl['tab_user.puid'] = 0; unset($mapl['promote_id']); $login_time = date('Y-m-d', strtotime("+1 day", strtotime($time))); $num = $user ->field('count(DISTINCT tab_user.id) as num') ->join("right join tab_user_login_record as ur on ur.user_id = tab_user.id and FROM_UNIXTIME(ur.login_time,'%Y-%m-%d') = '{$login_time}'") ->where($mapl) ->find(); $data[$key]['keep_num'] = round($num['num'] / $data[$key]['register_num'], 4) * 100; //充值 $mapl = $map_list; empty($game_name) || $mapl['game_name'] = array('like', '%' . $game_name . '%'); $mapl['pay_status'] = 1; $mapl["FROM_UNIXTIME(pay_time,'%Y-%m-%d')"] = $time; if (I('bangbi') == 1) { $mapl['pay_way'] = array('neq', '-10'); $bangbi = true; } else { $mapl['pay_way'] = array('neq', -1); $bangbi = false; } $spend = $spend->field("IFNULL(sum(pay_amount),0) as money,IFNULL(count(distinct user_id),0) as people")->where($mapl)->find(); $data[$key]['spend'] = $spend['money']; //付费玩家数 $data[$key]['spend_people'] = $spend['people']; //新付费玩家 $newsdata = $spend2->pay_count_by_time_class([$time], $game_id, $promote_id, 1, $bangbi); $data[$key]['spend_news'] = $newsdata[0]['pay_num'] ? $newsdata[0]['pay_num'] : 0; //付费率 $data[$key]['spend_rate'] = round($data[$key]['spend_people'] / $data[$key]['act_user'], 4) * 100; //ARPU $data[$key]['ARPU'] = round($data[$key]['spend'] / $data[$key]['act_user'], 2); //ARPPU $data[$key]['ARPPU'] = round($data[$key]['spend'] / $data[$key]['spend_people'], 2); if ($data[$key]['register_num'] == 0 && $data[$key]['act_user'] == 0 && $data[$key]['keep_num'] == 0 && $data[$key]['spend'] == 0 && $data[$key]['spend_people'] == 0) { unset($data[$key]); } } $count = count($data); /* if($count > $row){ $page = new \Think\Page($count, $row); $page->setConfig('theme','%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%'); $this->assign('_page', $page->show()); } */ /*$page = set_pagination($count,++$count); if($page) {$this->assign('_page', $page);}*/ $this->assign('_page', '
共 ' . $count . ' 条记录
'); /*$size=$row;//每页显示的记录数 $pnum = ceil(count($data) / $size); //总页数,ceil()函数用于求大于数字的最小整数 //用array_slice(array,offset,length) 函数在数组中根据条件取出一段值;array(数组),offset(元素的开始位置),length(组的长度) $data = array_slice($data, ($arraypage-1)*$size, $size);*/ $this->assign('list_data', $data); $this->display(); } /** * 获取活跃用户数 * @param $time */ public function count_act_user($time, $game_id = "", $promote_id = "") { $map["FROM_UNIXTIME(login_time,'%Y-%m-%d')"] = $time; $map1["FROM_UNIXTIME(register_time,'%Y-%m-%d')"] = $time; empty($game_id) || $map['game_id'] = $game_id; empty($game_id) || $map1['fgame_id'] = $game_id; if (!empty($promote_id)) { $user = M('User', 'tab_')->field('id')->where(array('promote_id' => $promote_id))->select(); $user = implode(',', array_column($user, 'id')); $map['user_id'] = array('in', $user); $map1['id'] = array('in', $user); }; $uudata = M('User', 'tab_') ->field('id') ->where($map1) ->select(false); $data = M('user_login_record', 'tab_') ->field('id') ->where($map) ->union($uudata) ->group('user_id') ->select(); $data = count($data); return $data; } public function retention_analysis() { $this->meta_title = '留存统计'; A('User', 'Event')->retention_analysis(); } public function details() { $map['id'] = $_REQUEST['id']; $data = M('TotalSettlement', 'tab_')->where($map)->find(); $mapSett['promote_id'] = $data['promote_id']; $mapSett['starttime'] = $data['starttime']; $mapSett['endtime'] = $data['endtime']; $mapSett['create_time'] = $data['create_time']; $listData = M('settlement', 'tab_')->where($mapSett)->select(); $totalData = M('settlement', 'tab_')->where($mapSett)->sum('sum_money'); $this->assign('list_data', $listData); $this->assign('total', $totalData); $this->display(); } public function son_details() { $map['promote_id'] = $_REQUEST['promote_id']; $map['settlement_number'] = $_REQUEST['settlement_number']; $data = M('SonSettlement', 'tab_')->where($map)->select(); $total = M('SonSettlement', 'tab_')->where($map)->sum('jie_money'); $this->assign('total', floor($total * 100) / 100); $this->assign('list_data', $data); $this->display(); } public function summary($p = 1) { $page = intval($p); $page = $page ? $page : 1; //默认显示第一页数据arraypage $arraypage = $page ? $page : 1; //默认显示第一页数据 if (isset($_REQUEST['row'])) { $size = $_REQUEST['row']; } else { $size = 10; } $uid = session('promote_auth.pid'); if (isset($_REQUEST['game_id']) && !empty($_REQUEST['game_id'])) { $game_id = M('game', 'tab_')->field('id')->where(array('relation_game_id' => $_REQUEST['game_id']))->select(); $game_id = array_map('array_shift', $game_id); $umap['fgame_id'] = $gmap['game_id'] = $g_map['id'] = array('in', $game_id); //unset($_REQUEST['game_id']); } if (isset($_REQUEST['promote_id']) && !empty($_REQUEST['promote_id']) && !empty($_REQUEST['promote_account']) && isset($_REQUEST['promote_account'])) { if ($_REQUEST['promote_id'] != $_REQUEST['promote_account']) { $this->error('渠道ID与渠道账号不匹配'); } else { $map['id'] = $_REQUEST['promote_id']; } unset($_REQUEST['promote_id']); unset($_REQUEST['promote_account']); } elseif (isset($_REQUEST['promote_id']) && !empty($_REQUEST['promote_id'])) { $map['id'] = $_REQUEST['promote_id']; unset($_REQUEST['promote_id']); } elseif (isset($_REQUEST['promote_account']) && !empty($_REQUEST['promote_account'])) { $map['id'] = $_REQUEST['promote_account']; unset($_REQUEST['promote_account']); } else { $map['parent_id'] = $uid; $map['id'] = $uid; // $map['grand_id'] = $uid; $map['_logic'] = 'or'; } if (isset($_REQUEST['server_name']) && !empty($_REQUEST['server_name'])) { $smap['server_name'] = $gmap['server_name'] = $dmap['server_name'] = $_REQUEST['server_name']; unset($_REQUEST['server_name']); } if (is_numeric($_REQUEST['server_id']) && $_REQUEST['server_id'] > 0) { $smap['server_id'] = $gmap['server_id'] = $dmap['server_id'] = $_REQUEST['server_id']; } if (isset($_REQUEST['game_level']) && !empty($_REQUEST['game_level'])) { $gamedata = M('game', 'tab_')->field('first_level,first_level_name,second_level_name,second_level,third_level,third_level_name')->where(array('relation_game_id' => $_REQUEST['game_id']))->find(); if ($gamedata['first_level_name'] == $_REQUEST['game_level']) { $dmap['role_level'] = array('egt', $gamedata['first_level']); } elseif ($gamedata['second_level_name'] == $_REQUEST['game_level']) { $dmap['role_level'] = array('egt', $gamedata['second_level']); } elseif ($gamedata['third_level_name'] == $_REQUEST['game_level']) { $dmap['role_level'] = array('egt', $gamedata['third_level']); } unset($_REQUEST['game_level']); } if (isset($_REQUEST['begtime']) && isset($_REQUEST['endtime']) && !empty($_REQUEST['begtime']) && !empty($_REQUEST['endtime'])) { $smap['pay_time'] = $gmap['register_time'] = $umap['register_time'] = $dmap['play_time'] = array('BETWEEN', [strtotime($_REQUEST['begtime']), strtotime($_REQUEST['endtime']) + 86400]); unset($_REQUEST['begtime']); unset($_REQUEST['endtime']); } elseif (isset($_REQUEST['begtime']) && !empty($_REQUEST['begtime'])) { $smap['pay_time'] = $gmap['register_time'] = $umap['register_time'] = $dmap['play_time'] = array('BETWEEN', [strtotime($_REQUEST['begtime']), date("Y-m-d", strtotime("-1 day"))]); unset($_REQUEST['begtime']); } elseif (isset($_REQUEST['endtime']) && !empty($_REQUEST['endtime'])) { $smap['pay_time'] = $gmap['register_time'] = $umap['register_time'] = $dmap['play_time'] = array('ELT', strtotime($_REQUEST['endtime']) + 86400); unset($_REQUEST['endtime']); } //子渠道 $child = M('promote', 'tab_') ->field('id,account') ->where($map) ->page($page, $size) ->select(); //$count = count($child); $count = M('promote', 'tab_')->where($map)->count(); //$this->assign("count",count($child)); /* if($count > $size){ $page = new \Think\Page($count, $size); $page->setConfig('theme','%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%'); $this->assign('_page', $page->show()); } */ $page = set_pagination($count, $size); if ($page) { $this->assign('_page', $page); } foreach ($child as $k3 => $v3) { if ($child[$k3]['id'] == PID) { $child[$k3]['gid'] = PID; } else { $child[$k3]['gid'] = M('promote', 'tab_')->field('id')->where(array('parent_id' => $child[$k3]['id']))->select(); $child[$k3]['gid'] = array_map('array_shift', $child[$k3]['gid']); array_push($child[$k3]['gid'], $child[$k3]['id']); } $child[$k3]['register_user'] = M('user', 'tab_') ->field('id') ->where($umap) ->where(array('promote_id' => array('in', $child[$k3]['gid']), 'puid' => 0)) ->count(); $child[$k3]['new_user'] = M('user', 'tab_') ->field('id') ->where($umap) ->where(array('promote_id' => array('in', $child[$k3]['gid']), 'puid' => 0)) ->group('register_ip') ->select(); $child[$k3]['register_ip'] = M('user', 'tab_') ->field('register_ip') ->where($umap) ->where(array('promote_id' => array('in', $child[$k3]['gid']), 'puid' => 0)) ->group('register_ip') ->select(); $child[$k3]['register_ip'] = count($child[$k3]['register_ip']); $game1 = M('apply', 'tab_') ->field('game_id') ->where($gmap) ->where(array('promote_id' => array('in', $child[$k3]['gid']), 'status' => 1)) ->group('game_id') ->select(); $game_count1 = count($game1); $dabiao_user1 = 0; $dabiao_game1 = 0; for ($j = 0; $j <= $game_count1; $j++) { $game_level = M('game', 'tab_')->field('first_level')->where(array('id' => $game1[$j]['game_id']))->find(); if ($dmap['role_level']) { $game_level['first_level'] = $dmap['role_level'][1]; } $dabiao1 = M('user_play_info', 'tab_') ->field('user_id') ->where($dmap) ->where(array('game_id' => $game1[$j]['game_id'], 'role_level' => array('egt', $game_level['first_level']), 'promote_id' => array('in', $child[$k3]['gid']))) ->group('user_id') ->select(); $dabiao1 = count($dabiao1); if ($dabiao1 > 0) { $dabiao_game1++; } $dabiao_user1 += $dabiao1; } $child[$k3]['dabiao_user'] = $dabiao_user1; /* $dabiao_game1 = 0; for($k=0;$k<=$game_count1;$k++){ $game_level = M('game','tab_')->field('first_level')->where(array('id'=>$game1[$k]['game_id']))->find(); if($dmap['role_level']){ $game_level['first_level'] = $dmap['role_level'][1]; } $gdabiao = M('user_play_info','tab_') ->field('user_id') ->where($dmap) ->where(array('game_id'=>$game1[$k]['game_id'],'role_level'=>array('egt',$game_level['first_level']),'promote_id'=>array('in',$child[$k3]['gid']))) ->group('user_id') ->select(); $gdabiao = count($gdabiao); $dabiao_game1 += $gdabiao; } */ $child[$k3]['dabiao_game'] = $dabiao_game1; $child[$k3]['spend'] = M('spend', 'tab_') ->field('user_id') ->where($smap) ->where(array('promote_id' => array('in', $child[$k3]['gid']), 'pay_status' => 1)) ->group('user_id') ->select(); $child[$k3]['spend'] = count($child[$k3]['spend']); $child[$k3]['and_spend'] = M('spend', 'tab_') ->field('sum(pay_amount) as amount ') ->where($smap) ->where(array('promote_id' => array('in', $child[$k3]['gid']), 'pay_status' => 1, 'sdk_version' => 1)) ->select(); $child[$k3]['and_spend'] = array_map('array_shift', $child[$k3]['and_spend'])[0]; $child[$k3]['ios_spend'] = M('spend', 'tab_') ->field('sum(pay_amount) as amount ') ->where($smap) ->where(array('promote_id' => array('in', $child[$k3]['gid']), 'pay_status' => 1, 'sdk_version' => 2)) ->select(); $child[$k3]['ios_spend'] = array_map('array_shift', $child[$k3]['ios_spend'])[0]; } foreach ($child as $key1 => $value2) { $all_data['register_user'] += $child[$key1]['register_user']; $all_data['register_ip'] += $child[$key1]['register_ip']; $all_data['dabiao_user'] += $child[$key1]['dabiao_user']; $all_data['dabiao_game'] += $child[$key1]['dabiao_game']; $all_data['spend'] += $child[$key1]['spend']; $all_data['and_spend'] += $child[$key1]['and_spend']; $all_data['ios_spend'] += $child[$key1]['ios_spend']; } $this->assign('meta_title', '数据汇总列表'); $this->assign('all_data', $all_data); $this->assign('child', $child); $this->map_game_list(); $this->assign('setdate', date("Y-m-d", strtotime("-1 day"))); $this->display(); } public function dabiao_game() { if (isset($_REQUEST['game_id']) && !empty($_REQUEST['game_id'])) { $game_id = M('game', 'tab_')->field('id')->where(array('relation_game_id' => $_REQUEST['game_id']))->select(); $game_id = array_map('array_shift', $game_id); $gmap['game_id'] = array('in', $game_id); //unset($_REQUEST['game_id']); } if (isset($_REQUEST['server_name']) && !empty($_REQUEST['server_name'])) { $dmap['server_name'] = $_REQUEST['server_name']; unset($_REQUEST['server_name']); } if (isset($_REQUEST['server_id']) && !empty($_REQUEST['server_id'])) { $dmap['server_id'] = $_REQUEST['server_id']; unset($_REQUEST['server_id']); } if (isset($_REQUEST['game_level']) && !empty($_REQUEST['game_level'])) { $gamedata = M('game', 'tab_')->field('first_level,first_level_name,second_level_name,second_level,third_level,third_level_name')->where(array('relation_game_id' => $_REQUEST['game_id']))->find(); if ($gamedata['first_level_name'] == $_REQUEST['game_level']) { $dmap['role_level'] = array('egt', $gamedata['first_level']); } elseif ($gamedata['second_level_name'] == $_REQUEST['game_level']) { $dmap['role_level'] = array('egt', $gamedata['second_level']); } elseif ($gamedata['third_level_name'] == $_REQUEST['game_level']) { $dmap['role_level'] = array('egt', $gamedata['third_level']); } unset($_REQUEST['game_level']); } if (isset($_REQUEST['begtime']) && isset($_REQUEST['endtime']) && !empty($_REQUEST['begtime']) && !empty($_REQUEST['endtime'])) { $dmap['play_time'] = array('BETWEEN', [strtotime($_REQUEST['begtime']), strtotime($_REQUEST['endtime']) + 86400]); unset($_REQUEST['begtime']); unset($_REQUEST['endtime']); } elseif (isset($_REQUEST['begtime']) && !empty($_REQUEST['begtime'])) { $dmap['play_time'] = array('BETWEEN', [strtotime($_REQUEST['begtime']), date("Y-m-d", strtotime("-1 day"))]); unset($_REQUEST['begtime']); } elseif (isset($_REQUEST['endtime']) && !empty($_REQUEST['endtime'])) { $dmap['play_time'] = array('ELT', strtotime($_REQUEST['endtime']) + 86400); unset($_REQUEST['endtime']); } $promote = $_REQUEST['promote_id']; if (PID == $promote) { } else { $pids = get_prmoote_chlid_account($promote); $pro_arr = array_column($pids, 'id'); $pro_arr[] = $promote; $promote = implode(',', $pro_arr); } $game = M('apply', 'tab_') ->field('game_id,game_name') ->where($gmap) ->where(array('promote_id' => array('in', $promote), 'status' => 1)) ->group('game_id') ->select(); $game_count = count($game); for ($y = 0; $y <= $game_count; $y++) { $game_level = M('game', 'tab_')->field('first_level')->where(array('id' => $game[$y]['game_id']))->find(); if ($dmap['role_level']) { $game_level['first_level'] = $dmap['role_level'][1]; } $gdabiao = M('user_play_info', 'tab_') ->field('user_id') ->where($dmap) ->where(array('game_id' => $game[$y]['game_id'], 'role_level' => array('egt', $game_level['first_level']), 'promote_id' => array('in', $promote))) ->group('user_id') ->select(); $gdabiao = count($gdabiao); $game[$y]['num'] = $gdabiao; if ($game[$y]['num'] == 0) { unset($game[$y]); } } $this->assign('list_data', $game); $this->display(); } private function map_game_list() { $uid = session('promote_auth.pid'); $map['tab_game.game_status'] = 1; $map['tab_apply.status'] = 1; $promote = $this->get_child_promote(); array_push($promote, $uid); $map['tab_promote.id'] = array('in', $promote); $data = M('game', 'tab_') ->field('relation_game_name,relation_game_id') ->join('tab_apply on tab_apply.game_id = tab_game.id') ->join('tab_promote ON tab_apply.promote_id = tab_promote.id') ->where($map) ->group('relation_game_id') ->select(); $this->assign("game_list", $data); } public function getServer() { $uid = session('promote_auth.pid'); $promote = $this->get_child_promote(); array_push($promote, $uid); if (IS_POST) { if (isset($_POST['game_id']) && !empty($_POST['game_id'])) { $game = M('game', 'tab_')->field('id')->where(array('relation_game_id' => $_POST['game_id']))->select(); $map['u.game_id'] = array('in', array_map('array_shift', $game)); /*$map['u.promote_id'] = array('in',$promote);*/ /*$map['server_name'] = array('neq',''); $data1 = M('spend','tab_') ->field('server_name') ->where(array('pay_status'=>1)) ->where($map) ->group('server_name') ->select(); $data2 = M('user_play_info','tab_') ->field('server_name') ->where($map) ->group('server_name') ->select();*/ $data1 = M('user_play_info', 'tab_') ->alias('u') ->field('s.server_name,s.id') ->join('tab_server as s on(s.id = u.server_id) ', 'INNER') ->where($map) ->group('s.id') ->select(); $data3 = M('game', 'tab_') ->field('first_level_name,second_level_name,third_level_name') ->where(array('relation_game_id' => $_POST['game_id'])) ->find(); /*$data['server_name'] = array_unique(array_merge(array_map('array_shift', $data1),array_map('array_shift', $data2))); */ if (!empty($data1)) { $data['server_name'] = (array)$data1; } else { $data['server_name'] = ''; } $data['game_level'] = $data3; echo json_encode(array('data' => $data)); } else { echo json_encode(array('data' => '')); } } } public function get_child_promote() { $uid = session('promote_auth.pid'); $map['parent_id'] = $uid; $map['status'] = 1; $data = M('promote', 'tab_') ->field('id') ->where($map) ->select(); return array_map('array_shift', $data); } //查看角色详情 public function viewRole($id) { $userRoleData = array(); if ($id > 0) { $promoteId = D('User')->where('id = %d', $id)->getField('promote_id'); $permission = hasPromotePermission(PID, $promoteId);//是否有该推广员权限 if ($permission) { $map['tab_user.id'] = $id; $map['tab_user.promote_id'] = PID; $userRoleData = D('User') ->where($map) ->where('tab_user_play.game_id = tab_user.fgame_id') ->join('tab_user_play on tab_user.id = tab_user_play.user_id') ->field('tab_user.*,tab_user_play.game_name,tab_user_play.sdk_version,tab_user_play.server_name,tab_user_play.role_name') ->find(); } } $this->assign('list_data', $userRoleData); $this->display('view_role'); } public function userPlayers($p = 0) { $map = []; if (isset($_REQUEST['game_name'])) { $map['game_name'] = trim($_REQUEST['game_name']); unset($_REQUEST['game_name']); } if (isset($_REQUEST['server_id'])) { $map['server_id'] = trim($_REQUEST['server_id']); unset($_REQUEST['server_id']); } if (isset($_REQUEST['role_name'])) { $map['role_name'] = trim($_REQUEST['role_name']); unset($_REQUEST['role_name']); } $map['promote_id'] = session("promote_auth.pid"); $this->data_lists($p, 'UserPlayInfo', ['map' => $map]); } /** * [充值详细信息] * @param $id [充值id] */ public function viewSpendDetailed($id) { $spendData = array(); if ($id > 0) { $promoteId = D('Spend')->where('id = %d', $id)->getField('promote_id'); $permission = hasPromotePermission(PID, $promoteId);//是否有该推广员权限 if (!$permission) { $map['id'] = $id; $spendData = D('Spend')->where($map)->find(); $spendData['pay_status'] = ($spendData['pay_status'] == 1) ? '成功' : '失败'; } } $this->assign('list_data', $spendData); $this->display('view_spend_detailed'); } }