推广平台->数据汇总->充值玩家--更新

master
chenxiaojun 5 years ago
commit d9659ea975

@ -1054,6 +1054,4 @@ class AutoPackController extends Think
return ''; return '';
} }
} }
} }

@ -8,6 +8,7 @@
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
namespace Admin\Controller; namespace Admin\Controller;
use User\Api\UserApi; use User\Api\UserApi;
use Com\Wechat; use Com\Wechat;
use Com\WechatAuth; use Com\WechatAuth;
@ -16,13 +17,15 @@ use Com\WechatAuth;
* 后台用户控制器 * 后台用户控制器
* @author 麦当苗儿 <zuojiazi@vip.qq.com> * @author 麦当苗儿 <zuojiazi@vip.qq.com>
*/ */
class UserController extends AdminController { class UserController extends AdminController
{
/** /**
* 用户管理首页 * 用户管理首页
* @author 麦当苗儿 <zuojiazi@vip.qq.com> * @author 麦当苗儿 <zuojiazi@vip.qq.com>
*/ */
public function index(){ public function index()
{
$nickname = I('nickname'); $nickname = I('nickname');
if (isset($_REQUEST['status'])) { if (isset($_REQUEST['status'])) {
$map['status'] = $_REQUEST['status']; $map['status'] = $_REQUEST['status'];
@ -49,7 +52,8 @@ class UserController extends AdminController {
* 修改昵称初始化 * 修改昵称初始化
* @author huajie <banhuajie@163.com> * @author huajie <banhuajie@163.com>
*/ */
public function updateNickname(){ public function updateNickname()
{
$nickname = M('Member')->getFieldByUid(UID, 'nickname'); $nickname = M('Member')->getFieldByUid(UID, 'nickname');
$this->assign('nickname', $nickname); $this->assign('nickname', $nickname);
$this->meta_title = '修改昵称'; $this->meta_title = '修改昵称';
@ -60,7 +64,8 @@ class UserController extends AdminController {
* 修改昵称提交 * 修改昵称提交
* @author huajie <banhuajie@163.com> * @author huajie <banhuajie@163.com>
*/ */
public function submitNickname(){ public function submitNickname()
{
//获取参数 //获取参数
$nickname = I('post.nickname'); $nickname = I('post.nickname');
$password = I('post.password'); $password = I('post.password');
@ -95,7 +100,8 @@ class UserController extends AdminController {
* 修改密码初始化 * 修改密码初始化
* @author huajie <banhuajie@163.com> * @author huajie <banhuajie@163.com>
*/ */
public function updatePassword(){ public function updatePassword()
{
$this->meta_title = '修改密码'; $this->meta_title = '修改密码';
$this->display('updatepassword'); $this->display('updatepassword');
} }
@ -104,7 +110,8 @@ class UserController extends AdminController {
* 修改密码提交 * 修改密码提交
* @author huajie <banhuajie@163.com> * @author huajie <banhuajie@163.com>
*/ */
public function submitPassword(){ public function submitPassword()
{
//获取参数 //获取参数
$password = I('post.old'); $password = I('post.old');
empty($password) && $this->error('请输入原密码'); empty($password) && $this->error('请输入原密码');
@ -130,7 +137,8 @@ class UserController extends AdminController {
* 用户行为列表 * 用户行为列表
* @author huajie <banhuajie@163.com> * @author huajie <banhuajie@163.com>
*/ */
public function action(){ public function action()
{
//获取列表数据 //获取列表数据
$Action = M('Action')->where(array('status' => array('gt', -1))); $Action = M('Action')->where(array('status' => array('gt', -1)));
$list = $this->lists($Action); $list = $this->lists($Action);
@ -147,7 +155,8 @@ class UserController extends AdminController {
* 新增行为 * 新增行为
* @author huajie <banhuajie@163.com> * @author huajie <banhuajie@163.com>
*/ */
public function addAction(){ public function addAction()
{
$this->meta_title = '新增行为'; $this->meta_title = '新增行为';
$this->assign('data', null); $this->assign('data', null);
$this->display('editaction'); $this->display('editaction');
@ -157,7 +166,8 @@ class UserController extends AdminController {
* 编辑行为 * 编辑行为
* @author huajie <banhuajie@163.com> * @author huajie <banhuajie@163.com>
*/ */
public function editAction(){ public function editAction()
{
$id = I('get.id'); $id = I('get.id');
empty($id) && $this->error('参数不能为空!'); empty($id) && $this->error('参数不能为空!');
$data = M('Action')->field(true)->find($id); $data = M('Action')->field(true)->find($id);
@ -171,7 +181,8 @@ class UserController extends AdminController {
* 更新行为 * 更新行为
* @author huajie <banhuajie@163.com> * @author huajie <banhuajie@163.com>
*/ */
public function saveAction(){ public function saveAction()
{
$res = D('Action')->update(); $res = D('Action')->update();
if (!$res) { if (!$res) {
$this->error(D('Action')->getError()); $this->error(D('Action')->getError());
@ -184,7 +195,8 @@ class UserController extends AdminController {
* 会员状态修改 * 会员状态修改
* @author 朱亚杰 <zhuyajie@topthink.net> * @author 朱亚杰 <zhuyajie@topthink.net>
*/ */
public function changeUserStatus($method=null){ public function changeUserStatus($method = null)
{
$id = array_unique((array)I('id', 0)); $id = array_unique((array)I('id', 0));
if (in_array(C('USER_ADMINISTRATOR'), $id)) { if (in_array(C('USER_ADMINISTRATOR'), $id)) {
$this->error("不允许对超级管理员执行该操作!"); $this->error("不允许对超级管理员执行该操作!");
@ -211,7 +223,8 @@ class UserController extends AdminController {
* 会员状态修改 * 会员状态修改
* @author 朱亚杰 <zhuyajie@topthink.net> * @author 朱亚杰 <zhuyajie@topthink.net>
*/ */
public function changeStatus($method=null){ public function changeStatus($method = null)
{
$id = array_unique((array)I('id', 0)); $id = array_unique((array)I('id', 0));
if (in_array(C('USER_ADMINISTRATOR'), $id)) { if (in_array(C('USER_ADMINISTRATOR'), $id)) {
$this->error("不允许对超级管理员执行该操作!"); $this->error("不允许对超级管理员执行该操作!");
@ -239,7 +252,8 @@ class UserController extends AdminController {
} }
} }
public function add($username = '', $password = '', $repassword = '', $email = '',$second_pwd=''){ public function add($username = '', $password = '', $repassword = '', $email = '', $second_pwd = '')
{
if (IS_POST) { if (IS_POST) {
/*检测用户名是否为空*/ /*检测用户名是否为空*/
@ -285,19 +299,22 @@ class UserController extends AdminController {
$this->assign('commonset', M('Kuaijieicon')->where(['url' => 'User/index', 'status' => 1])->find()); $this->assign('commonset', M('Kuaijieicon')->where(['url' => 'User/index', 'status' => 1])->find());
$this->display(); $this->display();
} }
} }
/** /**
* 系统非常规MD5加密方法 * 系统非常规MD5加密方法
* @param string $str 要加密的字符串 * @param string $str 要加密的字符串
* @return string * @return string
*/ */
function think_ucenter_md5($str, $key = 'ThinkUCenter'){ function think_ucenter_md5($str, $key = 'ThinkUCenter')
{
return '' === $str ? '' : md5(sha1($str) . $key); return '' === $str ? '' : md5(sha1($str) . $key);
} }
public function edit($id){
public function edit($id)
{
// var_dump(session());exit; // var_dump(session());exit;
if (IS_POST) { if (IS_POST) {
if (isset($_POST['bind_wx'])) { if (isset($_POST['bind_wx'])) {
@ -407,7 +424,9 @@ function think_ucenter_md5($str, $key = 'ThinkUCenter'){
$this->display(); $this->display();
} }
} }
public function bdwx(){
public function bdwx()
{
$map['id'] = UID; $map['id'] = UID;
$Member = D('UcenterMember')->field('id,username,admin_openid,openid_sign')->where($map)->find(); $Member = D('UcenterMember')->field('id,username,admin_openid,openid_sign')->where($map)->find();
$this->assign('id', $map['id']); $this->assign('id', $map['id']);
@ -415,10 +434,16 @@ function think_ucenter_md5($str, $key = 'ThinkUCenter'){
$this->meta_title = '绑定微信'; $this->meta_title = '绑定微信';
$this->display(); $this->display();
} }
public function updatelist($p=0){
public function updatelist($p = 0)
{
$page = intval($p); $page = intval($p);
$page = $page ? $page : 1; //默认显示第一页数据 $page = $page ? $page : 1; //默认显示第一页数据
if(isset($_REQUEST['row'])) {$row = $_REQUEST['row'];}else{$row = 10;} if (isset($_REQUEST['row'])) {
$row = $_REQUEST['row'];
} else {
$row = 10;
}
if (isset($_REQUEST['op_account'])) { if (isset($_REQUEST['op_account'])) {
if ($_REQUEST['op_account'] == '全部') { if ($_REQUEST['op_account'] == '全部') {
unset($_REQUEST['op_account']); unset($_REQUEST['op_account']);
@ -441,7 +466,8 @@ function think_ucenter_md5($str, $key = 'ThinkUCenter'){
} }
if (isset($_REQUEST['timestart']) && isset($_REQUEST['timeend'])) { if (isset($_REQUEST['timestart']) && isset($_REQUEST['timeend'])) {
$map['create_time'] = array('BETWEEN', array(strtotime($_REQUEST['timestart']), strtotime($_REQUEST['timeend']) + 24 * 60 * 60 - 1)); $map['create_time'] = array('BETWEEN', array(strtotime($_REQUEST['timestart']), strtotime($_REQUEST['timeend']) + 24 * 60 * 60 - 1));
unset($_REQUEST['timestart']);unset($_REQUEST['timeend']); unset($_REQUEST['timestart']);
unset($_REQUEST['timeend']);
} elseif (isset($_REQUEST['timestart'])) { } elseif (isset($_REQUEST['timestart'])) {
$map['create_time'] = ['GT', strtotime(I('timestart'))]; $map['create_time'] = ['GT', strtotime(I('timestart'))];
unset($_REQUEST['timestart']); unset($_REQUEST['timestart']);
@ -457,7 +483,9 @@ function think_ucenter_md5($str, $key = 'ThinkUCenter'){
$count = M('balance_edit', 'tab_')->where($map)->count(); $count = M('balance_edit', 'tab_')->where($map)->count();
//分页 //分页
$page = set_pagination($count, $row); $page = set_pagination($count, $row);
if($page) {$this->assign('_page', $page);} if ($page) {
$this->assign('_page', $page);
}
$this->assign('list', $list); $this->assign('list', $list);
$this->meta_title = '修改记录'; $this->meta_title = '修改记录';
@ -468,30 +496,59 @@ function think_ucenter_md5($str, $key = 'ThinkUCenter'){
$this->display('updatelist'); $this->display('updatelist');
} }
/** /**
* 获取用户注册错误信息 * 获取用户注册错误信息
* @param integer $code 错误编码 * @param integer $code 错误编码
* @return string 错误信息 * @return string 错误信息
*/ */
private function showRegError($code = 0){ private function showRegError($code = 0)
{
switch ($code) { switch ($code) {
case -1: $error = '管理员账号长度必须在16个字符以内'; break; case -1:
case -2: $error = '管理员账号被禁止注册!'; break; $error = '管理员账号长度必须在16个字符以内';
case -3: $error = '管理员账号被占用!'; break; break;
case -4: $error = '管理员密码长度必须在6-30个字符之间'; break; case -2:
case -5: $error = '邮箱格式不正确!'; break; $error = '管理员账号被禁止注册!';
case -6: $error = '邮箱长度必须在1-32个字符之间'; break; break;
case -7: $error = '邮箱被禁止注册!'; break; case -3:
case -8: $error = '邮箱被占用!'; break; $error = '管理员账号被占用!';
case -9: $error = '手机格式不正确!'; break; break;
case -10: $error = '手机被禁止注册!'; break; case -4:
case -11: $error = '手机号被占用!'; break; $error = '管理员密码长度必须在6-30个字符之间';
case -12: $error = '二级密码长度必须在6-30个字符之间';break; break;
default: $error = '未知错误'; case -5:
$error = '邮箱格式不正确!';
break;
case -6:
$error = '邮箱长度必须在1-32个字符之间';
break;
case -7:
$error = '邮箱被禁止注册!';
break;
case -8:
$error = '邮箱被占用!';
break;
case -9:
$error = '手机格式不正确!';
break;
case -10:
$error = '手机被禁止注册!';
break;
case -11:
$error = '手机号被占用!';
break;
case -12:
$error = '二级密码长度必须在6-30个字符之间';
break;
default:
$error = '未知错误';
} }
return $error; return $error;
} }
public function get_openid(){
public function get_openid()
{
$User = new UserApi; $User = new UserApi;
if ($_POST['id'] > 999) { if ($_POST['id'] > 999) {
$this->ajaxReturn(array('status' => 0, 'msg' => '管理员id不能大于999')); $this->ajaxReturn(array('status' => 0, 'msg' => '管理员id不能大于999'));
@ -525,12 +582,16 @@ function think_ucenter_md5($str, $key = 'ThinkUCenter'){
$return = array('status' => 1, 'data' => $qrcode); $return = array('status' => 1, 'data' => $qrcode);
$this->ajaxReturn($return); $this->ajaxReturn($return);
} }
function checkpwd(){
function checkpwd()
{
$User = new UserApi; $User = new UserApi;
$data = $User->verifyPwd($_POST['id'], $_POST['pwd']); $data = $User->verifyPwd($_POST['id'], $_POST['pwd']);
$this->ajaxReturn(array('data' => $data)); $this->ajaxReturn(array('data' => $data));
} }
function checkOpenidpic(){
function checkOpenidpic()
{
sleep(2); sleep(2);
$data = M('ucenter_member')->where(array('id' => $_REQUEST['id']))->find(); $data = M('ucenter_member')->where(array('id' => $_REQUEST['id']))->find();
if ($data['openid_sign'] == session('scene_id')) { if ($data['openid_sign'] == session('scene_id')) {
@ -540,7 +601,8 @@ function think_ucenter_md5($str, $key = 'ThinkUCenter'){
} }
} }
public function delete($id){ public function delete($id)
{
M()->startTrans(); M()->startTrans();
$res1 = M('member')->delete($id); $res1 = M('member')->delete($id);
$res2 = M('ucenter_member')->delete($id); $res2 = M('ucenter_member')->delete($id);
@ -600,15 +662,18 @@ function think_ucenter_md5($str, $key = 'ThinkUCenter'){
* 更新游戏角色数据 * 更新游戏角色数据
* @param $id * @param $id
*/ */
public function user_update($ids){ public function user_update($ids)
{
$res = D('User')->update_user_player($ids); $res = D('User')->update_user_player($ids);
$this->success("更新成功:{$res['suc']}个,失败:{$res['ero']}"); $this->success("更新成功:{$res['suc']}个,失败:{$res['ero']}");
} }
/** /**
* 更新游戏角色数据 * 更新游戏角色数据
* @param $id * @param $id
*/ */
public function age(){ public function age()
{
if (IS_POST) { if (IS_POST) {
$data = $_POST; $data = $_POST;
$a = new ToolController(); $a = new ToolController();
@ -628,7 +693,8 @@ function think_ucenter_md5($str, $key = 'ThinkUCenter'){
} }
public function update_pwd(){ public function update_pwd()
{
if (IS_POST) { if (IS_POST) {
if (strlen($_POST['new_pwd']) < 6 || strlen($_POST['new_pwd']) > 30) { if (strlen($_POST['new_pwd']) < 6 || strlen($_POST['new_pwd']) > 30) {
$this->error('密码格式不正确!'); $this->error('密码格式不正确!');
@ -648,7 +714,8 @@ function think_ucenter_md5($str, $key = 'ThinkUCenter'){
$this->display(); $this->display();
} }
public function get_server_lists($game_id=0){ public function get_server_lists($game_id = 0)
{
$server = M("server", "tab_"); $server = M("server", "tab_");
$map['game_id'] = $game_id; $map['game_id'] = $game_id;
$lists = $server->field('id,server_name,game_name')->where($map)->select(); $lists = $server->field('id,server_name,game_name')->where($map)->select();
@ -657,5 +724,4 @@ function think_ucenter_md5($str, $key = 'ThinkUCenter'){
} }
return $this->ajaxReturn(array('status' => 1, 'data' => $lists)); return $this->ajaxReturn(array('status' => 1, 'data' => $lists));
} }
} }

@ -194,6 +194,7 @@ class Notify3Controller extends BaseController
$data['type'] = 1; $data['type'] = 1;
$data['sub_type'] = 1; $data['sub_type'] = 1;
$data['target_id'] = $promote['id']; $data['target_id'] = $promote['id'];
$data['promote_id'] = $promote['id'];
$data['target_level'] = $promote['level']; $data['target_level'] = $promote['level'];
$data['target_type'] = 1; $data['target_type'] = 1;
$data['ref_id'] = $order['id']; $data['ref_id'] = $order['id'];

@ -1709,15 +1709,28 @@ class QueryController extends BaseController
$isSelf = I('is_self', 0); $isSelf = I('is_self', 0);
$roleName = I('role_name', ''); $roleName = I('role_name', '');
$userAccount = I('user_account', ''); $userAccount = I('user_account', '');
$promoteId = I('promote_id', 0);
$sdkVersion = I('sdk_version', 0); $sdkVersion = I('sdk_version', 0);
$costBegin = I('cost_begin', ''); $costBegin = I('cost_begin', '');
$costEnd = I('cost_end', ''); $costEnd = I('cost_end', '');
$sortName = trim(I('sort_name', ''));
$sort = intval(I('sort', 1));
$nowTime = date('Y-m-d');
$initBegTime = date('Y-m-d', strtotime('-6 day', strtotime($nowTime)));
$initBegTime = empty(I('begtime')) ? $initBegTime : I('begtime');
$initEndTime = $nowTime;
$initEndTime = empty(I('endtime')) ? $initEndTime : I('endtime');
$begTime = strtotime($initBegTime);
$endTime = strtotime($initEndTime);
$endTime += 3600 * 24;
$promote = $this->getLoginPromote(); $promote = $this->getLoginPromote();
$levelPromote = $this->getLevelPromote(); $levelPromote = $this->getLevelPromote();
$queryPromote = $this->getQueryPromote($levelPromote); $queryPromote = $this->getQueryPromote($levelPromote);
$records = [];
$pagination = '';
$count = 0;
if (intval($endTime - $begTime) / (24 * 3600) <= 31) {
$map[] = [ $map[] = [
'_logic' => 'or', '_logic' => 'or',
'id' => $queryPromote['id'], 'id' => $queryPromote['id'],
@ -1732,12 +1745,14 @@ class QueryController extends BaseController
$map['_string'] = '1<>1'; $map['_string'] = '1<>1';
} }
$spendMap = $map; $subMap = [];
if ($gameId != 0) { if ($gameId != 0) {
$map['game_id'] = $gameId; $map['game_id'] = $gameId;
$subMap['game_id'] = $gameId;
} }
if ($serverId != 0) { if ($serverId != 0) {
$map['server_id'] = $serverId; $map['server_id'] = $serverId;
$subMap['server_id'] = $serverId;
} }
if ($roleName != '') { if ($roleName != '') {
$map['role_name'] = ['like', '%' . $roleName . '%']; $map['role_name'] = ['like', '%' . $roleName . '%'];
@ -1750,48 +1765,46 @@ class QueryController extends BaseController
} }
if ($isSelf) { if ($isSelf) {
$map['promote_id'] = $queryPromote['id']; $map['promote_id'] = $queryPromote['id'];
$spendMap['promote_id'] = $queryPromote['id'];
} }
$subMap['create_time'] = ['between', [$begTime, $endTime - 1]];
if ($costBegin != '' || $costEnd != '') { if ($costBegin != '' || $costEnd != '') {
$having = ''; $having = '';
if ($costBegin != '' && $costEnd != '') { if ($costBegin != '' && $costEnd != '') {
$having = 'sum(cost) between ' . $costBegin . ' and ' . $costEnd; $having = 'sum(recharge_cost) between ' . $costBegin . ' and ' . $costEnd;
} elseif ($costBegin != '' && $costEnd == '') { } elseif ($costBegin != '' && $costEnd == '') {
$having = 'sum(cost) >= ' . $costBegin; $having = 'sum(recharge_cost) >= ' . $costBegin;
} elseif ($costBegin == '' && $costEnd != '') { } elseif ($costBegin == '' && $costEnd != '') {
$having = 'sum(cost) <= ' . $costEnd; $having = 'sum(recharge_cost) <= ' . $costEnd;
} }
$subMap = $map; $subQuery = M('user_play_data_count', 'tab_')->field('role_id')
$subMap['pay_status'] = 1; ->where($subMap)
$subMap['pay_game_status'] = 1; ->group('game_id,server_id,role_id')
$subQuery = M('spend', 'tab_')->field('game_player_id')->where($subMap)->group('game_player_id')->having($having)->buildSql(); ->having($having)
->buildSql();
$map['_string'] = 'role_id in (' . $subQuery . ')'; $map['_string'] = 'role_id in (' . $subQuery . ')';
} }
$query = M('user_play_info', 'tab_')->where($map)->order('play_time desc'); $spendMap['uc.create_time'] = ['between', [$begTime, $endTime - 1]];
$spendMap['_string'] = 'uc.game_id = game_id and uc.server_id = server_id and uc.role_id = role_id';
$sqlCost = M('user_play_data_count', 'tab_')->alias('uc')
->field('sum(uc.recharge_cost) cost')
->where($spendMap)
->buildSql();
$sqlCount = M('user_play_data_count', 'tab_')->alias('uc')
->field('sum(uc.recharge_count) count')
->where($spendMap)
->buildSql();
$spendMap['uc.create_time'] = ['between', [strtotime(date('Y-m-d 00:00:00')), strtotime(date('Y-m-d 23:59:59'))]];
$sqlTodayCost = M('user_play_data_count', 'tab_')->alias('uc')
->field('sum(uc.recharge_count) count')
->where($spendMap)
->buildSql();
$query = M('user_play_info', 'tab_')
->field("*,$sqlCost as cost,$sqlCount as count,$sqlTodayCost as today_cost")
->where($map)
->order('play_time desc');
list($roles, $pagination, $count) = $this->paginate($query); list($roles, $pagination, $count) = $this->paginate($query);
$roleIds = array_column($roles, 'role_id');
$spendMap['pay_status'] = 1;
$spendMap['pay_game_status'] = 1;
if (count($roleIds) > 0) {
$spendMap['game_player_id'] = ['in', $roleIds];
} else {
$spendMap['_string'] = '1<>1';
}
$allRecharges = M('spend', 'tab_')->field('count(*) count, sum(cost) cost, game_player_id')->where($spendMap)->group('game_player_id')->select();
$allRecords = [];
foreach ($allRecharges as $recharge) {
$allRecords[$recharge['game_player_id']] = $recharge;
}
$spendMap['pay_time'] = ['between', [strtotime(date('Y-m-d 00:00:00')), strtotime(date('Y-m-d 23:59:59'))]];
$todayRecharges = M('spend', 'tab_')->field('sum(cost) cost, game_player_id')->where($spendMap)->group('game_player_id')->select();
$todayRecords = [];
foreach ($todayRecharges as $recharge) {
$todayRecords[$recharge['game_player_id']] = $recharge;
}
$records = [];
foreach ($roles as $role) { foreach ($roles as $role) {
$records[] = [ $records[] = [
'user_account' => encryption($role['user_account']), 'user_account' => encryption($role['user_account']),
@ -1801,9 +1814,9 @@ class QueryController extends BaseController
'role_level' => $role['role_level'], 'role_level' => $role['role_level'],
'server_id' => $role['server_id'], 'server_id' => $role['server_id'],
'server_name' => $role['server_name'], 'server_name' => $role['server_name'],
'recharge_cost' => isset($allRecords[$role['role_id']]) ? round(floatval($allRecords[$role['role_id']]['cost']), 2) : 0, 'recharge_cost' => $role['cost'],
'recharge_count' => isset($allRecords[$role['role_id']]) ? $allRecords[$role['role_id']]['count'] : 0, 'recharge_count' => $role['count'],
'recharge_cost_today' => isset($todayRecords[$role['role_id']]) ? round(floatval($todayRecords[$role['role_id']]['cost']), 2) : 0, 'recharge_cost_today' => $role['cost_today'],
'play_time' => $role['play_time'], 'play_time' => $role['play_time'],
'play_ip' => $role['play_ip'], 'play_ip' => $role['play_ip'],
'promote_id' => $role['promote_id'], 'promote_id' => $role['promote_id'],
@ -1812,15 +1825,16 @@ class QueryController extends BaseController
'unlogin_day' => intval((strtotime(date('Y-m-d 00:00:00')) - strtotime(date('Y-m-d 00:00:00', $role['play_time']))) / (24 * 3600)) 'unlogin_day' => intval((strtotime(date('Y-m-d 00:00:00')) - strtotime(date('Y-m-d 00:00:00', $role['play_time']))) / (24 * 3600))
]; ];
} }
}
$games = $this->getGamesByPromote($promote); $games = $this->getGamesByPromote($promote);
$this->assign('games', $games); $this->assign('games', $games);
$this->assign('promotes', $promotes);
$this->assign('groupPromotes', $groupPromotes);
$this->assign('records', $records); $this->assign('records', $records);
$this->assign('pagination', $pagination); $this->assign('pagination', $pagination);
$this->assign('count', $count); $this->assign('count', $count);
$this->assign('initBegTime', $initBegTime);
$this->assign('initEndTime', $initEndTime);
$this->display('userRecharges'); $this->display('userRecharges');
} }
@ -2084,4 +2098,31 @@ class QueryController extends BaseController
$this->ajaxReturn($data); $this->ajaxReturn($data);
} }
public function userPlayDataCount()
{
$time = strtotime(date('Y-m-d 00:00:00',time() - (3600 * 24)));
$spendMap['pay_status'] = 1;
$spendMap['pay_game_status'] = 1;
$spendMap['game_player_id'] = ['gt', 0];
$spendMap['pay_time'] = ['between', [$time, strtotime(date('Y-m-d 23:59:59', $time))]];
$field = 'FROM_UNIXTIME(pay_time,"%Y-%m-%d") as day,game_id,server_id,game_player_id,sum(pay_amount) as recharge_cost,count(id) as recharge_count';
$spendCostData = M('spend', 'tab_')->field($field)
->where($spendMap)
->group('day,game_player_id,server_id,game_id')
->select();
$data = [];
foreach ($spendCostData as $list) {
$save['game_id'] = $list['game_id'];
$save['server_id'] = $list['server_id'];
$save['role_id'] = $list['game_player_id'];
$save['recharge_cost'] = $list['recharge_cost'];
$save['recharge_count'] = $list['recharge_count'];
$save['create_time'] = strtotime($list['day']);
$data[] = $save;
}
M('user_play_data_count', 'tab_')->addAll($data);
}
} }

@ -1,6 +1,7 @@
<extend name="Public/promote_base"/> <extend name="Public/promote_base"/>
<block name="css"> <block name="css">
<link href="__CSS__/20180207/account.css" rel="stylesheet" > <link href="__CSS__/20180207/account.css" rel="stylesheet" >
<link href="__STATIC__/icons_alibaba/iconfont.css?v=1.3" rel="stylesheet">
<style> <style>
.form-group { .form-group {
float: left; float: left;
@ -9,6 +10,16 @@
.form-group label { .form-group label {
line-height: 34px; line-height: 34px;
height: 34px; height: 34px;
}
.iconsort {
font-size: 1rem;
}
.normal_table tr .sort {
color: #145ccd;
cursor: pointer;
}
.trunk-search .select-time .txt {
width: 100px;
} }
</style> </style>
</block> </block>
@ -60,7 +71,19 @@
<label> ~ </label> <label> ~ </label>
<input type="text" class="txt float-input" name="cost_end" style="width: 50px" value="{:I('cost_end')}" > <input type="text" class="txt float-input" name="cost_end" style="width: 50px" value="{:I('cost_end')}" >
</div> </div>
<div class="form-group normal_space fr" style="display: flex;">
<label class="form-title select-title" style="position: relative;">充值时间:</label>
<div class="select-time">
<input type="text" readonly id="sdate" class="txt" name="begtime" placeholder="开始时间" value="{$initBegTime}">
</div>
<label class="form-title select-title zhi_color">&nbsp;&nbsp;</label>
<div class="select-time">
<input type="text" readonly id="edate" class="txt" name="endtime" placeholder="结束时间" value="{$initEndTime}">
</div>
</div>
<div class="form-group normal_space"> <div class="form-group normal_space">
<input type="hidden" name="sort_name" id="sort_name" value="{:I('sort_name', '')}">
<input type="hidden" name="sort" id="sort" value="{:I('sort', 1)}">
<input type="submit" class="submit" value="查询"> <input type="submit" class="submit" value="查询">
</div> </div>
<div class="form-group normal_space"> <div class="form-group normal_space">
@ -77,10 +100,50 @@
<th>游戏区服</th> <th>游戏区服</th>
<th>角色名</th> <th>角色名</th>
<th>等级</th> <th>等级</th>
<th>充值总额</th> <th class="sort" sort-name="recharge_cost">充值总额
<th>充值次数</th> <if condition="'recharge_cost' == I('sort_name', '')">
<th>今日充值</th> <if condition="1 == I('sort', 1)">
<th>未登录天数</th> <i class="iconfont iconsort-down"></i>
<else/>
<i class="iconfont iconsort-up"></i>
</if>
<else/>
<i class="iconfont iconsort"></i>
</if>
</th>
<th class="sort" sort-name="recharge_count">充值次数
<if condition="'recharge_count' == I('sort_name', '')">
<if condition="1 == I('sort', 1)">
<i class="iconfont iconsort-down"></i>
<else/>
<i class="iconfont iconsort-up"></i>
</if>
<else/>
<i class="iconfont iconsort"></i>
</if>
</th>
<th class="sort" sort-name="recharge_cost_today">今日充值
<if condition="'recharge_cost_today' == I('sort_name', '')">
<if condition="1 == I('sort', 1)">
<i class="iconfont iconsort-down"></i>
<else/>
<i class="iconfont iconsort-up"></i>
</if>
<else/>
<i class="iconfont iconsort"></i>
</if>
</th>
<th class="sort" sort-name="unlogin_day">未登录天数
<if condition="'unlogin_day' == I('sort_name', '')">
<if condition="1 == I('sort', 1)">
<i class="iconfont iconsort-down"></i>
<else/>
<i class="iconfont iconsort-up"></i>
</if>
<else/>
<i class="iconfont iconsort"></i>
</if>
</th>
<th>最后登录时间</th> <th>最后登录时间</th>
<th>组长|推广员</th> <th>组长|推广员</th>
</tr> </tr>
@ -124,11 +187,41 @@
</div> </div>
</block> </block>
<block name="script"> <block name="script">
<link href="__STATIC__/datetimepicker/css/datetimepicker.css" rel="stylesheet" type="text/css">
<link href="__STATIC__/datetimepicker/css/dropdown.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="__STATIC__/datetimepicker/js/bootstrap-datetimepicker.min.js"></script>
<script type="text/javascript" src="__STATIC__/datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js"
charset="UTF-8"></script>
<script type="text/javascript" src="__JS__/20170831/select2.min.js"></script> <script type="text/javascript" src="__JS__/20170831/select2.min.js"></script>
<script type="text/javascript" src="__JS__/common.js"></script> <script type="text/javascript" src="__JS__/common.js"></script>
<script type="text/javascript"> <script type="text/javascript">
$(function(){ $(function(){
$(".select_gallery").select2(); $(".select_gallery").select2();
var date = "{$setdate}";
$('#sdate').datetimepicker({
format: 'yyyy-mm-dd',
language: "zh-CN",
minView: 2,
autoclose: true,
scrollMonth: false,
scrollTime: false,
scrollInput: false,
endDate: date
});
$('#edate').datetimepicker({
format: 'yyyy-mm-dd',
language: "zh-CN",
minView: 2,
autoclose: true,
pickerPosition: 'bottom-left',
scrollMonth: false,
scrollTime: false,
scrollInput: false,
endDate: date
});
var gameId = $('#game-select').val(); var gameId = $('#game-select').val();
var defaultServerId = $('#server-select').attr('data-server'); var defaultServerId = $('#server-select').attr('data-server');
getGameServers(gameId, defaultServerId) getGameServers(gameId, defaultServerId)
@ -160,7 +253,18 @@ $(function(){
} }
var promoteUrl = "{:U('Query/getSubPromotes')}" var promoteUrl = "{:U('Query/getSubPromotes')}"
initPromoteSelect(promoteUrl) initPromoteSelect(promoteUrl);
$('.sort').click(function () {
var element = $(this);
var sortName = element.attr('sort-name');
var sort = parseInt($('#sort').val());
sort = (sort === 1) ? 2 : 1;
$('#sort').val(sort);
$('#sort_name').val(sortName);
$('form').trigger('submit');
});
}) })
</script> </script>
</block> </block>

@ -506,3 +506,25 @@ UPDATE `platform_new`.`tab_quick_menu` SET `url` = '/index.php?s=/Home/TestResou
-- --
ALTER TABLE `tab_withdraw` ALTER TABLE `tab_withdraw`
ADD INDEX `widthdraw_number`(`widthdraw_number`); ADD INDEX `widthdraw_number`(`widthdraw_number`);
--
CREATE TABLE `tab_user_play_data_count` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`game_id` int(11) NOT NULL DEFAULT '0' COMMENT '游戏id',
`server_id` varchar(255) NOT NULL COMMENT '区服id',
`role_id` varchar(255) NOT NULL COMMENT '角色id',
`recharge_cost` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '充值总额',
`recharge_count` int(10) NOT NULL DEFAULT '0' COMMENT '充值次数',
`create_time` int(10) NOT NULL DEFAULT '0' COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `recharge_cost` (`recharge_cost`) USING BTREE,
KEY `recharge_count` (`recharge_count`) USING BTREE,
KEY `search` (`game_id`,`server_id`,`role_id`) USING BTREE,
KEY `create_time` (`create_time`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
ALTER TABLE `tab_user_play_data_count`
ADD INDEX `search`(`game_id`, `server_id`, `role_id`) USING BTREE,
ADD INDEX `create_time`(`create_time`) USING BTREE;
ADD INDEX `recharge_cost`(`recharge_cost`) USING BTREE,
ADD INDEX `recharge_count`(`recharge_count`) USING BTREE;

@ -1,10 +1,10 @@
@font-face {font-family: "iconfont"; @font-face {font-family: "iconfont";
src: url('iconfont.eot?t=1570870899994'); /* IE9 */ src: url('iconfont.eot?t=1574318572037'); /* IE9 */
src: url('iconfont.eot?t=1570870899994#iefix') format('embedded-opentype'), /* IE6-IE8 */ src: url('iconfont.eot?t=1574318572037#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAVUAAsAAAAADBAAAAUEAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCELAqJGIcgATYCJAMwCxoABCAFhG0HgTsbNQoRFaSZkH1xwJv6gmNIQk1g8ltlso971mEXikzzP0cQrensPSQpkwKU8QWyZWFI1YgIV0Blqmt0hfkvGJGDPGvSVAtI7QFI1ta9YAQAooxJVvi6bJlrytZHmJvybZefHrjA5ZkN4df/jbk69ZD0T6+tl7uJKuKeeDSWiJJ4hCTi2TIhWgiRh23BdhULqzD7pQ8T6LFAGbJv6+wNVDlxVCDujtIjgBqKyDOkoekviQtziAcgaaYUwjqAe/vv4x80gwqSIgPxqGOaTTSYP4MXaij2vwPBaBxgzaVwu4wMm0BOfJCZJ0Dd5k2onk9nolsAQ/KGKBXyTOaZ8XOJ5/jzohdq//9X4JKOUcUZhZNRPwzhxE3lvS8/kMmVCr1C0tDU6uSfV4Lw9CHzpaWXCrR12a2IyKmkESWVDKKgMkb0UosjgloCkahxgll1ISKa1EWIFj9qy/UM6fApYAzEEUB8Mua5K0lm0LNiSENCl5+Tk0tYmDnJThRWX5SRmfMq6+CuKKlqT49tYEeEWL59KbUZiJ0WJra0NoSEtzJeZ+3fFiZW7OiwDe2JkSp3/f0hn5s7P5WXt5DXtxBva+Dx8StKayk5SaMX4a2p3NH5PGxQTEFaGx5Bp2W50gIh7oKkQamt+PXoZkyBTpXhvJdGPnpRaWO2JLUZ6x6dj7Wk8dFL+XjrGXqeESnkZcznBi0r4GGSFfEhJxQG7u97Hxz43Lnjd3h4Rbl8HRIs7+/TWTLCvMyFVzjPOo2NwawkNnoDi3kbn7boUceR6Bgk7aHP4bOg9yDvw8OzvlN3kA6tPbgs7Y6ZjzaIdzAfKkb1wewtm/+xcrBiuiq0s+zX53j/L5rimh7MHpIaErfwFEFNrJh29OXrYgFJBhhrJgsSHyBQXFbWKirWZnYrFtASgDcUpUQkmMxNFjxL+ery2NwR8ysTw5d5P/DsrRscGZ9tvfUM/g/VVI+JXZIYra6R2NmULtFWUx3bAYaqiovJ4erhZI71anVyeGjAZPUE8c8f4oTEJjEc/gCmx2oV6M4Ois4KTtDBK2AXdqYOC0+pdj6Y/ESd1LmTLUj2TNubSfGGDPf3GTXyJl8PNPOPlsk+k7oIU1OEE1lZJwiATWI4/J3nlDY3FaVp+oSk/v4kdBJ4lJDEivo06Vr6+3B7G4Du/VSj4rZyukRRC35mFRjhBxrXXIo+Q2kUli5zXP8h2Sg7r/uZJPTcOEgV3/s+jM34K5XpeFnzvTR0npW7GBGa66EpUdh6JlgLLsi/dhHty99zo0cK9Gk7jRoTemSB7r8w4l4XvvHCvQlN4z4kDfOQaVqk5sxNKPRqQ6lpC3pssLu816hzgIqcAViXABCGdEEy4AsyQzaoOfMuFCa8hdJQoNDjEuG6Ya9lfNDDK6MSXEAfgUxOVsXlwen7ha4FxUG7Lf9DrlQHUz9G2z4xITdxSt25WcSC5RzhAx6HIWQonLdopF9FymYYLPVGvcnx7MEroxJcgD4CMjlZs7o8xH7/C10LijOm/Jj+IVfaPpj0xgLUT08qNOVQBtedmwlrtMDeeucIPlgKg2zOoND7bdFIb63QWDYGtpQt6um798U9bj+8phGfzhwlumFatuN6Pn97vlXJHSi5PdKhqXRac3IvCY5Ho6UQbt4Hro1uHSa3tHz7S003LsctND2W0GpniE3Ap0jp06P+N8WYaH05r1W5hOP91nftBKucnQEAAAA=') format('woff2'), url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAXEAAsAAAAADNQAAAV3AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCEXgqJfIdpATYCJAM8CyAABCAFhG0HgVgb2QrIDiUFOVaVJ6RZZvD85191X1W1MLCyWTi1uxfA72xhR8yYA/oz62izPfv/9736O9OFkN1HsdMmabbwgp1H8tfnH9TVfr/6xRANSRdv9HL3RO8YFhWLNH5CPDGEJOKRoTOEaClFTMKz10xIKn+FiY9DAD/5NMbXu+/g0RCBgY8TQGZOozxExNIwBSGCN9mtuNQgW3HhVevULWCL+/fyg2aJAIVLw0/qH+sjQnebzt7aczxG65lY3eUAi6tAA7UABuS0Mu8oaL+uFg7/7n0MCwGSSYBD2WKX2e0dRR2JV2tfN+vs7ThgY5emrYXWNbaeo3FLIZkU0sSaYc36Bx6gMbhxEUZQePDiw0+AICEQNzCD5LxRHwYbMxEabEEMWCkQN1gZEBdYOxIRho7CRAh0FCEKLAHEA7YbiBdsDxLhg86GRPihsycSAOsFJAjWG30IARCxL8kHyARkECAPYD7T1ZU4xa65pFJUlGJnJien5OYGs6Mmx8Aoja8ZTF4Wd+ZRnmvr43aR0w9zzaYHxevPgrHORcdvuOALTZyPqgifepBjNj9sEzn7ON+15dH44bAqJXXngrT03WlD1yQO7k4dMm7thv3r1RhdmziwIGXyqjTpMWX1hoNBPk6K9IURTN2V1WP9gWDF5H1WA3XOxmDarCY9vnb/nuLg9fu8tuIqa//C9HgtntZO7wVRvt3p/lWpmKGrUwOhazPklDUjnzwZ/fTpmOfPxz17VmroYz0aLX3yhIYKUtODleeww+exeXI4NBLvYGZ652NWfe4MEaf4Fn4c88yeFMcgxqZhWkHESX31GP3smTn06nPf4NJortrwvNuQ1oAsb4zX846x3G3P/g8nhj3TK7Tq4rdvG+woaS5sHhAzorhF0erguqxmax2Z9ubHusxiH6R65zFNd8vau3HjgbyCC3abdZktWbxXWdYHZq/1mZd1XuNJJRfvSt1LL98oSf+cVuLcQrp050C1jXP22LaL+YsLLmzbLsTbMl5wcPu21C5wfeu6dWHTG6eHETHnN3dPj3W7cvRyyP//5rIQm1pq2C3wrOEQd/8hB20zUahUBv3GGW2IlNP08uOzH25mtz3fyrR4vP2Np3r1puF/Nm2X/X88bbmTHSi3SxZBt5tseFYadIuUQTvXlgTVfmXLFoU0NadQw91vNrp3r2FprL1/7pVTc6EpSvfP1Yvbx2rvUH8f1rwDcB7poxq5EddUvu7hp++Ee+o3N7Nug36pYyoiends/KyX6QTSPVRbAAhQ3XULlX/0XP3LOgxx8idOi+/81xv9Z1vw8t/I91TqeAaGaYcXBZWl35FUcZrZK5weMdvJN49AgAitcJ+YHPBLEThUlMzD4Xha5Y4geEkLQeEhDzReSq3GWQsuArSCGy/dwE8N/a4OkIIFhxgfUM1sDYQoR0ER5iZooty2GucDcJHOB3ATFQ78DJXkWwYoF+bvNR/zDhZRoAwxQdeIkelEeZ1HYuoqvBVV3LCx2LJZJWpR35hs7Ic1bHVxhl1MWzoOQcTSVdRXexpWFB0Zll6EBaep5DhGx2YNMdUHNRV0FaLohQWGxwEjgghQBoIhoKNBbO8OUanfHwmG4qLAYxWMuks6FoyFDds5ogVNaV7B2s/UKo06lZ42xVBa4ug1BARZdNRRQfTVczCK1OkgDPVBRWAEHJoiNagx6EgzfTZS1Ww6PFcf9xWAH/6kiCjRYsQlbvGIV3zil4AEJSRhiUiUlBiv0VKm0RLMSl1eK5d0jaZmqKsawhQlbHuo5LJwOkWjoquHH3JahNESdwiwaGOmazcRmCUoOEadpu3a2abLWzhT2mihRm9DKQux51hOpNWmiaiXaOF+rmtEPhitmzjYdgAA') format('woff2'),
url('iconfont.woff?t=1570870899994') format('woff'), url('iconfont.woff?t=1574318572037') format('woff'),
url('iconfont.ttf?t=1570870899994') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ url('iconfont.ttf?t=1574318572037') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
url('iconfont.svg?t=1570870899994#iconfont') format('svg'); /* iOS 4.1- */ url('iconfont.svg?t=1574318572037#iconfont') format('svg'); /* iOS 4.1- */
} }
.iconfont { .iconfont {
@ -55,6 +55,18 @@
content: "\e82f"; content: "\e82f";
} }
.iconsort:before {
content: "\e842";
}
.iconsort-down:before {
content: "\e843";
}
.iconsort-up:before {
content: "\e844";
}
.iconicon-test:before { .iconicon-test:before {
content: "\e63c"; content: "\e63c";
} }

File diff suppressed because one or more lines are too long

@ -50,6 +50,15 @@ Created by iconfont
<glyph glyph-name="reply" unicode="&#59439;" d="M398.208 593.088V832L0 413.888l398.208-418.176V240.64c284.48 0 483.584-95.552 625.792-304.64-56.896 298.688-227.584 597.312-625.792 657.088z" horiz-adv-x="1024" /> <glyph glyph-name="reply" unicode="&#59439;" d="M398.208 593.088V832L0 413.888l398.208-418.176V240.64c284.48 0 483.584-95.552 625.792-304.64-56.896 298.688-227.584 597.312-625.792 657.088z" horiz-adv-x="1024" />
<glyph glyph-name="sort" unicode="&#59458;" d="M64 448l448 448 448-448H64z m896-128l-448-448-448 448h896z" horiz-adv-x="1024" />
<glyph glyph-name="sort-down" unicode="&#59459;" d="M64 576l448-448 448 448z" horiz-adv-x="1024" />
<glyph glyph-name="sort-up" unicode="&#59460;" d="M960 192L512 640l-448-448z" horiz-adv-x="1024" />
<glyph glyph-name="icon-test" unicode="&#58940;" d="M192 448c0 141.152 114.848 256 256 256s256-114.848 256-256-114.848-256-256-256-256 114.848-256 256z m710.624-409.376l-206.88 206.88A318.784 318.784 0 0 1 768 448c0 176.736-143.264 320-320 320S128 624.736 128 448s143.264-320 320-320a318.784 318.784 0 0 1 202.496 72.256l206.88-206.88 45.248 45.248z" horiz-adv-x="1024" /> <glyph glyph-name="icon-test" unicode="&#58940;" d="M192 448c0 141.152 114.848 256 256 256s256-114.848 256-256-114.848-256-256-256-256 114.848-256 256z m710.624-409.376l-206.88 206.88A318.784 318.784 0 0 1 768 448c0 176.736-143.264 320-320 320S128 624.736 128 448s143.264-320 320-320a318.784 318.784 0 0 1 202.496 72.256l206.88-206.88 45.248 45.248z" horiz-adv-x="1024" />

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Loading…
Cancel
Save