You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1204 lines
51 KiB
PHP

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace Home\Controller;
use OT\DataDictionary;
use User\Api\PromoteApi;
/**
* 前台首页控制器
* 主要获取首页聚合数据
*/
class QueryController extends BaseController
{
public function recharge($p = 0)
{
$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['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', '<div><span class="rows">共 ' . $count . ' 条记录</span></div>');
/*$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');
}
}