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.

496 lines
19 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 Admin\Event;
use Think\Controller;
/**
* 后台事件控制器
* @author 王贺
*/
class SpendEvent extends ThinkEvent {
public function list_($model = null,$p,$extend=array()){
$model || $this->error('模型名标识必须!');
$page = intval($p);
$page = $page ? $page : 1; //默认显示第一页数据
$arraypage = $page; //默认显示第一页数据
//解析列表规则
$fields = $model['fields'];
// 关键字搜索
$map = empty($model['map'])?array():$model['map'];
$map['tab_spend.pay_status'] = 1;
if(isset($_REQUEST['row'])) {$row = $_REQUEST['row'];}else{$row = 10;}
//读取模型数据列表
$name = $model['m_name'];
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);
$sort = $data_order==3?'desc':'asc';
$model['order'] = $data_order_type.' '.$sort;
}
$new_model = M($name,"tab_");
$data = $new_model
// 查询条件
->where($map)
/* 默认通过id逆序排列 */
->order($model['order'])
//根据字段分组
->group($model['group'])
/* 数据分页 */
->page($page, $row)
/* 执行查询 */
->select();
/* 查询记录总数 */
$count = $new_model
// 查询条件
->where($map)
/* 默认通过id逆序排列 */
->order($model['order'])
//根据字段分组
->group($model['group'])
/* 执行查询 */
->count();
//分页
$page = set_pagination($count,$row);
if($page) {$this->assign('_page', $page);}
$this->assign('model', $model);
$this->assign('list_data', $data);
$this->meta_title = $model['title'].'列表';
$this->display($model['template_list']);
}
public function group_list($model = null,$p,$extend=array()){
$model || $this->error('模型名标识必须!');
$page = intval($p);
$page = $page ? $page : 1; //默认显示第一页数据
//解析列表规则
$fields = $model['fields'];
// 关键字搜索
$map = empty($extend)?array():$extend;
$map['tab_spend.pay_status'] = 1;
// 条件搜索
foreach($_REQUEST as $name=>$val){
switch ($name) {
case 'account':
$map['tab_spend.user_account'] = array('like','%'.$val.'%');
break;
case 'game_id':
$map['tab_game.id'] = $val;
break;
case 'promote_id':
$map['tab_spend.promote_id'] = $val;
break;
}
}
if(isset($_REQUEST['row'])) {$row = $_REQUEST['row'];}else{$row = 10;}
//读取模型数据列表
$name = $model['m_name'];
$new_model = D($name);
$data = D($name)
->field('tab_spend.*,case parent_id when 0 then promote_id else parent_id end AS parent_id,sum(pay_amount) AS total_amount,DATE_FORMAT( FROM_UNIXTIME(pay_time),"%Y-%m-%d") AS period')
->join('left join tab_promote ON tab_spend.promote_id = tab_promote.id')
// 查询条件
->where($map)
/* 默认通过id逆序排列 */
->order($model['order'])
//根据字段分组
->group($model['group'])
/* 数据分页 */
->page($page, $row)
/* 执行查询 */
->select();
/* 查询记录总数 */
$count = count($data);
//分页
$page = set_pagination($count,$row);
if($page) {$this->assign('_page', $page);}
$this->assign('model', $model);
$this->assign('list_data', $data);
$this->meta_title = $model['title'].'列表';
$this->display($model['template_list']);
}
public function spend_list($model = null,$p,$extend=array()){
$model || $this->error('模型名标识必须!');
$page = intval($p);
$page = $page ? $page : 1; //默认显示第一页数据
$arraypage = $page; //默认显示第一页数据
//解析列表规则
$fields = $model['fields'];
// 关键字搜索
$map = empty($model['map'])?array():$model['map'];
$map['tab_spend.pay_status'] = 1;
if(isset($_REQUEST['row'])) {$row = $_REQUEST['row'];}else{$row = 10;}
//读取模型数据列表
$name = $model['m_name'];
$new_model = D($name);
$data = D($name)
// 查询条件
->where($map)
/* 默认通过id逆序排列 */
->order($model['order'])
//根据字段分组
->group($model['group'])
/* 数据分页 */
// ->page($page, $row)
/* 执行查询 */
->select();
$count=count($data);
//分页
$page = set_pagination($count,$row);
if($page) {$this->assign('_page', $page);}
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()函数用于求大于数字的最小整数
//用array_slice(array,offset,length) 函数在数组中根据条件取出一段值;array(数组),offset(元素的开始位置),length(组的长度)
$data = array_slice($data, ($arraypage-1)*$size, $size);
$this->assign('model', $model);
$this->assign('list_data', $data);
$this->meta_title = $model['title'].'列表';
$this->display($model['template_list']);
}
public function check_bill111($model = null,$p,$extend=array()){
global $countpage;
$model || $this->error('模型名标识必须!');
$page = intval($p);
$page = $page ? $page : 1; //默认显示第一页数据
//解析列表规则
$fields = $model['fields'];
// 关键字搜索
$user_map = empty($extend['user_map'])?array():$extend['user_map'];
$spend_map = empty($extend['spend_map'])?array():$extend['spend_map'];
$user = D("User");
$spend = D("Spend");
//读取模型数据列表
$data = array();
if(isset($_REQUEST['row'])) {$row = $_REQUEST['row'];}else{$row = 10;}
$user_map['is_check'] = $spend_map['is_check'] = 1;
$spend_map['pay_status']=1;
$user_map['fgame_id'] = array('neq',0);
$user_map1=$user_map;
$user_map1['parent_id']=0;
$user1=M("user","tab_")
->field('id,account,promote_id,promote_account,parent_id,fgame_id,fgame_name,count(*) as count')
->group("fgame_id,promote_id")
->where($user_map1)
->select();
$user_map['parent_id']=array("neq","0");
$user=M("user","tab_")
->field('id,account,promote_id,promote_account,parent_id,fgame_id,fgame_name,count(*) as count')
->group("fgame_id,promote_id")
->where($user_map)
->select();
// $user1 注册人数
foreach ($user1 as $k1 => $v1) {
foreach ($user as $k2 => $v2) {
if($v1['promote_id']==$v2['parent_id']&&$v1['fgame_id']==$v2['fgame_id']){
$user1[$k1]['count']+=$v2['count'];
}
}
}
unset($user_map['parent_id']);
//查出 二级推广的父类id
$p1=M("promote","tab_")
->field("id,account,parent_id")
->where("parent_id <> 0 ")
->select();
$spend=M("spend","tab_")
->field('promote_id,promote_account,game_id,game_name,sum(pay_amount) as total_money')
->group('promote_id,game_id')
->where($spend_map)
->select();
//选出二级推广充值记录
foreach ($p1 as $k1 => $v1) {
foreach ($spend as $k2 => $v2) {
if($v1['id']==$v2['promote_id']){
$sd[$k2]=$v2;
$sd[$k2]['parent_id']=$v1['parent_id'];
}
}
}
//二级推广充值记录合并到一级
foreach ($sd as $k => $v) {
foreach ($spend as $k2 => $v2) {
if($v['parent_id']==$v2['promote_id']&&$v['game_id']==$v2['game_id']){
$spend[$k2]['total_money']=$v2['total_money']+$v['total_money'];
unset($spend[$k2=$k]);
}
}
}
// //讲二级的推广游戏且一级没有推广的游戏充值记录 合并到一级
foreach ($spend as $key => $value) {
foreach ($p1 as $k => $v) {
if($value['promote_id']==$v['id']){
$spend[$key]['promote_id']=$v['parent_id'];
$spend[$key]['promote_account']=get_promote_name($v['parent_id']);
$spend[$key]['pp']=$value['promote_id'];
}
}
}
//如一级用户没有该游戏注册人数 将二级注册人数加到一级
foreach ($spend as $key => $value) {
foreach ($user as $k => $v) {
if($v['fgame_id']==$value['game_id']&&$v['parent_id']==$value['promote_id']){
$spend[$key]['total_number']=$v['count'];
// continue;
}
}
}
//将注册人数加入数组
foreach ($spend as $key => $value) {
foreach ($user1 as $k => $v) {
if($v['fgame_id']==$value['game_id']&&$v['promote_id']==$value['promote_id']){
$spend[$key]['total_number']=$v['count'];
}
}
}
$timestart=$_GET['timestart'];
$timeend=$_GET['timeend'];
$this->assign('model', $model);
if(strlen($_GET['timeend'])>10){
$page=substr($_GET['timeend'],-1);
}
$this->assign('list_data', $this->page_array(10,$page,$spend));
$this->assign('_page',$this->show_array($countpage,U("Query/bill/group/1&timestart=$timestart&timeend=$timeend"),$page));
$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 = D("User");
$spend = D("Spend");
//读取模型数据列表
$data = array();
$row = 10;
if(isset($_REQUEST['row'])) {$row = $_REQUEST['row'];}else{$row = 10;}
$map1['is_check'] = $map0['is_check'] = 1;
$map0['fgame_id'] = array('neq',0);
$map1['pay_status'] = 1;
$offset = ($page-1)*$row;
$sql0 = $user->table("__USER__ as u ")
->field('u.id,u.promote_id,u.fgame_id as game_id,if(p.parent_id=0,u.promote_id,p.parent_id) as parent_id,u.fgame_name as game_name')
->join('__PROMOTE__ as p on(p.id=u.promote_id)','left')
->where($map0)
->order("u.id")
->group("u.id")
->select(false);
$sql0 = "select parent_id as promote_id,group_concat(promote_id) as chpids,game_id,game_name,count(id) as total_number from ("
.$sql0
." ) as a group by a.game_id,a.parent_id order by parent_id " ;
$data0 = $user->query($sql0." limit $offset,$row");
$count0 = count($user->query($sql0));
$sql1 = $spend->table("__SPEND__ as s")
->field("s.id,s.promote_id,s.game_id,if(p.parent_id=0,s.promote_id,p.parent_id) as parent_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 parent_id as promote_id,group_concat(promote_id) as chpids,game_id,game_name,sum(pay_amount) as total_money from ( "
.$sql1
." ) as a group by game_id,parent_id order by parent_id ";
$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'])) {
if ($u['chpids'] !== $v['chpids']) {
$uchpids = (explode(',',$u['chpids']));
$schpids = (explode(',',$v['chpids']));
$chpids = array_unique(array_merge($uchpids,$schpids));
sort($chpids);
$u['chpids'] = $v['chpids'] = implode(',',$chpids);
}
$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());
}
$this->assign('model', $model);
$this->assign('list_data', $data);
$this->meta_title = $model['title'].'列表';
$this->display($model['template_list']);
}
public function page_array($count,$page,$array,$order=0){
global $countpage; #定全局变量
$page=(empty($page))?'1':$page; #判断当前页面是否为空 如果为空就表示为第一页面
$start=($page-1)*$count; #计算每次分页的开始位置
if($order==1){
$array=array_reverse($array);
}
$totals=count($array);
$countpage=ceil($totals/$count); #计算总页面数
$pagedata=array();
$pagedata=array_slice($array,$start,$count);
return $pagedata; #返回查询数据
}
/**
* 分页及显示函数
* $countpage 全局变量,照写
* $url 当前url
*/
public function show_array($countpage,$url,$page){
$page=empty($page)?1:$page;
if($page > 1){
$uppage=$page-1;
}else{
$uppage=1;
}
if($page < $countpage){
$nextpage=$page+1;
}else{
$nextpage=$countpage;
}
$str='<div style="border:1px; height:30px; color:#9999CC">';
$str.="<p>共 {$countpage} 页 / 第 {$page} 页</p>";
$str.="<span class='current'><a href='$url/page/1'> 首页 </a></span>";
$str.="<span><a href='$url/page/{$uppage}'> 上一页 </a></span>";
$str.="<span><a href='$url/page/{$nextpage}'>下一页 </a></span>";
$str.="<span><a href='$url/page/{$countpage}'>尾页 </a></span>";
$str.='</div>';
return $str;
}
public function cpsettl_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'];
// var_dump($fields);exit;
$new_model = M($name,'tab_');
$data = $new_model
->field($fields.",g.developers")
// 查询条件
->where($map)
/* 默认通过id逆序排列 */
->order($model['order'])
->join('tab_game as g on g.id=s.game_id','LEFT')
//根据字段分组
->group($model['group'])
/* 数据分页 */
->page($page,$row)
->order($model['order'])
/* 执行查询 */
->select();
/* 查询记录总数 */
$count = $new_model
->field($fields)
// 查询条件
->where($map)
/* 默认通过id逆序排列 */
->order($model['order'])
->join('tab_game as g on g.id=s.game_id','LEFT')
//根据字段分组
->group($model['group'])
/* 执行查询 */
->select();
$count=count($count);
static $alltotal=0;
// var_dump($data);exit;
foreach ($data as $key => $value) {
$alltotal=$alltotal+$value['total']*$value['selle_ratio']/100;
}
//分页
$page = set_pagination($count,$row);
if($page) {$this->assign('_page', $page);}
$this->assign('model', $model);
$this->assign('data', $data);
$this->assign('alltotal', $alltotal);
$this->display($model['template_list']);
}
}