|
|
|
<?php
|
|
|
|
namespace Admin\Controller;
|
|
|
|
class FinancePromoteController extends AdminController
|
|
|
|
{
|
|
|
|
public function _initialize(Type $var = null)
|
|
|
|
{
|
|
|
|
parent::_initialize();
|
|
|
|
// echo "<pre>";
|
|
|
|
}
|
|
|
|
public function index()
|
|
|
|
{
|
|
|
|
//排序
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
//时间
|
|
|
|
$istimeselect = false;
|
|
|
|
if (isset($_REQUEST['time_start']) && isset($_REQUEST['time_end'])) {
|
|
|
|
$istimeselect = ['between', [strtotime($_REQUEST['time_start']), strtotime($_REQUEST['time_end']) + 86399]];
|
|
|
|
} elseif (isset($_REQUEST['time_start'])) {
|
|
|
|
$istimeselect = ['GT', strtotime($_REQUEST['time_start'])];
|
|
|
|
} elseif (isset($_REQUEST['time_end'])) {
|
|
|
|
$istimeselect = ['LT', strtotime($_REQUEST['time_end']) + 86399];
|
|
|
|
}
|
|
|
|
|
|
|
|
$senddata = [];
|
|
|
|
//获取各会长的现金充值
|
|
|
|
$cash = self::getJoinPromoteData(array("pay_way"=>array("GT",0)),$istimeselect);
|
|
|
|
foreach($cash as $k=>$v){
|
|
|
|
$v['cash_count'] = $v['pay_amount'];
|
|
|
|
unset($v['pay_amount']);
|
|
|
|
$senddata[$v['p_id']] = $v;
|
|
|
|
}
|
|
|
|
//平台币直充支出
|
|
|
|
$balance = self::getJoinPromoteData(array("pay_way"=>array("EQ",0)),$istimeselect);
|
|
|
|
foreach($balance as $k=>$v){
|
|
|
|
if(array_key_exists($v['p_id'],$senddata)){
|
|
|
|
$senddata[$v['p_id']]['balance_coin_count']= $v['pay_amount'];
|
|
|
|
}else{
|
|
|
|
$v['balance_coin_count'] = $v['pay_amount'];
|
|
|
|
unset($v['pay_amount']);
|
|
|
|
$senddata[$v['p_id']] = $v;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
//平台币内充
|
|
|
|
$bind = self::getJoinPromoteData(array("pay_way"=>array("LT",0)),$istimeselect);
|
|
|
|
foreach($bind as $k=>$v){
|
|
|
|
if(array_key_exists($v['p_id'],$senddata)){
|
|
|
|
$senddata[$v['p_id']]['bind_coin_count']= $v['pay_amount'];
|
|
|
|
}else{
|
|
|
|
$v['bind_coin_count'] = $v['pay_amount'];
|
|
|
|
unset($v['pay_amount']);
|
|
|
|
$senddata[$v['p_id']] = $v;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
//内冲
|
|
|
|
$inside = self::getJoinPromoteData([],$istimeselect,"promote_coin");
|
|
|
|
foreach($inside as $k=>$v){
|
|
|
|
if(array_key_exists($v['p_id'],$senddata)){
|
|
|
|
$senddata[$v['p_id']]['inside_cash_count']= $v['pay_amount'];
|
|
|
|
}else{
|
|
|
|
$v['inside_cash_count'] = $v['pay_amount'];
|
|
|
|
unset($v['pay_amount']);
|
|
|
|
$senddata[$v['p_id']] = $v;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
if(array_key_exists(0,$senddata) || $_REQUEST['promote_id']==0){
|
|
|
|
$pmap['status']=1;
|
|
|
|
if($istimeselect){
|
|
|
|
$pmap['create_time'] = $istimeselect;
|
|
|
|
}
|
|
|
|
$admininside = M("provide_user p","tab_")->field("sum(amount) amount")->where($pmap)->find();
|
|
|
|
if($admininside['amount'] >0){
|
|
|
|
$senddata[0]['inside_cash_count']= $admininside['amount'];
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
$data = [];
|
|
|
|
$count =array(
|
|
|
|
"cash_count"=>0,
|
|
|
|
"balance_coin_count"=>0,
|
|
|
|
"bind_coin_count"=>0,
|
|
|
|
"inside_cash_count"=>0,
|
|
|
|
);
|
|
|
|
foreach($senddata as $k=>$v){
|
|
|
|
|
|
|
|
if(empty($v['company_name'])) $v['company_name']= "万盟天下科技";
|
|
|
|
if(!array_key_exists('cash_count',$v)) $v['cash_count']=0;
|
|
|
|
if(!array_key_exists('balance_coin_count',$v)) $v['balance_coin_count']=0;
|
|
|
|
if(!array_key_exists('bind_coin_count',$v)) $v['bind_coin_count']=0;
|
|
|
|
if(!array_key_exists('inside_cash_count',$v)) $v['inside_cash_count']=0;
|
|
|
|
$v['allcount'] = $v['cash_count']-0+$v['balance_coin_count']+$v['bind_coin_count'];
|
|
|
|
$count['cash_count'] += $v['cash_count'];
|
|
|
|
$count['balance_coin_count'] += $v['balance_coin_count'];
|
|
|
|
$count['bind_coin_count'] += $v['bind_coin_count'];
|
|
|
|
$count['inside_cash_count'] += $v['inside_cash_count'];
|
|
|
|
$count['all_count'] += $v['allcount'];
|
|
|
|
$data[] = $v;
|
|
|
|
}
|
|
|
|
$data = my_sort($data, $data_order_type, (int)$data_order);
|
|
|
|
$this->assign('list_data', $data);
|
|
|
|
$this->assign('all_count', $count);
|
|
|
|
$this->meta_title = '公会统计';
|
|
|
|
$this->display();
|
|
|
|
# code...
|
|
|
|
}
|
|
|
|
private function getJoinPromoteData($map,$istimeselect,$type="spend")
|
|
|
|
{
|
|
|
|
if ($_REQUEST['promote_id'] != '') {
|
|
|
|
if ($_REQUEST['promote_id'] == 0) {
|
|
|
|
$map['s.promote_id'] = 0;
|
|
|
|
} else {
|
|
|
|
$promoter_ids = D("Promote")->where("chain like '%/{$_REQUEST['promote_id']}/%' or id={$_REQUEST['promote_id']}")->field('id')->select();
|
|
|
|
if ($promoter_ids) {
|
|
|
|
$map['s.promote_id'] = ['in', implode(',', array_column($promoter_ids, 'id'))];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if($type == "spend"){
|
|
|
|
if (isset($_REQUEST['game_name']) || isset($_REQUEST['game_type'])) {
|
|
|
|
$map["s.game_id"] = array("in",implode(',', array_column(getGameByName($_REQUEST['game_name'], $_REQUEST['game_type']), 'id')) );
|
|
|
|
}
|
|
|
|
if($istimeselect){
|
|
|
|
$map['s.pay_time']=$istimeselect;
|
|
|
|
}
|
|
|
|
|
|
|
|
$map['s.pay_status']=1;
|
|
|
|
$field= "sum(pay_amount) pay_amount,IFNULL(if(substring_index(substring_index(promote.`chain`,'/',2),'/',-1)='',s.promote_id,substring_index(substring_index(promote.`chain`,'/',2),'/',-1)),0) p_id,IFNULL(company_id,0) company_id,company_name";
|
|
|
|
return M()
|
|
|
|
->table("tab_spend s")
|
|
|
|
->field($field)
|
|
|
|
->where($map)
|
|
|
|
->join("tab_promote promote ON s.promote_id = promote.id","left")
|
|
|
|
->join("tab_promote_company company ON promote.company_id = company.id","left")
|
|
|
|
->group('p_id')
|
|
|
|
->select();
|
|
|
|
}else{
|
|
|
|
if($istimeselect){
|
|
|
|
$map['s.create_time']=$istimeselect;
|
|
|
|
}
|
|
|
|
$map['s.status']=1;
|
|
|
|
$map['s.source_id']=0;
|
|
|
|
$map['s.type']=1;
|
|
|
|
$field= "sum(num) pay_amount,IFNULL(if(substring_index(substring_index(`chain`,'/',2),'/',-1)='',s.promote_id,substring_index(substring_index(`chain`,'/',2),'/',-1)),0) p_id";
|
|
|
|
return M("promote_coin s","tab_")
|
|
|
|
->field($field)
|
|
|
|
->where($map)
|
|
|
|
->join("tab_promote promote ON s.promote_id = promote.id","left")
|
|
|
|
->group('p_id')
|
|
|
|
->select();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//渠道查看
|
|
|
|
public function promoteUser($p = 0)
|
|
|
|
{
|
|
|
|
$page = intval($p);
|
|
|
|
$page = $page ? $page : 1; //默认显示第一页数据
|
|
|
|
$arraypage = $page;
|
|
|
|
|
|
|
|
if (isset($_REQUEST['row'])) {
|
|
|
|
$row = $_REQUEST['row'];
|
|
|
|
} else {
|
|
|
|
$row = 10;
|
|
|
|
}
|
|
|
|
|
|
|
|
$istimeselect = false;
|
|
|
|
if (isset($_REQUEST['time_start']) && isset($_REQUEST['time_end'])) {
|
|
|
|
$istimeselect = ['between', [strtotime($_REQUEST['time_start']), strtotime($_REQUEST['time_end']) + 86399]];
|
|
|
|
} elseif (isset($_REQUEST['time_start'])) {
|
|
|
|
$istimeselect = ['GT', strtotime($_REQUEST['time_start'])];
|
|
|
|
} elseif (isset($_REQUEST['time_end'])) {
|
|
|
|
$istimeselect = ['LT', strtotime($_REQUEST['time_end']) + 86399];
|
|
|
|
}
|
|
|
|
$senddata = [];
|
|
|
|
//获取各会长的现金充值
|
|
|
|
$cash = self::promoteUserData(array("pay_way"=>array("GT",0)),$istimeselect);
|
|
|
|
foreach($cash as $k=>$v){
|
|
|
|
$v['cash_count'] = $v['pay_amount'];
|
|
|
|
unset($v['pay_amount']);
|
|
|
|
$senddata[$v['promote_id']] = $v;
|
|
|
|
}
|
|
|
|
//平台币直充支出
|
|
|
|
$balance = self::promoteUserData(array("pay_way"=>array("EQ",0)),$istimeselect);
|
|
|
|
foreach($balance as $k=>$v){
|
|
|
|
if(array_key_exists($v['promote_id'],$senddata)){
|
|
|
|
$senddata[$v['promote_id']]['balance_coin_count']= $v['pay_amount'];
|
|
|
|
}else{
|
|
|
|
$v['balance_coin_count'] = $v['pay_amount'];
|
|
|
|
unset($v['pay_amount']);
|
|
|
|
$senddata[$v['promote_id']] = $v;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
//平台币内充
|
|
|
|
$bind = self::promoteUserData(array("pay_way"=>array("LT",0)),$istimeselect);
|
|
|
|
foreach($bind as $k=>$v){
|
|
|
|
if(array_key_exists($v['promote_id'],$senddata)){
|
|
|
|
$senddata[$v['promote_id']]['bind_coin_count']= $v['pay_amount'];
|
|
|
|
}else{
|
|
|
|
$v['bind_coin_count'] = $v['pay_amount'];
|
|
|
|
unset($v['pay_amount']);
|
|
|
|
$senddata[$v['promote_id']] = $v;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
$inside = self::promoteUserData([],$istimeselect,"promote_coin");
|
|
|
|
foreach($inside as $k=>$v){
|
|
|
|
if(array_key_exists($v['promote_id'],$senddata)){
|
|
|
|
$senddata[$v['promote_id']]['inside_cash_count']= $v['pay_amount'];
|
|
|
|
}else{
|
|
|
|
$v['inside_cash_count'] = $v['pay_amount'];
|
|
|
|
unset($v['pay_amount']);
|
|
|
|
$senddata[$v['promote_id']] = $v;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
if(array_key_exists(0,$senddata) || $_REQUEST['promote_id']==0){
|
|
|
|
$pmap['status']=1;
|
|
|
|
if($istimeselect){
|
|
|
|
$pmap['create_time'] = $istimeselect;
|
|
|
|
}
|
|
|
|
$admininside = M("provide_user p","tab_")->field("sum(amount) amount")->where($pmap)->find();
|
|
|
|
if($admininside['amount'] >0){
|
|
|
|
$senddata[0]['inside_cash_count']= $admininside['amount'];
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
$count = count($senddata);
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
|
|
|
$page = set_pagination($count, $row);
|
|
|
|
if ($page) {
|
|
|
|
$this->assign('_page', $page);
|
|
|
|
}
|
|
|
|
$data = [];
|
|
|
|
$allcount =array(
|
|
|
|
"cash_count"=>0,
|
|
|
|
"balance_coin_count"=>0,
|
|
|
|
"bind_coin_count"=>0,
|
|
|
|
"inside_cash_count"=>0,
|
|
|
|
);
|
|
|
|
foreach($senddata as $k=>$v){
|
|
|
|
|
|
|
|
if(empty($v['company_name'])) $v['company_name']= "万盟天下科技";
|
|
|
|
if(!array_key_exists('cash_count',$v)) $v['cash_count']=0;
|
|
|
|
if(!array_key_exists('balance_coin_count',$v)) $v['balance_coin_count']=0;
|
|
|
|
if(!array_key_exists('bind_coin_count',$v)) $v['bind_coin_count']=0;
|
|
|
|
if(!array_key_exists('inside_cash_count',$v)) $v['inside_cash_count']=0;
|
|
|
|
$v['allcount'] = $v['cash_count']-0+$v['balance_coin_count']+$v['bind_coin_count'];
|
|
|
|
$allcount['cash_count'] += $v['cash_count'];
|
|
|
|
$allcount['balance_coin_count'] += $v['balance_coin_count'];
|
|
|
|
$allcount['bind_coin_count'] += $v['bind_coin_count'];
|
|
|
|
$allcount['inside_cash_count'] += $v['inside_cash_count'];
|
|
|
|
$allcount['all_count'] += $v['allcount'];
|
|
|
|
$data[] = $v;
|
|
|
|
}
|
|
|
|
|
|
|
|
$data = my_sort($data, $data_order_type, (int)$data_order);
|
|
|
|
$size = $row;
|
|
|
|
$data = array_slice($data, ($arraypage - 1) * $size, $size);
|
|
|
|
$this->assign('all_count', $allcount);
|
|
|
|
$this->assign('list_data', $data);
|
|
|
|
$this->display();
|
|
|
|
// dump($senddata);
|
|
|
|
|
|
|
|
}
|
|
|
|
private function promoteUserData($map,$istimeselect,$type="spend")
|
|
|
|
{
|
|
|
|
if ($_REQUEST['promote_id'] != '') {
|
|
|
|
if ($_REQUEST['promote_id'] == 0) {
|
|
|
|
$map['s.promote_id'] = 0;
|
|
|
|
} else {
|
|
|
|
$promoter_ids = D("Promote")->where("chain like '%/{$_REQUEST['promote_id']}/%' or id={$_REQUEST['promote_id']}")->field('id')->select();
|
|
|
|
if ($promoter_ids) {
|
|
|
|
$map['s.promote_id'] = ['in', implode(',', array_column($promoter_ids, 'id'))];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ($type == "spend") {
|
|
|
|
if (isset($_REQUEST['game_name']) || isset($_REQUEST['game_type'])) {
|
|
|
|
$map["s.game_id"] = array("in",implode(',', array_column(getGameByName($_REQUEST['game_name'], $_REQUEST['game_type']), 'id')) );
|
|
|
|
}
|
|
|
|
if($istimeselect){
|
|
|
|
$map['s.pay_time']=$istimeselect;
|
|
|
|
}
|
|
|
|
$map['s.pay_status']=1;
|
|
|
|
$field= "sum(pay_amount) pay_amount,IFNULL(company_id,0) company_id,company_name,promote_id";
|
|
|
|
return M()
|
|
|
|
->table("tab_spend s")
|
|
|
|
->field($field)
|
|
|
|
->where($map)
|
|
|
|
->join("tab_promote promote ON s.promote_id = promote.id", "left")
|
|
|
|
->join("tab_promote_company company ON promote.company_id = company.id", "left")
|
|
|
|
->group('promote_id')
|
|
|
|
->select();
|
|
|
|
}else{
|
|
|
|
if($istimeselect){
|
|
|
|
$map['s.create_time']=$istimeselect;
|
|
|
|
}
|
|
|
|
$map['s.status']=1;
|
|
|
|
$map['s.source_id']=0;
|
|
|
|
$map['s.type']=1;
|
|
|
|
$field= "sum(num) pay_amount,promote_id";
|
|
|
|
return M("promote_coin s","tab_")
|
|
|
|
->field($field)
|
|
|
|
->where($map)
|
|
|
|
->join("tab_promote promote ON s.promote_id = promote.id","left")
|
|
|
|
->group('promote_id')
|
|
|
|
->select();
|
|
|
|
}
|
|
|
|
# code...
|
|
|
|
}
|
|
|
|
private function data_total($data)
|
|
|
|
{
|
|
|
|
$total['sum_count'] = array_sum(array_column($data, 'count'));
|
|
|
|
$total['sum_today'] = array_sum(array_column($data, 'today'));
|
|
|
|
$total['sum_week'] = array_sum(array_column($data, 'week'));
|
|
|
|
$total['sum_mounth'] = array_sum(array_column($data, 'mounth'));
|
|
|
|
return $total;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|