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.
1426 lines
59 KiB
PHP
1426 lines
59 KiB
PHP
<?php
|
|
namespace Admin\Controller;
|
|
class FinancePromoteController extends AdminController
|
|
{
|
|
public $COMPANY_NAME = "";
|
|
public function _initialize()
|
|
{
|
|
parent::_initialize();
|
|
$this->COMPANY_NAME =C(DEFAULT_COMPANY);
|
|
// echo "<pre>";
|
|
}
|
|
public function index($p=1)
|
|
{
|
|
$page = intval($p);
|
|
$page = $page ? $page : 1; //默认显示第一页数据
|
|
$arraypage = $page;
|
|
|
|
if (isset($_REQUEST['row'])) {
|
|
$row = $_REQUEST['row'];
|
|
} else {
|
|
$row = 10;
|
|
}
|
|
//排序
|
|
if(!array_key_exists("time_start",$_REQUEST)){
|
|
$this->redirect(ACTION_NAME, array('time_start' => date('Y-m-d',strtotime('-30 day')),"time_end"=>date('Y-m-d')));
|
|
}
|
|
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([],$istimeselect);
|
|
foreach($cash as $k=>$v){
|
|
$senddata[$v['p_id']] = $v;
|
|
}
|
|
|
|
$unsenddata = [];
|
|
$uncash = self::getJoinUnPayPromoteData([],$istimeselect);
|
|
foreach($uncash as $k=>$v){
|
|
$unsenddata[$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']-$v['back_amount'];
|
|
}else{
|
|
$v['inside_cash_count'] = $v['pay_amount']-$v['back_amount'];
|
|
unset($v['pay_amount']);
|
|
unset($v['back_amount']);
|
|
$senddata[$v['p_id']] = $v;
|
|
};
|
|
}
|
|
//官方渠道单算
|
|
//判断公司
|
|
$gfidlag = true;
|
|
$gfgs = true;
|
|
$nwtflag = true;
|
|
if (isset($_REQUEST['company_id'])) {
|
|
if($_REQUEST['company_id']!=0){
|
|
$gfgs = false;
|
|
}
|
|
}
|
|
//判断是否是内团 内团才有官方
|
|
if(isset($_REQUEST['company_belong'])){
|
|
if($_REQUEST['company_belong']!=0){
|
|
$nwtflag = false;
|
|
}
|
|
}
|
|
if(isset($_REQUEST['develop_type'])){
|
|
if($_REQUEST['develop_type']!=0){
|
|
$nwtflag = false;
|
|
}
|
|
}
|
|
if(isset($_REQUEST['admin_id'])){
|
|
if($_REQUEST['admin_id']!=0){
|
|
$nwtflag = false;
|
|
}
|
|
}
|
|
$isMarketAdmin = isMarketAdmin();
|
|
if(I('admin_id', 0) != 0 || $isMarketAdmin){
|
|
$nwtflag = false;
|
|
}
|
|
if (isset($_REQUEST['promote_id'])) {
|
|
if($_REQUEST['promote_id'] == 0){
|
|
$gfidlag = true;
|
|
}else{
|
|
$gfidlag =false;
|
|
}
|
|
}
|
|
$isMarketLeader = isMarketLeader();
|
|
if ($isMarketLeader) {
|
|
$nwtflag = false;
|
|
}
|
|
// dd($gfidlag && $gfgs && $nwtflag);
|
|
if($gfidlag && $gfgs && $nwtflag){
|
|
//计算官方渠道
|
|
unset($_REQUEST['company_id']);
|
|
unset($_REQUEST['company_belong']);
|
|
$_REQUEST['promote_id'] = 0;
|
|
$gfcash = self::getJoinPromoteData([],$istimeselect);
|
|
$senddata[0] = $gfcash[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,
|
|
);
|
|
$promotes = [];
|
|
if (count($senddata) > 0) {
|
|
$promoteIds = array_column($senddata, 'p_id');
|
|
if ($promoteIds) {
|
|
$promotes = M('promote', 'tab_')->field(['id', 'account', 'admin_id'])->where(['id' => ['in', $promoteIds]])->select();
|
|
}
|
|
}
|
|
$promotes = index_by_column('id', $promotes);
|
|
$adminUsernames = getAdminUsernameList(array_column($promotes, 'admin_id'));
|
|
foreach($senddata as $k=>$v){
|
|
$promote = $promotes[$v['p_id']] ?? null;
|
|
$v['company_belong'] = $v['company_belong'] ?:0;
|
|
$v['company_belong'] = getCompanyBlong($v['company_belong']);
|
|
if(empty($v['company_name'])) $v['company_name']= $this->COMPANY_NAME;
|
|
if(empty($v['p_id'])) $v['p_id']= "0";
|
|
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['promote_account'] = get_promote_name($v['p_id']);
|
|
($v['promote_account']=='官方渠道')?($v['promote_account']=C('OFFICIEL_CHANNEL')):'';
|
|
$v['admin_username'] = $adminUsernames[$promote['admin_id']] ?? '无';
|
|
$v['develop_type_text'] = getCompanyDevelopTypeText($v['develop_type']);
|
|
$v['inside_cash_count'] = number_format($v['inside_cash_count'],2,'.','');
|
|
$v['allcount'] = number_format($v['cash_count']-0+$v['balance_coin_count']+$v['bind_coin_count'],2,'.','');
|
|
$v['unallcount'] = $unsenddata[$k]['cash_count']?$unsenddata[$k]['cash_count']:'0.00';
|
|
$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'];
|
|
$count['unallcount'] += $v['unallcount'];
|
|
$data[] = $v;
|
|
}
|
|
$data = my_sort($data, $data_order_type, (int)$data_order);
|
|
if(isset($_REQUEST['export'])){
|
|
//操作日志
|
|
$GetData = $_GET;
|
|
unset($GetData['export']);
|
|
addOperationLog(['op_type'=>3,'key'=>getNowDate(),'url'=>U(CONTROLLER_NAME.'/'.ACTION_NAME,$GetData),'menu'=>"充值-财务管理-公会统计-导出"]);
|
|
|
|
data2csv($data,'公会统计',array(
|
|
"company_name"=>"推广公司",
|
|
"promote_account"=>"会长渠道",
|
|
"admin_username"=>"所属市场专员",
|
|
"company_belong"=>"团体类型",
|
|
"develop_type_text"=>"开发类型",
|
|
"cash_count"=>"游戏现金金额",
|
|
"balance_coin_count"=>"平台币直充支出",
|
|
"bind_coin_count"=>"内充支出",
|
|
"inside_cash_count"=>"平台币内充",
|
|
"allcount"=>"渠道游戏内充值合计",
|
|
"unallcount"=>"渠道游戏内不结算充值合计",
|
|
));
|
|
}
|
|
// dump($data);die();
|
|
$pagecount = count($data);
|
|
$page = set_pagination($pagecount, $row);
|
|
if ($page) {
|
|
$this->assign('_page', $page);
|
|
}
|
|
|
|
$outBelong = 0;
|
|
$insideBelong = 0;
|
|
$otherBelong = 0;
|
|
foreach ($data as $key => $value) {
|
|
|
|
if ($value['company_belong']=='内团') {
|
|
$insideBelong+=$value['allcount'];
|
|
} elseif ($value['company_belong']=='外团' || $value['company_belong']=='外团-分发') {
|
|
$outBelong+=$value['allcount'];
|
|
} else {
|
|
$otherBelong+=$value['allcount'];
|
|
}
|
|
|
|
}
|
|
|
|
$count['cash_count'] = number_format($count['cash_count'],2,'.','');
|
|
$count['balance_coin_count'] = number_format($count['balance_coin_count'],2,'.','');
|
|
$count['bind_coin_count'] = number_format($count['bind_coin_count'],2,'.','');
|
|
$count['inside_cash_count'] = number_format($count['inside_cash_count'],2,'.','');
|
|
$count['all_count'] = number_format($count['all_count'],2,'.','');
|
|
|
|
$this->checkListOrCountAuthRestMap($map,[]);
|
|
|
|
//外团占比
|
|
$this->assign('outBelong',number_format($outBelong/$count['all_count']*100,2,'.',''));
|
|
//内团占比
|
|
$this->assign('insideBelong',number_format($insideBelong/$count['all_count']*100,2,'.',''));
|
|
$this->assign('otherBelong',number_format($otherBelong/$count['all_count']*100,2,'.',''));
|
|
$size = $row;
|
|
$data = array_slice($data, ($arraypage - 1) * $size, $size);
|
|
$this->assign('list_data', $data);
|
|
$this->assign('all_count', $count);
|
|
$this->meta_title = '公会统计';
|
|
$this->display();
|
|
}
|
|
|
|
private function getJoinUnPayPromoteData($map,$istimeselect,$type="spend")
|
|
{
|
|
// setPowerPromoteIds($map,"s.promote_id");
|
|
//推广员相关检索
|
|
if (isset($_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 (isset($_REQUEST['company_id'])) {
|
|
$map['promote.company_id'] = $_REQUEST['company_id'];
|
|
|
|
}
|
|
if (isset($_REQUEST['company_belong'])) {
|
|
$map['promote.company_belong'] = $_REQUEST['company_belong'];
|
|
|
|
}
|
|
$isMarketLeader = isMarketLeader();
|
|
if ($isMarketLeader) {
|
|
$map['promote.admin_id'] = ['gt', 0];
|
|
}
|
|
|
|
if (!empty(I('develop_type'))) {
|
|
$map['company.develop_type'] = ['in',I('develop_type')];
|
|
}
|
|
|
|
$adminId = 0;
|
|
// $havingPids = [];
|
|
$isMarketAdmin = isMarketAdmin();
|
|
if ($isMarketAdmin) {
|
|
$userAuth = session('user_auth');
|
|
$adminId = $userAuth['uid'];
|
|
} else {
|
|
if (!empty(I('admin_id'))) {
|
|
$adminId = I('admin_id');
|
|
}
|
|
}
|
|
/* if ($adminId > 0) {
|
|
$havingPids = M('promote', 'tab_')->where(['admin_id' => $adminId])->getField('id', true);
|
|
$havingPids = count($havingPids) > 0 ? $havingPids : [0];
|
|
} */
|
|
|
|
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.payed_time']=$istimeselect;
|
|
}
|
|
if ($isMarketLeader) {
|
|
$map['s.market_admin_id'] = ['gt', 0];
|
|
}
|
|
if ($adminId > 0) {
|
|
$map['s.market_admin_id'] = $adminId;
|
|
}
|
|
$map['s.pay_status']=1;
|
|
$map['s.is_check']=2;
|
|
D("Spend")->addSubsiteWhere($map,"s");
|
|
$field= "SUM(CASE WHEN pay_way > 0 THEN pay_amount ELSE 0 END) as cash_count,
|
|
SUM(CASE WHEN pay_way = 0 THEN pay_amount ELSE 0 END) as balance_coin_count,
|
|
SUM(CASE WHEN pay_way = -1 THEN pay_amount ELSE 0 END) as bind_coin_count,
|
|
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,develop_type,IFNULL(promote.company_belong,0) company_belong";
|
|
$query = M()
|
|
->table("tab_spend s use index(promote_time)")
|
|
->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');
|
|
/* if (count($havingPids) > 0) {
|
|
$query->having('p_id in (' . implode(',', $havingPids) . ')');
|
|
} */
|
|
return $query->select();
|
|
}else {
|
|
return [];
|
|
}
|
|
|
|
}
|
|
|
|
private function getJoinPromoteData($map,$istimeselect,$type="spend")
|
|
{
|
|
// setPowerPromoteIds($map,"s.promote_id");
|
|
//推广员相关检索
|
|
if (isset($_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 (isset($_REQUEST['company_id'])) {
|
|
$map['promote.company_id'] = $_REQUEST['company_id'];
|
|
|
|
}
|
|
if (isset($_REQUEST['company_belong'])) {
|
|
$map['promote.company_belong'] = $_REQUEST['company_belong'];
|
|
|
|
}
|
|
$isMarketLeader = isMarketLeader();
|
|
if ($isMarketLeader) {
|
|
$map['promote.admin_id'] = ['gt', 0];
|
|
}
|
|
|
|
if (!empty(I('develop_type'))) {
|
|
$map['company.develop_type'] = ['in',I('develop_type')];
|
|
}
|
|
|
|
$adminId = 0;
|
|
// $havingPids = [];
|
|
$isMarketAdmin = isMarketAdmin();
|
|
if ($isMarketAdmin) {
|
|
$userAuth = session('user_auth');
|
|
$adminId = $userAuth['uid'];
|
|
} else {
|
|
if (!empty(I('admin_id'))) {
|
|
$adminId = I('admin_id');
|
|
}
|
|
}
|
|
/* if ($adminId > 0) {
|
|
$havingPids = M('promote', 'tab_')->where(['admin_id' => $adminId])->getField('id', true);
|
|
$havingPids = count($havingPids) > 0 ? $havingPids : [0];
|
|
} */
|
|
|
|
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.payed_time']=$istimeselect;
|
|
}
|
|
if ($isMarketLeader) {
|
|
$map['s.market_admin_id'] = ['gt', 0];
|
|
}
|
|
if ($adminId > 0) {
|
|
$map['s.market_admin_id'] = $adminId;
|
|
}
|
|
$map['s.pay_status']=1;
|
|
// $map['s.is_check']=1;
|
|
D("Spend")->addSubsiteWhere($map,"s");
|
|
$field= "SUM(CASE WHEN pay_way > 0 and s.is_check=1 THEN pay_amount ELSE 0 END) as cash_count,
|
|
SUM(CASE WHEN pay_way = 0 and s.is_check=1 THEN pay_amount ELSE 0 END) as balance_coin_count,
|
|
SUM(CASE WHEN pay_way = -1 and s.is_check=1 THEN pay_amount ELSE 0 END) as bind_coin_count,
|
|
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,develop_type,IFNULL(promote.company_belong,0) company_belong";
|
|
$query = M()
|
|
->table("tab_spend s use index(promote_time)")
|
|
->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');
|
|
/* if (count($havingPids) > 0) {
|
|
$query->having('p_id in (' . implode(',', $havingPids) . ')');
|
|
} */
|
|
return $query->select();
|
|
}else{
|
|
if($istimeselect){
|
|
$map['s.create_time']=$istimeselect;
|
|
}
|
|
$adminId = 0;
|
|
// $havingPids = [];
|
|
$isMarketAdmin = isMarketAdmin();
|
|
if ($isMarketAdmin) {
|
|
$userAuth = session('user_auth');
|
|
$adminId = $userAuth['uid'];
|
|
} else {
|
|
if (!empty(I('admin_id'))) {
|
|
$adminId = I('admin_id');
|
|
}
|
|
}
|
|
if ($adminId > 0) {
|
|
$map['promote.admin_id'] = $adminId;
|
|
// $havingPids = M('promote', 'tab_')->where(['admin_id' => $adminId])->getField('id', true);
|
|
// $havingPids = count($havingPids) > 0 ? $havingPids : [0];
|
|
}
|
|
$map['s.status']=1;
|
|
$map['s.source_id']=0;
|
|
$field= "SUM(CASE WHEN s.type = 1 THEN num ELSE 0 END) as pay_amount,SUM(CASE WHEN s.type = 2 THEN num ELSE 0 END) as back_amount,IFNULL(if(substring_index(substring_index(`chain`,'/',2),'/',-1)='',
|
|
s.promote_id,substring_index(substring_index(`chain`,'/',2),'/',-1)),0) p_id,
|
|
IFNULL(company_id,0) company_id,company_name,IFNULL(promote.company_belong,0) company_belong";
|
|
$query = M("promote_coin s","tab_")
|
|
->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');
|
|
/* if (count($havingPids) > 0) {
|
|
$query->having('p_id in (' . implode(',', $havingPids) . ')');
|
|
} */
|
|
return $query->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 = [];
|
|
//获取各会长的现金充值
|
|
$map=[];
|
|
$title = '';
|
|
|
|
if (!empty(I('develop_type'))) {
|
|
// $map['company.develop_type'] = I('develop_type');
|
|
$map['company.develop_type'] = ['in',I('develop_type')];
|
|
}
|
|
|
|
self::setPromoteMap($map,"s.promote_id",$title);
|
|
$title .= "渠道统计";
|
|
$this->assign('title', $title);
|
|
|
|
$cash = self::promoteUserData($map,$istimeselect);
|
|
foreach($cash as $k=>$v){
|
|
$senddata[$v['promote_id']] = $v;
|
|
}
|
|
$inside = self::promoteUserData($map,$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']-$v['back_amount'];
|
|
}else{
|
|
$v['inside_cash_count'] = $v['pay_amount']-$v['back_amount'];
|
|
unset($v['pay_amount']);
|
|
$senddata[$v['promote_id']] = $v;
|
|
};
|
|
}
|
|
|
|
if(array_key_exists(0,$senddata)){
|
|
unset($senddata[0]);
|
|
}
|
|
|
|
$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,
|
|
);
|
|
|
|
$marketAdmins = [];
|
|
if (count($senddata) > 0) {
|
|
$promoteIds = array_column($senddata, 'promote_id');
|
|
if (count($promoteIds)) {
|
|
$marketAdmins = getMarketAdminsByPromoteIds($promoteIds);
|
|
}
|
|
}
|
|
|
|
foreach($senddata as $k=>$v){
|
|
$promote = $promotes[$v['promote_id']] ?? null;
|
|
$v['admin_username'] = isset($marketAdmins[$v['promote_id']]) && $marketAdmins[$v['promote_id']]['admin'] ? $marketAdmins[$v['promote_id']]['admin']['username'] : '无';
|
|
$v['develop_type_text'] = getCompanyDevelopTypeText($v['develop_type']);
|
|
$v['company_belong'] = getCompanyBlong($v['company_belong']);
|
|
if(empty($v['company_name'])) $v['company_name']= $this->COMPANY_NAME;
|
|
if(empty($v['promote_account'])) $v['promote_account']= C('OFFICIEL_CHANNEL');
|
|
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'] = number_format($v['cash_count']-0+$v['balance_coin_count']+$v['bind_coin_count'],2,'.','');
|
|
$v['inside_cash_count'] = number_format($v['inside_cash_count'],2,'.','');
|
|
$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;
|
|
}
|
|
|
|
$allcount['cash_count'] = number_format($allcount['cash_count'],2,'.','');
|
|
$allcount['balance_coin_count'] = number_format($allcount['balance_coin_count'],2,'.','');
|
|
$allcount['bind_coin_count'] = number_format($allcount['bind_coin_count'],2,'.','');
|
|
$allcount['inside_cash_count'] = number_format($allcount['inside_cash_count'],2,'.','');
|
|
$allcount['all_count'] = number_format($allcount['all_count'],2,'.','');
|
|
|
|
$data = my_sort($data, $data_order_type, (int)$data_order);
|
|
if(isset($_REQUEST['export'])){
|
|
|
|
$GetData = $_GET;
|
|
unset($GetData['export']);
|
|
addOperationLog(['op_type'=>3,'key'=>getNowDate(),'url'=>U(CONTROLLER_NAME.'/'.ACTION_NAME,$GetData),'menu'=>"充值-财务管理-公会统计-渠道查看-导出"]);
|
|
|
|
data2csv($data,'渠道统计',array(
|
|
"company_name"=>"推广公司",
|
|
"promote_account"=>"推广员账号",
|
|
"admin_username"=>"所属市场专员",
|
|
"company_belong"=>"团体类型",
|
|
"develop_type_text"=>"开发类型",
|
|
"cash_count"=>"游戏现金金额",
|
|
"balance_coin_count"=>"平台币直充支出",
|
|
"bind_coin_count"=>"内充支出",
|
|
"inside_cash_count"=>"平台币内充",
|
|
"allcount"=>"渠道游戏内充值合计"
|
|
));
|
|
}
|
|
|
|
$this->checkListOrCountAuthRestMap($map,[]);
|
|
|
|
$size = $row;
|
|
$data = array_slice($data, ($arraypage - 1) * $size, $size);
|
|
$this->assign('all_count', $allcount);
|
|
$this->assign('list_data', $data);
|
|
$this->meta_title = '渠道统计';
|
|
$this->display();
|
|
// dump($senddata);
|
|
|
|
}
|
|
private function promoteUserData($map,$istimeselect,$type="spend")
|
|
{
|
|
if (isset($_REQUEST['company_id'])) {
|
|
$map['promote.company_id'] = $_REQUEST['company_id'];
|
|
}
|
|
if ($type == "spend") {
|
|
$adminId = 0;
|
|
$isMarketAdmin = isMarketAdmin();
|
|
if ($isMarketAdmin) {
|
|
$userAuth = session('user_auth');
|
|
$adminId = $userAuth['uid'];
|
|
} else {
|
|
if (!empty(I('admin_id'))) {
|
|
$adminId = I('admin_id');
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
$isMarketLeader = isMarketLeader();
|
|
if ($isMarketLeader) {
|
|
$map['s.market_admin_id'] = ['gt', 0];
|
|
$map['promote.admin_id'] = ['gt', 0];
|
|
}
|
|
if ($adminId) {
|
|
$map['s.market_admin_id'] = $adminId;
|
|
}
|
|
$map['s.pay_status']=1;
|
|
$map['s.is_check']=1;
|
|
D("Spend")->addSubsiteWhere($map,"s");
|
|
// dd($map);
|
|
$field= "SUM(CASE WHEN pay_way > 0 THEN pay_amount ELSE 0 END) as cash_count,
|
|
SUM(CASE WHEN pay_way = 0 THEN pay_amount ELSE 0 END) as balance_coin_count,
|
|
SUM(CASE WHEN pay_way = -1 THEN pay_amount ELSE 0 END) as bind_coin_count,
|
|
IFNULL(company_id,0) company_id,company_name,promote_id,promote.account promote_account,develop_type,IFNULL(promote.company_belong,0) company_belong";
|
|
$query = M()
|
|
->table("tab_spend s use index(promote_time)")
|
|
->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');
|
|
|
|
return $query->select();
|
|
}else{
|
|
if($istimeselect){
|
|
$map['s.create_time']=$istimeselect;
|
|
}
|
|
$map['s.status']=1;
|
|
$map['s.source_id']=0;
|
|
|
|
$adminId = 0;
|
|
$isMarketAdmin = isMarketAdmin();
|
|
if ($isMarketAdmin) {
|
|
$userAuth = session('user_auth');
|
|
$adminId = $userAuth['uid'];
|
|
} else {
|
|
if (!empty(I('admin_id'))) {
|
|
$adminId = I('admin_id');
|
|
}
|
|
}
|
|
|
|
$isMarketLeader = isMarketLeader();
|
|
if ($adminId > 0) {
|
|
$map['promote.admin_id'] = $adminId;
|
|
} elseif ($isMarketLeader) {
|
|
$map['promote.admin_id'] = ['gt', 0];
|
|
}
|
|
|
|
$field= "SUM(CASE WHEN s.type = 1 THEN num ELSE 0 END) as pay_amount,SUM(CASE WHEN s.type = 2 THEN num ELSE 0 END) as back_amount,
|
|
IFNULL(company_id,0) company_id,company_name,promote_id,promote.account promote_account,IFNULL(promote.company_belong,0) company_belong";
|
|
$query = M("promote_coin s","tab_")
|
|
->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');
|
|
|
|
/* $havingPids = [];
|
|
if ($adminId > 0) {
|
|
$topIds = M('promote', 'tab_')->where(['admin_id' => $adminId])->getField('id', true);
|
|
$havingPids = getPromoteIdsByTopIds($topIds);
|
|
$havingPids = count($havingPids) > 0 ? $havingPids : [0];
|
|
$query->having('promote_id in (' . implode(',', $havingPids) . ')');
|
|
} */
|
|
return $query->select();
|
|
}
|
|
}
|
|
/**
|
|
*游戏统计
|
|
*/
|
|
public function gameStatistics($p = 1) {
|
|
$page = intval($p);
|
|
$page = $page ? $page : 1; //默认显示第一页数据
|
|
$row = $_REQUEST['row'] ?? 10;
|
|
$map = [];
|
|
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 (!empty(I('partner_id'))) {
|
|
$map['g.partner_id'] = I('partner_id');
|
|
}
|
|
|
|
if (isset($_REQUEST['time_start']) && isset($_REQUEST['time_end'])) {
|
|
$map['s.payed_time'] = ['between', [strtotime($_REQUEST['time_start']), strtotime($_REQUEST['time_end']) + 86399]];
|
|
} elseif (isset($_REQUEST['time_start'])) {
|
|
$map['s.payed_time'] = ['GT', strtotime($_REQUEST['time_start'])];
|
|
} elseif (isset($_REQUEST['time_end'])) {
|
|
$map['s.payed_time'] = ['LT', strtotime($_REQUEST['time_end']) + 86399];
|
|
}
|
|
if (!empty(I('develop_type'))) {
|
|
// $map['develop_type'] = I('develop_type');
|
|
$map['develop_type'] = ['in',I('develop_type')];
|
|
}
|
|
$isMarketLeader = isMarketLeader();
|
|
if ($isMarketLeader) {
|
|
$map['promote.admin_id'] = ['gt', 0];
|
|
$map['s.market_admin_id'] = ['gt', 0];
|
|
}
|
|
D("Spend")->addSubsiteWhere($map,"s");
|
|
//获取推广员
|
|
$title = '';
|
|
self::setPromoteMap($map,"s.promote_id",$title,false);
|
|
// dd($map);
|
|
$title .= "游戏统计";
|
|
$this->assign('title', $title);
|
|
|
|
//游戏统计列表
|
|
$data =self::gameStatisticsData($map, $row, $p);
|
|
if(isset($_REQUEST['export'])){
|
|
$data =self::gameStatisticsData($map);
|
|
}else {
|
|
$data =self::gameStatisticsData($map, $row, $p);
|
|
}
|
|
$promotes = [];
|
|
if (count($data) > 0) {
|
|
$promoteIds = array_column($data, 'p_id');
|
|
if (count($promoteIds) > 0) {
|
|
$promotes = M('promote', 'tab_')->field(['id', 'account', 'admin_id'])->where(['id' => ['in', $promoteIds]])->select();
|
|
}
|
|
}
|
|
$promotes = index_by_column('id', $promotes);
|
|
$adminUsernames = getAdminUsernameList(array_column($promotes, 'admin_id'));
|
|
|
|
foreach ($data as $key => &$value) {
|
|
$promote = $promotes[$value['p_id']] ?? null;
|
|
$value['cash_count']?:0;
|
|
$value['balance_coin_count']?:0;
|
|
$value['inside_cash_count']?:0;
|
|
$value['all_cash_count'] = number_format($value['cash_count'] + $value['balance_coin_count'] + $value['inside_cash_count'],2,'.','');
|
|
$value['company_belong'] =getCompanyBlong($value['company_belong']);
|
|
($value['account']=='官方渠道')?($value['account']=C('OFFICIEL_CHANNEL')):'';
|
|
|
|
$value['admin_username'] = $adminUsernames[$promote['admin_id']] ?? '无';
|
|
$value['develop_type_text'] = getCompanyDevelopTypeText($value['develop_type']);
|
|
|
|
$value['game_name'] =clearGameNameType($value['game_name']);
|
|
$value['sdk_version'] =getGameTypeName($value['sdk_version']);
|
|
|
|
if(!$value['game_name']) $value['game_name'] = "无";
|
|
//按类型判断pid
|
|
if($_REQUEST['promote_type'] == 2 && $_REQUEST['promote_id']){
|
|
$value['p_id'] = $_REQUEST['promote_id'];
|
|
}
|
|
}
|
|
if (isset($_REQUEST['export'])) {
|
|
|
|
$GetData = $_GET;
|
|
unset($GetData['export']);
|
|
addOperationLog(['op_type'=>3,'key'=>getNowDate(),'url'=>U(CONTROLLER_NAME.'/'.ACTION_NAME,$GetData),'menu'=>"充值-财务管理-公会统计-游戏统计-导出"]);
|
|
|
|
data2csv($data,$title, array(
|
|
"company_name"=>"推广公司",
|
|
"account"=>"会长账号",
|
|
"admin_username"=>"所属市场专员",
|
|
"company_belong"=>"团体类型",
|
|
"develop_type_text"=>"开发类型",
|
|
"game_name"=>"游戏",
|
|
"sdk_version"=>"设备",
|
|
"cash_count"=>"游戏现金金额",
|
|
"balance_coin_count"=>"平台币直充支出",
|
|
"inside_cash_count"=>"内充支出",
|
|
"all_cash_count"=>"游戏内充值合计"
|
|
));
|
|
}
|
|
|
|
$this->checkListOrCountAuthRestMap($map,[]);
|
|
|
|
$allData = self::gameStatisticsData($map);//列表总数
|
|
$count = count($allData);
|
|
$page = set_pagination($count, $row);
|
|
if ($page) {
|
|
$this->assign('_page', $page);//分页
|
|
}
|
|
|
|
//统计合计
|
|
$totalData = self::totalGameStatisticsData($map);
|
|
|
|
$sumCash = $totalData['cash_count'];
|
|
$sumBalance = $totalData['balance_coin_count'];
|
|
$sumInside = $totalData['inside_cash_count'];
|
|
$sumAll = number_format($sumCash + $sumBalance + $sumInside,2,'.','');
|
|
|
|
$this->assign('sumCash', $sumCash);
|
|
$this->assign('sumBalance', $sumBalance);
|
|
$this->assign('sumInside', $sumInside);
|
|
$this->assign('sumAll', $sumAll);
|
|
$this->assign('data',$data);
|
|
$this->meta_title = '游戏统计';
|
|
$this->display();
|
|
}
|
|
//游戏订单详情
|
|
public function gameStatisticsDetail($p = 1) {
|
|
set_time_limit(0);
|
|
if(isset($_REQUEST['game_id'])){
|
|
|
|
//转化为名称和类型,重新请求
|
|
$game = M("game","tab_")->field("relation_game_name,sdk_version")->where(" id = {$_REQUEST['game_id']} ")->find();
|
|
if($game === false){
|
|
$this->error("参数错误");
|
|
}
|
|
$_GET['game_name'] = $game['relation_game_name'];
|
|
$_GET['game_type'] = $game['sdk_version'];
|
|
unset($_GET['game_id']);
|
|
$this->redirect(ACTION_NAME, I('get.'));
|
|
}
|
|
|
|
if (isset($_REQUEST['pay_way'])) {
|
|
$map['pay_way'] = $_REQUEST['pay_way'];
|
|
}
|
|
|
|
if (!empty($_REQUEST['pay_order_number'])) {
|
|
$map['pay_order_number'] = $_REQUEST['pay_order_number'];
|
|
}
|
|
|
|
$adminId = 0;
|
|
$havingPids = [];
|
|
$isMarketAdmin = isMarketAdmin();
|
|
if ($isMarketAdmin) {
|
|
$userAuth = session('user_auth');
|
|
$adminId = $userAuth['uid'];
|
|
} else {
|
|
if (!empty(I('admin_id'))) {
|
|
$adminId = I('admin_id');
|
|
}
|
|
}
|
|
|
|
$isMarketLeader = isMarketLeader();
|
|
if ($isMarketLeader) {
|
|
$map['market_admin_id'] = ['gt', 0];
|
|
}
|
|
|
|
if ($adminId > 0) {
|
|
$map['market_admin_id'] = $adminId;
|
|
}
|
|
D("Spend")->addSubsiteWhere($map);
|
|
/* if (!empty(I('develop_type'))) {
|
|
$map['company.develop_type'] = I('develop_type');
|
|
}
|
|
|
|
if (!empty(I('admin_id'))) {
|
|
$map['market_admin_id'] = I('admin_id');
|
|
} */
|
|
|
|
if (isset($_REQUEST['game_name']) || isset($_REQUEST['game_type']) || isset($_REQUEST['partner_id'])) {
|
|
$map["game_id"] = array("in",implode(',', array_column(getGameidByPartnerNameType($_REQUEST['partner_id'],$_REQUEST['game_name'], $_REQUEST['game_type']), 'id')) );
|
|
}
|
|
|
|
if (isset($_REQUEST['time_start']) && isset($_REQUEST['time_end'])) {
|
|
$map['payed_time'] = ['between', [strtotime($_REQUEST['time_start']), strtotime($_REQUEST['time_end']) + 86399]];
|
|
} elseif (isset($_REQUEST['time_start'])) {
|
|
$map['payed_time'] = ['GT', strtotime($_REQUEST['time_start'])];
|
|
} elseif (isset($_REQUEST['time_end'])) {
|
|
$map['payed_time'] = ['LT', strtotime($_REQUEST['time_end']) + 86399];
|
|
}
|
|
//获取推广员
|
|
$title = '';
|
|
self::setPromoteMap($map,"promote_id",$title);
|
|
if (isset($_REQUEST['game_name'])){
|
|
$title .= ($_REQUEST['game_name']."-");
|
|
}
|
|
$title .= "游戏订单查看";
|
|
$this->assign('title', $title);
|
|
|
|
|
|
|
|
$page = intval($p);
|
|
$page = $page ? $page : 1; //默认显示第一页数据
|
|
if (isset($_REQUEST['row'])) {
|
|
$row = $_REQUEST['row'];
|
|
} else {
|
|
$row = 10;
|
|
}
|
|
$map['pay_status'] = 1;
|
|
$map['is_check'] = 1;
|
|
|
|
if (!empty(I("game_id"))) {
|
|
$map['game_id'] = I("game_id");
|
|
}
|
|
if (!empty(I('user_account'))) {
|
|
$map['user_account'] = array('like','%'.I("user_account").'%');
|
|
}
|
|
if (!empty(I('user_nickname'))) {
|
|
$map['game_player_name'] = array('like',I("user_nickname").'%');
|
|
}
|
|
|
|
if ($_REQUEST['merchant_id']){
|
|
$map['merchant_id'] = $_REQUEST['merchant_id'];
|
|
}
|
|
|
|
$field = "pay_order_number,FROM_UNIXTIME(payed_time) as pay_time,user_account,user_nickname,game_name,sdk_version,promote_account,spend_ip,server_name,game_player_name,pay_amount,cost,pay_way,market_admin_id,merchant_id";
|
|
$group = "";
|
|
$order = "pay_time DESC";
|
|
if(isset($_REQUEST['export'])){
|
|
$data = D('spend')->getSpendData($map,$field,$group,$order);
|
|
}else {
|
|
$data = D('spend')->getSpendData($map,$field,$group,$order,$page,$row);
|
|
}
|
|
|
|
$marketAdmins = [];
|
|
if (count($data) > 0) {
|
|
$marketAdmins = getAdminUsernameList(array_column($data, 'market_admin_id'));
|
|
}
|
|
|
|
$merchant_data = M("payment_merchant","tab_")
|
|
->field("id,name")
|
|
->where("1=1")
|
|
->select();
|
|
$handle_merchant = [];
|
|
|
|
foreach ($merchant_data as $key => $value) {
|
|
$handle_merchant[$value['id']] = $value['name'];
|
|
}
|
|
|
|
foreach($data as $key => $value) {
|
|
$data[$key]['merchant_name'] = $handle_merchant[$value['merchant_id']];
|
|
$data[$key]['pay_way'] = getPayType($value['pay_way']);
|
|
$data[$key]['game_name'] =clearGameNameType($data[$key]['game_name']);
|
|
$data[$key]['sdk_version'] =getGameTypeName($data[$key]['sdk_version']);
|
|
$data[$key]['market_admin_username'] = $marketAdmins[$value['market_admin_id']] ?? '无';
|
|
($data[$key]['promote_account']=='官方渠道')?($data[$key]['promote_account']=C('OFFICIEL_CHANNEL')):'';
|
|
|
|
if (isset($_REQUEST['export'])) {
|
|
checkEncryptionAuth($data[$key]['user_account'],'gameStatisticsDetail');
|
|
}
|
|
|
|
}
|
|
|
|
if (isset($_REQUEST['export'])) {
|
|
|
|
$GetData = $_GET;
|
|
unset($GetData['export']);
|
|
addOperationLog(['op_type'=>3,'key'=>getNowDate(),'url'=>U(CONTROLLER_NAME.'/'.ACTION_NAME,$GetData),'menu'=>"充值-财务管理-公会统计-订单查看-导出"]);
|
|
|
|
data2csv($data,$title, array(
|
|
"pay_order_number"=>"支付订单号",
|
|
"pay_time"=>"充值时间",
|
|
"user_account"=>"玩家账号",
|
|
"game_name"=>"游戏名称",
|
|
"sdk_version"=>"设备名称",
|
|
"promote_account"=>"所属推广员",
|
|
"market_admin_username"=>"所属市场专员",
|
|
"spend_ip"=>"充值ip",
|
|
"server_name"=>"游戏区服",
|
|
"game_player_name"=>"角色名称",
|
|
"cost"=>"订单金额",
|
|
"pay_amount"=>"实付金额",
|
|
"pay_way"=>"充值方式",
|
|
"merchant_name"=>"所属商户",
|
|
));
|
|
}
|
|
$totalData = self::totalGameStatisticsData($map, false);
|
|
$sumCash = $totalData['cash_count'] ?? 0;
|
|
$sumBalance = $totalData['balance_coin_count'] ?? 0;
|
|
$sumInside = $totalData['inside_cash_count'] ?? 0;
|
|
$sumAll = $sumCash + $sumBalance + $sumInside;
|
|
|
|
$this->checkListOrCountAuthRestMap($map,[]);
|
|
|
|
$this->assign('sumCash', $sumCash);
|
|
$this->assign('sumBalance', $sumBalance);
|
|
$this->assign('sumInside', $sumInside);
|
|
$this->assign('sumAll', null_to_0($sumAll));
|
|
|
|
$count = D("spend")->getSpendData($map,$field,$group,$order);
|
|
|
|
$count = count($count);
|
|
$page = set_pagination($count,$row);
|
|
if($page) {$this->assign('_page', $page);}
|
|
$this->meta_title = '游戏订单查看';
|
|
|
|
$this->assign('data',$data);
|
|
$from = I('from', '');
|
|
$this->display($from);
|
|
}
|
|
|
|
private function gameStatisticsData($map, $row = 0, $page = 1)
|
|
{
|
|
$adminId = 0;
|
|
$isMarketAdmin = isMarketAdmin();
|
|
if ($isMarketAdmin) {
|
|
$userAuth = session('user_auth');
|
|
$adminId = $userAuth['uid'];
|
|
} else {
|
|
if (!empty(I('admin_id'))) {
|
|
$adminId = I('admin_id');
|
|
}
|
|
}
|
|
|
|
if ($adminId > 0) {
|
|
$map['s.market_admin_id'] = $adminId;
|
|
}
|
|
|
|
$map['s.pay_status']=1;
|
|
$map['s.is_check']=1;
|
|
$query = M("spend","tab_")->alias("s")
|
|
->field("s.game_id,s.game_name,s.sdk_version,p.partner as partner_name,
|
|
SUM(CASE WHEN pay_way > 0 THEN pay_amount ELSE 0 END) as cash_count,
|
|
SUM(CASE WHEN pay_way = 0 THEN pay_amount ELSE 0 END) as balance_coin_count,
|
|
SUM(CASE WHEN pay_way = -1 THEN pay_amount ELSE 0 END) as inside_cash_count,
|
|
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_name,'{$this->COMPANY_NAME}') company_name,develop_type,IFNULL(promote.company_belong,0) company_belong")
|
|
->join('LEFT JOIN tab_game as g ON s.game_id=g.id')
|
|
->join("tab_promote promote ON s.promote_id = promote.id","left")
|
|
->join("tab_promote_company company ON promote.company_id = company.id","left")
|
|
->join('LEFT JOIN tab_partner as p ON g.partner_id=p.id')
|
|
->order("p_id asc,cash_count desc")
|
|
->where($map)
|
|
->group('p_id,game_id');
|
|
if ($row != 0) {
|
|
$query = $query->page($page,$row);
|
|
}
|
|
$data = $query->select(false);
|
|
$data = M()
|
|
->table("(".$data.") a")
|
|
->field("a.*,IFNULL(promote.account,'官方渠道') account")
|
|
->join("tab_promote promote ON a.p_id = promote.id","left")
|
|
->select();
|
|
|
|
return $data;
|
|
}
|
|
private function totalGameStatisticsData($map, $join = true)
|
|
{
|
|
$adminId = 0;
|
|
$isMarketAdmin = isMarketAdmin();
|
|
if ($isMarketAdmin) {
|
|
$userAuth = session('user_auth');
|
|
$adminId = $userAuth['uid'];
|
|
} else {
|
|
if (!empty(I('admin_id'))) {
|
|
$adminId = I('admin_id');
|
|
}
|
|
}
|
|
|
|
if ($adminId > 0) {
|
|
$map['s.market_admin_id'] = $adminId;
|
|
}
|
|
|
|
$query = M("spend","tab_")->alias("s")
|
|
->field("SUM(CASE WHEN pay_way > 0 THEN pay_amount ELSE 0 END) as cash_count,
|
|
SUM(CASE WHEN pay_way = 0 THEN pay_amount ELSE 0 END) as balance_coin_count,
|
|
SUM(CASE WHEN pay_way = -1 THEN pay_amount ELSE 0 END) as inside_cash_count");
|
|
if ($join) {
|
|
$query = $query->join('LEFT JOIN tab_game as g ON s.game_id=g.id')
|
|
->join('LEFT JOIN tab_partner as p ON g.partner_id=p.id')
|
|
->join("tab_promote promote ON s.promote_id = promote.id","left")
|
|
->join("tab_promote_company company ON promote.company_id = company.id","left");
|
|
}
|
|
$data = $query->where(['s.pay_status' => 1,'s.is_check'=>1])
|
|
->where($map)
|
|
->find();
|
|
return $data;
|
|
}
|
|
//游戏弹框详情
|
|
public function gameCoinDetail($p = 1) {
|
|
|
|
set_time_limit(0);
|
|
|
|
if (isset($_REQUEST['pay_way'])) {
|
|
$map['pay_way'] = $_REQUEST['pay_way'];
|
|
$this->assign('pay_way', $map['pay_way']);
|
|
}
|
|
if (!empty($_REQUEST['pay_order_number'])) {
|
|
$map['pay_order_number'] = $_REQUEST['pay_order_number'];
|
|
}
|
|
if (!empty(I("game_id"))) {
|
|
$map['tab_spend.game_id'] = I("game_id");
|
|
}
|
|
if (isset($_REQUEST['game_name']) || isset($_REQUEST['game_type']) || isset($_REQUEST['partner_id'])) {
|
|
$map["tab_spend.game_id"] = array("in",implode(',', array_column(getGameidByPartnerNameType($_REQUEST['partner_id'],$_REQUEST['game_name'], $_REQUEST['game_type']), 'id')) );
|
|
}
|
|
if (isset($_REQUEST['time_start']) && isset($_REQUEST['time_end'])) {
|
|
$map['payed_time'] = ['between', [strtotime($_REQUEST['time_start']), strtotime($_REQUEST['time_end']) + 86399]];
|
|
} elseif (isset($_REQUEST['time_start'])) {
|
|
$map['payed_time'] = ['GT', strtotime($_REQUEST['time_start'])];
|
|
} elseif (isset($_REQUEST['time_end'])) {
|
|
$map['payed_time'] = ['LT', strtotime($_REQUEST['time_end']) + 86399];
|
|
}
|
|
if ($_REQUEST['promote_id'] != '') {
|
|
if ($_REQUEST['promote_id'] == 0 || $_REQUEST['promote_type'] == 2) {
|
|
$map['tab_spend.promote_id'] = $_REQUEST['promote_id'];
|
|
} else {
|
|
$promoter_ids = D("Promote")->where("chain like '%/{$_REQUEST['promote_id']}/%' or id={$_REQUEST['promote_id']}")->field('id')->select();
|
|
if ($promoter_ids) {
|
|
$map['tab_spend.promote_id'] = ['in', implode(',', array_column($promoter_ids, 'id'))];
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
$page = intval($p);
|
|
$page = $page ? $page : 1; //默认显示第一页数据
|
|
if (isset($_REQUEST['row'])) {
|
|
$row = $_REQUEST['row'];
|
|
} else {
|
|
$row = 10;
|
|
}
|
|
$map['pay_status'] = 1;
|
|
$map['is_check'] = 1;
|
|
|
|
if (!empty(I('user_account'))) {
|
|
$map['tab_spend.user_account'] = array('like','%'.I("user_account").'%');
|
|
}
|
|
if (!empty(I('user_nickname'))) {
|
|
$map['tab_spend.game_player_name'] = array('like',I("user_nickname").'%');
|
|
}
|
|
D("Spend")->addSubsiteWhere($map,"s");
|
|
$field = "pay_order_number,FROM_UNIXTIME(payed_time) as pay_time,tab_spend.user_account,
|
|
tab_spend.user_nickname,tab_spend.game_name,tab_spend.promote_account,spend_ip,tab_spend.server_name,tab_spend.sdk_version,
|
|
game_player_name,pay_amount,cost,pay_way";
|
|
$group = "";
|
|
$order = "payed_time DESC";
|
|
$join = false;
|
|
if ($map['pay_way'] ==-1) {//绑定币
|
|
$field2 = $field . ',bind_balance';
|
|
$join = 'left join tab_user_play as p on p.user_id = tab_spend.user_id and tab_spend.game_id=p.game_id';
|
|
} elseif ($map['pay_way'] ==0) {//平台币
|
|
$field2 = $field . ',balance';
|
|
$join = 'left join tab_user as u on u.id = tab_spend.user_id';
|
|
}
|
|
if(isset($_REQUEST['export'])){
|
|
$data = D('spend')->getSpendData($map, $field2, $group, $order,0,0, $join);
|
|
}else {
|
|
$data = D('spend')->getSpendData($map, $field2, $group, $order, $page, $row, $join);
|
|
}
|
|
|
|
foreach($data as $key => $value) {
|
|
$data[$key]['pay_way'] = getPayType($value['pay_way']);
|
|
|
|
$data[$key]['game_name'] =clearGameNameType($data[$key]['game_name']);
|
|
$data[$key]['sdk_version'] =getGameTypeName($data[$key]['sdk_version']);
|
|
|
|
$data[$key]['cost'] = number_format($value['cost'],2,'.','');
|
|
$data[$key]['pay_amount'] = number_format($value['pay_amount'],2,'.','');
|
|
|
|
if (isset($_REQUEST['export'])) {
|
|
checkEncryptionAuth($data[$key]['user_account'],'gameCoinDetail');
|
|
}
|
|
}
|
|
|
|
if (isset($_REQUEST['export'])) {
|
|
|
|
|
|
$field = array(
|
|
"pay_order_number"=>"支付订单号",
|
|
"pay_time"=>"充值时间",
|
|
"user_account"=>"玩家账号",
|
|
"game_name"=>"游戏名称",
|
|
"sdk_version"=>"设备名称",
|
|
"server_name"=>"游戏区服",
|
|
"game_player_name"=>"角色名称",
|
|
"cost"=>"订单金额",
|
|
"pay_amount"=>"实付金额",
|
|
"pay_way"=>"充值方式"
|
|
);
|
|
if ($map['pay_way'] ==-1) {
|
|
$field["bind_balance"] = "绑定币余额";
|
|
$title = "内充支出明细";
|
|
} elseif ($map['pay_way'] ==0) {
|
|
$field["balance"] = "平台币余额";
|
|
$title = "平台币直充明细";
|
|
}
|
|
|
|
$GetData = $_GET;
|
|
unset($GetData['export']);
|
|
addOperationLog(['op_type'=>3,'key'=>getNowDate(),'url'=>U(CONTROLLER_NAME.'/'.ACTION_NAME,$GetData),'menu'=>"充值-财务管理-公会统计-".$title."-导出"]);
|
|
|
|
data2csv($data,$title,$field);
|
|
}
|
|
|
|
$this->checkListOrCountAuthRestMap($map,[]);
|
|
|
|
$count = D("spend")->getSpendData($map,$field,$group,$order);
|
|
$count = count($count);
|
|
$page = set_pagination($count,$row);
|
|
|
|
$total_cost = D('spend')->sumSpend($map, 'cost');//订单金额合计
|
|
$total_pay_amount = D('spend')->sumSpend($map, 'pay_amount');//实付金额合计
|
|
|
|
$this->assign('total_cost', $total_cost);
|
|
$this->assign('total_pay_amount', $total_pay_amount);
|
|
|
|
if($page) {$this->assign('_page', $page);}
|
|
$this->meta_title = '游戏订单查看';
|
|
|
|
$this->assign('data',$data);
|
|
$this->display();
|
|
}
|
|
//平台币内充弹框
|
|
public function insideCoinDetail($p = 1)
|
|
{
|
|
$page = intval($p);
|
|
$page = $page ? $page : 1; //默认显示第一页数据
|
|
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];
|
|
}
|
|
|
|
//是否是官方渠道
|
|
$isgf = false;
|
|
if ($_REQUEST['promote_id'] != '') {
|
|
if($_REQUEST['promote_id'] == 0){
|
|
$isgf = true;
|
|
}
|
|
$map['s.promote_id'] = array("in",implode(",",array_column(getPrmoteChlidAccount($_REQUEST['promote_id'],"id"),"id")).",".$_REQUEST['promote_id']);
|
|
}
|
|
//检索
|
|
if (isset($_REQUEST['sn'])) {
|
|
$pmap['order_number'] = array("LIKE","%".$_REQUEST['sn']."%");
|
|
$map['sn'] = array("LIKE","%".$_REQUEST['sn']."%");
|
|
}
|
|
if (isset($_REQUEST['type'])) {
|
|
if($_REQUEST['type'] == 2){
|
|
$pmap['op_id'] =0;//肯定false
|
|
}
|
|
$map['s.type'] =$_REQUEST['type'];
|
|
}
|
|
|
|
//
|
|
$senddata = [];
|
|
$count =0;
|
|
$total_cost = 0;
|
|
if($isgf){
|
|
$pmap['status']=1;
|
|
if($istimeselect){
|
|
$pmap['create_time'] = $istimeselect;
|
|
}
|
|
$admincount = M("provide_user p","tab_")->field("sum(amount) amount,count(*) count")->where($pmap)->find();
|
|
$count = $admincount["count"]?:0;
|
|
$total_cost = $admincount["amount"]?:0;
|
|
if($count >0){
|
|
$admininside = M("provide_user p","tab_")
|
|
->field("order_number,user_account,amount,balance,create_time")
|
|
->join("left join tab_user as u on u.id = p.user_id")
|
|
->where($pmap);
|
|
|
|
if(isset($_REQUEST['export'])){
|
|
$admininside = $admininside->select();
|
|
}else {
|
|
$admininside = $admininside->page($page, $row)->select();
|
|
}
|
|
|
|
foreach ($admininside as $k => $v) {
|
|
$temp = [
|
|
"sn"=>$v['order_number'],
|
|
"op_type"=>"收入",
|
|
"op_sty"=>"后台发放玩家",
|
|
"account"=>"管理员",
|
|
"op_num"=>$v['amount'],
|
|
"balance_coin"=>$v['balance']?:'0.00',
|
|
"mark"=>"后台发放平台币",
|
|
"create_time"=>date("Y-m-d H:i:s",$v['create_time'])
|
|
];
|
|
$senddata[] = $temp;
|
|
}
|
|
}
|
|
|
|
}else{
|
|
if($istimeselect){
|
|
$map['s.create_time']=$istimeselect;
|
|
}
|
|
$map['s.status']=1;
|
|
$map['s.source_id']=0;
|
|
$ininsidecount = M("promote_coin s","tab_")
|
|
->field("SUM(CASE WHEN s.type = 1 THEN num ELSE 0 END) as pay_amount,SUM(CASE WHEN s.type = 2 THEN num ELSE 0 END) as back_amount,count(*) count")
|
|
->where($map)
|
|
->find();
|
|
$count = $ininsidecount["count"]?:0;
|
|
$total_cost = ($ininsidecount["pay_amount"]-$ininsidecount["back_amount"]);
|
|
if ($count >0) {
|
|
$field= "num,sn,promote.balance_coin,account,s.type,remark,s.create_time";
|
|
$ininside = M("promote_coin s", "tab_")
|
|
->field($field)
|
|
->where($map)
|
|
->join("tab_promote promote ON s.promote_id = promote.id", "left");
|
|
if(isset($_REQUEST['export'])){
|
|
$ininside = $ininside->select();
|
|
}else {
|
|
$ininside = $ininside->page($page, $row)->select();
|
|
}
|
|
foreach ($ininside as $k => $v) {
|
|
$temp = [
|
|
"sn"=>$v['sn'],
|
|
"op_type"=>($v['type'] == 1) ? "收入":"支出",
|
|
"op_sty"=>($v['type'] == 1) ? "后台发放":"后台回收",
|
|
"account"=>"管理员",
|
|
"op_num"=>$v['num']?:'0.00',
|
|
"balance_coin"=>$v['balance_coin'],
|
|
"mark"=>$v["remark"]?:"后台发放平台币",
|
|
"create_time"=>date("Y-m-d H:i:s",$v['create_time'])
|
|
];
|
|
$senddata[] = $temp;
|
|
}
|
|
}
|
|
|
|
}
|
|
//
|
|
if (isset($_REQUEST['export'])) {
|
|
$field = array(
|
|
"sn"=>"流水号",
|
|
"op_type"=>"操作类型",
|
|
"op_sty"=>"操作方式",
|
|
"account"=>"对手账号类型",
|
|
"op_num"=>"平台币数量",
|
|
"balance_coin"=>"平台币余额",
|
|
"mark"=>"交易说明",
|
|
"create_time"=>"交易时间"
|
|
);
|
|
|
|
$GetData = $_GET;
|
|
unset($GetData['export']);
|
|
addOperationLog(['op_type'=>3,'key'=>getNowDate(),'url'=>U(CONTROLLER_NAME.'/'.ACTION_NAME,$GetData),'menu'=>"充值-财务管理-公会统计-"."平台币内充明细"."-导出"]);
|
|
|
|
data2csv($senddata,"平台币内充明细",$field);
|
|
}
|
|
$this->checkListOrCountAuthRestMap($map,[]);
|
|
|
|
$this->assign('total_cost', $total_cost);
|
|
$page = set_pagination($count,$row);
|
|
if($page) {$this->assign('_page', $page);}
|
|
$this->assign('data',$senddata);
|
|
$this->display();
|
|
|
|
}
|
|
private function setPromoteMap(&$map,$field,&$title,$ptype = true)
|
|
{
|
|
//公司判断
|
|
$pmap = false; //非特意推广员检索
|
|
$gfflg = true; //是否有官方
|
|
if (isset($_REQUEST['company_id'])) {
|
|
$pmap['company_id'] = $_REQUEST['company_id'];
|
|
//获取公司名称
|
|
if($pmap['company_id'] == 0){
|
|
$title .= "{$this->COMPANY_NAME}-";
|
|
}else{
|
|
$gfflg = false;
|
|
$title .= (M('promote_company',"tab_")->field("company_name")->where("id = '{$pmap['company_id']}'")->find()['company_name'] . "-");
|
|
}
|
|
|
|
}
|
|
if (isset($_REQUEST['company_belong'])) {
|
|
$pmap['company_belong'] = $_REQUEST['company_belong'];
|
|
if($pmap['company_belong'] != 0){
|
|
$gfflg = false;
|
|
}
|
|
$title .= (getCompanyBlong($_REQUEST['company_belong'])."-");
|
|
}
|
|
|
|
if (I('develop_type', 0) != 0) {
|
|
$gfflg = false;
|
|
}
|
|
|
|
if (!empty(I('admin_id'))) {
|
|
if(I('admin_id') != 0){
|
|
$gfflg = false;
|
|
}
|
|
}
|
|
|
|
if (isset($_REQUEST['promote_id'])) {
|
|
if($ptype){
|
|
$pmap = false;//取消非特异推广员检索
|
|
}else{
|
|
$pmap['id'] = $_REQUEST['promote_id'];
|
|
}
|
|
|
|
$title .= (get_promote_name($_REQUEST['promote_id'])."-");
|
|
if ($_REQUEST['promote_id'] != 0){
|
|
$gfflg = false;
|
|
}
|
|
}
|
|
if($pmap){
|
|
$promoter_ids = D("Promote")->where($pmap)->field('id')->select();
|
|
|
|
|
|
if ($promoter_ids) {
|
|
if($gfflg){
|
|
$t_in = "0,".implode(',', array_column($promoter_ids, 'id'));
|
|
}else{
|
|
$t_in = implode(',', array_column($promoter_ids, 'id'));
|
|
}
|
|
$map[$field] = ['in',$t_in];
|
|
}else{
|
|
$map[$field] = ['in',"-1"];
|
|
}
|
|
}
|
|
// if($ptype){
|
|
//判断是否有推广员
|
|
$level = 1;
|
|
if ($_REQUEST['promote_id'] != '') {
|
|
if ($_REQUEST['promote_id'] != 0){
|
|
$level = M('promote', 'tab_')->field('level')->where(array('id' => $_REQUEST['promote_id']))->find()['level'];
|
|
}
|
|
if ($_REQUEST['promote_id'] == 0 || $_REQUEST['promote_type'] == 2) {
|
|
$map[$field] = $_REQUEST['promote_id'];
|
|
} else {
|
|
if ($ptype) {
|
|
$promoter_ids = D("Promote")->where("chain like '%/{$_REQUEST['promote_id']}/%' or id={$_REQUEST['promote_id']}")->field('id')->select();
|
|
}else{
|
|
unset($pmap['id']);
|
|
$promoter_ids = D("Promote")->where($pmap)->where("chain like '%/{$_REQUEST['promote_id']}/%' or id={$_REQUEST['promote_id']}")->field('id')->select();
|
|
}
|
|
if ($promoter_ids) {
|
|
$map[$field] = ['in', implode(',', array_column($promoter_ids, 'id'))];
|
|
}
|
|
}
|
|
}
|
|
$_POST['promote_level'] = $level;
|
|
// }
|
|
// dd($map);
|
|
|
|
}
|
|
|
|
} |