diff --git a/Application/Admin/Controller/ExportController.class.php b/Application/Admin/Controller/ExportController.class.php index 929355e79..2f9d589e1 100644 --- a/Application/Admin/Controller/ExportController.class.php +++ b/Application/Admin/Controller/ExportController.class.php @@ -157,8 +157,8 @@ class ExportController extends Controller $adminList = getMarketAdminsByPromoteIds(array_column($xlsData, 'promote_id')); foreach($xlsData as $value) { - $value['market_admin_username'] = isset($adminList[$value['promote_id']]) && $adminList[$value['promote_id']]['admin'] ? $adminList[$value['promote_id']]['admin']['username'] : '无'; ($value['promote_account']=='官方渠道'||$value['promote_account']=='自然注册')?($value['promote_account']=C('OFFICIEL_CHANNEL')):''; + $value['market_admin_username'] = isset($adminList[$value['promote_id']]) && $adminList[$value['promote_id']]['admin'] ? $adminList[$value['promote_id']]['admin']['username'] : '无'; $value['create_time'] = date("Y-m-d H:i:s",$value['create_time']); $value['play_time'] = date("Y-m-d H:i:s",$value['play_time']); mb_convert_variables('GBK', 'UTF-8', $value); @@ -3582,14 +3582,10 @@ class ExportController extends Controller } private function promote_statistics_export($p=0){ - $page = intval($p); - $page = $page ? $page : 1; //默认显示第一页数据 - $arraypage=$page; - $row = 10; - $user=M('User','tab_'); - if(isset($_REQUEST['timestart'])&&isset($_REQUEST['timeend'])){ - $map['register_time'] =array('BETWEEN',array(strtotime($_REQUEST['timestart']),strtotime($_REQUEST['timeend'])+24*60*60-1)); - unset($_REQUEST['timestart']);unset($_REQUEST['timeend']); + if (!empty($_REQUEST['timestart']) && !empty($_REQUEST['timeend'])) { + $map['register_time'] = ['between', array(strtotime($_REQUEST['timestart']), strtotime($_REQUEST['timeend']) + 86399)]; + unset($_REQUEST['timestart']); + unset($_REQUEST['timeend']); } elseif (!empty($_REQUEST['timestart']) && empty($_REQUEST['timeend'])) { $map['register_time'] = ['between', array(strtotime($_REQUEST['timestart']), time())]; unset($_REQUEST['timestart']); @@ -3597,104 +3593,157 @@ class ExportController extends Controller $map['register_time'] = ['elt', strtotime($_REQUEST['timeend']) + 86399]; unset($_REQUEST['timeend']); } - -// if(isset($_REQUEST['start'])&&isset($_REQUEST['end'])){ -// $map['register_time'] =array('BETWEEN',array(strtotime($_REQUEST['start']),strtotime($_REQUEST['end'])+24*60*60-1)); -// unset($_REQUEST['start']);unset($_REQUEST['end']); -// } - $play_info_map = ''; - + //TODO:应需求,取消玩家表,只要user表的fgame有就算注册无需在play表存在 + $play_map = false; if (isset($_REQUEST['game_name'])) { $map['fgame_name'] = $_REQUEST['game_name']; - $play_info_map .= " and upi.game_name = '{$_REQUEST['game_name']}' "; - unset($_REQUEST['game_name']); + // $play_map = " and up.game_name = '{$_REQUEST['game_name']}' "; } + $play_info_map = false; if (isset($_REQUEST['server_id'])) { - $play_info_map .= " and upi.server_name = '{$_REQUEST['server_id']}' "; + $play_map = false; //有区服就不检索玩家表,有区服一定已经选择游戏了 + $play_info_map = " and upi.server_id = '{$_REQUEST['server_id']}' and upi.game_name = '{$_REQUEST['game_name']}'"; } - $today=total(1); - $week=total(2); - $mounth=total(3); + + $today = total(1); + $week = total(2); + $mounth = total(3); + if (isset($_REQUEST['promote_id'])) { - $map['tp1.id'] = $_REQUEST['promote_id']; - } else { - $map['tp1.chain'] = '/'; + $promoter_ids = D("Promote")->where("chain like '%/{$_REQUEST['promote_id']}/%' or id={$_REQUEST['promote_id']}")->field('id')->select(); + if ($promoter_ids) { + $map['u.promote_id'] = ['in', implode(',', array_column($promoter_ids, 'id'))]; + } } + + if (!empty($_REQUEST['admin_id'])) { + $map['promote.admin_id'] = $_REQUEST['admin_id']; + } + //为数据权限添加 setPowerPromoteIds($map, 'u.promote_id'); - $data = M('promote', 'tab_')->alias('tp1')->field('tp1.account as promote_account,tp1.id, date_format(FROM_UNIXTIME(register_time),"%Y-%m-%d") AS time, count(u.id) as count, - count(IF(register_time ' . $today . ',1,null)) as today, - count(IF(register_time ' . $week . ',1,null)) as week, - count(IF(register_time ' . $mounth . ',1,null)) as mounth') - ->join("tab_promote AS tp2 ON tp2.`chain` LIKE CONCAT('%/', tp1.id, '/%') OR tp2.id = tp1.id", 'left') - ->join("tab_user as u on tp2.id = u.promote_id", 'left') - ->join($play_info_map ? "tab_user_play_info as upi on upi.user_id = u.id " . $play_info_map : false) - ->where($map) - ->group('tp1.id') - ->order('count desc, register_time') - ->select(); - unset($map['tp1.id']); - unset($map['tp1.chain']); - $map['promote_id'] = 0; - //如果有官方渠道权限 - $user_auth_promote_ids = session('user_auth_promote_ids'); - if ($user_auth_promote_ids == 'all' || in_array('0', explode(",", $user_auth_promote_ids))) { - //官方渠道数据添加 - $authorityData = M('user', 'tab_')->alias('u') - ->field('date_format(FROM_UNIXTIME(register_time),"%Y-%m-%d") AS time, - count(id) as count, - count(IF(register_time ' . $today . ',1,null)) as today, - count(IF(register_time ' . $week . ',1,null)) as week, - count(IF(register_time ' . $mounth . ',1,null)) as mounth') + + // 如果是市场专员那么只能看自己的 + $isMarketAdmin = isMarketAdmin(); + if ($isMarketAdmin) { + $map['promote.admin_id'] = is_login(); + } + + $data = M("User u","tab_") + ->field("count(u.id) as count,IFNULL(if(substring_index(substring_index(promote.`chain`,'/',2),'/',-1)='',u.promote_id,substring_index(substring_index(promote.`chain`,'/',2),'/',-1)),0) id") + ->join("tab_promote promote ON u.promote_id = promote.id","left") + ->join($play_map ? "tab_user_play as up on up.user_id = u.id " . $play_map : false) + ->join($play_info_map ? "tab_user_play_info as upi on upi.user_id = u.id " . $play_info_map : false) + ->join('tab_game on u.fgame_id = tab_game.id') ->where($map) - ->find(); + ->group('id') + ->order('count desc, register_time') + ->select(); + //今日/本周/本月不变 + $tmap = $map; + if(isset($tmap['register_time'])){ + //获取最大最小 + $tweek = total(2,false); + $tmonth = total(3,false); + //获取最小 + $tmin = 0; + if($tweek[1][0] < $tmonth[1][0]){ + $tmin = $tweek[1][0]; + }else{ + $tmin = $tmonth[1][0]; + } + $tmap['register_time'] = ['between', array($tmin,$tmonth[1][1])]; + } + + $tdata = M("User u","tab_") + ->field("count(IF(register_time {$today},1,null)) as today, + count(IF(register_time {$week},1,null)) as week, + count(IF(register_time {$mounth},1,null)) as mounth, + IFNULL(if(substring_index(substring_index(promote.`chain`,'/',2),'/',-1)='',u.promote_id,substring_index(substring_index(promote.`chain`,'/',2),'/',-1)),0) id") + ->join("tab_promote promote ON u.promote_id = promote.id","left") + ->join($play_map ? "tab_user_play as up on up.user_id = u.id " . $play_map : false) + ->join($play_info_map ? "tab_user_play_info as upi on upi.user_id = u.id " . $play_info_map : false) + ->where($tmap) + ->group('id') + ->order('register_time') + ->select(); + $tmdata = []; + foreach($data as $k=>$v){ + $v['today'] = 0; + $v['week'] = 0; + $v['mounth'] = 0; + $tmdata[$v['id']] = $v; + } + if(!empty($tdata)){ + foreach ($tdata as $k => $v) { + $tmdata[$v['id']]['today'] = $v['today']; + $tmdata[$v['id']]['week'] = $v['week']; + $tmdata[$v['id']]['mounth'] = $v['mounth']; + $tmdata[$v['id']]['id'] = $v['id']; + } } - $authorityData['promote_account'] = C('OFFICIEL_CHANNEL'); - $authorityData['id'] = "1"; - if (isset($_REQUEST['promote_id'])||$authorityData['count']==0) { - $authorityData = []; - } else { - array_push($data, $authorityData); + if(count($tmdata) >0){ + //获取推广员 + $idstr = implode(",",array_keys($tmdata)); + $promoteRes = M("Promote","tab_")->field("id,account promote_account")->where("id in ({$idstr})")->select(); + foreach($promoteRes as $k=>$v){ + $tmdata[$v['id']]['promote_account'] = $v['promote_account']; + } } - -//数据排序 + $data = []; + foreach($tmdata as $k => $v){ + if($v['id'] == 0){ + $v['promote_account'] = C('OFFICIEL_CHANNEL'); + } + $data[] = $v; + } + unset($map['tp1.id']); + unset($map['tp1.chain']); + unset($tmap['tp1.id']); + unset($tmap['tp1.chain']); + $map['u.promote_id'] = 0; + $tmap['u.promote_id'] = 0; + $authorityData['count'] = 0; + //数据排序 $last_names = array_column($data,'count'); array_multisort($last_names,SORT_DESC,$data); -// var_dump($data);die(); - $count=count($data); + $count = count($data); foreach ($data as $key => $value) { - static $i=0; - $i++; - $data[$key]['rand']=$i; + static $i = 0; + $i++; + $data[$key]['rand'] = $i; } -// foreach ($data as $key => $value) { -// if($data[$key]['promote_id']==0){ -// unset($data[$key]); -// } -// } - $total=A('Platform')->data_total($data); - if($_REQUEST['data_order']!=''){ - $data_order=reset(explode(',',$_REQUEST['data_order'])); - $data_order_type=end(explode(',',$_REQUEST['data_order'])); - $this->assign('userarpu_order',$data_order); - $this->assign('userarpu_order_type',$data_order_type); - } - 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()); + $total = $this->data_total($data); + if ($_REQUEST['data_order'] != '') { + $data_order = reset(explode(',', $_REQUEST['data_order'])); + $data_order_type = end(explode(',', $_REQUEST['data_order'])); + $this->assign('userarpu_order', $data_order); + $this->assign('userarpu_order_type', $data_order_type); } - $data=my_sort($data,$data_order_type,(int)$data_order); - $size=$row;//每页显示的记录数 - $pnum = ceil(count($data) / $size); //总页数,ceil()函数用于求大于数字的最小整数 + + $data = my_sort($data, $data_order_type, (int)$data_order); //用array_slice(array,offset,length) 函数在数组中根据条件取出一段值;array(数组),offset(元素的开始位置),length(组的长度) -// $data = array_slice($data, ($arraypage-1)*$size, $size); + + $companys = !empty($data) ? M('promote', 'tab_') + ->field('tab_promote.id, company_name, sys_member.nickname as admin_username') + ->join("tab_promote_company on tab_promote.company_id = tab_promote_company.id", 'left') + ->join('sys_member on tab_promote.admin_id = sys_member.uid', 'left') + ->where("tab_promote.id in (".implode(',', array_column($data, 'id')).")")->select() : []; + $companys = $companys ? array_column($companys, null, 'id') : []; + foreach ($data as &$item) { + $item['company_name'] = $companys[$item['id']]['company_name'] ?? '无'; + $item['admin_username'] = $companys[$item['id']]['admin_username'] ?? '无'; + } + $xlsName = $_REQUEST['xlsname']?$_REQUEST['xlsname']:'推广员注册统计'; $xlsCell = array( - array('promote_account', "推广员账号"), + array('company_name' , "公司"), + array('promote_account', "会长账号"), + array('admin_username' , "市场专员"), + //array('relation_game_name' , "游戏"), array('count' , "累计注册"), array('rand' , "排行榜"), array('today' , "今日注册"), diff --git a/Application/Admin/Controller/PlatformController.class.php b/Application/Admin/Controller/PlatformController.class.php index a63e42791..1236ffafd 100644 --- a/Application/Admin/Controller/PlatformController.class.php +++ b/Application/Admin/Controller/PlatformController.class.php @@ -446,6 +446,10 @@ class PlatformController extends ThinkController $play_info_map = " and upi.server_id = '{$_REQUEST['server_id']}' and upi.game_name = '{$_REQUEST['game_name']}'"; } + if (!empty($_REQUEST['admin_id'])) { + $map['promote.admin_id'] = $_REQUEST['admin_id']; + } + $today = total(1); $week = total(2); $mounth = total(3); @@ -456,13 +460,23 @@ class PlatformController extends ThinkController $map['u.promote_id'] = ['in', implode(',', array_column($promoter_ids, 'id'))]; } } + + + // 如果是市场专员那么只能看自己的会长信息 + $isMarketAdmin = isMarketAdmin(); + if ($isMarketAdmin) { + $map['promote.admin_id'] = is_login(); + } + //为数据权限添加 setPowerPromoteIds($map, 'u.promote_id'); + $data = M("User u","tab_") ->field("count(u.id) as count,IFNULL(if(substring_index(substring_index(promote.`chain`,'/',2),'/',-1)='',u.promote_id,substring_index(substring_index(promote.`chain`,'/',2),'/',-1)),0) id") ->join("tab_promote promote ON u.promote_id = promote.id","left") ->join($play_map ? "tab_user_play as up on up.user_id = u.id " . $play_map : false) ->join($play_info_map ? "tab_user_play_info as upi on upi.user_id = u.id " . $play_info_map : false) + ->join('tab_game on u.fgame_id = tab_game.id') ->where($map) ->group('id') ->order('count desc, register_time') @@ -491,6 +505,7 @@ class PlatformController extends ThinkController ->join("tab_promote promote ON u.promote_id = promote.id","left") ->join($play_map ? "tab_user_play as up on up.user_id = u.id " . $play_map : false) ->join($play_info_map ? "tab_user_play_info as upi on upi.user_id = u.id " . $play_info_map : false) + ->join('tab_game on u.fgame_id = tab_game.id') ->where($tmap) ->group('id') ->order('register_time') @@ -539,7 +554,7 @@ class PlatformController extends ThinkController $count = count($data); foreach ($data as $key => $value) { static $i = 0; - $i++; + $i++; $data[$key]['rand'] = $i; } @@ -563,9 +578,21 @@ class PlatformController extends ThinkController $pnum = ceil(count($data) / $size); //总页数,ceil()函数用于求大于数字的最小整数 //用array_slice(array,offset,length) 函数在数组中根据条件取出一段值;array(数组),offset(元素的开始位置),length(组的长度) $data = array_slice($data, ($arraypage - 1) * $size, $size); + + $companys = !empty($data) ? M('promote', 'tab_') + ->field('tab_promote.id, company_name, sys_member.nickname as admin_username') + ->join("tab_promote_company on tab_promote.company_id = tab_promote_company.id", 'left') + ->join('sys_member on tab_promote.admin_id = sys_member.uid', 'left') + ->where("tab_promote.id in (".implode(',', array_column($data, 'id')).")")->select() : []; + $companys = $companys ? array_column($companys, null, 'id') : []; + foreach ($data as &$item) { + $item['company_name'] = $companys[$item['id']]['company_name'] ?? '无'; + $item['admin_username'] = $companys[$item['id']]['admin_username'] ?? '无'; + } $this->meta_title = '渠道注册统计列表'; $this->assign("is_admin",is_administrator()); $this->assign('list_data', $data); + $this->assign('admin_users', M('member')->field('uid,nickname')->select()); $this->assign('total', $total); $this->display(); } @@ -601,7 +628,7 @@ class PlatformController extends ThinkController $map['pay_time'] = ['between', array(0, time())]; // $pay_time = " between 0 and " . time(); } - $map1['pay_status'] = $map['pay_status'] = 1; + $map1['s.pay_status'] = $map['s.pay_status'] = 1; $today = total(1); $week = total(2); $mounth = total(3); @@ -616,17 +643,18 @@ class PlatformController extends ThinkController }else{ $tmin = $tmonth[1][0]; } - - //为数据权限添加 - setPowerPromoteIds($map, 'tp1.id'); if (isset($_REQUEST['promote_id'])) { - $map['tp1.id'] = $_REQUEST['promote_id']; + //$map['tp1.id'] = $_REQUEST['promote_id']; + $promoter_ids = D("Promote")->where("chain like '%/{$_REQUEST['promote_id']}/%' or id={$_REQUEST['promote_id']}")->field('id')->select(); + if ($promoter_ids) { + $map['tp1.id'] = $_REQUEST['promote_id']; + $map['tp2.id'] = ['in', implode(',', array_column($promoter_ids, 'id'))]; + } } else { $map['tp1.chain'] = '/'; } - if (isset($_REQUEST['game_name'])) { $map['s.game_name'] = $_REQUEST['game_name']; if (isset($_REQUEST['server_id'])) { @@ -635,20 +663,47 @@ class PlatformController extends ThinkController } } - if (isset($_REQUEST['game_name'])||isset($_REQUEST['promote_id'])) { - $data = M('promote', 'tab_')->alias('tp1') - ->field('tp1.account as promote_account,tp1.id, - floor(sum(pay_amount)*100) as count') - ->join("tab_promote AS tp2 ON tp2.`chain` LIKE CONCAT('%/', tp1.id, '/%') OR tp2.id = tp1.id", 'left') - ->join("tab_spend as s use INDEX(search) on tp2.id = s.promote_id", 'left') - ->where($map) - ->group('tp1.id') - ->order('count desc') - ->select(); + if (isMarketAdmin()) { + $map['s.market_admin_id'] = is_login(); + } else if (!empty($_REQUEST['admin_id'])) { + $map['s.market_admin_id'] = $_REQUEST['admin_id']; } else { - $statisticsMap['time'] =$map['pay_time']; - $data = M('promote_statistics', 'tab_')->field("promote_account,promote_id as id,sum(count) count")->where($statisticsMap)->group("promote_id")->select(); - } + //为数据权限添加 + setPowerPromoteIds($map, 'tp1.id'); + } + + $data = M('promote', 'tab_')->alias('tp1') + ->field('tp1.account as promote_account,tp1.id, + floor(sum(pay_amount)*100) as count') + ->join("tab_promote AS tp2 ON tp2.`chain` LIKE CONCAT('%/', tp1.id, '/%') OR tp2.id = tp1.id", 'left') + ->join("tab_spend as s use INDEX(search) on tp2.id = s.promote_id", 'left') + ->join("tab_game as g on g.id = s.game_id", 'left') + ->where($map) + ->group('tp1.id') + ->order('count desc') + ->select(); + + // if (isset($_REQUEST['server_id'])||isset($_REQUEST['game_name'])||isset($_REQUEST['promote_id'])||isset($_REQUEST['admin_id'])||isset($_REQUEST['admin_user_id'])) { + // $data = M('promote', 'tab_')->alias('tp1') + // ->field('tp1.account as promote_account,tp1.id, + // floor(sum(pay_amount)*100) as count') + // ->join("tab_promote AS tp2 ON tp2.`chain` LIKE CONCAT('%/', tp1.id, '/%') OR tp2.id = tp1.id", 'left') + // ->join("tab_spend as s use INDEX(search) on tp2.id = s.promote_id", 'left') + // ->join("tab_game as g on g.id = s.game_id", 'left') + // ->where($map) + // ->group('tp1.id') + // ->order('count desc') + // ->select(); + // } else { + // $statisticsMap['time'] =$map['pay_time']; + // setPowerPromoteIds($statisticsMap, 'tab_promote.id'); + // $data = M('promote_statistics', 'tab_') + // ->field("promote_account,promote_id as id,sum(count) count") + // ->join('tab_promote on tab_promote.id = tab_promote_statistics.promote_id', 'left') + // ->where($statisticsMap) + // ->group("promote_id") + // ->select(); + // } // var_dump($data);die(); @@ -664,6 +719,7 @@ class PlatformController extends ThinkController floor(sum(IF(s.pay_time ' . $mounth . ',pay_amount,0))*100) as mounth') ->join("tab_promote AS tp2 ON tp2.`chain` LIKE CONCAT('%/', tp1.id, '/%') OR tp2.id = tp1.id", 'left') ->join("tab_spend as s on tp2.id = s.promote_id", 'left') + ->join("tab_game as g on g.id = s.game_id", 'left') ->where($tmap) ->group('tp1.id') ->select(); @@ -674,6 +730,7 @@ class PlatformController extends ThinkController $v['mounth'] = 0; $tmdata[$v['id']] = $v; } + //dd($data); foreach ($tdata as $k => $v) { $tmdata[$v['id']]['today'] = $v['today']; @@ -683,16 +740,18 @@ class PlatformController extends ThinkController $tmdata[$v['id']]['promote_account'] = $v['promote_account']; $tmdata[$v['id']]['count'] = 0; } + + $tmdata[$v['id']]['id'] = $v['id']; } $data = []; foreach($tmdata as $k => $v){ $data[] = $v; } - // dd($data); - unset($map['tp1.id']); + //dd($data); + unset($map['tp1.id'], $map['tp2.id'], $map['tp2.admin_id']); unset($map['tp1.chain']); unset($tmap['tp1.id']); - unset($tmap['tp1.chain']); + unset($tmap['tp1.chain'], $tmap['tp2.id']); $map['s.promote_id'] = 0; $tmap['s.promote_id'] = 0; $authorityData['count'] = 0; @@ -760,7 +819,17 @@ class PlatformController extends ThinkController $data = my_sort($data, $data_order_type, (int)$data_order); $size = $row;//每页显示的记录数 - $pnum = ceil(count($data) / $size); //总页数,ceil()函数用于求大于数字的最小整数 + $companys = !empty($data) ? M('promote', 'tab_') + ->field('tab_promote.id, company_name, sys_member.nickname as admin_username') + ->join("tab_promote_company on tab_promote.company_id = tab_promote_company.id", 'left') + ->join('sys_member on tab_promote.admin_id = sys_member.uid', 'left') + ->where("tab_promote.id in (".implode(',', array_column($data, 'id')).")")->select() : []; + $companys = $companys ? array_column($companys, null, 'id') : []; + foreach ($data as &$item) { + $item['company_name'] = $companys[$item['id']]['company_name'] ?? '无'; + $item['admin_username'] = $companys[$item['id']]['admin_username'] ?? '无'; + } + if(isset($_REQUEST['export'])){ $GetData = $_GET; @@ -769,7 +838,9 @@ class PlatformController extends ThinkController addOperationLog(['op_type'=>3,'key'=>getNowDate(),'op_name'=>'导出推广员充值统计','url'=>U('Platform/promotepay_statistics',$GetData),'menu'=>'统计-统计-推广员统计-推广员充值统计']); data2csv($data,'推广员充值统计',array( - "promote_account"=>"推广员账号", + 'company_name' => '公司', + "promote_account"=>"会长账号", + 'admin_username' => '当前市场专员', "count"=>"累计充值", "rand"=>"排行榜", "today"=>"今日充值", @@ -783,6 +854,7 @@ class PlatformController extends ThinkController $data = array_slice($data, ($arraypage - 1) * $size, $size); $this->meta_title = '渠道充值统计列表'; $this->assign('list_data', $data); + $this->assign('admin_users', M('member')->field('uid,nickname')->select()); $this->assign("is_admin",is_administrator()); $this->display(); diff --git a/Application/Admin/View/Platform/promote_statistics.html b/Application/Admin/View/Platform/promote_statistics.html index 1c3959f93..c8942ea10 100644 --- a/Application/Admin/View/Platform/promote_statistics.html +++ b/Application/Admin/View/Platform/promote_statistics.html @@ -53,14 +53,23 @@