优化玩家列表统计方式及回退去重功能

master
chenzhi 5 years ago
parent 31ac6f0a1a
commit 44afe1f65d

@ -132,10 +132,9 @@ class MemberController extends ThinkController
//计算用户列表
$data = M("user","tab_")
->field("tab_user.id,`device_number`,count(`device_number`) as device_count,`age_status`,`account`,`balance`,`gold_coin`,`alipay`,tab_user.promote_id,`register_type`,tab_user.promote_account,`register_time`,`lock_status`,lock_remark,`register_way`,`register_ip`,`login_time`,`check_status`,IFNULL(sum(ss.pay_amount), 0) AS recharge_total")
->field("tab_user.id,`device_number`,`age_status`,`account`,`balance`,`gold_coin`,`alipay`,tab_user.promote_id,`register_type`,tab_user.promote_account,`register_time`,`lock_status`,lock_remark,`register_way`,`register_ip`,`login_time`,`check_status`,IFNULL(ss.pay_amount,0) AS recharge_total")
->where($map)
->group("device_number,tab_user.register_ip")
// ->page($page, $row)
->group("tab_user.id")
->order($order);
if($havs){
@ -154,49 +153,15 @@ class MemberController extends ThinkController
if($promoterSelect){
$data->join("tab_spend AS ss ON ss.user_id = tab_user.id AND ss.pay_status = 1".$spendprom,"left");
}else{
$data->join("tab_spend AS ss ON ss.user_id = tab_user.id AND ss.pay_status = 1","left");
$data->join("tab_user_data AS ss ON ss.user_id = tab_user.id","left");
}
$data = $data->select(false);
$data = M()->table('(' . $data . ') as a ');
if(!isset($_REQUEST['export'])){
$data ->page($page, $row);
}
$data = $data->select();
// var_dump($data);die();
//计算用户列表重复数量
$userRepeat = M("user","tab_")
->field("count(`device_number`) as device_count")
->where($map)
->group("device_number,tab_user.register_ip")
// ->page($page, $row)
->order($order);
if($havs){
$userRepeat->having($havs);
}
if($gameplay){
$userRepeat->join("
(select user_id from tab_user_play where 1 $gameplay group by tab_user_play.user_id) a ON a.user_id = tab_user.id
");
}
if($game_map){
$userRepeat->join("
(select user_id from tab_user_play_info where 1 $game_map group by tab_user_play_info.user_id) a ON a.user_id = tab_user.id
");
}
if($promoterSelect){
$userRepeat->join("tab_spend AS ss ON ss.user_id = tab_user.id AND ss.pay_status = 1".$spendprom,"left");
}else{
$userRepeat->join("tab_spend AS ss ON ss.user_id = tab_user.id AND ss.pay_status = 1","left");
}
$userRepeat = $userRepeat->select(false);
$userRepeat = M()->table('(' . $userRepeat . ') as a ')->count();
// echo($data);die();
if(isset($_REQUEST['export'])){
@ -277,7 +242,7 @@ class MemberController extends ThinkController
if($promoterSelect){
$user_count->join("tab_spend AS ss ON ss.user_id = tab_user.id AND ss.pay_status = 1".$spendprom,"left");
}else{
$user_count->join("tab_spend AS ss ON ss.user_id = tab_user.id AND ss.pay_status = 1","left");
$user_count->join("tab_user_data AS ss ON ss.user_id = tab_user.id","left");
}
$user_count = $user_count->select(false);
$count = M()->table('(' . $user_count . ') as a ')->field("count(*) user_count,sum(a.recharge_total) recharge_total")->find();
@ -300,31 +265,39 @@ class MemberController extends ThinkController
");
}
$user_count = $user_count->find()['user_count'];
//计算累计充值总额
$now_count = M("user","tab_")
->field("IFNULL(sum(ss.pay_amount), 0) AS recharge_total")
//累计充值统计
$user_sql = M("user","tab_")
->field('id')
->where($map);
if($game_map){
$now_count->join("
$user_sql->join("
(select user_id from tab_user_play_info where 1 $game_map group by tab_user_play_info.user_id) a ON a.user_id = tab_user.id
");
}
if($gameplay){
$now_count->join("
$user_sql->join("
(select user_id from tab_user_play where 1 $gameplay group by tab_user_play.user_id) a ON a.user_id = tab_user.id
");
}
if($promoterSelect){
$now_count->join("tab_spend AS ss ON ss.user_id = tab_user.id AND ss.pay_status = 1".$spendprom,"left");
// dump($spendprom);
// dd($map);
$user_sql->field("IFNULL(sum(ss.pay_amount), 0) AS recharge_total");
$user_sql->join("tab_spend AS ss ON ss.user_id = tab_user.id AND ss.pay_status = 1".$spendprom,"left");
$now_count = $user_sql->find()['recharge_total'];
}else{
$now_count->join("tab_spend AS ss ON ss.user_id = tab_user.id AND ss.pay_status = 1","left");
$user_sql = $user_sql->select(false);
$now_count = M("UserData","tab_")
->alias('ss')
->field("IFNULL(sum(ss.pay_amount), 0) AS recharge_total")
->where("user_id in (".$user_sql.")")->find()['recharge_total'];
}
// dump($now_count->select(false));die();
$now_count = $now_count->find()['recharge_total'];
}
//如果存在推广员只计算所属的推广员充值记录
//如果存在推广员只计算所属的推广员历史充值记录
if($promoterSelect){
$maps = $map;
unset($maps['tab_user.promote_id']);
@ -349,15 +322,11 @@ class MemberController extends ThinkController
$this->assign('user_count',$user_count);
$this->assign('now_count', $now_count?:0);
$page = set_pagination($userRepeat, $row);
$this->assign('device_count',$user_count-$userRepeat);
$page = set_pagination($user_count, $row);
if ($page) {
$this->assign('_page', $page);
}
$this->assign('list_data', $data);
//$this->assign("is_admin",is_administrator());
$show_data_power = (is_administrator()|| session('user_auth')['show_data']);
$this->assign('show_data_power', $show_data_power);
$this->display();

@ -349,17 +349,14 @@
当前用户累计充值:{$now_count}   
历史累计充值:{$history_count}  
用户数:{$user_count}  
去重用户数:{$device_count}
</td>
<td colspan="8" style="font-style: 12px;color: #a9a9a9;text-align: center;">
当前用户累计充值:&#12288;当前属于该推广员的用户的充值累计(不含用户换绑前记录)&#12288;&#12288;/&#12288;&#12288;
历史累计充值:&#12288;历史中属于该推广员的用户的充值累计(含用户换绑前记录)&#12288;&#12288;
去重用户数:{$device_count}
</td>
<else />
<td colspan="99">
当前用户累计充值:{$now_count}&#12288;&#12288;用户数:{$user_count}&#12288;&#12288;
去重用户数:{$device_count}
</td>
</if>

Loading…
Cancel
Save