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.

157 lines
6.4 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\Controller;
class RechargeSumController extends ThinkController
{
public function summation($p = 1)
{
$startDateTime = empty($_REQUEST['timeStart']) ? date('Y-m-d', strtotime('-6 day', time())) : $_REQUEST['timeStart'];
$endDateTime = empty($_REQUEST['timeEnd']) ? date('Y-m-d') : $_REQUEST['timeEnd'];
$startTime = strtotime($startDateTime);
$endTime = strtotime($endDateTime);
$key = 0;
$total = ['current' => 0, 'sum' => 0];
if (isset($_REQUEST['promote_id'])) {
if ($_REQUEST['promote_id'] > 0) {
$promoter_ids = D("Promote")->where("chain like '%/{$_REQUEST['promote_id']}/%' or id={$_REQUEST['promote_id']}")->field('id')->select();
$promoter_ids ? $rmap['tab_user.promote_id'] = $map['promote_id'] = ['in', implode(',', array_column($promoter_ids, 'id'))] : null;
} else {
$rmap['tab_user.promote_id'] = $map['promote_id'] = 0;
}
}
$data = [];
if (intval(($endTime + (24 * 3600)) - $startTime) / (24 * 3600) <= 31) {
for ($start = $endTime; $start >= $startTime; $start -= 86400) {
$startDate = $start;
$endDate = $startDate + 24 * 60 * 60 - 1;
$rmap['register_time'] = $map['register_time'] = array('BETWEEN', array($startDate, $endDate));
$map['play_time'] = array('BETWEEN', array($startDate, $endDate));
$map['pay_time'] = array('BETWEEN', array($startDate, $endDate));
if (!empty($_REQUEST['game_type'])) {
$map['sdk_version'] = $_REQUEST['game_type'];
$rmap['sdk_version'] = $_REQUEST['game_type'];
}
if (!empty($_REQUEST['game_name'])) {
$rmap['game_id'] = $map['game_id'] = ['in', array_column(getGameByName($_REQUEST['game_name'], $_REQUEST['game_type']), 'id')];
}
if (!empty($_REQUEST['server_id'])) {
$rmap['tab_user_play.server_id'] = $map['server_id'] = $_REQUEST['server_id'];
}
if ($_REQUEST['bindcoin'] == 1) {
$map['pay_way'] = array('egt', 0);
}
//当天注册人数
$registerNum = D('User')->where(array_merge($rmap, array('puid' => 0)))->join("tab_user_play on tab_user.id = tab_user_play.user_id and tab_user.fgame_id = tab_user_play.game_id", 'left')->field("tab_user.id")->select();
$registerNum = $registerNum ? array_column($registerNum, 'id') : [];
//当天活跃人数
$livenNum = D('UserPlay')->where($map)->count("id");
//当天新增付费
if (empty($registerNum)) {
$map['user_id'] = array('IN', '0');
} else {
$map['user_id'] = array('IN', $registerNum);
}
$map['pay_status'] = 1;
$newAddPay = D('Spend')->where(array_merge($map, array('_string' => '( small_id = 0 or small_id = user_id)')))->sum('pay_amount');
//当天累计付费
unset($map['user_id']);
$accumulated = D('Spend')->where($map)->sum('pay_amount');
$data[$key]['date'] = date('Y-m-d', $start);
$data[$key]['game_id'] = empty($_REQUEST['game_id']) ? "全部" : get_game_name($_REQUEST['game_id']);
switch ($_REQUEST['promote_id']) {
case 'GUANFANG':
$data[$key]['promote_id'] = "官方渠道";
break;
case 0:
$data[$key]['promote_id'] = "官方渠道";
break;
case 'PROMOTE':
$data[$key]['promote_id'] = "推广渠道";
break;
case 'ALL':
$data[$key]['promote_id'] = "全部";
break;
default:
$data[$key]['promote_id'] = empty($_REQUEST['promote_id']) ? "全部" : get_promote_account($_REQUEST['promote_id']);
break;
}
$data[$key]['registerNum'] = count($registerNum);
$data[$key]['livenNum'] = $livenNum;
$data[$key]['newAddPay'] = empty($newAddPay) ? 0 : $newAddPay;
$data[$key]['accumulated'] = empty($accumulated) ? 0 : $accumulated;
$total['sum'] += $data[$key]['accumulated'];
$key++;
}
}
if (isset($_REQUEST['row'])) {
$row = $_REQUEST['row'];
} else {
$row = 10;
}
$count = count($data);
$export_data = $data;
$page = set_pagination($count, $row);
if ($page) {
$this->assign('_page', $page);
}
$pnum = ceil(count($data) / $row); //总页数ceil()函数用于求大于数字的最小整数
//用array_slice(array,offset,length) 函数在数组中根据条件取出一段值;array(数组),offset(元素的开始位置),length(组的长度)
$data = array_slice($data, ($p - 1) * $row, $row);
foreach ($data as $k => $v) {
$total['current'] += $v['accumulated'];
}
//判断是否执行导出
if (I('export') == 1) {
$this->exportSum($export_data);
}
$this->assign('meta_title', "充值汇总");
$this->assign('list_data', $data);
$this->assign('total', $total);
$this->assign('startDate', $startDateTime);
$this->assign('endDate', $endDateTime);
$this->m_title = '充值汇总';
$this->assign('commonset', M('Kuaijieicon')->where(['url' => 'RechargeSum/summation', 'status' => 1])->find());
$this->display();
}
public function exportSum($data)
{
$export = A('Export');
$exptitle = $_REQUEST['xlsname'];
$expCellName = array(
array('date', '日期'),
array('promote_id', '渠道来源'),
array('game_id', '游戏名称'),
array('registerNum', '新增人数'),
array('livenNum', '活跃人数'),
array('newAddPay', "新增玩家付费"),
array('accumulated', '本日累计'),
);
$expTableData = $data;
$export->exportExcel($exptitle, $expCellName, $expTableData);
}
}