|
|
|
|
<?php
|
|
|
|
|
namespace Home\Event;
|
|
|
|
|
use Think\Controller;
|
|
|
|
|
/**
|
|
|
|
|
* 后台事件控制器
|
|
|
|
|
* @author 王贺
|
|
|
|
|
*/
|
|
|
|
|
class UserEvent extends BaseEvent {
|
|
|
|
|
|
|
|
|
|
public function lists($model=null){
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function join_list($model,$p){
|
|
|
|
|
$model || $this->error('模型名标识必须!');
|
|
|
|
|
$page = intval($p);
|
|
|
|
|
$page = $page ? $page : 1; //默认显示第一页数据
|
|
|
|
|
|
|
|
|
|
//解析列表规则
|
|
|
|
|
$fields = $model['fields'];
|
|
|
|
|
$map = $model['map'];
|
|
|
|
|
if(isset($_REQUEST['time-start']) && isset($_REQUEST['time-end']) && !empty($_REQUEST['time-start']) && !empty($_REQUEST['time-end'])){
|
|
|
|
|
$map[$model['time_fields']] = array('BETWEEN',array(strtotime($_REQUEST['time-start']),strtotime($_REQUEST['time-end'])));
|
|
|
|
|
unset($_REQUEST['time-start']);unset($_REQUEST['time-end']);
|
|
|
|
|
}
|
|
|
|
|
if(isset($_REQUEST['account']) && !empty($_REQUEST['account'])){
|
|
|
|
|
$map['account'] = array('like','%'.$_REQUEST['account'].'%');
|
|
|
|
|
unset($_REQUEST['account']);
|
|
|
|
|
}
|
|
|
|
|
if(isset($_REQUEST['game_appid']) && !empty($_REQUEST['game_appid'])){
|
|
|
|
|
$map['game_appid'] = $_REQUEST['game_appid'];
|
|
|
|
|
unset($_REQUEST['game_appid']);
|
|
|
|
|
}
|
|
|
|
|
$row = empty($model['list_row']) ? 10 : $model['list_row'];
|
|
|
|
|
|
|
|
|
|
//读取模型数据列表
|
|
|
|
|
$name = $model['m_name'];
|
|
|
|
|
$data = M($name,'tab_user_')
|
|
|
|
|
/* 查询指定字段,不指定则查询所有字段 */
|
|
|
|
|
->field('tab_user_play.id,user_id,account,game_appid,promote_id,register_time,register_ip')
|
|
|
|
|
->join("tab_user on tab_user_play.user_id = tab_user.id")
|
|
|
|
|
// 查询条件
|
|
|
|
|
->where($map)
|
|
|
|
|
/* 默认通过id逆序排列 */
|
|
|
|
|
->order($order)
|
|
|
|
|
/* 数据分页 */
|
|
|
|
|
->page($page, $row)
|
|
|
|
|
/* 执行查询 */
|
|
|
|
|
->select();
|
|
|
|
|
|
|
|
|
|
/* 查询记录总数 */
|
|
|
|
|
$count = M($name,'tab_user_')->join("tab_user on tab_user_play.user_id = tab_user.id")->where($map)->count();
|
|
|
|
|
|
|
|
|
|
//分页
|
|
|
|
|
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());
|
|
|
|
|
}
|
|
|
|
|
$this->assign('model', $model);
|
|
|
|
|
$this->assign('list_data', $data);
|
|
|
|
|
$this->meta_title = $model['title'].'列表';
|
|
|
|
|
$this->display($model['template_list']);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function bill_list($model,$p){
|
|
|
|
|
$model || $this->error('模型名标识必须!');
|
|
|
|
|
$page = intval($p);
|
|
|
|
|
$page = $page ? $page : 1; //默认显示第一页数据
|
|
|
|
|
|
|
|
|
|
//解析列表规则
|
|
|
|
|
$fields = $model['fields'];
|
|
|
|
|
$map = $model['map'];
|
|
|
|
|
|
|
|
|
|
$row = empty($model['list_row']) ? 10 : $model['list_row'];
|
|
|
|
|
|
|
|
|
|
//读取模型数据列表
|
|
|
|
|
$name = $model['m_name'];
|
|
|
|
|
$data = M($name,'tab_')
|
|
|
|
|
/* 查询指定字段,不指定则查询所有字段 */
|
|
|
|
|
// 查询条件
|
|
|
|
|
->where($map)
|
|
|
|
|
/* 默认通过id逆序排列 */
|
|
|
|
|
->order($order)
|
|
|
|
|
/* 数据分页 */
|
|
|
|
|
->page($page, $row)
|
|
|
|
|
/* 执行查询 */
|
|
|
|
|
->select();
|
|
|
|
|
|
|
|
|
|
/* 查询记录总数 */
|
|
|
|
|
$count = M($name,'tab_')->where($map)->count();
|
|
|
|
|
if($count > $row){
|
|
|
|
|
$page = new \Think\Page($count, $row);
|
|
|
|
|
foreach($map as $key=>$val) {
|
|
|
|
|
$page->parameter[$key] = urlencode($val);
|
|
|
|
|
}
|
|
|
|
|
$page->setConfig('theme','%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%');
|
|
|
|
|
$this->assign('_page', $page->show());
|
|
|
|
|
}
|
|
|
|
|
$this->assign('model', $model);
|
|
|
|
|
$this->assign('count',$count);
|
|
|
|
|
$this->assign('list_data', $data);
|
|
|
|
|
$this->meta_title = $model['title'].'列表';
|
|
|
|
|
$this->display($model['template_list']);
|
|
|
|
|
}
|
|
|
|
|
public function shou_list($model,$p){
|
|
|
|
|
$model || $this->error('模型名标识必须!');
|
|
|
|
|
$page = intval($p);
|
|
|
|
|
$page = $page ? $page : 1; //默认显示第一页数据
|
|
|
|
|
|
|
|
|
|
//解析列表规则
|
|
|
|
|
$fields = $model['fields'];
|
|
|
|
|
$order = $model['order']?:'id';
|
|
|
|
|
$map = $model['map'];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(isset($_REQUEST['row'])) {$row = $_REQUEST['row'];}else{$row = 10;}
|
|
|
|
|
|
|
|
|
|
//读取模型数据列表
|
|
|
|
|
$name = $model['m_name'];
|
|
|
|
|
$data = M($name,'tab_')
|
|
|
|
|
->field($model['fields'])
|
|
|
|
|
/* 查询指定字段,不指定则查询所有字段 */
|
|
|
|
|
// 查询条件
|
|
|
|
|
->where($map)
|
|
|
|
|
->group($model['group'])
|
|
|
|
|
/* 默认通过id逆序排列 */
|
|
|
|
|
->order($order)
|
|
|
|
|
/* 数据分页 */
|
|
|
|
|
->page($page, $row)
|
|
|
|
|
/* 执行查询 */
|
|
|
|
|
->select();
|
|
|
|
|
/* 查询记录总数 */
|
|
|
|
|
/*$count = M($name,'tab_')->where($map)->count();*/
|
|
|
|
|
|
|
|
|
|
$result = M($name,'tab_')->field($model['group'])->where($map)->group($model['group'])->select();
|
|
|
|
|
|
|
|
|
|
$count = count($result);
|
|
|
|
|
|
|
|
|
|
if($name=="son_settlement"){
|
|
|
|
|
/*$sum_money=M($name,'tab_')->where(array("promote_id"=>get_pid()))->sum("floor(jie_money*100)/100");*/
|
|
|
|
|
$sum_money = 0;
|
|
|
|
|
foreach ($data as $key => $value) {
|
|
|
|
|
$sum_money=$sum_money+$value['jie_money'];
|
|
|
|
|
if($value['ti_status']==1){
|
|
|
|
|
$kk[]=$data[$key];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$y_money=0;
|
|
|
|
|
foreach ($kk as $k=> $v) {
|
|
|
|
|
$y_money=$y_money+$v['jie_money'];
|
|
|
|
|
}
|
|
|
|
|
$w_money=$sum_money-$y_money;
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
//随搜索条件变化
|
|
|
|
|
static $sum_money=0;
|
|
|
|
|
foreach ($data as $key => $value) {
|
|
|
|
|
$sum_money=$sum_money+$value['sum_money'];
|
|
|
|
|
if($value['ti_status']==1){
|
|
|
|
|
$kk[]=$data[$key];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$y_money=0;
|
|
|
|
|
foreach ($kk as $k=> $v) {
|
|
|
|
|
$y_money=$y_money+$v['sum_money'];
|
|
|
|
|
}
|
|
|
|
|
$w_money=$sum_money-$y_money;
|
|
|
|
|
}
|
|
|
|
|
//分页
|
|
|
|
|
|
|
|
|
|
$parameter = $map;
|
|
|
|
|
$parameter['p']=I('get.p',1);
|
|
|
|
|
$parameter['row']=I('get.row');
|
|
|
|
|
|
|
|
|
|
$page = set_pagination($count,$row,$parameter);
|
|
|
|
|
if($page) {$this->assign('_page', $page);}
|
|
|
|
|
|
|
|
|
|
//$list = $data;
|
|
|
|
|
//$list['结算汇总'] = ['sum_money'=>$sum_money==""?'0.00':$sum_money];
|
|
|
|
|
//$list['未提现汇总']=['sum_money'=>$w_money==""?'0.00':$w_money];
|
|
|
|
|
//$list['成功提现汇总']=['sum_money'=>$y_money==""?'0.00':$y_money];
|
|
|
|
|
//file_put_contents(dirname(__FILE__) . '/../Controller/earning'.PID.'.txt',json_encode($list));
|
|
|
|
|
|
|
|
|
|
$this->assign('model', $model);
|
|
|
|
|
$this->assign('count',$count);
|
|
|
|
|
$this->assign('sum_money',$sum_money==""?'0.00':$sum_money);
|
|
|
|
|
$this->assign('w_money',$w_money==""?'0.00':$w_money);
|
|
|
|
|
$this->assign('y_money',$y_money==""?'0.00':$y_money);
|
|
|
|
|
$this->assign('list_data', $data);
|
|
|
|
|
$this->meta_title = $model['title'].'列表';
|
|
|
|
|
$this->display($model['template_list']);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function earning_data($p=1){
|
|
|
|
|
$pro_map['id']=get_pid();
|
|
|
|
|
$pro=M("promote","tab_")->where($pro_map)->find();
|
|
|
|
|
if($pro['parent_id']==0){
|
|
|
|
|
$map['promote_id']=get_pid();
|
|
|
|
|
if(isset($_REQUEST['settlement_number'])&&!empty($_REQUEST['settlement_number'])){
|
|
|
|
|
$map['settlement_number']=$_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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$model=array(
|
|
|
|
|
'm_name'=>'TotalSettlement',
|
|
|
|
|
'map' =>$map,
|
|
|
|
|
'fields'=>true,
|
|
|
|
|
'order' => 'create_time desc ',
|
|
|
|
|
'template_list'=>'my_earning',
|
|
|
|
|
'title' =>'我的结算',
|
|
|
|
|
|
|
|
|
|
);
|
|
|
|
|
}else{
|
|
|
|
|
$model=array(
|
|
|
|
|
'm_name'=>'son_settlement',
|
|
|
|
|
'map' =>$map,
|
|
|
|
|
'template_list'=>'my_earning',
|
|
|
|
|
'title' =>'我的结算',
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $this->shou_list_data($model,$p);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function shou_list_data($model,$p){
|
|
|
|
|
$model || $this->error('模型名标识必须!');
|
|
|
|
|
$page = intval($p);
|
|
|
|
|
$page = $page ? $page : 1; //默认显示第一页数据
|
|
|
|
|
|
|
|
|
|
//解析列表规则
|
|
|
|
|
$fields = $model['fields'];
|
|
|
|
|
$map = $model['map'];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(isset($_REQUEST['row'])) {$row = $_REQUEST['row'];}else{$row = 10;}
|
|
|
|
|
|
|
|
|
|
//读取模型数据列表
|
|
|
|
|
$name = $model['m_name'];
|
|
|
|
|
$data = M($name,'tab_')
|
|
|
|
|
->field($model['fields'])
|
|
|
|
|
/* 查询指定字段,不指定则查询所有字段 */
|
|
|
|
|
// 查询条件
|
|
|
|
|
->where($map)
|
|
|
|
|
->group($model['group'])
|
|
|
|
|
/* 默认通过id逆序排列 */
|
|
|
|
|
->order($order)
|
|
|
|
|
/* 数据分页 */
|
|
|
|
|
->page($page, $row)
|
|
|
|
|
/* 执行查询 */
|
|
|
|
|
->select();
|
|
|
|
|
/* 查询记录总数 */
|
|
|
|
|
$count = M($name,'tab_')->where($map)->count();
|
|
|
|
|
if($name=="son_settlement"){
|
|
|
|
|
$sum_money=M($name,'tab_')->where(array("promote_id"=>get_pid()))->sum("jie_money");
|
|
|
|
|
}else{
|
|
|
|
|
//随搜索条件变化
|
|
|
|
|
static $sum_money=0;
|
|
|
|
|
foreach ($data as $key => $value) {
|
|
|
|
|
$sum_money=$sum_money+$value['sum_money'];
|
|
|
|
|
if($value['ti_status']==1){
|
|
|
|
|
$kk[]=$data[$key];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($kk as $k=> $v) {
|
|
|
|
|
$y_money=$y_money+$v['sum_money'];
|
|
|
|
|
}
|
|
|
|
|
$w_money=$sum_money-$y_money;
|
|
|
|
|
}
|
|
|
|
|
//分页
|
|
|
|
|
|
|
|
|
|
$parameter = $map;
|
|
|
|
|
$parameter['p']=I('get.p',1);
|
|
|
|
|
$parameter['row']=I('get.row');
|
|
|
|
|
|
|
|
|
|
$page = set_pagination($count,$row,$parameter);
|
|
|
|
|
if($page) {$this->assign('_page', $page);}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$list = $data;
|
|
|
|
|
$list['结算汇总'] = ['sum_money'=>$sum_money==""?'0.00':$sum_money];
|
|
|
|
|
$list['未提现汇总']=['sum_money'=>$w_money==""?'0.00':$w_money];
|
|
|
|
|
$list['成功提现汇总']=['sum_money'=>$y_money==""?'0.00':$y_money];
|
|
|
|
|
//file_put_contents(dirname(__FILE__) . '/../Controller/earning'.PID.'.txt',json_encode($list));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return $list;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function earning_detail_data(){
|
|
|
|
|
$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('total',$totalData);
|
|
|
|
|
|
|
|
|
|
$listData['汇总'] = ['sum_money'=>$totalData];
|
|
|
|
|
|
|
|
|
|
return $listData;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function check_bill($model = null,$p,$extend=array()){
|
|
|
|
|
$model || $this->error('模型名标识必须!');
|
|
|
|
|
$page = intval($p);
|
|
|
|
|
$page = $page ? $page : 1; //默认显示第一页数据
|
|
|
|
|
//解析列表规则
|
|
|
|
|
$fields = $model['fields'];
|
|
|
|
|
$map0 = empty($extend[0])?array():$extend[0];
|
|
|
|
|
// var_dump($extend);exit;
|
|
|
|
|
$map1 = empty($extend[1])?array():$extend[1];
|
|
|
|
|
$row = empty($model['list_row']) ? 10 : $model['list_row'];
|
|
|
|
|
//读取模型数据列表
|
|
|
|
|
$name = $model['m_name'];
|
|
|
|
|
$data= M($name,'tab_')
|
|
|
|
|
/* 查询指定字段,不指定则查询所有字段 */
|
|
|
|
|
->field($fields)
|
|
|
|
|
->join($model['join'])
|
|
|
|
|
// 查询条件
|
|
|
|
|
->where($map1)
|
|
|
|
|
/* 默认通过id逆序排列 */
|
|
|
|
|
->order($order)
|
|
|
|
|
->group($model['group'])
|
|
|
|
|
/* 数据分页 */
|
|
|
|
|
->page($page,$row)
|
|
|
|
|
/* 执行查询 */
|
|
|
|
|
->select();
|
|
|
|
|
|
|
|
|
|
$data1 = M($name,'tab_')//spend表与apply表连,获得数据,没有注册人数
|
|
|
|
|
/* 查询指定字段,不指定则查询所有字段 */
|
|
|
|
|
->field($fields)
|
|
|
|
|
->join($model['join'])
|
|
|
|
|
// 查询条件
|
|
|
|
|
->where($map1)
|
|
|
|
|
/* 默认通过id逆序排列 */
|
|
|
|
|
->order($order)
|
|
|
|
|
->group($model['group'])
|
|
|
|
|
/* 数据分页 */
|
|
|
|
|
/* 执行查询 */
|
|
|
|
|
->select(false);
|
|
|
|
|
$data2 =M("user",'tab_')//$data1 sql语句 与user表连
|
|
|
|
|
->field('tab_user.id,tab_user.promote_id,tab_user.fgame_id as game_id,tab_user.fgame_name as game_name,tab_user.promote_account')
|
|
|
|
|
->join('INNER JOIN'.$data1."as p on p.game_id = tab_user.fgame_id and p.promote_id = tab_user.promote_id")
|
|
|
|
|
->where($map0)
|
|
|
|
|
->select(false);
|
|
|
|
|
$data3=M()//获得注册人数
|
|
|
|
|
->field("COUNT(q.id) as total_number,q.promote_id,q.fgame_id")
|
|
|
|
|
->join($data2.'as q')
|
|
|
|
|
->group("q.promote_id,q.fgame_id")
|
|
|
|
|
->query("select %FIELD% from %JOIN% %GROUP%",true);
|
|
|
|
|
if(!empty($data)&&!empty($data3)){
|
|
|
|
|
foreach ($data3 as $key => $value) {//如果游戏、推广员 同时符合,把注册人数插入data
|
|
|
|
|
foreach ($data as $k => $v) {
|
|
|
|
|
if($v['promote_id']==$value['promote_id']&&$v['game_id']==$value['fgame_id']){
|
|
|
|
|
$data[$k]['total_number']=$value['total_number'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* 查询记录总数 */
|
|
|
|
|
$count = M($name,'tab_')
|
|
|
|
|
/* 查询指定字段,不指定则查询所有字段 */
|
|
|
|
|
->field($fields)
|
|
|
|
|
->join($model['join'])
|
|
|
|
|
// 查询条件
|
|
|
|
|
->where($map1)
|
|
|
|
|
/* 默认通过id逆序排列 */
|
|
|
|
|
->order($order)
|
|
|
|
|
->group($model['group'])
|
|
|
|
|
/* 执行查询 */
|
|
|
|
|
->select();
|
|
|
|
|
$count=(count($count));
|
|
|
|
|
//分页
|
|
|
|
|
if($count > $row){
|
|
|
|
|
$page = new \Think\Page($count, $row);
|
|
|
|
|
//分页跳转的时候保证查询条件
|
|
|
|
|
foreach($_POST as $key=>$val) {
|
|
|
|
|
$page->parameter[$key] = $val;
|
|
|
|
|
}
|
|
|
|
|
$page->setConfig('theme','%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%');
|
|
|
|
|
$this->assign('_page', $page->show());
|
|
|
|
|
}
|
|
|
|
|
$this->assign('model', $model);
|
|
|
|
|
$this->assign('list_data', $data);
|
|
|
|
|
$this->meta_title = $model['title'].'列表';
|
|
|
|
|
$this->display($model['template_list']);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 子渠道结算确认
|
|
|
|
|
|
|
|
|
|
public function check_bill_($model = null,$p,$extend=array()){
|
|
|
|
|
$model || $this->error('模型名标识必须!');
|
|
|
|
|
$page = intval($p);
|
|
|
|
|
$page = $page ? $page : 1; //默认显示第一页数据
|
|
|
|
|
|
|
|
|
|
//解析列表规则
|
|
|
|
|
$fields = $model['fields'];
|
|
|
|
|
// 关键字搜索
|
|
|
|
|
$map0 = empty($extend[0])?array():$extend[0];
|
|
|
|
|
$map1 = empty($extend[1])?array():$extend[1];
|
|
|
|
|
|
|
|
|
|
$user = M("User","tab_");
|
|
|
|
|
$spend = M("Spend","tab_");
|
|
|
|
|
|
|
|
|
|
//读取模型数据列表
|
|
|
|
|
$data = array();
|
|
|
|
|
|
|
|
|
|
$row = 10 ;
|
|
|
|
|
|
|
|
|
|
$map1['sub_status'] = $map0['sub_status'] = 0;
|
|
|
|
|
$map0['fgame_id'] = array('neq',0);
|
|
|
|
|
$map1['pay_status']=1;
|
|
|
|
|
$map1['is_check']=array('in',array(1,3));
|
|
|
|
|
$map0['is_check']=array('in',array(1,3));
|
|
|
|
|
$offset = ($page-1)*$row;
|
|
|
|
|
|
|
|
|
|
$sql0 = $user->table("__USER__ as u ")
|
|
|
|
|
->field('u.id,u.promote_id,p.account as promote_account,fgame_id,fgame_name,p.parent_id')
|
|
|
|
|
->join('__PROMOTE__ as p on(p.id=u.promote_id)','left')
|
|
|
|
|
->where($map0)
|
|
|
|
|
->order("u.id")
|
|
|
|
|
->group("u.id")
|
|
|
|
|
->select(false);
|
|
|
|
|
$sql0 = "select a.promote_id,a.promote_account,a.fgame_id as game_id,a.fgame_name as game_name,count(a.id) as total_number from ("
|
|
|
|
|
.$sql0
|
|
|
|
|
." ) as a left join tab_apply as ap on(a.parent_id=ap.promote_id and ap.game_id=fgame_id) "
|
|
|
|
|
." group by fgame_id,a.promote_id order by a.promote_account ";
|
|
|
|
|
|
|
|
|
|
$data0 = $user->query($sql0." limit $offset,$row");
|
|
|
|
|
$count0 = count($user->query($sql0));
|
|
|
|
|
|
|
|
|
|
$sql1 = $spend->table("__SPEND__ as s")
|
|
|
|
|
->field("s.id,s.promote_id,p.account as promote_account,p.parent_id,s.game_id,s.game_name,s.pay_amount ")
|
|
|
|
|
->join('__PROMOTE__ as p on(p.id=s.promote_id)','left')
|
|
|
|
|
->where($map1)
|
|
|
|
|
->group("id")
|
|
|
|
|
->select(false);
|
|
|
|
|
|
|
|
|
|
$sql1 = "select a.promote_id,a.promote_account,a.game_id,a.game_name,sum(a.pay_amount) as total_amount from ( "
|
|
|
|
|
.$sql1
|
|
|
|
|
." ) as a left join tab_apply as ap on(a.parent_id=ap.promote_id and ap.game_id=a.game_id) "
|
|
|
|
|
." group by a.game_id,a.promote_id order by a.promote_account ";
|
|
|
|
|
$data1 = $spend->query($sql1." limit $offset,$row");
|
|
|
|
|
|
|
|
|
|
$count1 = count($spend->query($sql1));
|
|
|
|
|
if (!empty($data1) && !empty($data0)) {
|
|
|
|
|
foreach ($data1 as $j => $u) {
|
|
|
|
|
foreach ($data0 as $k => $v) {
|
|
|
|
|
if (($u['promote_id'] == $v['promote_id']) && ($u['game_id'] == $v['game_id'])) {
|
|
|
|
|
$data[] = array_merge($u,$v);unset($data1[$j]);unset($data0[$k]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$data = array_merge($data,$data0,$data1);
|
|
|
|
|
} elseif (!empty($data0)) {$data = $data0;}
|
|
|
|
|
elseif (!empty($data1)) {$data = $data1;}
|
|
|
|
|
|
|
|
|
|
$count = $count0>$count1?$count0:$count1;
|
|
|
|
|
//分页
|
|
|
|
|
|
|
|
|
|
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());
|
|
|
|
|
}
|
|
|
|
|
foreach ($data as $keyy => $valuee) {
|
|
|
|
|
if($valuee['game_id']>0){
|
|
|
|
|
$ggdata=M('Game','tab_')->where(array('id'=>$valuee['game_id']))->find();
|
|
|
|
|
$data[$keyy]['ratio']=$ggdata['ratio']==''?100.00:$ggdata['ratio'];
|
|
|
|
|
$data[$keyy]['money']=$ggdata['money']==''?20.00:$ggdata['money'];
|
|
|
|
|
}else{
|
|
|
|
|
$data[$keyy]['ratio']=0.00;
|
|
|
|
|
$data[$keyy]['money']=0.00;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$this->assign('model', $model);
|
|
|
|
|
$this->assign('list_data', $data);
|
|
|
|
|
$this->meta_title = $model['title'].'列表';
|
|
|
|
|
$this->display($model['template_list']);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 子渠道结算
|
|
|
|
|
* @author 鹿文学
|
|
|
|
|
*/
|
|
|
|
|
public function check_child_bill($model = null,$p,$extend=array()){
|
|
|
|
|
$model || $this->error('模型名标识必须!');
|
|
|
|
|
$page = intval($p);
|
|
|
|
|
$page = $page ? $page : 1; //默认显示第一页数据
|
|
|
|
|
|
|
|
|
|
//解析列表规则
|
|
|
|
|
$fields = $model['fields'];
|
|
|
|
|
// 关键字搜索
|
|
|
|
|
$map0 = empty($extend[0])?array():$extend[0];
|
|
|
|
|
$map1 = empty($extend[1])?array():$extend[1];
|
|
|
|
|
|
|
|
|
|
$user = M("User","tab_");
|
|
|
|
|
$spend = M("Spend","tab_");
|
|
|
|
|
|
|
|
|
|
//读取模型数据列表
|
|
|
|
|
$data = array();
|
|
|
|
|
|
|
|
|
|
$row = 10 ;
|
|
|
|
|
|
|
|
|
|
$parentid = $model['currentid'];
|
|
|
|
|
|
|
|
|
|
$map1['s.'.SETTLEMENT_GRADE] = $map0['u.'.SETTLEMENT_GRADE] = 0;
|
|
|
|
|
$map0['fgame_id'] = array('neq',0);
|
|
|
|
|
$map1['pay_status']=1;
|
|
|
|
|
$map1['is_check']=array('in',array(1,3));
|
|
|
|
|
$map0['is_check']=array('in',array(1,3));
|
|
|
|
|
$map0['puid']=0;
|
|
|
|
|
$offset = ($page-1)*$row;
|
|
|
|
|
|
|
|
|
|
$sql0 = $user->table("__USER__ as u ")
|
|
|
|
|
->field('u.id,u.promote_id as tpromote_id,fgame_id,fgame_name,p.parent_id,if(p.parent_id = '.$parentid.',p.parent_id,p.id) as promote_id,if(p.parent_id = '.$parentid.',p.parent_name,p.account) as promote_account')
|
|
|
|
|
->join('__PROMOTE__ as p on(p.id=u.promote_id)','left')
|
|
|
|
|
->where($map0)
|
|
|
|
|
->order("u.id")
|
|
|
|
|
->group("u.id")
|
|
|
|
|
->select(false);
|
|
|
|
|
$sql0 = "select a.promote_id,a.promote_account,a.fgame_id as game_id,a.fgame_name as game_name,count(a.id) as total_number,GROUP_CONCAT(DISTINCT a.tpromote_id) as tupromote_id from ("
|
|
|
|
|
.$sql0
|
|
|
|
|
." ) as a left join tab_apply as ap on(a.parent_id=ap.promote_id and ap.game_id=fgame_id) "
|
|
|
|
|
." group by fgame_id,a.promote_id order by a.promote_account ";
|
|
|
|
|
|
|
|
|
|
$data0 = $user->query($sql0." limit $offset,$row");
|
|
|
|
|
$count0 = count($user->query($sql0));
|
|
|
|
|
|
|
|
|
|
$sql1 = $spend->table("__SPEND__ as s")
|
|
|
|
|
->field("s.id,s.promote_id as tpromote_id,p.parent_id,s.game_id,s.game_name,s.pay_amount,if(p.parent_id = ".$parentid.",p.parent_id,p.id) as promote_id,if(p.parent_id = ".$parentid.",p.parent_name,p.account) as promote_account ")
|
|
|
|
|
->join('__PROMOTE__ as p on(p.id=s.promote_id)','left')
|
|
|
|
|
->where($map1)
|
|
|
|
|
->group("id")
|
|
|
|
|
->select(false);
|
|
|
|
|
|
|
|
|
|
$sql1 = "select a.promote_id,a.promote_account,a.game_id,a.game_name,sum(a.pay_amount) as total_amount,GROUP_CONCAT(DISTINCT a.tpromote_id) as tspromote_id from ( "
|
|
|
|
|
.$sql1
|
|
|
|
|
." ) as a left join tab_apply as ap on(a.parent_id=ap.promote_id and ap.game_id=a.game_id) "
|
|
|
|
|
." group by a.game_id,a.promote_id order by a.promote_account ";
|
|
|
|
|
$data1 = $spend->query($sql1." limit $offset,$row");
|
|
|
|
|
|
|
|
|
|
$count1 = count($spend->query($sql1));
|
|
|
|
|
if (!empty($data1) && !empty($data0)) {
|
|
|
|
|
foreach ($data1 as $j => $u) {
|
|
|
|
|
foreach ($data0 as $k => $v) {
|
|
|
|
|
if (($u['promote_id'] == $v['promote_id']) && ($u['game_id'] == $v['game_id'])) {
|
|
|
|
|
$data[] = array_merge($u,$v);unset($data1[$j]);unset($data0[$k]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$data = array_merge($data,$data0,$data1);
|
|
|
|
|
} elseif (!empty($data0)) {$data = $data0;}
|
|
|
|
|
elseif (!empty($data1)) {$data = $data1;}
|
|
|
|
|
|
|
|
|
|
$count = $count0>$count1?$count0:$count1;
|
|
|
|
|
//分页
|
|
|
|
|
|
|
|
|
|
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());
|
|
|
|
|
}
|
|
|
|
|
foreach ($data as $keyy => $valuee) {
|
|
|
|
|
if($valuee['game_id']>0){
|
|
|
|
|
if(PRO_GRADE == 1 || PRO_GRADE == 2) {
|
|
|
|
|
$applyresult = M('apply','tab_')->field('promote_ratio,promote_money')->where(['game_id'=>$valuee['game_id'],'promote_id'=>$parentid])->find();
|
|
|
|
|
if(!empty($applyresult) && !empty($applyresult['promote_ratio']) && !empty($applyresult['promote_money']) && ($applyresult['promote_ratio']*1>=0 && $applyresult['promote_money']*1>=0 )) {
|
|
|
|
|
$data[$keyy]['ratio']=$applyresult['promote_ratio']==''?0.00:$applyresult['promote_ratio'];
|
|
|
|
|
$data[$keyy]['money']=$applyresult['promote_money']==''?0.00:$applyresult['promote_money'];
|
|
|
|
|
} else {
|
|
|
|
|
$ggdata=M('Game','tab_')->where(array('id'=>$valuee['game_id']))->find();
|
|
|
|
|
$data[$keyy]['ratio']=(!empty($applyresult['promote_ratio']) && $applyresult['promote_ratio']*1>=0)?$applyresult['promote_ratio']:($ggdata['ratio']==''?100.00:$ggdata['ratio']);
|
|
|
|
|
$data[$keyy]['money']=(!empty($applyresult['promote_money']) && $applyresult['promote_money']*1>=0)?$applyresult['promote_money']:($ggdata['money']==''?20.00:$ggdata['money']);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
$data[$keyy]['ratio']=0.00;
|
|
|
|
|
$data[$keyy]['money']=0.00;
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
$data[$keyy]['ratio']=0.00;
|
|
|
|
|
$data[$keyy]['money']=0.00;
|
|
|
|
|
}
|
|
|
|
|
if($valuee['tspromote_id'] && $valuee['tupromote_id']) {
|
|
|
|
|
$data[$keyy]['tpromote_id'] = implode(',',array_unique(array_merge(explode(',',$valuee['tspromote_id']),explode(',',$valuee['tupromote_id']))));
|
|
|
|
|
/* unset($data[$keyy]['tspromote_id']);
|
|
|
|
|
unset($data[$keyy]['tupromote_id']); */
|
|
|
|
|
} elseif($valuee['tspromote_id']) {
|
|
|
|
|
$data[$keyy]['tpromote_id'] = $valuee['tspromote_id'];/* unset($data[$keyy]['tspromote_id']); */
|
|
|
|
|
} elseif($valuee['tupromote_id']) {
|
|
|
|
|
$data[$keyy]['tpromote_id'] = $valuee['tupromote_id'];/* unset($data[$keyy]['tupromote_id']); */
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$this->assign('model', $model);
|
|
|
|
|
$this->assign('list_data', $data);
|
|
|
|
|
$this->meta_title = $model['title'].'列表';
|
|
|
|
|
$this->display($model['template_list']);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function money_list($model = null,$p,$extend=array()) {
|
|
|
|
|
$model || $this->error('模型名标识必须!');
|
|
|
|
|
$page = intval($p);
|
|
|
|
|
$page = $page ? $page : 1; //默认显示第一页数据
|
|
|
|
|
|
|
|
|
|
//解析列表规则
|
|
|
|
|
|
|
|
|
|
$fields = $model['fields'];
|
|
|
|
|
|
|
|
|
|
// 关键字搜索
|
|
|
|
|
$map = empty($extend)?array():$extend;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(isset($_REQUEST['row'])) {$row = $_REQUEST['row'];}else{$row = 10;}
|
|
|
|
|
//读取模型数据列表
|
|
|
|
|
|
|
|
|
|
$name = $model['m_name'];
|
|
|
|
|
$new_model = M($name,"tab_");
|
|
|
|
|
$data = $new_model
|
|
|
|
|
->field(empty($model['fields'])?true:$model['fields'])
|
|
|
|
|
->where($map)
|
|
|
|
|
->group($model['group'])
|
|
|
|
|
->order($model['order'])
|
|
|
|
|
->page($page, $row)
|
|
|
|
|
->select();
|
|
|
|
|
/*$count = $new_model->where($map)->group($model['group'])->count();*/
|
|
|
|
|
|
|
|
|
|
$result = $new_model->field($model['group'])->where($map)->group($model['group'])->select();
|
|
|
|
|
|
|
|
|
|
$count = count($result);
|
|
|
|
|
|
|
|
|
|
$total = 0;
|
|
|
|
|
foreach ($data as $v) {
|
|
|
|
|
$total += $v['jie_money'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//分页
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$page = set_pagination($count,$row);
|
|
|
|
|
if($page) {$this->assign('_page', $page);}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$this->assign('model', $model);
|
|
|
|
|
$this->assign('list_data', $data);
|
|
|
|
|
$this->assign('total',$total);
|
|
|
|
|
$this->meta_title = $model['title'].'列表';
|
|
|
|
|
$this->display($model['template_list']);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function son_list($model,$p){
|
|
|
|
|
$page = intval($p);
|
|
|
|
|
$page = $page ? $page : 1; //默认显示第一页数据
|
|
|
|
|
$spen_map = $model['spen_map'];
|
|
|
|
|
$user_map = $model['user_map'];
|
|
|
|
|
$row = empty($model['list_row']) ? 10 : $model['list_row'];
|
|
|
|
|
$apply=M("apply","tab_")
|
|
|
|
|
->field("promote_id,game_id,game_name,pattern")
|
|
|
|
|
->group("promote_id,game_id")
|
|
|
|
|
->select();
|
|
|
|
|
|
|
|
|
|
$spend=M("spend","tab_")
|
|
|
|
|
->field("promote_id,promote_account,game_id,game_name,sum(pay_amount)")
|
|
|
|
|
->group("promote_id,game_id")
|
|
|
|
|
->where($spen_map)
|
|
|
|
|
// ->page($page, $row)
|
|
|
|
|
->select();
|
|
|
|
|
|
|
|
|
|
$user_count=M("user as a ","tab_")
|
|
|
|
|
->field("fgame_id,fgame_name,promote_id,promote_account,count(*) as count")
|
|
|
|
|
->group("promote_id,fgame_id")
|
|
|
|
|
->where($user_map)
|
|
|
|
|
->select();
|
|
|
|
|
foreach ($apply as $key => $value) {
|
|
|
|
|
foreach ($spend as $k => $v) {
|
|
|
|
|
if($v['promote_id']==$value['promote_id']&&$v['game_id']==$value['game_id']){
|
|
|
|
|
$spend[$k]['pattern']=$value['pattern'];
|
|
|
|
|
}
|
|
|
|
|
foreach ($user_count as $s => $d) {
|
|
|
|
|
if($v['game_id']==$d['fgame_id']&&$v['promote_id']==$d['promote_id']){
|
|
|
|
|
$spend[$k]['count']=$d['count'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$count=count($spend);
|
|
|
|
|
//分页
|
|
|
|
|
if($count > $row){
|
|
|
|
|
$page = new \Think\Page($count, $row);
|
|
|
|
|
$list=array_slice($spend,$page->firstRow,$page->listRows);
|
|
|
|
|
$page->setConfig('theme','%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%');
|
|
|
|
|
$this->assign('_page',$page->show());
|
|
|
|
|
}
|
|
|
|
|
$this->assign('model', $model);
|
|
|
|
|
$this->assign('list_data', $list);
|
|
|
|
|
$this->assign('p', $p);
|
|
|
|
|
$this->meta_title = $model['title'].'列表';
|
|
|
|
|
$this->display($model['template_list']);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function arpu_analysis() {
|
|
|
|
|
$promote = M('promote', 'tab_')->where(['id' => session('promote_auth.pid')])->find();
|
|
|
|
|
$map = [
|
|
|
|
|
'_logic' => 'or',
|
|
|
|
|
'id' => $promote['id'],
|
|
|
|
|
'parent_id' => $promote['id'],
|
|
|
|
|
'grand_id' => $promote['id'],
|
|
|
|
|
];
|
|
|
|
|
$ids = M('promote', 'tab_')->where($map)->getField('id', true);
|
|
|
|
|
|
|
|
|
|
if (IS_POST && $_POST['time_start'] && $_POST['time_end']) {
|
|
|
|
|
$request = $_REQUEST;
|
|
|
|
|
$game_id = $request['game_id'];
|
|
|
|
|
$promote_id = $request['promote_id'];
|
|
|
|
|
$this->assign('promote_arpu', $promote_id);
|
|
|
|
|
$start = strtotime($request['time_start']);
|
|
|
|
|
$end = strtotime($request['time_end'])+24*60*60-1;
|
|
|
|
|
if ($start>$end) {
|
|
|
|
|
$start = $end;
|
|
|
|
|
$_REQUEST['time_start'] = $request['time_end'];
|
|
|
|
|
$_REQUEST['time_end'] = $request['time_start'];
|
|
|
|
|
$end = strtotime($request['time_start']);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
$game_id = empty($request['game_id'])?0:$request['game_id'];
|
|
|
|
|
$promote_id = empty($request['promote_id'])?0:$request['promote_id'];
|
|
|
|
|
$start = mktime(0,0,0,date('m'),date('d')-6,date('Y'));
|
|
|
|
|
$_REQUEST['time_start'] = date('Y-m-d',$start);
|
|
|
|
|
$end = time();
|
|
|
|
|
$_REQUEST['time_end'] = date('Y-m-d');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//包含绑币 和 排除绑币
|
|
|
|
|
if (I('bind_coin') == 1){
|
|
|
|
|
$bangbi = true;
|
|
|
|
|
}else{
|
|
|
|
|
$bangbi = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($end - $start <= 7776000 ) {
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if(PID == $promote_id) {
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
$pro_id1 = get_prmoote_chlid_account($promote_id);
|
|
|
|
|
$pro_arr = array_column($pro_id1,'id');
|
|
|
|
|
$pro_arr[] = $promote_id;
|
|
|
|
|
$promote_id=implode(',',$pro_arr);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$datelist = get_date_list($start,$end);
|
|
|
|
|
$user = D('User');
|
|
|
|
|
$spend = D('Spend');
|
|
|
|
|
/*付费游戏数*/
|
|
|
|
|
$paygame = $spend->pay_game_by_time($start,$end,$game_id,$promote_id,$bangbi);
|
|
|
|
|
|
|
|
|
|
$newslist = $user->register_list_by_time($start,$end,$game_id,$promote_id,'time','');
|
|
|
|
|
|
|
|
|
|
/* 活跃玩家 */
|
|
|
|
|
$activelist = $user->login_count_by_time($start,$end,$game_id,$promote_id);
|
|
|
|
|
|
|
|
|
|
/* 充值金额 */
|
|
|
|
|
$incomelist = $spend -> money_amount_by_time($start,$end,$game_id,$promote_id,$bangbi);
|
|
|
|
|
|
|
|
|
|
/* 付费玩家 */
|
|
|
|
|
$paylist = $spend->pay_count_by_time($start,$end,$game_id,$promote_id,$bangbi);
|
|
|
|
|
|
|
|
|
|
/* 新付费玩家 */
|
|
|
|
|
$newspay = $spend->pay_count_by_time_class_game($datelist,$game_id,$promote_id,1,$bangbi);
|
|
|
|
|
/*新付费金额*/
|
|
|
|
|
$newspaysum = $spend->pay_sum_by_time_class_game($datelist,$game_id,$promote_id,1,$bangbi);
|
|
|
|
|
/* 开始时间前的付费玩家 */
|
|
|
|
|
$totalPayPlayer = $spend->payUsersStatisticsAgo($start,$game_id,$promote_id,$bangbi);
|
|
|
|
|
|
|
|
|
|
/* 留存 */
|
|
|
|
|
$ratention1 = $user->ratention_rate($newslist,$game_id,$promote_id);
|
|
|
|
|
|
|
|
|
|
/* 数据整理 */
|
|
|
|
|
foreach($datelist as $dv) {
|
|
|
|
|
$newPayUsers[$dv]=$activeUsers[$dv]=$newUsers[$dv]=$payUsers[$dv]=$usersIncome[$dv]=$ratentionRate1[$dv]=0;
|
|
|
|
|
|
|
|
|
|
$data[$dv]['newPayUsers']=$data[$dv]['activeUsers']=$data[$dv]['newUsers']=$data[$dv]['payUsers']=$data[$dv]['usersIncome']=0;
|
|
|
|
|
$data[$dv]['totalPayUsers']=intval($totalPayPlayer);
|
|
|
|
|
$data[$dv]['ratentionRate1']='--';
|
|
|
|
|
$data[$dv]['usersPayRate'] = '--';
|
|
|
|
|
$data[$dv]['usersArpu']=0;
|
|
|
|
|
$data[$dv]['usersArppu']=0;
|
|
|
|
|
$data[$dv]['payGame'] = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach($datelist as $dv) {
|
|
|
|
|
/**
|
|
|
|
|
* 付费游戏数
|
|
|
|
|
*/
|
|
|
|
|
foreach ($paygame as $pgal) {
|
|
|
|
|
if($dv == $pgal['pay_time']) {
|
|
|
|
|
$paygame[$dv]=intval($pgal['pay_num']);
|
|
|
|
|
$data[$dv]['payGame']=intval($pgal['pay_num']);break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 新增玩家 */
|
|
|
|
|
foreach ($newslist as $nlv) {
|
|
|
|
|
if ($dv == $nlv['time']) {
|
|
|
|
|
|
|
|
|
|
$data[$dv]['newUsers']=count(explode(',',$nlv['id']));break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* 活跃玩家 */
|
|
|
|
|
foreach ($activelist as $alv) {
|
|
|
|
|
if ($dv == $alv['time']) {
|
|
|
|
|
$activeUsers[$dv]=intval($alv['login_num']);
|
|
|
|
|
|
|
|
|
|
$data[$dv]['activeUsers']=intval($alv['login_num']);break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 充值金额 */
|
|
|
|
|
foreach ($incomelist as $ilv) {
|
|
|
|
|
if($ilv['pay_time']==$dv) {
|
|
|
|
|
$usersIncome[$dv] = round($ilv['money_amount'],2);
|
|
|
|
|
$data[$dv]['usersIncome'] = round($ilv['money_amount'],2);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* 付费玩家 */
|
|
|
|
|
foreach ($paylist as $plv) {
|
|
|
|
|
if ($plv['pay_time']==$dv) {
|
|
|
|
|
$payUsers[$dv]=intval($plv['pay_num']);
|
|
|
|
|
|
|
|
|
|
$data[$dv]['payUsers']=intval($plv['pay_num']);break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* 1日留存 */
|
|
|
|
|
foreach ($ratention1 as $r1) {
|
|
|
|
|
if ($r1['play_time'] == $dv) {
|
|
|
|
|
$rate = str_replace('.00','',$r1['retention_rate1']);
|
|
|
|
|
$data[$dv]['ratentionRate1']=$rate.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* 新付费玩家 */
|
|
|
|
|
foreach ($newspay as $npv) {
|
|
|
|
|
if ($npv['pay_time'] == $dv) {
|
|
|
|
|
$totalPayPlayer = $totalPayPlayer+intval($npv['pay_num']);
|
|
|
|
|
|
|
|
|
|
$data[$dv]['newPayUsers']=intval($npv['pay_num']);
|
|
|
|
|
$data[$dv]['totalPayUsers']=intval($totalPayPlayer);
|
|
|
|
|
break;
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
$data[$dv]['totalPayUsers']=intval($totalPayPlayer);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/*新付费金额*/
|
|
|
|
|
foreach ($newspaysum as $nspv) {
|
|
|
|
|
if ($nspv['pay_time'] == $dv) {
|
|
|
|
|
$data[$dv]['newPaySum']=round($nspv['pay_sum'],2);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($activeUsers as $k1=>$ap) {
|
|
|
|
|
/* 付费率=付费玩家/活跃玩家 */
|
|
|
|
|
foreach ($payUsers as $k2 => $pp) {
|
|
|
|
|
if ($k1 === $k2 && $ap>0 && $pp>0) {
|
|
|
|
|
$payrate = sprintf("%.2f",$pp/$ap*100);
|
|
|
|
|
$data[$k1]['usersPayRate']=str_replace('.00','',$payrate).'%';
|
|
|
|
|
break;
|
|
|
|
|
} elseif ($k1 === $k2) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* ARPU=当日总充值数/活跃玩家数 */
|
|
|
|
|
foreach ($usersIncome as $k2 => $ns) {
|
|
|
|
|
if ($k1 === $k2 && $ap>0 && $ns>0) {
|
|
|
|
|
$data[$k1]['usersArpu']=$ns/$ap;//str_replace('.00','',$ui);
|
|
|
|
|
break;
|
|
|
|
|
} elseif ($k1 === $k2) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach ($usersIncome as $k1 => $ns) {
|
|
|
|
|
/* ARPPU=当日总充值/付费玩家数 */
|
|
|
|
|
foreach ($payUsers as $k2 => $pp) {
|
|
|
|
|
if ($k1 === $k2 && $pp>0 && $ns>0) {
|
|
|
|
|
$data[$k1]['usersArppu']=$ns/$pp;//sprintf("%d",$ns/$pp);
|
|
|
|
|
break;
|
|
|
|
|
} elseif ($k1 === $k2) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
$this->assign('timeout',1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//file_put_contents(dirname(__FILE__) . '/../Controller/arpu'.PID.'.txt',json_encode($data));
|
|
|
|
|
|
|
|
|
|
$this->assign('list_data',$data);
|
|
|
|
|
$this->display();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function arpu_analysis_data() {
|
|
|
|
|
if ($_REQUEST['time_start'] && $_REQUEST['time_end']) {
|
|
|
|
|
$request = $_REQUEST;
|
|
|
|
|
$game_id = $request['game_id'];
|
|
|
|
|
$promote_id = $request['promote_id'];
|
|
|
|
|
|
|
|
|
|
$start = strtotime($request['time_start']);
|
|
|
|
|
$end = strtotime($request['time_end'])+24*60*60-1;
|
|
|
|
|
if ($start>$end) {
|
|
|
|
|
$start = $end;
|
|
|
|
|
$_REQUEST['time_start'] = $request['time_end'];
|
|
|
|
|
$_REQUEST['time_end'] = $request['time_start'];
|
|
|
|
|
$end = strtotime($request['time_start']);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
$game_id = empty($request['game_id'])?0:$request['game_id'];
|
|
|
|
|
$promote_id = empty($request['promote_id'])?0:$request['promote_id'];
|
|
|
|
|
$start = mktime(0,0,0,date('m'),date('d')-6,date('Y'));
|
|
|
|
|
$_REQUEST['time_start'] = date('Y-m-d',$start);
|
|
|
|
|
$end = time();
|
|
|
|
|
$_REQUEST['time_end'] = date('Y-m-d');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//包含绑币 和 排除绑币
|
|
|
|
|
if (I('bind_coin') == 1){
|
|
|
|
|
$bangbi = true;
|
|
|
|
|
}else{
|
|
|
|
|
$bangbi = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($end-$start<=7776000 ) {
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$pro_id1=get_prmoote_chlid_account($promote_id);
|
|
|
|
|
$pro_arr = array_column($pro_id1,'id');
|
|
|
|
|
$pro_arr[] = $promote_id;
|
|
|
|
|
$promote_id=implode(',',$pro_arr);
|
|
|
|
|
}
|
|
|
|
|
$datelist = get_date_list($start,$end);
|
|
|
|
|
$user = D('User');
|
|
|
|
|
$spend = D('Spend');
|
|
|
|
|
/*付费游戏数*/
|
|
|
|
|
$paygame = $spend->pay_game_by_time($start,$end,$game_id,$promote_id,$bangbi);
|
|
|
|
|
|
|
|
|
|
$newslist = $user->register_list_by_time($start,$end,$game_id,$promote_id,'time','');
|
|
|
|
|
|
|
|
|
|
/* 活跃玩家 */
|
|
|
|
|
$activelist = $user->login_count_by_time($start,$end,$game_id,$promote_id);
|
|
|
|
|
|
|
|
|
|
/* 充值金额 */
|
|
|
|
|
$incomelist = $spend -> money_amount_by_time($start,$end,$game_id,$promote_id,$bangbi);
|
|
|
|
|
|
|
|
|
|
/* 付费玩家 */
|
|
|
|
|
$paylist = $spend->pay_count_by_time($start,$end,$game_id,$promote_id,$bangbi);
|
|
|
|
|
|
|
|
|
|
/* 新付费玩家 */
|
|
|
|
|
$newspay = $spend->pay_count_by_time_class_game($datelist,$game_id,$promote_id,1,$bangbi);
|
|
|
|
|
/*新付费金额*/
|
|
|
|
|
$newspaysum = $spend->pay_sum_by_time_class_game($datelist,$game_id,$promote_id,1,$bangbi);
|
|
|
|
|
/* 开始时间前的付费玩家 */
|
|
|
|
|
$totalPayPlayer = $spend->payUsersStatisticsAgo($start,$game_id,$promote_id,$bangbi);
|
|
|
|
|
|
|
|
|
|
/* 留存 */
|
|
|
|
|
$ratention1 = $user->ratention_rate($newslist,$game_id,$promote_id);
|
|
|
|
|
|
|
|
|
|
/* 数据整理 */
|
|
|
|
|
foreach($datelist as $dv) {
|
|
|
|
|
$newPayUsers[$dv]=$activeUsers[$dv]=$newUsers[$dv]=$payUsers[$dv]=$usersIncome[$dv]=$ratentionRate1[$dv]=0;
|
|
|
|
|
|
|
|
|
|
$data[$dv]['newPayUsers']=$data[$dv]['activeUsers']=$data[$dv]['newUsers']=$data[$dv]['payUsers']=$data[$dv]['usersIncome']=0;
|
|
|
|
|
$data[$dv]['totalPayUsers']=intval($totalPayPlayer);
|
|
|
|
|
$data[$dv]['ratentionRate1']='--';
|
|
|
|
|
$data[$dv]['usersPayRate'] = '--';
|
|
|
|
|
$data[$dv]['usersArpu']=0;
|
|
|
|
|
$data[$dv]['usersArppu']=0;
|
|
|
|
|
$data[$dv]['payGame'] = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach($datelist as $dv) {
|
|
|
|
|
/**
|
|
|
|
|
* 付费游戏数
|
|
|
|
|
*/
|
|
|
|
|
foreach ($paygame as $pgal) {
|
|
|
|
|
if($dv == $pgal['pay_time']) {
|
|
|
|
|
$paygame[$dv]=intval($pgal['pay_num']);
|
|
|
|
|
$data[$dv]['payGame']=intval($pgal['pay_num']);break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 新增玩家 */
|
|
|
|
|
foreach ($newslist as $nlv) {
|
|
|
|
|
if ($dv == $nlv['time']) {
|
|
|
|
|
|
|
|
|
|
$data[$dv]['newUsers']=count(explode(',',$nlv['id']));break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* 活跃玩家 */
|
|
|
|
|
foreach ($activelist as $alv) {
|
|
|
|
|
if ($dv == $alv['time']) {
|
|
|
|
|
$activeUsers[$dv]=intval($alv['login_num']);
|
|
|
|
|
|
|
|
|
|
$data[$dv]['activeUsers']=intval($alv['login_num']);break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 充值金额 */
|
|
|
|
|
foreach ($incomelist as $ilv) {
|
|
|
|
|
if($ilv['pay_time']==$dv) {
|
|
|
|
|
$usersIncome[$dv] = round($ilv['money_amount'],2);
|
|
|
|
|
$data[$dv]['usersIncome'] = round($ilv['money_amount'],2);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* 付费玩家 */
|
|
|
|
|
foreach ($paylist as $plv) {
|
|
|
|
|
if ($plv['pay_time']==$dv) {
|
|
|
|
|
$payUsers[$dv]=intval($plv['pay_num']);
|
|
|
|
|
|
|
|
|
|
$data[$dv]['payUsers']=intval($plv['pay_num']);break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* 1日留存 */
|
|
|
|
|
foreach ($ratention1 as $r1) {
|
|
|
|
|
if ($r1['play_time'] == $dv) {
|
|
|
|
|
$rate = str_replace('.00','',$r1['retention_rate1']);
|
|
|
|
|
$data[$dv]['ratentionRate1']=$rate.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* 新付费玩家 */
|
|
|
|
|
foreach ($newspay as $npv) {
|
|
|
|
|
if ($npv['pay_time'] == $dv) {
|
|
|
|
|
$totalPayPlayer = $totalPayPlayer+intval($npv['pay_num']);
|
|
|
|
|
|
|
|
|
|
$data[$dv]['newPayUsers']=intval($npv['pay_num']);
|
|
|
|
|
$data[$dv]['totalPayUsers']=intval($totalPayPlayer);
|
|
|
|
|
break;
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
$data[$dv]['totalPayUsers']=intval($totalPayPlayer);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/*新付费金额*/
|
|
|
|
|
foreach ($newspaysum as $nspv) {
|
|
|
|
|
if ($nspv['pay_time'] == $dv) {
|
|
|
|
|
$data[$dv]['newPaySum']=round($nspv['pay_sum'],2);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($activeUsers as $k1=>$ap) {
|
|
|
|
|
/* 付费率=付费玩家/活跃玩家 */
|
|
|
|
|
foreach ($payUsers as $k2 => $pp) {
|
|
|
|
|
if ($k1 === $k2 && $ap>0 && $pp>0) {
|
|
|
|
|
$payrate = sprintf("%.2f",$pp/$ap*100);
|
|
|
|
|
$data[$k1]['usersPayRate']=str_replace('.00','',$payrate).'%';
|
|
|
|
|
break;
|
|
|
|
|
} elseif ($k1 === $k2) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* ARPU=当日总充值数/活跃玩家数 */
|
|
|
|
|
foreach ($usersIncome as $k2 => $ns) {
|
|
|
|
|
if ($k1 === $k2 && $ap>0 && $ns>0) {
|
|
|
|
|
$data[$k1]['usersArpu']=$ns/$ap;//str_replace('.00','',$ui);
|
|
|
|
|
break;
|
|
|
|
|
} elseif ($k1 === $k2) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach ($usersIncome as $k1 => $ns) {
|
|
|
|
|
/* ARPPU=当日总充值/付费玩家数 */
|
|
|
|
|
foreach ($payUsers as $k2 => $pp) {
|
|
|
|
|
if ($k1 === $k2 && $pp>0 && $ns>0) {
|
|
|
|
|
$data[$k1]['usersArppu']=$ns/$pp;//sprintf("%d",$ns/$pp);
|
|
|
|
|
break;
|
|
|
|
|
} elseif ($k1 === $k2) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
$this->assign('timeout',1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//file_put_contents(dirname(__FILE__) . '/../Controller/arpu'.PID.'.txt',json_encode($data));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return $data;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function arpu_analysis_detail_data($p=0){
|
|
|
|
|
|
|
|
|
|
$time = $_REQUEST['time'];
|
|
|
|
|
$promote_id = $_REQUEST['promote_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>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]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $data;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function retention_analysis() {
|
|
|
|
|
|
|
|
|
|
if (IS_POST && $_POST['time-start'] && $_POST['time-end']) {
|
|
|
|
|
$request=$_REQUEST;
|
|
|
|
|
$game_id = $request['game_id'];
|
|
|
|
|
$promote_id = $request['promote_id'];
|
|
|
|
|
$start = strtotime($request['time-start']);
|
|
|
|
|
$end = strtotime($request['time-end'])+24*60*60-1;
|
|
|
|
|
if ($start>$end) {
|
|
|
|
|
$start = $end;
|
|
|
|
|
$_REQUEST['time-start'] = $request['time-end'];
|
|
|
|
|
$_REQUEST['time-end'] = $request['time-start'];
|
|
|
|
|
$end = strtotime($request['time-start']);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$game_id = 0;
|
|
|
|
|
$promote_id = 0;
|
|
|
|
|
$start = mktime(0,0,0,date('m'),date('d')-9,date('Y'));
|
|
|
|
|
$_REQUEST['time-start'] = date('Y-m-d',$start);
|
|
|
|
|
$end = time();
|
|
|
|
|
$_REQUEST['time-end'] = date('Y-m-d');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if ($promote_id != PID) {
|
|
|
|
|
|
|
|
|
|
$pro_id1=get_prmoote_chlid_account($promote_id);
|
|
|
|
|
$pro_arr = array_column($pro_id1,'id');
|
|
|
|
|
$pro_arr[] = $promote_id;
|
|
|
|
|
$promote_id=implode(',',$pro_arr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$datelist = get_date_list($start,$end);
|
|
|
|
|
|
|
|
|
|
$user = D('User');
|
|
|
|
|
|
|
|
|
|
$newslist = $user->register_list_by_time($start,$end,$game_id,$promote_id,'time','');
|
|
|
|
|
$ratention1 = $user->ratention_rate($newslist,$game_id,$promote_id);
|
|
|
|
|
$ratention2 = $user->ratention_rate($newslist,$game_id,$promote_id,2);
|
|
|
|
|
$ratention3 = $user->ratention_rate($newslist,$game_id,$promote_id,3);
|
|
|
|
|
$ratention4 = $user->ratention_rate($newslist,$game_id,$promote_id,4);
|
|
|
|
|
$ratention5 = $user->ratention_rate($newslist,$game_id,$promote_id,5);
|
|
|
|
|
$ratention6 = $user->ratention_rate($newslist,$game_id,$promote_id,6);
|
|
|
|
|
$ratention7 = $user->ratention_rate($newslist,$game_id,$promote_id,7);
|
|
|
|
|
$ratention15 = $user->ratention_rate($newslist,$game_id,$promote_id,15);
|
|
|
|
|
$ratention30 = $user->ratention_rate($newslist,$game_id,$promote_id,30);
|
|
|
|
|
|
|
|
|
|
foreach($datelist as $dv) {
|
|
|
|
|
|
|
|
|
|
$data[$dv]['newUsers']=0;
|
|
|
|
|
$data[$dv]['ratentionRate1']=$data[$dv]['ratentionRate2']=$data[$dv]['ratentionRate3']=$data[$dv]['ratentionRate4']=$data[$dv]['ratentionRate5']=$data[$dv]['ratentionRate6']=$data[$dv]['ratentionRate7']=$data[$dv]['ratentionRate15']=$data[$dv]['ratentionRate30']='--';
|
|
|
|
|
|
|
|
|
|
/* 新增玩家 */
|
|
|
|
|
foreach ($newslist as $nlv) {
|
|
|
|
|
if ($dv == $nlv['time']) {
|
|
|
|
|
|
|
|
|
|
$data[$dv]['newUsers']=count(explode(',',$nlv['id']));break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 1日留存 */
|
|
|
|
|
foreach ($ratention1 as $r1) {
|
|
|
|
|
if ($r1['play_time'] == $dv) {
|
|
|
|
|
$rate1 = str_replace('.00','',$r1['retention_rate1']);
|
|
|
|
|
$data[$dv]['ratentionRate1']=$rate1.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($ratention2 as $r2) {
|
|
|
|
|
if ($r2['play_time'] == $dv) {
|
|
|
|
|
$rate2 = str_replace('.00','',$r2['retention_rate2']);
|
|
|
|
|
$data[$dv]['ratentionRate2']=$rate2.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($ratention3 as $r3) {
|
|
|
|
|
if ($r3['play_time'] == $dv) {
|
|
|
|
|
$rate3 = str_replace('.00','',$r3['retention_rate3']);
|
|
|
|
|
$data[$dv]['ratentionRate3']=$rate3.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($ratention4 as $r4) {
|
|
|
|
|
if ($r4['play_time'] == $dv) {
|
|
|
|
|
$rate4 = str_replace('.00','',$r4['retention_rate4']);
|
|
|
|
|
$data[$dv]['ratentionRate4']=$rate4.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($ratention5 as $r5) {
|
|
|
|
|
if ($r5['play_time'] == $dv) {
|
|
|
|
|
$rate5 = str_replace('.00','',$r5['retention_rate5']);
|
|
|
|
|
$data[$dv]['ratentionRate5']=$rate5.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($ratention6 as $r6) {
|
|
|
|
|
if ($r6['play_time'] == $dv) {
|
|
|
|
|
$rate6 = str_replace('.00','',$r6['retention_rate6']);
|
|
|
|
|
$data[$dv]['ratentionRate6']=$rate6.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($ratention7 as $r7) {
|
|
|
|
|
if ($r7['play_time'] == $dv) {
|
|
|
|
|
$rate7 = str_replace('.00','',$r7['retention_rate7']);
|
|
|
|
|
$data[$dv]['ratentionRate7']=$rate7.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($ratention15 as $r15) {
|
|
|
|
|
if ($r15['play_time'] == $dv) {
|
|
|
|
|
$rate15 = str_replace('.00','',$r15['retention_rate15']);
|
|
|
|
|
$data[$dv]['ratentionRate15']=$rate15.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($ratention30 as $r30) {
|
|
|
|
|
if ($r30['play_time'] == $dv) {
|
|
|
|
|
$rate30 = str_replace('.00','',$r30['retention_rate30']);
|
|
|
|
|
$data[$dv]['ratentionRate30']=$rate30.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//file_put_contents(dirname(__FILE__) . '/../Controller/retention'.PID.'.txt',json_encode($data));
|
|
|
|
|
|
|
|
|
|
$this->assign('list_data',$data);
|
|
|
|
|
|
|
|
|
|
$this->display();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function retention_analysis_data() {
|
|
|
|
|
|
|
|
|
|
if ($_REQUEST['time-start'] && $_REQUEST['time-end']) {
|
|
|
|
|
$request=$_REQUEST;
|
|
|
|
|
$game_id = $request['game_id'];
|
|
|
|
|
$promote_id = $request['promote_id'];
|
|
|
|
|
$start = strtotime($request['time-start']);
|
|
|
|
|
$end = strtotime($request['time-end'])+24*60*60-1;
|
|
|
|
|
if ($start>$end) {
|
|
|
|
|
$start = $end;
|
|
|
|
|
$_REQUEST['time-start'] = $request['time-end'];
|
|
|
|
|
$_REQUEST['time-end'] = $request['time-start'];
|
|
|
|
|
$end = strtotime($request['time-start']);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$game_id = 0;
|
|
|
|
|
$promote_id = 0;
|
|
|
|
|
$start = mktime(0,0,0,date('m'),date('d')-9,date('Y'));
|
|
|
|
|
$_REQUEST['time-start'] = date('Y-m-d',$start);
|
|
|
|
|
$end = time();
|
|
|
|
|
$_REQUEST['time-end'] = date('Y-m-d');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
$pro_id1=get_prmoote_chlid_account($promote_id);
|
|
|
|
|
$pro_arr = array_column($pro_id1,'id');
|
|
|
|
|
$pro_arr[] = $promote_id;
|
|
|
|
|
$promote_id=implode(',',$pro_arr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$datelist = get_date_list($start,$end);
|
|
|
|
|
|
|
|
|
|
$user = D('User');
|
|
|
|
|
|
|
|
|
|
$newslist = $user->register_list_by_time($start,$end,$game_id,$promote_id,'time','');
|
|
|
|
|
$ratention1 = $user->ratention_rate($newslist,$game_id,$promote_id);
|
|
|
|
|
$ratention2 = $user->ratention_rate($newslist,$game_id,$promote_id,2);
|
|
|
|
|
$ratention3 = $user->ratention_rate($newslist,$game_id,$promote_id,3);
|
|
|
|
|
$ratention4 = $user->ratention_rate($newslist,$game_id,$promote_id,4);
|
|
|
|
|
$ratention5 = $user->ratention_rate($newslist,$game_id,$promote_id,5);
|
|
|
|
|
$ratention6 = $user->ratention_rate($newslist,$game_id,$promote_id,6);
|
|
|
|
|
$ratention7 = $user->ratention_rate($newslist,$game_id,$promote_id,7);
|
|
|
|
|
$ratention15 = $user->ratention_rate($newslist,$game_id,$promote_id,15);
|
|
|
|
|
$ratention30 = $user->ratention_rate($newslist,$game_id,$promote_id,30);
|
|
|
|
|
|
|
|
|
|
foreach($datelist as $dv) {
|
|
|
|
|
|
|
|
|
|
$data[$dv]['newUsers']=0;
|
|
|
|
|
$data[$dv]['ratentionRate1']=$data[$dv]['ratentionRate2']=$data[$dv]['ratentionRate3']=$data[$dv]['ratentionRate4']=$data[$dv]['ratentionRate5']=$data[$dv]['ratentionRate6']=$data[$dv]['ratentionRate7']=$data[$dv]['ratentionRate15']=$data[$dv]['ratentionRate30']='--';
|
|
|
|
|
|
|
|
|
|
/* 新增玩家 */
|
|
|
|
|
foreach ($newslist as $nlv) {
|
|
|
|
|
if ($dv == $nlv['time']) {
|
|
|
|
|
|
|
|
|
|
$data[$dv]['newUsers']=count(explode(',',$nlv['id']));break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 1日留存 */
|
|
|
|
|
foreach ($ratention1 as $r1) {
|
|
|
|
|
if ($r1['play_time'] == $dv) {
|
|
|
|
|
$rate1 = str_replace('.00','',$r1['retention_rate1']);
|
|
|
|
|
$data[$dv]['ratentionRate1']=$rate1.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($ratention2 as $r2) {
|
|
|
|
|
if ($r2['play_time'] == $dv) {
|
|
|
|
|
$rate2 = str_replace('.00','',$r2['retention_rate2']);
|
|
|
|
|
$data[$dv]['ratentionRate2']=$rate2.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($ratention3 as $r3) {
|
|
|
|
|
if ($r3['play_time'] == $dv) {
|
|
|
|
|
$rate3 = str_replace('.00','',$r3['retention_rate3']);
|
|
|
|
|
$data[$dv]['ratentionRate3']=$rate3.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($ratention4 as $r4) {
|
|
|
|
|
if ($r4['play_time'] == $dv) {
|
|
|
|
|
$rate4 = str_replace('.00','',$r4['retention_rate4']);
|
|
|
|
|
$data[$dv]['ratentionRate4']=$rate4.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($ratention5 as $r5) {
|
|
|
|
|
if ($r5['play_time'] == $dv) {
|
|
|
|
|
$rate5 = str_replace('.00','',$r5['retention_rate5']);
|
|
|
|
|
$data[$dv]['ratentionRate5']=$rate5.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($ratention6 as $r6) {
|
|
|
|
|
if ($r6['play_time'] == $dv) {
|
|
|
|
|
$rate6 = str_replace('.00','',$r6['retention_rate6']);
|
|
|
|
|
$data[$dv]['ratentionRate6']=$rate6.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($ratention7 as $r7) {
|
|
|
|
|
if ($r7['play_time'] == $dv) {
|
|
|
|
|
$rate7 = str_replace('.00','',$r7['retention_rate7']);
|
|
|
|
|
$data[$dv]['ratentionRate7']=$rate7.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($ratention15 as $r15) {
|
|
|
|
|
if ($r15['play_time'] == $dv) {
|
|
|
|
|
$rate15 = str_replace('.00','',$r15['retention_rate15']);
|
|
|
|
|
$data[$dv]['ratentionRate15']=$rate15.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach ($ratention30 as $r30) {
|
|
|
|
|
if ($r30['play_time'] == $dv) {
|
|
|
|
|
$rate30 = str_replace('.00','',$r30['retention_rate30']);
|
|
|
|
|
$data[$dv]['ratentionRate30']=$rate30.'%';break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
///file_put_contents(dirname(__FILE__) . '/../Controller/retention'.PID.'.txt',json_encode($data));
|
|
|
|
|
|
|
|
|
|
return $data;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|