Merge branch 'dev' of 47.111.118.107:/srv/git/platform into dev

master
ELF 5 years ago
commit 2bf23b5d81

@ -254,13 +254,15 @@ function all_pay_way($type=false)
$pay_way[1]=array('key'=>-1,'value'=>"绑币");
$pay_way[2]=array('key'=>1,'value'=>"支付宝");
$pay_way[3]=array('key'=>2,'value'=>"微信");
$pay_way[7]=array('key'=>8,'value'=>'金猪');
$pay_way[9]=array('key'=>9,'value'=>"双乾支付-支付宝");
$pay_way[10]=array('key'=>10,'value'=>"双乾支付-银联");
// $pay_way[3]=array('key'=>3,'value'=>'微信APP');
// $pay_way[4]=array('key'=>4,'value'=>'威富通');
/* $pay_way[4]=array('key'=>5,'value'=>'聚宝云'); */
// $pay_way[5]=array('key'=>6,'value'=>'汇付宝');
/* $pay_way[6]=array('key'=>7,'value'=>"苹果支付");
*/
$pay_way[7]=array('key'=>8,'value'=>'金猪');
$pay_way[15]=array('key'=>15,'value'=>'双乾支付-快捷');
return $pay_way;
}
@ -1064,7 +1066,7 @@ function get_promote_parent($promote_id,$field='account'){
function get_promote_parent_acc($promote_id){
$Promote = M('promote','tab_');
$data = $Promote->field('account,parent_id')->find($promote_id);
$data = $Promote->field('account,parent_id,chain')->find($promote_id);
if(empty($data)){
return $data["account"]="官方渠道";exit;
@ -1446,6 +1448,8 @@ function cash_pay_way()
/* $pay_way[6]=array('key'=>7,'value'=>"苹果支付");
*/
$pay_way[7]=array('key'=>8,'value'=>'金猪');
$pay_way[9]=array('key'=>9,'value'=>"双乾支付-支付宝");
$pay_way[10]=array('key'=>10,'value'=>"双乾支付-银联");
$pay_way[15]=array('key'=>15,'value'=>'双乾支付-快捷');
return $pay_way;
}
@ -1493,6 +1497,18 @@ function getPayType($type) {
case 6:
$return = '竣付通';
break;
case 7:
$return = '金猪';
break;
case 9:
$return = '双乾支付-支付宝';
break;
case 10:
$return = '双乾支付-银联';
break;
case 15:
$return = '双乾支付-快捷';
break;
default:
$return = '未知';
break;

@ -894,27 +894,56 @@ public function auto_rrdae(){
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();
$res = M('user_play_data_count', 'tab_')->where(array('create_time' => $time))->find();
if (empty($res)) {
$map['pay_time'] = ['between', [$time, strtotime(date('Y-m-d 23:59:59', $time))]];
$this->userPlayDataCountByMap($map);
}
}
$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;
//根据时间统计玩家充值--初始化
public function userPlayDataCountInitial()
{
$res = M('user_play_data_count', 'tab_')->order('id asc')->find();
if (empty($res)) {
$time = strtotime(date('Y-m-d 00:00:00', time()));
$map['pay_time'] = ['lt', $time];
$this->userPlayDataCountByMap($map);
echo '初始化成功';
} else {
echo '表存在记录,无法初始化';
}
}
private function userPlayDataCountByMap($map)
{
if (isset($map['pay_time'])) {
$map['pay_status'] = 1;
$map['pay_game_status'] = 1;
$map['game_player_id'] = ['gt', 0];
$field = 'FROM_UNIXTIME(pay_time, "%Y-%m-%d") as day,promote_id,user_id,game_id,server_id,game_player_id,sum(pay_amount) as recharge_cost,count(id) as recharge_count';
$spendData = M('spend', 'tab_')->field($field)
->where($map)
->group('day,game_player_id,server_id,game_id,user_id,promote_id')
->select();
if (!empty($spendData)) {
$data = [];
foreach ($spendData as $list) {
$save['promote_id'] = $list['promote_id'];
$save['user_id'] = $list['user_id'];
$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);
}
}
M('user_play_data_count', 'tab_')->addAll($data);
}
}

@ -94,7 +94,7 @@ class ConsoleController extends Think {
*/
public function modifyLogin()
{
$start_time = $current_time = strtotime(date("Y-m-d"));
$start_time = $current_time = strtotime(date("Y-m-d"))-86400;
for ($i=$start_time; $i<=$current_time; $i+=86400) {
$end_time = $i+86400;
$result = M()->query("SELECT

@ -67,6 +67,7 @@ class DepositController extends ThinkController {
unset($_REQUEST['pay_way']);
}
if(isset($_REQUEST['pay_status'])){
$map['pay_status']=$_REQUEST['pay_status'];
unset($_REQUEST['pay_status']);

@ -5,6 +5,17 @@ use Think\Controller;
class ExportController extends Controller
{
/**
* ExportController constructor.
*/
public function __construct()
{
parent::__construct();
set_time_limit(0);
ini_set('memory_limit', '512M');
}
public function exportExcel($expTitle, $expCellName, $expTableData)
{
$xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//文件名称
@ -87,7 +98,7 @@ class ExportController extends Controller
}
$xlsData = M('user_play_info', 'tab_')
->where($map)
->order('id desc')
->order('play_time desc')
->select();
break;
case 2:
@ -186,185 +197,357 @@ class ExportController extends Controller
break;
case 3:
if($_REQUEST['type']==2){
$xlsCell = array(
array('id', L('Account_number_ID')),
array('register_type', L('Third_party_source'), "get_registertype", '*'),
array('account', "玩家账号"),
array('promote_account', L('Subordinate_channel')),
array('balance', "账户平台币"),
array('recharge_total', "累计充值"),
array('gold_coin', "金币"),
array('alipay', "绑定支付宝"),
array('small_count', "小号"),
array('vip_level', "VIP等级"),
array('register_time', L('Registration_time'), 'time_format', '*'),
array('login_time', "最后登录时间", 'time_format', '*'),
array('register_ip', L('Register_iP')),
array('lock_status', L('Account_status'), 'get_info_status', '*', '4'),
);
$map['tab_user.register_type']= ['in','3,4,5,6'];
// $xlsCell = array(
// array('id', L('Account_number_ID')),
// array('register_type', L('Third_party_source'), "get_registertype", '*'),
// array('account', "玩家账号"),
// array('promote_account', L('Subordinate_channel')),
// array('balance', "账户平台币"),
// array('recharge_total', "累计充值"),
// array('gold_coin', "金币"),
// array('alipay', "绑定支付宝"),
// array('small_count', "小号"),
// array('vip_level', "VIP等级"),
// array('register_time', L('Registration_time'), 'time_format', '*'),
// array('login_time', "最后登录时间", 'time_format', '*'),
// array('register_ip', L('Register_iP')),
// array('lock_status', L('Account_status'), 'get_info_status', '*', '4'),
// );
$field = 'a.id,a.account,a.id as get_registertype,a.promote_account,a.balance,IFNULL(sum(ss.pay_amount),0) as recharge_total,
a.gold_coin,a.alipay,a.id as small_count,a.id as vip_level,a.register_type
,a.register_ip,a.login_time,a.device_number,a.lock_status,check_status,a.age_status,a.register_way,
a.register_type';
$xlsCell = [L('Account_number_ID'),"第三方来源","绑定账号",L('Subordinate_channel'), "账户平台币"
, "累计充值", "金币", "绑定支付宝", "小号", "VIP等级", L('Registration_time'),
L('Register_iP'), "最后登录时间","设备号", L('Account_status'),"拉黑状态"];
// $map['tab_user.register_type']= ['in','3,4,5,6'];
}else{
$xlsCell = array(
array('id', L('Account_number_ID')),
array('account', "玩家账号"),
array('promote_account', L('Subordinate_channel')),
array('balance', "账户平台币"),
array('recharge_total', "累计充值"),
array('gold_coin', "金币"),
array('alipay', "绑定支付宝"),
array('small_count', "小号"),
array('vip_level', "VIP等级"),
array('register_type', "注册方式"),
array('register_time', L('Registration_time'), 'time_format', '*'),
array('login_time', "最后登录时间", 'time_format', '*'),
array('register_ip', L('Register_iP')),
array('lock_status', L('Account_status'), 'get_info_status', '*', '4'),
);
// $xlsCell = array(
// array('id', L('Account_number_ID')),
// array('account', "玩家账号"),
// array('promote_account', L('Subordinate_channel')),
// array('balance', "账户平台币"),
// array('recharge_total', "累计充值"),
// array('gold_coin', "金币"),
// array('alipay', "绑定支付宝"),
// array('small_count', "小号"),
// array('vip_level', "VIP等级"),
// array('register_type', "注册方式"),
// array('register_time', L('Registration_time'), 'time_format', '*'),
// array('login_time', "最后登录时间", 'time_format', '*'),
// array('register_ip', L('Register_iP')),
// array('lock_status', L('Account_status'), 'get_info_status', '*', '4'),
// );
$field = 'a.id,a.account,a.promote_account,a.balance,IFNULL(sum(ss.pay_amount),0) as recharge_total,
a.gold_coin,a.alipay,a.id as small_count,a.id as vip_level,a.register_type,a.register_time
,a.register_ip,a.login_time,a.device_number,a.lock_status,check_status,a.age_status,a.register_way,
a.register_type';
$xlsCell = [L('Account_number_ID'),"玩家账号",L('Subordinate_channel'), "账户平台币"
, "累计充值", "金币", "绑定支付宝", "小号", "VIP等级", "注册方式", L('Registration_time'),
L('Register_iP'), "最后登录时间","设备号", L('Account_status'),"拉黑状态"];
$map['tab_user.register_type']=['in','1,2'];
$map['tab_user.register_type']=['in','0,1,2,7'];
}
if (isset($_REQUEST['user_id'])) {
$map['tab_user.id'] = $_REQUEST['user_id'];
unset($_REQUEST['user_id']);
}
if (isset($_REQUEST['device_number'])) {
$map['tab_user.device_number'] = $_REQUEST['device_number'];
unset($_REQUEST['device_number']);
}
$hav = '';
if ($_REQUEST['promote_id'] != '') {
if($_REQUEST['promote_id']=='UC'){
$map['tab_user.promote_account'] = 'UC用户';
} else if ($_REQUEST['promote_id']==0) {
$map['tab_user.promote_id'] = 0;
} else{
if ($_REQUEST['promote_id'] == 'UC') {
$maps['tab_user.promote_account'] = 'UC用户';
$hav .= "tab_user.promote_account = 'UC用户' ";
} else if ($_REQUEST['promote_id'] == 0) {
$maps['tab_user.promote_id'] = 0;
$hav .= "tab_user.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['tab_user.promote_id'] = ['in', implode(',', array_column($promoter_ids, 'id'))];
$maps['tab_user.promote_id'] = ['in', implode(',', array_column($promoter_ids, 'id'))];
$hav .= "tab_user.promote_id in (" . implode(',', array_column($promoter_ids, 'id')) . ") ";
$spendprom = " AND ss.promote_id IN (" . implode(',', array_column($promoter_ids, 'id')) . ") ";
}
}
}
$game_map = "";
if (isset($_REQUEST['game_name'])) {
$game_map .= " and tab_user_play.game_id in (".implode(',', array_column(getGameByName($_REQUEST['game_name'], $_REQUEST['game_type']), 'id')).")";
}
$game_play_map = '';
if (isset($_REQUEST['server_name'])) {
$game_play_map .= " and tab_user_play_info.server_name = '{$_REQUEST['server_name']}' ";
}
// if (isset($_REQUEST['promote_account'])) {
// $map['promote_id'] = get_promote_id(trim(I('promote_account')));
// unset($_REQUEST['promote_account']);
// }
if (isset($_REQUEST['register_way'])) {
if($_REQUEST['type']==1) {
if (I('type', 1) == 1) {
if (isset($_GET['register_way'])) {
if ($_GET['register_way'] == 1) {
empty($hav) || $hav .= ' AND ';
$hav .= ' tab_user.register_type in (0,1)';
$maps['tab_user.register_type'] = ['in',[0,1]];
} elseif($_GET['register_way'] == 7){
empty($hav) || $hav .= ' AND ';
$hav .= ' tab_user.register_type in(7)';
$maps['tab_user.register_type'] = 7;
}else {
empty($hav) || $hav .= ' AND ';
$hav .= ' tab_user.register_type in(2)';
$maps['tab_user.register_type'] = 2;
empty($hav) || $hav .= ' AND ';
$hav .= ' tab_user.register_type in (1)';
$maps['tab_user.register_type'] = 1;
} elseif ($_GET['register_way'] == 7) {
empty($hav) || $hav .= ' AND ';
$hav .= ' tab_user.register_type in(7)';
$maps['tab_user.register_type'] = 7;
} else {
empty($hav) || $hav .= ' AND ';
$hav .= ' tab_user.register_type in(2)';
$maps['tab_user.register_type'] = 2;
}
} else {
$map['register_way'] = I('register_way');
unset($_REQUEST['register_way']);
empty($hav) || $hav .= ' AND ';
$hav .= ' tab_user.register_type in (1,2,7)';
$maps['tab_user.register_type'] = ['in', [1, 2, 7]];
}
} else {
if (isset($_GET['register_type'])) {
empty($hav) || $hav .= ' AND ';
$hav .= ' tab_user.register_type = ' . $_GET['register_type'];
$maps['tab_user.register_type'] = $_GET['register_type'];
} else {
empty($hav) || $hav .= ' AND ';
$hav .= ' tab_user.register_type in (0,3,4,5,6)';
$maps['tab_user.register_type'] = ['in', [0, 3, 4, 5, 6]];
}
}
if (isset($_REQUEST['register_type'])) {
$map['register_type'] = I('register_type');
unset($_REQUEST['register_type']);
if (isset($_REQUEST['user_id'])) {
empty($hav) || $hav .= ' AND ';
$hav .= "tab_user.id = '{$_REQUEST['user_id']}'";
$maps['tab_user.id'] = $_REQUEST['user_id'];
unset($_REQUEST['user_id']);
}
if (isset($_REQUEST['status'])) {
$map['lock_status'] = I('status');
unset($_REQUEST['status']);
if (isset($_REQUEST['account'])) {
empty($hav) || $hav .= ' AND ';
$hav .= "tab_user.account like '%" . I('account') . "%'";
$maps['tab_user.account'] = ['like', "%" . I('account') . "%"];
unset($_REQUEST['account']);
}
if (isset($_REQUEST['device_number'])) {
empty($hav) || $hav .= ' AND ';
$hav .= "tab_user.device_number = '{$_REQUEST['device_number']}'";
$maps['tab_user.device_number'] = $_REQUEST['device_number'];
unset($_REQUEST['device_number']);
}
if (isset($_REQUEST['age_status'])) {
empty($hav) || $hav .= ' AND ';
$hav .= 'tab_user.age_status =' . I('age_status');
$maps['tab_user.age_status'] = I('age_status');
unset($_REQUEST['age_status']);
}
if (!empty(I('time_start')) && !empty(I('time_end'))) {
$map['register_time'] = array('BETWEEN', array(strtotime(I('get.time_start')), strtotime(I('time_end')) + 24 * 60 * 60 - 1));
if (isset($_REQUEST['time_start']) && isset($_REQUEST['time_end'])) {
empty($hav) || $hav .= ' AND ';
$hav .= 'tab_user.register_time BETWEEN ' . strtotime(I('time_start')) . ' AND ' . (strtotime(I('time_end')) + 24 * 60 * 60 - 1);
$maps['tab_user.register_time'] = ['between', [strtotime(I('time_start')), strtotime(I('time_end')) + 86399]];
unset($_REQUEST['time_start']);
unset($_REQUEST['time_end']);
} elseif (isset($_REQUEST['time_start'])) {
empty($hav) || $hav .= ' AND ';
$hav .= 'tab_user.register_time > ' . strtotime(I('time_start'));
$maps['tab_user.register_time'] = ['GT', strtotime(I('time_start'))];
unset($_REQUEST['time_start']);
} elseif (isset($_REQUEST['time_end'])) {
empty($hav) || $hav .= ' AND ';
$hav .= 'tab_user.register_time < ' . (strtotime(I('time_end')) + 86399);
$maps['tab_user.register_time'] = ['LT', strtotime(I('time_end')) + 86399];
unset($_REQUEST['time_end']);
}
empty(I('account')) || $map['account'] = ['like', '%' . I('account') . '%'];
//排序
if (I('total_status') == 1) {
$order = 'cumulative asc';
} elseif (I('total_status') == 2) {
$order = 'cumulative desc';
} else {
$order = 'id desc';
if (isset($_REQUEST['start']) && isset($_REQUEST['end'])) {
empty($hav) || $hav .= ' AND ';
$hav .= 'tab_user.register_time BETWEEN ' . strtotime(I('start')) . ' AND ' . strtotime(I('end'));
$maps['tab_user.register_time'] = array('between', [strtotime(I('start')), strtotime(I('end'))]);
unset($_REQUEST['start']);
unset($_REQUEST['end']);
}
if (!empty(I('line_day'))) {
$day = strtotime(date('Y-m-d')) - intval(I('line_day')) * 86400;
empty($hav) || $hav .= ' AND ';
$hav .= $day . '> tab_user.login_time';
$maps['tab_user.login_time'] = ['lt', $day];
}
if (isset($_REQUEST['status'])) {
$map['lock_status'] = $_REQUEST['status'];
unset($_REQUEST['status']);
}
// if (isset($_REQUEST['game_name'])) {
// //$game_map .= " and tab_user_play.game_id in (" . implode(',', array_column(getGameByName($_REQUEST['game_name'], $_REQUEST['game_type']), 'id')) . ")";
// }
$game_map = "";
// $game_map .= " and tab_user_play.game_id in (" . implode(',', array_column(getGameByName($_REQUEST['game_name'], $_REQUEST['game_type']), 'id')) . ")";
if (!empty($_REQUEST['game_name']) || !empty($_REQUEST['game_type'])) {
$game_map .= " and tab_user_play.game_id in (" . implode(',', array_column(getGameByName($_REQUEST['game_name'], $_REQUEST['game_type']), 'id')) . ")";
}
$spendprom = " and ss.game_id in (".implode(',', array_column(getGameByName($_REQUEST['game_name'], $_REQUEST['game_type']), 'id')).")";
if (isset($_REQUEST['server_name'])) {
$map['server_name'] = ['like', "{$_REQUEST['server_name']}%"];
}
$game_play_map = '';
if (isset($_REQUEST['server_name'])) {
$game_play_map .= " and tab_user_play_info.server_name = '{$_REQUEST['server_name']}' ";
}
if (isset($_REQUEST['viplevel'])) {
$havs = get_vip_level_limit('recharge_total',$_REQUEST['viplevel']);
$havs = get_vip_level_limit('recharge_total', $_REQUEST['viplevel']);
}
//排序
$order = '';
if (I('key') == 1) {
if (I('balance_status') == 1) {
$order = 'balance,';
} elseif (I('balance_status') == 2) {
$order = 'balance desc,';
}
} else {
if (I('recharge_status') == 1) {
$order .= 'recharge_total,';
} elseif (I('recharge_status') == 2) {
$order .= 'recharge_total desc,';
}
}
$order .= 'a.id desc';
$map['puid'] = array('eq',0);
$user = M('user', 'tab_');
$map['puid'] = array('eq', 0);
$map['is_platform'] = 0;
if($_REQUEST['promote_id'] && $_REQUEST['promote_id'] > -1){
$xlsData = M('user', 'tab_')->field('tab_user.id,tab_user.age_status,tab_user.account,tab_user.gold_coin,tab_user.alipay,tab_user.balance,tab_user.promote_account,register_time,tab_user.lock_status,tab_user.register_way,tab_user.register_type,tab_user.register_ip,tab_user.login_time,IFNULL(sum(ss.pay_amount),0) AS recharge_total')
->join('left join tab_spend as ss on ss.user_id=tab_user.id AND ss.pay_status = 1'.$spendprom)
->join($game_map ? "tab_user_play on tab_user_play.user_id = tab_user.id $game_map" : false)
->join($game_play_map ? "tab_user_play_info on tab_user_play_info.user_id = tab_user.id $game_play_map" : false)
$usermodel = M('user', 'tab_');
$sql1 = $usermodel->field('tab_user.*,IFNULL(sum(b.pay_amount),0) as deposit_total')
->join('left join tab_deposit AS b ON tab_user.id = b.user_id AND b.pay_status = 1')
->where($map)
->group('tab_user.id')
->order($order)
->having($havs)
->select();
}else{
$xlsData = M('user', 'tab_')->field('tab_user.id,tab_user.age_status,tab_user.account,tab_user.gold_coin,tab_user.alipay,tab_user.balance,tab_user.promote_account,register_time,tab_user.lock_status,tab_user.register_way,tab_user.register_type,tab_user.register_ip,tab_user.login_time,IFNULL(sum(ss.pay_amount),0) AS recharge_total')
->join('left join tab_spend as ss on ss.user_id=tab_user.id AND ss.pay_status = 1')
->join($game_map ? "tab_user_play on tab_user_play.user_id = tab_user.id $game_map" : false)
->join($game_play_map ? "tab_user_play_info on tab_user_play_info.user_id = tab_user.id $game_play_map" : false)
->where($hav)
// ->order($order)
->select(false);
set_time_limit(0);
// $columns = [
// '序号ID', '姓名', '电话',
// ];
// $fileName = '导出.xlsx';
$csvFileName = $xlsName.'.csv';
//设置好告诉浏览器要下载excel文件的headers
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="'. $csvFileName .'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
$fp = fopen('php://output', 'a');//打开output流
mb_convert_variables('GBK', 'UTF-8', $xlsCell);
fputcsv($fp, $xlsCell);//将数据格式化为CSV格式并写入到output流中
$accessNum = '100000';//从数据库获取总量,假设是十万
//计数
$sql = M('user', 'tab_')->field('tab_user.id,IFNULL(sum(ss.pay_amount),0) AS recharge_total')
->join('left join tab_spend as ss on ss.user_id=tab_user.id AND ss.pay_status = 1'.$spendprom)
->where($map)
->group('tab_user.id')
->order($order)
->having($havs)
->select();
->where($hav)
->having($havs)->select(false);
//替换为新表
if($_REQUEST['promote_id'] && $_REQUEST['promote_id'] > -1){
$sql = M('user', 'tab_')->field('tab_user.id,IFNULL(sum(ss.pay_amount),0) AS recharge_total')
->join('left join tab_spend as ss on ss.user_id=tab_user.id AND ss.pay_status = 1'.$spendprom)
->where($map)
->group('tab_user.id')
->where($hav)
->having($havs)->select(false);
}
//数据
if($xlsData) {
$ids = array_column($xlsData,'id');
/* 在手里 */
$small = M('user','tab_')->field('count(id) as count,puid')->where(['puid'=>array('in',$ids)])->group('puid')->select();
/* 出售中 */
$small2 = M('user','tab_')->field('count(id) as count,source_puid')->where(['source_puid'=>array('in',$ids),'source_time'=>0])->group('source_puid')->select();
foreach($xlsData as $k => $v) {
$xlsData[$k]['vip_level'] = get_vip_level($v['recharge_total']);
if(empty($v['alipay'])){
$xlsData[$k]['alipay'] = '--';
}
$xlsData[$k]['register_type'] = $v['register_type'] == 2?'手机号':($v['register_type']==7?'邮箱':'账号');
$jcount = M('User', 'tab_')->field('count(a.id) as count,sum(a.recharge_total) recharge_total')->table('(' . $sql . ') as a')->select();
$accessNum = $jcount[0]['count'] ?:0 ;
$perSize = 5000;//每次查询的条数
$pages = ceil($accessNum / $perSize);
for($i = 1; $i <= $pages; $i++) {
if($_REQUEST['promote_id'] && $_REQUEST['promote_id'] > -1){
$xlsData = $usermodel->table('(' . $sql1 . ') as a ')->field($field)
->join('left join tab_spend as ss on ss.user_id=a.id AND ss.pay_status = 1'.$spendprom)
->join($game_map ? "tab_user_play on tab_user_play.user_id = a.id $game_map" : false)
->join($game_play_map ? "tab_user_play_info on tab_user_play_info.user_id = a.id $game_play_map" : false)
->limit(($i-1)*$perSize ,$perSize)
->having($havs)
->group('a.id')
->order($order)
->select();
// echo $data;die();
}else{
$xlsData = $usermodel->table('(' . $sql1 . ') as a ')->field($field)
->join('left join tab_spend as ss on ss.user_id=a.id AND ss.pay_status = 1')
->join($game_map ? "tab_user_play on tab_user_play.user_id = a.id $game_map" : false)
->join($game_play_map ? "tab_user_play_info on tab_user_play_info.user_id = a.id $game_play_map" : false)
->limit(($i-1)*$perSize ,$perSize)
->having($havs)
->group('a.id')
->order($order)
->select();
}
// echo $usermodel->_sql();die();
//数据
if($xlsData) {
$ids = array_column($xlsData,'id');
/* 在手里 */
$small = M('user','tab_')->field('count(id) as count,puid')->where(['puid'=>array('in',$ids)])->group('puid')->select();
/* 出售中 */
$small2 = M('user','tab_')->field('count(id) as count,source_puid')->where(['source_puid'=>array('in',$ids),'source_time'=>0])->group('source_puid')->select();
foreach($xlsData as $k => $v) {
$xlsData[$k]['small_count'] = 0;
foreach($small as $s) {
if($s['puid'] == $v['id']) {
$xlsData[$k]['small_count'] += $s['count'];break;
$xlsData[$k]['vip_level'] = get_vip_level($v['recharge_total']);
if(empty($v['alipay'])){
$xlsData[$k]['alipay'] = '--';
}
}
foreach($small2 as $s) {
if($s['source_puid'] == $v['id']) {
$xlsData[$k]['small_count'] += $s['count'];break;
if($_REQUEST['type']==2){
$xlsData[$k]['register_type'] = get_registertype($v['register_type']);
}
if ($_REQUEST['type']!=2) {
$xlsData[$k]['register_time'] = date('Y-m-d H:i:s',$xlsData[$k]['register_time']);
}
$xlsData[$k]['login_time'] = date('Y-m-d H:i:s',$xlsData[$k]['login_time']);
$xlsData[$k]['lock_status'] = $xlsData[$k]['lock_status']==1?'正常':'锁定';
$xlsData[$k]['check_status'] = $xlsData[$k]['check_status']==1?'正常':'已拉黑';
$xlsData[$k]['device_number'] = $xlsData[$k]['device_number']."'";
$xlsData[$k]['register_type'] = $v['register_type'] == 2?'手机号':($v['register_type']==7?'邮箱':'账号');
$xlsData[$k]['small_count'] = 0;
foreach($small as $s) {
if($s['puid'] == $v['id']) {
$xlsData[$k]['small_count'] += $s['count'];break;
}
}
foreach($small2 as $s) {
if($s['source_puid'] == $v['id']) {
$xlsData[$k]['small_count'] += $s['count'];break;
}
}
unset($xlsData[$k]['age_status']);
unset($xlsData[$k]['register_way']);
}
}
foreach($xlsData as $value) {
mb_convert_variables('GBK', 'UTF-8', $value);
fputcsv($fp, $value);
$lastId = $value['id'];
}
unset($xlsData);//释放变量的内存
//刷新输出缓冲到浏览器
ob_flush();
flush();//必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。
}
fclose($fp);
exit();
break;
case 4:
@ -5562,8 +5745,8 @@ if ($key == 'model'){
function gameFinanceDetail() {
set_time_limit(0);
ini_set('memory_limit', '512M');
// set_time_limit(0);
// ini_set('memory_limit', '512M');
$month = I("game_name");
$xlsName = $month.'充值流水';

@ -25,8 +25,12 @@ class GameTypeController extends ThinkController {
if(isset($request['status_show'])){
if($request['status_show']!='all'){
$extend['status_show'] = $request['status_show'];
} else {
unset($extend['status_show']);
}
unset($request['status_show']);
} else {
unset($extend['status_show']);
}
$this->m_title = '游戏类型';
@ -40,6 +44,8 @@ class GameTypeController extends ThinkController {
if(isset($request['status_show'])){
if($request['status_show']!='all'){
$extend['status'] = $request['status_show'];
} else {
unset($extend['status']);
}
unset($request['status_show']);
}

@ -88,7 +88,7 @@ class GiftbagController extends ThinkController {
$map['sdk_version'] = $_REQUEST['sdk_version'];
$game_ids = M('game','tab_')->field('id')->where($map)->select();
$game_ids = array_column($game_ids,'id');
$extend['sdk_version'] = ['in',$game_ids];
$extend['game_id'] = ['in',$game_ids];
unset($_REQUEST['sdk_version']);
}
}

@ -124,10 +124,14 @@ class MemberController extends ThinkController
}
$game_map = "";
if (isset($_REQUEST['game_name'])) {
if (!empty($_REQUEST['game_name']) || !empty($_REQUEST['game_type'])) {
$game_map .= " and tab_user_play.game_id in (" . implode(',', array_column(getGameByName($_REQUEST['game_name'], $_REQUEST['game_type']), 'id')) . ")";
}
$spendprom .= " and ss.game_id in (".implode(',', array_column(getGameByName($_REQUEST['game_name'], $_REQUEST['game_type']), 'id')).")";
if (isset($_REQUEST['server_name'])) {
$spendprom .= " and ss.server_name like '{$_REQUEST['server_name']}%' ";
}
$game_play_map = '';
if (isset($_REQUEST['server_name'])) {
$game_play_map .= " and tab_user_play_info.server_name = '{$_REQUEST['server_name']}' ";
@ -212,7 +216,7 @@ class MemberController extends ThinkController
//计数
$sql = M('user', 'tab_')->field('tab_user.id,IFNULL(sum(ss.pay_amount),0) AS recharge_total')
->join('left join tab_spend as ss on ss.user_id=tab_user.id AND ss.pay_status = 1')
->join('left join tab_spend as ss on ss.user_id=tab_user.id AND ss.pay_status = 1'.$spendprom)
->join($game_map ? "tab_user_play on tab_user_play.user_id = tab_user.id $game_map" : false)
->join($game_play_map ? "tab_user_play_info on tab_user_play_info.user_id = tab_user.id $game_play_map" : false)
->where($map)
@ -237,7 +241,8 @@ class MemberController extends ThinkController
$jcount = M('User', 'tab_')->field('count(a.id) as count,sum(a.recharge_total) recharge_total')->table('(' . $sql . ') as a')->select();
$count = $jcount[0]['count'];
// var_dump($jcount);die();
//var_dump(M('User', 'tab_')->getLastSql());die();
$this->assign('user_count', $count);
$this->assign('now_count', $jcount[0]['recharge_total']);
$model = M('Model')->getByName('user');
@ -786,6 +791,7 @@ class MemberController extends ThinkController
}
// $map['type'] = 1;
// $map['login_time'] = ['exp', 'login_time<>0'];
// $map['login_time'] = ['gt',0];
$extend = array();
$extend['map'] = $map;
@ -1247,6 +1253,8 @@ class MemberController extends ThinkController
}
if ($type == 2 && !preg_match("/(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}/i", $tag)) {
return $this->error("请填写正确的ip信息如127.0.0.1");
} else if ($type == 1 && preg_match("/(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}/i", $tag)) {
return $this->error("请填写正确的设备号信息");
}
$map['type'] = $type;
$map['tag'] = $tag;

@ -22,6 +22,7 @@ class PromoteCoinController extends ThinkController
$extend['source_id'] = 0;
$map = $extend;
} else {
$extend['type'] = 1;
$extend['promote_id'] = $_GET['promote_id'];
$extend['promote_type'] = $_GET['promote_type'];

@ -63,16 +63,89 @@ unset($_REQUEST['parent_id']);
$map['ba_id']=$_REQUEST['admin_id'];
}
}
if (I('status') || I('status', -1) == 0) {
$map['status'] = I('status');
}
if (I('ver_status') || I('ver_status', -1) == 0) {
$map['ver_status'] = I('ver_status');
}
if (I("promote_level")) {
$map['level'] = I("promote_level");
}
$this->m_title = '推广员列表';
$this->assign('commonset',M('Kuaijieicon')->where(['url'=>'Promote/lists/type/1','status'=>1])->find());
if(isset($_REQUEST['row'])) {$row = $_REQUEST['row'];}else{$row = 10;}
if(I('oa_associated',-1) != -1) {
$map['oa_associated'] = I('oa_associated');
$oa_data = [];
for($i = 1; $i > 0; $i++) {
$arr['time'] = time();
$arr['page'] = $i;
$arr['pageSize'] = 1000;
ksort($arr);
reset($arr);
$sign = md5(http_build_query($arr) . 'wmkjtx_kj213');
$arr['sign'] = $sign;
$re_data = curl_post('http://oa.76ba.com/api/wanmeng/platformAccount',$arr);
$re_data = json_decode($re_data,true);
if($re_data['code'] == 1) {
$oa = $re_data['data'];
$oa_data = array_merge($oa_data,$oa);
} else {
break;
}
}
$promote = D(self::model_name)->field('id,account')->where(['oa_associated' => 0])->order('id DESC')->select();
$oa_data = array_column($oa_data, 'platform_account');
foreach($promote as $k => $v) {
$v['account'] = trim($v['account']);
if(in_array($v['account'], $oa_data)) {
M('promote','tab_')->where(['id' => $v['id']])->setField(['oa_associated' => 1]);
}
}
}
$list_data = D(self::model_name)->where($map)->order('id DESC')->page($p,$row)->select();
$oa_data = [];
if(I('oa_associated',-1) == -1) {
foreach($list_data as $k => $v)
{
$list_data[$k]['account'] = trim($v['account']);
if($v['oa_associated'] != 1) {
$oa_data[] = $list_data[$k]['account'];
}
}
if(!empty($oa_data))
{
$arr['time'] = time();
$arr['account'] = implode(",", $oa_data);
ksort($arr);
reset($arr);
$sign = md5(http_build_query($arr) . 'wmkjtx_kj213');
$arr['sign'] = $sign;
$re_data = curl_post('http://oa.76ba.com/api/wanmeng/verifyBind',$arr);
$re_data = json_decode($re_data,true)['data'];
foreach($list_data as $k => $v)
{
if(array_key_exists($v['account'], $re_data))
{
$list_data[$k]['oa_associated'] = $re_data[$v['account']];
M('promote','tab_')->where(['id' => $v['id']])->setField(['oa_associated' => $re_data[$v['account']]]);
}
}
}
}
$count = (I('oa_associated',-1) != -1) ? D(self::model_name)->where($map)->count() : D(self::model_name)->count();
$page = set_pagination($count,$row);
if($page) {$this->assign('_page', $page);}
$this->assign('list_data', $list_data);
$this->display();
parent::order_lists(self::model_name,$p,$map);
}
private function siteApplyList($p){

@ -105,7 +105,7 @@ class RechargeSumController extends ThinkController
}
$count = count($data);
$export_data = $data;
$page = set_pagination($count, $row);
if ($page) {
$this->assign('_page', $page);
@ -122,7 +122,7 @@ class RechargeSumController extends ThinkController
//判断是否执行导出
if (I('export') == 1) {
$this->exportSum($data);
$this->exportSum($export_data);
}
$this->assign('meta_title', "充值汇总");
$this->assign('list_data', $data);

@ -339,6 +339,15 @@ class ToolController extends ThinkController {
$data[$name] = $config;
$configs=array_merge($configs,$data);
$result = file_put_contents($config_file, "<?php\treturn " . var_export($configs, true) . ";");
$ageConfigJson = json_encode($config);
M('tool', 'tab_')->where([
'name' => $name
])->save([
'config' => $ageConfigJson,
'type' => 1,
'status' => isset($config['status']) ? $config['status'] : $config['bat']
]);
}
public function ios_game(){

@ -1 +1 @@
{"news":[{"time":"0:00","count":1},{"time":"1:00","count":0},{"time":"2:00","count":0},{"time":"3:00","count":0},{"time":"4:00","count":0},{"time":"5:00","count":0},{"time":"6:00","count":0},{"time":"7:00","count":0},{"time":"8:00","count":0},{"time":"9:00","count":0},{"time":"10:00","count":1},{"time":"11:00","count":1},{"time":"12:00","count":1},{"time":"13:00","count":1},{"time":"14:00","count":12},{"time":"15:00","count":1},{"time":"16:00","count":3},{"time":"17:00","count":0},{"time":"18:00","count":0},{"time":"19:00","count":2},{"time":"20:00","count":6},{"time":"21:00","count":0},{"time":"22:00","count":0},{"time":"23:00","count":0}],"sum":{"news":29,"active":49,"player":7,"money":13.17},"active":[{"time":"0:00","count":2},{"time":"1:00","count":0},{"time":"2:00","count":0},{"time":"3:00","count":0},{"time":"4:00","count":0},{"time":"5:00","count":0},{"time":"6:00","count":0},{"time":"7:00","count":0},{"time":"8:00","count":1},{"time":"9:00","count":4},{"time":"10:00","count":7},{"time":"11:00","count":1},{"time":"12:00","count":4},{"time":"13:00","count":2},{"time":"14:00","count":12},{"time":"15:00","count":3},{"time":"16:00","count":5},{"time":"17:00","count":0},{"time":"18:00","count":0},{"time":"19:00","count":2},{"time":"20:00","count":6},{"time":"21:00","count":0},{"time":"22:00","count":0},{"time":"23:00","count":0}],"player":[{"time":"0:00","count":0},{"time":"1:00","count":0},{"time":"2:00","count":0},{"time":"3:00","count":0},{"time":"4:00","count":0},{"time":"5:00","count":0},{"time":"6:00","count":0},{"time":"7:00","count":0},{"time":"8:00","count":0},{"time":"9:00","count":0},{"time":"10:00","count":0},{"time":"11:00","count":0},{"time":"12:00","count":0},{"time":"13:00","count":1},{"time":"14:00","count":2},{"time":"15:00","count":0},{"time":"16:00","count":0},{"time":"17:00","count":0},{"time":"18:00","count":0},{"time":"19:00","count":1},{"time":"20:00","count":2},{"time":"21:00","count":1},{"time":"22:00","count":0},{"time":"23:00","count":0}],"money":[{"time":"0:00","count":0},{"time":"1:00","count":0},{"time":"2:00","count":0},{"time":"3:00","count":0},{"time":"4:00","count":0},{"time":"5:00","count":0},{"time":"6:00","count":0},{"time":"7:00","count":0},{"time":"8:00","count":0},{"time":"9:00","count":0},{"time":"10:00","count":0},{"time":"11:00","count":0},{"time":"12:00","count":0},{"time":"13:00","count":"6.01"},{"time":"14:00","count":"3.08"},{"time":"15:00","count":0},{"time":"16:00","count":0},{"time":"17:00","count":0},{"time":"18:00","count":0},{"time":"19:00","count":"4.02"},{"time":"20:00","count":"0.05"},{"time":"21:00","count":"0.01"},{"time":"22:00","count":0},{"time":"23:00","count":0}]}
{"news":[{"time":"0:00","count":0},{"time":"1:00","count":0},{"time":"2:00","count":0},{"time":"3:00","count":0},{"time":"4:00","count":0},{"time":"5:00","count":0},{"time":"6:00","count":0},{"time":"7:00","count":0},{"time":"8:00","count":0},{"time":"9:00","count":0},{"time":"10:00","count":0},{"time":"11:00","count":0},{"time":"12:00","count":0},{"time":"13:00","count":0},{"time":"14:00","count":0},{"time":"15:00","count":0},{"time":"16:00","count":0},{"time":"17:00","count":0},{"time":"18:00","count":0},{"time":"19:00","count":2},{"time":"20:00","count":1},{"time":"21:00","count":0},{"time":"22:00","count":0},{"time":"23:00","count":0}],"sum":{"news":3,"active":4,"player":0,"money":0},"active":[{"time":"0:00","count":0},{"time":"1:00","count":0},{"time":"2:00","count":0},{"time":"3:00","count":0},{"time":"4:00","count":0},{"time":"5:00","count":0},{"time":"6:00","count":0},{"time":"7:00","count":0},{"time":"8:00","count":0},{"time":"9:00","count":0},{"time":"10:00","count":0},{"time":"11:00","count":0},{"time":"12:00","count":0},{"time":"13:00","count":0},{"time":"14:00","count":0},{"time":"15:00","count":0},{"time":"16:00","count":0},{"time":"17:00","count":0},{"time":"18:00","count":0},{"time":"19:00","count":3},{"time":"20:00","count":1},{"time":"21:00","count":0},{"time":"22:00","count":0},{"time":"23:00","count":0}],"player":[{"time":"0:00","count":0},{"time":"1:00","count":0},{"time":"2:00","count":0},{"time":"3:00","count":0},{"time":"4:00","count":0},{"time":"5:00","count":0},{"time":"6:00","count":0},{"time":"7:00","count":0},{"time":"8:00","count":0},{"time":"9:00","count":0},{"time":"10:00","count":0},{"time":"11:00","count":0},{"time":"12:00","count":0},{"time":"13:00","count":0},{"time":"14:00","count":0},{"time":"15:00","count":0},{"time":"16:00","count":0},{"time":"17:00","count":0},{"time":"18:00","count":0},{"time":"19:00","count":0},{"time":"20:00","count":0},{"time":"21:00","count":0},{"time":"22:00","count":0},{"time":"23:00","count":0}],"money":[{"time":"0:00","count":0},{"time":"1:00","count":0},{"time":"2:00","count":0},{"time":"3:00","count":0},{"time":"4:00","count":0},{"time":"5:00","count":0},{"time":"6:00","count":0},{"time":"7:00","count":0},{"time":"8:00","count":0},{"time":"9:00","count":0},{"time":"10:00","count":0},{"time":"11:00","count":0},{"time":"12:00","count":0},{"time":"13:00","count":0},{"time":"14:00","count":0},{"time":"15:00","count":0},{"time":"16:00","count":0},{"time":"17:00","count":0},{"time":"18:00","count":0},{"time":"19:00","count":0},{"time":"20:00","count":0},{"time":"21:00","count":0},{"time":"22:00","count":0},{"time":"23:00","count":0}]}

@ -38,8 +38,8 @@ class GameModel extends Model{
array('support_quota', '/^[0-9]*$/', '请输入正确的扶持额度', self::VALUE_VALIDATE, 'regex', self::MODEL_BOTH),
array('game_score', '/^(\d(\.\d)?|10)$/', '游戏评分输入格式不正确', self::VALUE_VALIDATE, 'regex', self::MODEL_BOTH),
array('recommend_level', '/^(\d(\.\d)?|10)$/', '推荐指数输入格式不正确', self::VALUE_VALIDATE, 'regex', self::MODEL_BOTH),
array('discount',[1,10],'代充折扣错误', self::MUST_VALIDATE, 'between', self::MODEL_BOTH),
array('bind_recharge_discount',[1,10],'绑币充值折扣错误',self::MUST_VALIDATE, 'between', self::MODEL_BOTH),
// array('discount',[1,10],'代充折扣错误', self::MUST_VALIDATE, 'between', self::MODEL_BOTH),
// array('bind_recharge_discount',[1,10],'绑币充值折扣错误',self::MUST_VALIDATE, 'between', self::MODEL_BOTH),
array('dratio','/^(((\d|[1-9]\d)(\.\d{1,2})?)|100|100.0|100.00)$/','开发者分成比例错误',self::VALUE_VALIDATE, 'regex', self::MODEL_BOTH),
array('support_ratio','/^100$|^(\d|[1-9]\d)$/','请输入正确的扶持比例',self::VALUE_VALIDATE, 'regex', self::MODEL_BOTH),

@ -48,15 +48,16 @@
placeholder="订单号"/>
</div>
<div class="input-list">
<input type="text" id="time-start" name="time-start" class="" value="{:I('time-start')}"
<input type="text" id="time-start" name="time-start" class="" value="{:I('time-start')|I('start')}"
placeholder="充值开始时间"/>
-
<div class="input-append date" id="datetimepicker" style="display:inline-block">
<input type="text" id="time-end" name="time-end" class="" value="{:I('time-end')}"
<input type="text" id="time-end" name="time-end" class="" value="{:I('time-end')|I('end')}"
placeholder="充值结束时间"/>
<span class="add-on"><i class="icon-th"></i></span>
</div>
</div>
<div class="input-list">
<input type="text" id="search-input" name="pay_ip" class="" value="{:I('pay_ip')}"
placeholder="充值IP"/>
@ -328,12 +329,12 @@ $(document).ready(function () {
function initSelect2WithSearch() {
$("#sel_order").select2({
tags: true,
placeholder: '订单状态',
allowClear: false, //清空
minimumResultsForSearch: Infinity, // 永久隐藏搜索框
});
// $("#sel_order").select2({
// tags: true,
// placeholder: '订单状态',
// allowClear: false, //清空
// minimumResultsForSearch: Infinity, // 永久隐藏搜索框
// });
}
</script>
</block>

@ -39,7 +39,7 @@
<!--显示状态搜索-->
<div class="input-list">
<select name="status_show">
<option value="all">显示状态</option>
<option value="">显示状态</option>
<option value="1">已开启</option>
<option value="0">已关闭</option>
</select>

@ -33,4 +33,7 @@
</block>
<block name="script">
<script type="text/javascript">
highlight_subnav('{:U('Member/device_bans_list')}');
</script>
</block>

@ -139,7 +139,7 @@
</script>
<script type="text/javascript">
//导航高亮
highlight_subnav("{:U('Member/login_record')}");
highlight_subnav('{:U('Member/device_bans_list')}');
$(function () {
<volist name = ":I('get.')" id = "vo" > Think.setValue('{$key}', "{$vo}");
</volist >

@ -310,7 +310,8 @@
<if condition="I('promote_id') && I('promote_id') gt 0 ">
<td colspan="8">
当前用户累计充值:{$now_count} &#12288;&#12288;
历史累计充值:{$history_count}
历史累计充值:{$history_count}&#12288;&#12288;
用户数:{$user_count}
</td>
<td colspan="8" style="font-style: 12px;color: #a9a9a9;text-align: center;">
当前用户累计充值:&#12288;当前属于该推广员的用户的充值累计(不含用户换绑前记录)&#12288;&#12288;/&#12288;&#12288;
@ -318,7 +319,7 @@
</td>
<else />
<td colspan="99">
当前用户累计充值:{$now_count}
当前用户累计充值:{$now_count}&#12288;&#12288;用户数:{$user_count}
</td>
</if>

@ -126,7 +126,14 @@
<option value="3">审核中</option>
<option value="4">修改审核中</option>
</select>
</div>
</div>
<div class="input-list input-list-channelstatus">
<select name="oa_associated">
<option value="">oa关联</option>
<option value="1">已关联</option>
<option value="0">未关联</option>
</select>
</div>
<else/>
<div class="input-list input-list-channelstatus">
<select name="url_type">
@ -142,6 +149,13 @@
<option value="2">未审核</option>
</select>
</div>
<div class="input-list input-list-channelstatus">
<select name="oa_associated">
<option value="">oa关联</option>
<option value="1">已关联</option>
<option value="0">未关联</option>
</select>
</div>
</empty>
<input type="hidden" name="" value="" class="sortBy">
<input type="hidden" name="type" value="{$_GET['type']}">
@ -172,7 +186,8 @@
<th>所属会长</th>
<th>商务专员</th>
<th>状态</th>
<th>身份状态</th>>
<th>身份状态</th>
<th>oa关联</th>
<th>可申请游戏</th>
<th>操作</th>
</tr>
@ -225,6 +240,11 @@
<span>未认证</span>
<?php }?>
</td>
<if condition="$data['oa_associated'] eq 1">
<td>已关联</td>
<else />
<td style="color: red;">未关联</td>
</if>
<td><a class="ajax-view" data-id="{$data.id}">查看</a></td>
<td>
<a href="{:U('edit',array('id'=>$data['id']))}" class="">编辑</a>

@ -66,23 +66,23 @@
</select>
</div> -->
<div class="input-list input-list-game search_label_rehab">
<select id="game_type" name="game_type" class="select_gallery" >
<option value="">设备类型</option>
<option value="1">安卓</option>
<option value="2">苹果</option>
<select id="game_name" name="game_name" class="select_gallery" >
<option value="">游戏名称</option>
<volist name=":getAllGame()" id="vo">
<option value="{$vo.game_name}" <?php echo $vo.relation_game_name == I('game_name') ? 'selected':''; ?> >{$vo.game_name}</option>
</volist>
</select>
</div>
<div class="input-list input-list-game search_label_rehab">
<select id="game_name" name="game_name" class="select_gallery" >
<option value="">游戏名称</option>
<!-- <volist name=":get_game_list(null, $_GET['game_type'])" id="vo">
<option game-id="{$vo.id}" value="{$vo.id}">{$vo.game_name}</option>
</volist> -->
<select id="game_type" name="game_type" class="select_gallery" >
<option value="">设备类型</option>
<option value="1" <?php echo I('game_type') == 1 ? "selected" : ''?>>安卓</option>
<option value="2" <?php echo I('game_type') == 2 ? "selected" : ''?>>苹果</option>
</select>
</div>
<div class="input-list input-list-server search_label_rehab">
<select id="server_id" name="server_id" class="select_gallery" style="width:120px;">
<option value="">请选择区服</option>
<select id="server_name" name="server_name" class="select_gallery" style="width:120px;">
<option value="">区服名称</option>
</select>
</div>
<div class="input-list search_item input-list-gamenoticestatus">

@ -322,15 +322,14 @@ class GameSourceService {
];
}
public function uploadPackage($localFilePath, $distFilePath, $isDeleteLocal = false)
public function uploadPackage($localFilePath, $distFilePath, $isDeleteLocal = false, $isChunk = false)
{
if (get_tool_status('oss_storage') == 1) {
$ossService = new OssService();
$result = $ossService->upload($localFilePath, $distFilePath);
if ($isDeleteLocal && file_exists($localFilePath)) {
@unlink($localFilePath);
if ($isChunk) {
return $this->uploadPackageChunk($localFilePath, $distFilePath, $isDeleteLocal);
} else {
return $this->uploadPackageOnce($localFilePath, $distFilePath, $isDeleteLocal);
}
return $result;
} else {
// 不上传OSS等第三方服务器
return [
@ -342,6 +341,40 @@ class GameSourceService {
];
}
}
public function uploadPackageChunk($localFilePath, $distFilePath, $isDeleteLocal = false)
{
$client = new Client([
'base_uri' => C('UPLOAD_SERVER_URL'),
'timeout' => 10.0,
]);
$response = $client->post('/upload', [
'verify' => false,
'form_params' => [
'file' => $gameId,
'dist' => $distFilePath,
'is_delete_local' => 0,
]
]);
$result = (string)$response->getBody();
$result = json_decode($result, true);
if (!$result) {
return [
'status' => false,
'message' => '请求打包失败',
];
}
return $result;
}
public function uploadPackageOnce($localFilePath, $distFilePath, $isDeleteLocal = false)
{
$ossService = new OssService();
$result = $ossService->upload($localFilePath, $distFilePath);
if ($isDeleteLocal && file_exists($localFilePath)) {
@unlink($localFilePath);
}
return $result;
}
//生成游戏渠道plist文件
public function createPlist($params)

@ -48,6 +48,7 @@ class DownloadController extends BaseController {
$cellNum = count($expCellName);
$dataNum = count($expTableData);
Vendor("PHPExcel.PHPExcel");
$objPHPExcel = new \PHPExcel();
$cellName = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ');
$objPHPExcel->getActiveSheet(0)->mergeCells('A1:' . $cellName[$cellNum - 1] . '1');//合并单元格
@ -57,10 +58,11 @@ class DownloadController extends BaseController {
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i] . '2', $expCellName[$i][1]);
}
for ($i = 0; $i < $dataNum; $i++) {
for ($j = 0; $j < $cellNum; $j++) {
$objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j] . ($i + 3), $expTableData[$i][$expCellName[$j][0]]);
}
for ($j = 0; $j < $cellNum; $j++) {
$objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j] . ($i + 3), $expTableData[$i][$expCellName[$j][0]]);
}
}
ob_end_clean();//清除缓冲区,避免乱码
header('pragma:public');
header('Content-type:application/vnd.ms-excel;charset=utf-8;name="' . $xlsTitle . '.xls"');
@ -1253,7 +1255,7 @@ class DownloadController extends BaseController {
}
public function userRecharge_data_export() {
$gameId = I('game_id', 0);
$gameId = I('relation_game_id', 0);
$serverId = I('server_id', 0);
$isSelf = I('is_self', 0);
$roleName = I('role_name', '');
@ -1289,28 +1291,22 @@ class DownloadController extends BaseController {
$levelPromote = $this->getLevelPromote();
$queryPromote = $this->getQueryPromote($levelPromote);
$map2[] = [
'_logic' => 'or',
'id' => $queryPromote['id'],
'chain' => ['like', $queryPromote['chain'] . $queryPromote['id'] . '/%']
];
$map2['chain'] = ['like', $queryPromote['chain'] . $queryPromote['id'] . '/%'];
$ids = M('promote', 'tab_')->where($map2)->getField('id', true);
if(empty($ids)) {
$ids = array();
}
if(empty($levelPromote)) {
array_push($ids,PID);
}
// array_push($ids,$queryPromote['id']);
if (!empty($ids)) {
$map['promote_id'] = ['in',$ids];
}else {
$map['_string'] = '1<>1';
}
$ids[] = $queryPromote['id'];
$map = ['promote_id' => ['in', $ids]];
$subMap = ['promote_id' => ['in', $ids]];
if ($gameId != 0) {
$map['game_id'] = $gameId;
$gameMap['relation_game_id'] = $gameId;
if ($sdkVersion != 0) {
$gameMap['sdk_version'] = $sdkVersion;
}
$gameId1 = M('game', 'tab_')->where($gameMap)->getField('id', true);
$map['game_id'] = ['in', $gameId1];
$subMap['game_id'] = ['in', $gameId1];
}
if ($serverId != 0) {
$map['server_id'] = $serverId;
@ -1371,7 +1367,7 @@ class DownloadController extends BaseController {
public function achievement_data_export() {
$time = I('time', date('Y-m-d'));
$sdkVersion = I('sdk_version', 0);
$gameId = I('game_id', 0);
$gameId = I('relation_game_id', 0);
$serverId = I('server_id', 0);
$parentId = I('parent_id', 0);
$promoteId = I('promote_id', 0);
@ -1424,7 +1420,12 @@ class DownloadController extends BaseController {
$map['currentDisplay'] = $currentDisplay;
$map['ids'] = $ids;
if ($gameId > 0) {
$params['game_id'] = $gameId;
$gameMap['relation_game_id'] = $gameId;
if ($sdkVersion > 0) {
$gameMap['sdk_version'] = $sdkVersion;
}
$gameId1 = M('game', 'tab_')->where($gameMap)->getField('id', true);
$params['game_id'] = ['in', $gameId1];
}
if ($serverId > 0) {
$params['server_id'] = $serverId;
@ -1461,7 +1462,7 @@ class DownloadController extends BaseController {
}
//玩家角色
public function userRoles_data_export() {
$gameId = I('game_id', 0);
$gameId = I('relation_game_id', 0);
$serverId = I('server_id', 0);
$isSelf = I('is_self', 0);
$roleName = I('role_name', '');
@ -1517,7 +1518,12 @@ class DownloadController extends BaseController {
if ($gameId != 0) {
$map['game_id'] = $gameId;
$gameMap['relation_game_id'] = $gameId;
if ($sdkVersion != 0) {
$gameMap['sdk_version'] = $sdkVersion;
}
$gameId1 = M('game', 'tab_')->where($gameMap)->getField('id', true);
$map['game_id'] = ['in', $gameId1];
}
if ($serverId != 0) {
$map['serverId'] = $serverId;
@ -2352,34 +2358,34 @@ class DownloadController extends BaseController {
}
public function withdrawDtlExcelInfo($id,$map) {
$xlsName = "提现记录";
$xlsCell = array(
array('pay_order_number','充值订单号'),
array('game_name','游戏'),
array('sdk_version','平台'),
array('user_account','玩家账号'),
array('pay_amount','订单总额'),
array('cash_base','现金分成基数'),
array('selle_ratio','现金分成比例'),
array('platform_base','平台币分成基数'),
array('selle_ratio','平台币分成比例'),
array('bind_base','绑定币分成基数'),
array('selle_ratio','绑定币分成比例'),
array('pay_way_name','现金支付通道'),
array('income','收益'),
array('status','订单状态'),
array('pay_time','充值时间'),
);
$spendModel = M('spend', 'tab_');
$withdrawId = $map['withdraw_id'];
$withdraw = M('withdraw', 'tab_')->field('promote_id,status')->where(array('id' => $withdrawId))->find();
$xlsName = "提现记录";
$xlsCell = array(
'充值订单号',
'游戏',
'平台',
'玩家账号',
'订单总额',
'充值时间',
'收益',
'现金支付通道',
'现金分成基数',
'现金分成比例',
'平台币分成基数',
'平台币分成比例',
'绑定币分成基数',
'绑定币分成比例',
'订单状态',
);
$spendModel = M('spend', 'tab_');
$withdrawId = $map['withdraw_id'];
$withdraw = M('withdraw', 'tab_')->field('promote_id,status')->where(array('id' => $withdrawId))->find();
$data = $spendModel
->field('id,pay_order_number,game_name,sdk_version,user_account,pay_amount,pay_way,selle_ratio,pay_time')
->field('pay_order_number,game_name,sdk_version,user_account,pay_amount,pay_way,selle_ratio,pay_time')
->where($map)
->order('id desc')
->select();
if (!empty($data)) {
foreach ($data as &$list) {
if (!empty($data)) {
foreach ($data as $key => &$list) {
$list['income'] = bcmul($list['pay_amount'], bcdiv($list['selle_ratio'], 100, 2), 2);
$list['pay_time'] = date('Y-m-d H:i:s', $list['pay_time']);
switch ($list['pay_way']) {
@ -2397,27 +2403,55 @@ class DownloadController extends BaseController {
}else {
$list['cash_base'] = 0;
}
$list['cash_selle_ratio'] = $list['selle_ratio'];
if($list['pay_way'] == 0) {
$list['platform_base'] = $list['pay_amount'];
$list['platform_base'] = $list['pay_amount'];
}else {
$list['platform_base'] = 0;
}
if($list['pay_way'] == -1) {
$list['bind_base'] = $list['pay_amount'];
$list['platform_selle_ratio'] = $list['selle_ratio'];
if($list['pay_way'] == -1) {
$list['bind_base'] = $list['pay_amount'];
}else {
$list['bind_base'] = 0;
}
$list['bind_selle_ratio'] = $list['selle_ratio'];
$list['status'] = FinanceController::$withdrawStatus[$withdraw['status']];
}
}
$xlsData = $data;
$this->exportExcel($xlsName, $xlsCell, $xlsData,$id);
}
unset($list['pay_way']);
unset($list['selle_ratio']);
}
}
$csvFileName = $xlsName.'.csv';
//设置好告诉浏览器要下载excel文件的headers
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="'. $csvFileName .'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
$fp = fopen('php://output', 'a');//打开output流
mb_convert_variables('gb2312', 'UTF-8', $xlsCell);
fputcsv($fp, $xlsCell);//将数据格式化为CSV格式并写入到output流中
$accessNum = '100000';//从数据库获取总量,假设是十万
$accessNum = count($data)?:0 ;
$perSize = 5000;//每次查询的条数
$pages = ceil($accessNum / $perSize);
for($i = 1; $i <= $pages - 1; $i++) {
foreach($data as $value) {
mb_convert_variables('GBK', 'UTF-8', $value);
fputcsv($fp, $value);
}
unset($data);
ob_flush();
flush();
}
fclose($fp);
$this->backSuccessExport($id);
}
public function withdrawRecordExcelInfo($id,$map) {
$xlsName = "提现记录";
@ -2801,21 +2835,33 @@ class DownloadController extends BaseController {
$subMap = [];
if(!empty($map['game_id'])) {
$subMap['game_id'] = $map['game_id'];
$map['uc.game_id'] = $map['game_id'];
unset($map['game_id']);
}
if(!empty($map['server_id'])) {
$subMap['server_id'] = $map['server_id'];
$map['ui.server_id'] = $map['server_id'];
unset($map['server_id']);
}
if(!empty($map['role_name'])) {
$map['ui.role_name'] = $map['role_name'];
unset($map['role_name']);
}
if(!empty($map['user_account'])) {
$map['ui.user_account'] = $map['user_account'];
unset($map['user_account']);
}
if(!empty($map['promote_id'])) {
$map['uc.promote_id'] = $map['promote_id'];
unset($map['promote_id']);
}
$costBegin = $map['costbegin'];
$costEnd = $map['costend'];
unset($map['costbegin']);
unset($map['costend']);
$nowTime = strtotime(date('Y-m-d 00:00:00', time()));
$subMap['create_time'] = ['between', [$map['begintime'], $map['endtime'] - 1]];
$roleIdMap = $subMap;
$roleIds = M('user_play_data_count', 'tab_')->where($roleIdMap)->group('role_id')->getField('role_id', true);
if (count($roleIds) > 0) {
$map['role_id'] = ['in', $roleIds];
}
if ($costBegin != '' || $costEnd != '') {
$having = '';
if ($costBegin != '' && $costEnd != '') {
@ -2830,40 +2876,24 @@ class DownloadController extends BaseController {
->group('game_id,server_id,role_id')
->having($having)
->buildSql();
$map['_string'] = 'role_id in (' . $subQuery . ')';
}
$spendMap['uc.create_time'] = ['between', [$map['begintime'], $map['endtime'] - 1]];
$spendMap['_string'] = 'uc.game_id = tab_user_play_info.game_id and uc.server_id = tab_user_play_info.server_id and uc.role_id = tab_user_play_info.role_id';
// $map['create_time'] = ['between', [strtotime(date('Y-m-d 00:00:00')) - 6*24*3600, strtotime(date('Y-m-d 23:59:59'))]];
$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();
$map['_string'] = 'ui.role_id in (' . $subQuery . ')';
}
$map['uc.create_time'] = ['between', [$map['begintime'], $map['endtime'] - 1]];
unset($map['begintime']);
unset($map['endtime']);
$subQuery = M('user_play_info', 'tab_')
->field("*,$sqlCost as recharge_cost,$sqlCount as recharge_count,$sqlTodayCost as recharge_cost_today")
->where($map)
->having('recharge_cost > 0')
->order('play_time desc')
->buildSql();
$roles = M()->field(' * ')
->table($subQuery)
->alias('a')
->order('play_time desc')
->select();
//$spendMap['_string'] = 'uc.game_id = tab_user_play_info.game_id and uc.server_id = tab_user_play_info.server_id and uc.role_id = tab_user_play_info.role_id';
$fieldUC = "sum(uc.recharge_cost) recharge_cost,sum(uc.recharge_count) recharge_count,sum(if(uc.create_time = {$nowTime},uc.recharge_cost,0)) as recharge_cost_today";
$fieldUI = "ui.user_account,ui.game_name,ui.role_name,ui.role_level,ui.server_name,ui.play_time,ui.play_ip,ui.promote_account,ui.sdk_version";
$field = $fieldUC . ',' . $fieldUI;
$subQuery = M('user_play_data_count', 'tab_')->alias('uc')
->field($field)
->join('tab_user_play_info as ui on ui.game_id = uc.game_id and ui.server_id = uc.server_id and ui.role_id = uc.role_id')
->where($map)
->group('uc.role_id,uc.server_id,uc.game_id')
->buildSql();
$roles = M()->alias('record')
->table($subQuery)
->select();
foreach ($roles as $role) {
$records[] = [
'user_account' => encryption($role['user_account']),
@ -2889,6 +2919,11 @@ class DownloadController extends BaseController {
foreach ($records as $key1 => $value1) {
$value1['user_account'] = $this->encryption($value1['user_account']);
$value1['play_time'] = date('Y-m-d H:i:s',$value1['play_time']);
if($value1['sdk_version'] == 1) {
$value1['sdk_version'] = "Android";
}else {
$value1['sdk_version'] = "ios";
}
$xlsData[] = $value1;
}
$this->exportExcel($xlsName, $xlsCell, $xlsData,$id);
@ -2897,28 +2932,52 @@ class DownloadController extends BaseController {
public function rechargeExcelInfo($id,$map) {
$xlsName = "订单查询";
$xlsCell = array(
array('user_account','玩家账号'),
array('order_number','游戏订单'),
array('pay_amount','订单金额'),
array('pay_way','支付方式'),
array('game_name','游戏名称'),
array('server_name','区服'),
array('game_player_name','角色名'),
array('p_p_proinfo','部门长'),
array('p_proinfo','组长'),
array('proinfo','推广员'),
array('pay_time','付款时间'),
'玩家账号',
'游戏订单',
'订单金额',
'支付方式',
'游戏名称',
'区服',
'角色名',
'部门长',
'组长',
'推广员',
'付款时间',
);
$model = M('spend','tab_');
$data = $model
->field('tab_spend.*,tab_promote.account as pro_account,tab_promote.real_name as pro_real_name,tab_promote.chain as chain')
$data1 = $model
->field('tab_spend.id')
->join('tab_game on tab_spend.game_id = tab_game.id')
->join('left join tab_promote on tab_spend.promote_id = tab_promote.id')
->where($map)
->order('tab_spend.id desc')
->select();
$xlsData = [];
foreach ($data as $key1 => $value1) {
$csvFileName = $xlsName.'.csv';
//设置好告诉浏览器要下载excel文件的headers
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="'. $csvFileName .'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
$fp = fopen('php://output', 'a');//打开output流
mb_convert_variables('gb2312', 'UTF-8', $xlsCell);
fputcsv($fp, $xlsCell);//将数据格式化为CSV格式并写入到output流中
$accessNum = count($data1)?:0 ;
$perSize = 5000;//每次查询的条数
$pages = ceil($accessNum / $perSize);
for($i = 1; $i <= $pages; $i++) {
$model = M('spend','tab_');
$data = $model
->field('tab_spend.*,tab_promote.account as pro_account,tab_promote.real_name as pro_real_name,tab_promote.chain as chain')
->join('tab_game on tab_spend.game_id = tab_game.id')
->join('left join tab_promote on tab_spend.promote_id = tab_promote.id')
->where($map)
->limit(($i-1)*$perSize ,$perSize)
->order('tab_spend.id desc')
->select();
foreach ($data as $key1 => $value1) {
$value1['pay_way'] = $this->payWay[$value1['pay_way']];
$value1['pay_time'] = date('Y-m-d H:i:s',$value1['pay_time']);
$value1['p_p_proinfo'] = $value1['pro_account'].'('.$value1['pro_real_name'].')';
@ -2947,9 +3006,29 @@ class DownloadController extends BaseController {
}
$xlsData[] = $value1;
}
$this->exportExcel($xlsName, $xlsCell, $xlsData,$id);
$csvData["user_account"] = $value1["user_account"];
$csvData["order_number"] = $value1["order_number"];
$csvData["pay_amount"] = $value1["pay_amount"];
$csvData["pay_way"] = $value1["pay_way"];
$csvData["game_name"] = $value1["game_name"];
$csvData["server_name"] = $value1["server_name"];
$csvData["game_player_name"] = $value1["game_player_name"];
$csvData["p_p_proinfo"] = $value1["p_p_proinfo"];
$csvData["p_proinfo"] = $value1["p_proinfo"];
$csvData["proinfo"] = $value1["proinfo"];
$csvData["pay_time"] = $value1["pay_time"];
$xlsData[] = $csvData;
}
foreach($xlsData as $value) {
mb_convert_variables('GBK', 'UTF-8', $value);
fputcsv($fp, $value);
}
unset($xlsData);
ob_flush();
flush();
}
fclose($fp);
$this->backSuccessExport($id);
}
public function backSuccessExport($id) { //导出成功后

@ -1308,15 +1308,15 @@ class QueryController extends BaseController
$allData['spend_user_num'] = $spendRepository->getPayUserCountByGame($params);//充值人数
$allData['spend_num'] = $spendRepository->getPayCountByGame($params);//充值次数
unset($params['pay_way']);
$allData['spend_all_amount'] = $spendRepository->getPayAmountByGameAndType($params);//充值总额
$allData['spend_all_amount'] = null_to_0($spendRepository->getPayAmountByGameAndType($params));//充值总额
$params['pay_way'] = ['in', '1,2,3,4,5,6'];
$allData['spend_cash'] = $spendRepository->getPayAmountByGameAndType($params);//现金充值
$allData['spend_cash'] = null_to_0($spendRepository->getPayAmountByGameAndType($params));//现金充值
$params['pay_way'] = 0;
$allData['spend_generic'] = $spendRepository->getPayAmountByGameAndType($params);//通用币充值
$allData['spend_generic'] = null_to_0($spendRepository->getPayAmountByGameAndType($params));//通用币充值
$params['pay_way'] = -1;
$allData['spend_binding'] = $spendRepository->getPayAmountByGameAndType($params);//绑定币充值
$allData['spend_discount'] = 0;
$allData['spend_voucher'] = 0;
$allData['spend_binding'] = null_to_0($spendRepository->getPayAmountByGameAndType($params));//绑定币充值
$allData['spend_discount'] = '0.00';
$allData['spend_voucher'] = '0.00';
}
}
@ -1603,7 +1603,7 @@ class QueryController extends BaseController
public function userRoles()
{
$gameId = I('game_id', 0);
$relationGameId = I('relation_game_id', 0);
$serverId = I('server_id', 0);
$isSelf = I('is_self', 0);
$roleName = I('role_name', '');
@ -1633,8 +1633,13 @@ class QueryController extends BaseController
$map['_string'] = '1<>1';
}
if ($gameId != 0) {
$map['game_id'] = $gameId;
if ($relationGameId != 0) {
$gameMap['relation_game_id'] = $relationGameId;
if ($sdkVersion != 0) {
$gameMap['sdk_version'] = $sdkVersion;
}
$gameId = M('game', 'tab_')->where($gameMap)->getField('id', true);
$map['game_id'] = ['in', $gameId];
}
if ($serverId != 0) {
$map['server_id'] = $serverId;
@ -1645,9 +1650,6 @@ class QueryController extends BaseController
if ($userAccount != '') {
$map['user_account'] = ['like', '%' . $userAccount . '%'];
}
if ($sdkVersion != 0) {
$map['sdk_version'] = $sdkVersion;
}
if ($roleLevelBegin != 0 && $roleLevelEnd == 0) {
$map['role_level'] = ['egt', $roleLevelBegin];
} elseif ($roleLevelEnd != 0 && $roleLevelBegin == 0) {
@ -1693,7 +1695,7 @@ class QueryController extends BaseController
}
$games = $this->getGamesByPromote($promote);
$games = get_promote_serach_game();
$this->assign('games', $games);
$this->assign('records', $records);
@ -1704,7 +1706,7 @@ class QueryController extends BaseController
public function userRecharges()
{
$gameId = I('game_id', 0);
$relationGameId = I('relation_game_id', 0);
$serverId = I('server_id', 0);
$isSelf = I('is_self', 0);
$roleName = I('role_name', '');
@ -1724,6 +1726,7 @@ class QueryController extends BaseController
$begTime = strtotime($initBegTime);
$endTime = strtotime($initEndTime);
$endTime += 3600 * 24;
$nowTime = strtotime(date('Y-m-d 00:00:00', time()));
$promote = $this->getLoginPromote();
$levelPromote = $this->getLevelPromote();
@ -1733,48 +1736,38 @@ class QueryController extends BaseController
$pagination = '';
$count = 0;
if (intval($endTime - $begTime) / (24 * 3600) <= 31) {
$map = [
'_logic' => 'or',
'id' => $queryPromote['id'],
'chain' => ['like', $queryPromote['chain'] . $queryPromote['id'] . '/%']
];
$map['chain'] = ['like', $queryPromote['chain'] . $queryPromote['id'] . '/%'];
$ids = M('promote', 'tab_')->where($map)->getField('id', true);
$ids[] = $queryPromote['id'];
$map = [];
if (count($ids) > 0) {
$map = ['promote_id' => ['in', $ids]];
} else {
$map['_string'] = '1<>1';
}
$map = ['uc.promote_id' => ['in', $ids]];
$subMap = ['promote_id' => ['in', $ids]];
$subMap = [];
if ($gameId != 0) {
$map['game_id'] = $gameId;
$subMap['game_id'] = $gameId;
if ($relationGameId != 0) {
$gameMap['relation_game_id'] = $relationGameId;
if ($sdkVersion != 0) {
$gameMap['sdk_version'] = $sdkVersion;
}
$gameId = M('game', 'tab_')->where($gameMap)->getField('id', true);
$map['uc.game_id'] = ['in', $gameId];
$subMap['game_id'] = ['in', $gameId];
}
if ($serverId != 0) {
$map['server_id'] = $serverId;
$map['uc.server_id'] = $serverId;
$subMap['server_id'] = $serverId;
}
if ($roleName != '') {
$map['role_name'] = ['like', '%' . $roleName . '%'];
$map['ui.role_name'] = ['like', $roleName . '%'];
}
if ($userAccount != '') {
$map['user_account'] = ['like', '%' . $userAccount . '%'];
}
if ($sdkVersion != 0) {
$map['sdk_version'] = $sdkVersion;
$map['ui.user_account'] = ['like', $userAccount . '%'];
}
if ($isSelf) {
$map['promote_id'] = $queryPromote['id'];
$map['uc.promote_id'] = $queryPromote['id'];
}
$subMap['create_time'] = ['between', [$begTime, $endTime - 1]];
$roleIdMap = $subMap;
$roleIds = M('user_play_data_count', 'tab_')->where($roleIdMap)->group('role_id')->getField('role_id', true);
if (count($roleIds) > 0) {
$map['role_id'] = ['in', $roleIds];
}
if ($costBegin != '' || $costEnd != '') {
$having = '';
if ($costBegin != '' && $costEnd != '') {
@ -1789,7 +1782,7 @@ class QueryController extends BaseController
->group('game_id,server_id,role_id')
->having($having)
->buildSql();
$map['_string'] = 'role_id in(' . $subQuery . ')';
$map['_string'] = 'ui.role_id in(' . $subQuery . ')';
}
$orderBy = 'play_time desc';
@ -1815,57 +1808,29 @@ class QueryController extends BaseController
}
}
$spendMap['uc.create_time'] = ['between', [$begTime, $endTime - 1]];
$spendMap['_string'] = 'uc.game_id = tab_user_play_info.game_id and uc.server_id = tab_user_play_info.server_id and uc.role_id = tab_user_play_info.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();
$subQuery = M('user_play_info', 'tab_')
->field("*,$sqlCost as recharge_cost,$sqlCount as recharge_count,$sqlTodayCost as recharge_cost_today")
$map['uc.create_time'] = ['between', [$begTime, $endTime - 1]];
$fieldUC = "sum(uc.recharge_cost) recharge_cost,sum(uc.recharge_count) recharge_count,sum(if(uc.create_time = {$nowTime},uc.recharge_cost,0)) as recharge_cost_today";
$fieldUI = "ui.user_account,ui.game_name,ui.role_name,ui.role_level,ui.server_name,ui.play_time,ui.play_ip,ui.promote_account,ui.sdk_version";
$field = $fieldUC . ',' . $fieldUI;
$subQuery = M('user_play_data_count', 'tab_')->alias('uc')
->field($field)
->join('tab_user_play_info as ui on ui.game_id = uc.game_id and ui.server_id = uc.server_id and ui.role_id = uc.role_id')
->where($map)
->having('recharge_cost > 0')
->order('play_time desc')
->group('uc.role_id,uc.server_id,uc.game_id')
->buildSql();
$query = M()->field('*')
$query = M()->alias('record')
->table($subQuery)
->alias('a')
->order($orderBy);
list($roles, $pagination, $count) = $this->paginate($query);
list($records, $pagination, $count) = $this->paginate($query);
foreach ($roles as $role) {
$records[] = [
'user_account' => encryption($role['user_account']),
'game_name' => $role['game_name'],
'role_name' => $role['role_name'],
'role_id' => $role['role_id'],
'role_level' => $role['role_level'],
'server_id' => $role['server_id'],
'server_name' => $role['server_name'],
'recharge_cost' => empty($role['recharge_cost']) ? 0 : $role['recharge_cost'],
'recharge_count' => empty($role['recharge_count']) ? 0 : $role['recharge_count'],
'recharge_cost_today' => empty($role['recharge_cost_today']) ? 0 : $role['recharge_cost_today'],
'play_time' => $role['play_time'],
'play_ip' => $role['play_ip'],
'promote_id' => $role['promote_id'],
'promote_account' => $role['promote_account'],
'sdk_version' => $role['sdk_version'],
'unlogin_day' => intval((strtotime(date('Y-m-d 00:00:00')) - strtotime(date('Y-m-d 00:00:00', $role['play_time']))) / (24 * 3600))
];
foreach ($records as &$list) {
$list['user_account'] = encryption($list['user_account']);
$list['unlogin_day'] = intval((strtotime(date('Y-m-d 00:00:00')) - strtotime(date('Y-m-d 00:00:00', $list['play_time']))) / (24 * 3600));
}
}
$games = $this->getGamesByPromote($promote);
$games = get_promote_serach_game();
$this->assign('games', $games);
$this->assign('records', $records);
@ -1894,7 +1859,16 @@ class QueryController extends BaseController
public function getGameServers()
{
$gameId = I('game_id', 0);
$servers = M('server', 'tab_')->field(['id', 'server_id', 'server_name'])->where(['game_id' => $gameId])->order('server_id asc')->select();
$sdkVersion = I('sdk_version', 0);
$servers = [];
if (!empty($gameId)) {
$map['relation_game_id'] = $gameId;
if (in_array($sdkVersion, [1, 2])) {
$map['sdk_version'] = $sdkVersion;
}
$gameIds = M('game', 'tab_')->where($map)->getField('id', true);
$servers = M('server', 'tab_')->field(['id', 'server_id', 'server_name'])->where(['game_id' => ['in', $gameIds]])->order('server_id asc')->select();
}
$this->ajaxReturn([
'status' => 1,
'msg' => '成功',
@ -1965,7 +1939,7 @@ class QueryController extends BaseController
$defaultTime = date('Y-m-d', time());
}
$sdkVersion = I('sdk_version', 0);
$gameId = I('game_id', 0);
$relationGameId = I('relation_game_id', 0);
$serverId = I('server_id', 0);
$parentId = I('parent_id', 0);
$promoteId = I('promote_id', 0);
@ -1990,7 +1964,7 @@ class QueryController extends BaseController
$searchLevel = $parent['level'] + 1;
$searchLevelName = $promoteService->getLevelName($searchLevel);
$games = $this->getGamesByPromote($parent);
$games = get_promote_serach_game();
$subPromotes = M('promote', 'tab_')->field(['id', 'account', 'real_name'])->where(['parent_id' => $parent['id']])->select();
@ -2024,15 +1998,17 @@ class QueryController extends BaseController
'isContainSubs' => true,
'basicPromotes' => $basicPromotes,
];
if ($gameId > 0) {
$params['game_id'] = $gameId;
if ($relationGameId > 0) {
$gameMap['relation_game_id'] = $relationGameId;
if ($sdkVersion > 0) {
$gameMap['sdk_version'] = $sdkVersion;
}
$gameId = M('game', 'tab_')->where($gameMap)->getField('id', true);
$params['game_id'] = ['in', $gameId];
}
if ($serverId > 0) {
$params['server_id'] = $serverId;
}
if ($sdkVersion > 0) {
$params['sdk_version'] = $sdkVersion;
}
if ($status > 0) {
$params['lock_status'] = $status;
}

@ -4,7 +4,7 @@
<link href="__CSS__/20180207/data.css" rel="stylesheet">
<link href="__CSS__/20180207/game.css" rel="stylesheet">
<link href="__CSS__/20180207/finance.css" rel="stylesheet">
<link href="__CSS__/game_detailed.css?v=1.2" rel="stylesheet">
<link href="__CSS__/game_detailed.css?v=1.3" rel="stylesheet">
<link href="__STATIC__/icons_alibaba/iconfont.css" rel="stylesheet">
<style type="text/css">
@ -245,10 +245,10 @@
<volist name="list_data" id="vo">
<li class="game-li">
<div class="media">
<div class="img-box" onclick="viewGameDetailed({$vo.id})">
<div class="img-box" onclick="viewGameDetailed({$vo.id})" style="cursor: pointer;">
<img src="__ROOT__{$vo.icon|get_cover='path'}" />
</div>
<div class="game-msg" style="width: calc(92% - 90px);">
<div class="game-msg" style="width: calc(92% - 90px);" onclick="viewGameDetailed({$vo.id})">
<h5 class="game-title">
<if condition="$type eq 10">
{$vo.relation_game_name}
@ -340,7 +340,7 @@
<div class="panel-heading"><h3 class="panel-title">游戏截图</h3></div>
<div class="pic-box">
<div class="game-slides">
<ul style="width: 1400px;" class="game-slide-li">
<ul style="width: 2800px;" class="game-slide-li">
</ul>
</div>
@ -836,6 +836,7 @@
});
$('.game-slide-li').html(html);
$('.game-slide-li').css('left', '0px');
}
$('.detail-body').show();

@ -2,7 +2,7 @@
<block name="css">
<link href="__CSS__/20180207/data.css" rel="stylesheet">
<link href="__CSS__/20180207/game.css" rel="stylesheet">
<link href="__CSS__/game_detailed.css" rel="stylesheet">
<link href="__CSS__/game_detailed.css?v=1.3" rel="stylesheet">
<link href="__CSS__/my_game.css" rel="stylesheet">
<link href="__STATIC__/icons_alibaba/iconfont.css" rel="stylesheet">
<link href="__STATIC__/jqueryselect/css/layui.css" rel="stylesheet">
@ -146,10 +146,10 @@
<volist name="list_data" id="vo">
<li class="game-li">
<div class="media">
<div class="img-box" onclick="viewGameDetailed({$vo.id})">
<div class="img-box" onclick="viewGameDetailed({$vo.id})" style="cursor: pointer;">
<img src="__ROOT__{$vo.icon|get_cover='path'}"/>
</div>
<div class="game-msg" style="width: calc(65% - 90px);">
<div class="game-msg" style="width: calc(65% - 90px);" onclick="viewGameDetailed({$vo.id})">
<h5 class="game-title">{$vo.game_name}</h5>
<p><span>{$vo.features}</span></p>
<p>

@ -77,7 +77,7 @@
<tr>
<td class="l"></td>
<td class="r">
<input type="button" class="tj btn ajax-post" onclick="check()" value="确认添加" title="" target-form="base_info">
<input type="button" class="tj btn ajax-post" onclick="check()" value="确认添加" title="" target-form="base_info" style="cursor: pointer;">
<a class="back_btn " alt="返回上一页" title="返回上一页" href="javascript:window.history.back();">返回</a>
</td>
</tr>

@ -14,113 +14,61 @@
</div>
<div class="trunk-content article">
<div class="trunk-search clearfix">
<table class="tab jstab">
<tr>
<td class="<eq name='Think.get.type' value='0'>current<else /><empty name='Think.get.type'>current</empty></eq> first_border" ><a href="javascript:;" >基本信息</a></td>
<!--<td class="<eq name='Think.get.type' value='1'>current</eq>"><a href="javascript:;" >结算信息</a></td>-->
</tr>
</table>
<a href="javascript:;" style="cursor: auto;font-size: 14px;font-weight: 600;margin-left: 30px;">基本信息</a></td>
</div>
<div class="trunk-list">
<div class="tabpan <eq name='Think.get.type' value='0'>current<else /><empty name='Think.get.type'>current</empty></eq>">
<form action="{:U('Promote/edit_chlid',array('type'=>0))}" novalidate="novalidate" method="post" class="edit_info" id="form_child_info">
<table class="table2">
<tr>
<td class="l">登录帐号:</td>
<td class="r">
<input type="text" class="name txt" name="account" id="account" value="{$data['account']}" disabled="disabled">
<span id="account_tip"></span>
</td>
</tr>
<tr>
<td class="l">登录密码:</td>
<td class="r">
<input type="password" class="name txt" name="password" id="password" placeholder="如不更改密码,不需填写">
<span id="password_tip"></span>
</td>
</tr>
<tr>
<td class="l"><i style="margin-right:4px;color:red">*</i>子渠道昵称:</td>
<td class="r">
<input type="text" class="name txt" name="nickname" id="nickname" value="{$data['nickname']}" placeholder="请输入子渠道昵称">
<span id="nickname_tip"></span>
</td>
</tr>
<tr>
<td class="l"><i style="margin-right:4px;color:red">*</i>联系人:</td>
<td class="r">
<input type="text" class="name txt" name="real_name" id="real_name" value="{$data['real_name']}" placeholder="请输入子渠道联系人">
<span id="real_name_tip"></span>
</td>
</tr>
<tr>
<td class="l"><i style="margin-right:4px;color:red">*</i>手机号:</td>
<td class="r">
<input type="text" class="name txt" name="mobile_phone" id="mobile_phone" value="{$data['mobile_phone']}" placeholder="请输入子渠道手机号">
<span id="mobile_phone_tip"></span>
</td>
</tr>
<tr>
<td class="l">电子邮箱</td>
<td class="r">
<input type="text" class="name txt" name="email" id="email" value="{$data['email']}" placeholder="请输入子渠道电子邮箱">
<span id="email_tip"></span>
</td>
</tr>
<tr>
<td class="l"></td>
<td class="r">
<input type="hidden" name="id" value="{$data.id}"/>
<input type="submit" class="tj btn ajax-post" onclick="check('form_child_info')" value="确认修改" title="" target-form="edit_info">
<input type="submit" class="tj btn ajax-post" onclick="check('form_child_info')" value="确认修改" title="" target-form="edit_info" style="cursor: pointer;">
<a class="back_btn " alt="返回上一页" title="返回上一页" href="javascript:window.history.back();">返回</a>
</td>
</tr>
</table>
</form>
@ -128,21 +76,13 @@
<div class="tabpan <eq name='Think.get.type' value='1'>current</eq>">
<form action="{:U('Promote/edit_chlid',array('type'=>1))}" novalidate="novalidate" method="post" class="edit_info_bake" id="form_child_back" >
<table class="table2">
<!-- <tr>
<td class="l"><span class="req">*</span>结算电话:</td>
<td class="r">
<input type="text" class="name txt" name="mobile_phone" id="mobile_phone" value="{$data['mobile_phone']}" placeholder="输入结算电话">
<span id="password_tip"></span>
</td>
</tr> -->
<tr>
<td class="l"><span class="req">*</span>开户城市:</td>
<td class="r r1">
@ -172,72 +112,41 @@
<span id="bank_area_tip"></span>
</tr>
<tr>
<td class="l"><span class="req">*</span>开户网点:</td>
<td class="r">
<input type="text" class="name txt" name="account_openin" id="account_openin" value="{$data['account_openin']}" placeholder="请输入银行开户网点">
<span id="account_openin_tip"></span>
</td>
</tr>
<tr>
<td class="l"><span class="req">*</span>收款银行:</td>
<td class="r">
<input type="text" class="name txt" name="bank_name" id="bank_name" value="{$data['bank_name']}" placeholder="请输入收款银行">
<span id="bank_name_tip"></span>
</td>
</tr>
<tr>
<td class="l"><span class="req">*</span>银行户名:</td>
<td class="r">
<input type="text" class="name txt" name="bank_account" id="bank_account" value="{$data['bank_account']}" placeholder="请输入银行户名">
<span id="email_tip"></span>
</td>
</tr>
<tr>
<td class="l"><span class="req">*</span>银行卡号:</td>
<td class="r">
<input type="text" class="name txt" name="bank_card" id="bank_card" value="{$data['bank_card']}" placeholder="请输入银行卡号">
<span id="email_tip"></span>
</td>
</tr>
<tr>
<td class="l"></td>
<td class="r">
<input type="hidden" name="id" value="{$data.id}"/>
<input type="submit" class="tj btn ajax-post" onclick="check('form_child_back')" value="确认修改" title="" target-form="edit_info_bake">
<a class="back_btn " alt="返回上一页" title="返回上一页" href="javascript:window.history.back();">返回</a>
</td>
</tr>
</table>
</form>

@ -26,25 +26,25 @@
<form action="{:U('Query/achievement',['row'=>I('get.row')])}" method="post" enctype="multipart/form-data">
<input type="hidden" name="parent_id" value="{:I('parent_id', 0)}">
<div class="form-group normal_space">
<select id="game-select" name="game_id" class="reselect select_gallery" style="width: 220px;" >
<select id="game-select" name="relation_game_id" class="reselect select_gallery" style="width: 220px;" >
<option value="0">请选择游戏</option>
<volist name="games" id="game">
<option value="{$game.game_id}" <if condition="I('game_id') eq $game['game_id']">selected</if>>{$game.game_name}</option>
<option value="{$game.relation_game_id}" <if condition="I('relation_game_id') eq $game['relation_game_id']">selected</if>>{$game.relation_game_name}</option>
</volist>
</select>
</div>
<div class="form-group normal_space">
<select id="server-select" name="server_id" class="reselect select_gallery" style="width: 220px;" data-server="{:I('server_id', 0)}" >
<option value="0">请选择区服</option>
</select>
</div>
<div class="form-group normal_space">
<select name="sdk_version" class="reselect select_gallery" style="width: 220px;" >
<select id="sdk_version" name="sdk_version" class="reselect select_gallery" style="width: 220px;" >
<option value="0">请选择设备类型</option>
<option value="1" <if condition="I('sdk_version') === '1'">selected</if>>Andriod</option>
<option value="2" <if condition="I('sdk_version') === '2'">selected</if>>IOS</option>
</select>
</div>
<div class="form-group normal_space">
<select id="server-select" name="server_id" class="reselect select_gallery" style="width: 220px;" data-server="{:I('server_id', 0)}" >
<option value="0">请选择区服</option>
</select>
</div>
<div class="form-group normal_space">
<select name="status" class="reselect select_gallery" style="width: 220px;" >
<option value="0">帐号状态</option>
@ -165,35 +165,37 @@ $(function() {
defaultDate: defaultDate,
})
$('.select_gallery').select2()
var gameId = $('#game-select').val();
var defaultServerId = $('#server-select').attr('data-server');
getGameServers(gameId, defaultServerId)
$('#game-select').on({
change: function name() {
gameId = $('#game-select').val()
getGameServers(gameId, 0)
}
})
function getGameServers(gameId, defaultServerId) {
$.ajax({
url: "{:U('Query/getGameServers')}",
dataType: 'json',
data: {game_id: gameId},
success: function(response) {
var options = '<option value="0">请选择区服</option>'
for (var i in response.data.servers) {
var server = response.data.servers[i]
var selected = ''
if (defaultServerId > 0 && server.id==defaultServerId) {
selected = 'selected'
}
options += '<option value="' + server.server_id + '"' + selected + '>' + server.server_name + '</option>'
var gameId = $('#game-select').val();
var sdkVersion = $('#sdk_version').val();
var defaultServerId = $('#server-select').attr('data-server');
getGameServers(gameId, sdkVersion, defaultServerId)
$('#game-select,#sdk_version').on({
change: function name() {
gameId = $('#game-select').val();
sdkVersion = $('#sdk_version').val();
getGameServers(gameId, sdkVersion, 0);
}
$('#server-select').html(options)
$("#server-select").val(defaultServerId).trigger("change")
}
})
}
});
function getGameServers(gameId, sdkVersion, defaultServerId) {
$.ajax({
url: "{:U('Query/getGameServers')}",
dataType: 'json',
data: {game_id: gameId, sdk_version: sdkVersion},
success: function(response) {
var options = '<option value="0">请选择区服</option>'
for (var i in response.data.servers) {
var server = response.data.servers[i]
var selected = ''
if (defaultServerId > 0 && server.id==defaultServerId) {
selected = 'selected'
}
options += '<option value="' + server.server_id + '"' + selected + '>' + server.server_name + '</option>'
}
$('#server-select').html(options)
$("#server-select").val(defaultServerId).trigger("change")
}
})
}
})
</script>
</block>

@ -159,22 +159,22 @@
<if condition="I('game_id', 0) gt 0">
<th>游戏名称</th>
<else/>
<th>付费游戏数</th>
<th title="当日有产生付费的游戏(区分 Android与ios)">付费游戏数</th>
</if>
<if condition="I('promote_id', 0) gt 0 or I('sub_promote_id', 0) gt 0">
<th>所属渠道</th>
</if>
<th>活跃用户</th>
<th>新增用户</th>
<th>付费用户</th>
<th>新增付费用户</th>
<th>付费总额</th>
<th>付费率</th>
<th>新增付费额</th>
<th>累计付费用户</th>
<th title="当日在线的推广玩家">活跃用户</th>
<th title="当日新注册用户付费用户:当日游戏充值用户">新增用户</th>
<th title="当日游戏充值用户">付费用户</th>
<th title="注册以来首次充值的用户">新增付费用户</th>
<th title="当日充值总额">付费总额</th>
<th title="单日在线玩家充值率">付费率</th>
<th title="新增注册用户充值总额">新增付费额</th>
<th title="历史累计付费注册用户(去重)">累计付费用户</th>
<!-- <th>1日留存</th> -->
<th>ARPU</th>
<th>ARPPU</th>
<th title="即每个用户平均收入">ARPU</th>
<th title="每付费用户平均收益">ARPPU</th>
<if condition="I('game_id', 0) eq 0">
<th>详情</th>
</if>

@ -35,25 +35,25 @@
<div class="trunk-content article">
<div class="trunk-search clearfix jssearch">
<div class="form-group normal_space">
<select id="game-select" name="game_id" class="reselect select_gallery" style="width: 220px;" >
<select id="game-select" name="relation_game_id" class="reselect select_gallery" style="width: 220px;" >
<option value="0">请选择游戏</option>
<volist name="games" id="game">
<option value="{$game.game_id}" <if condition="I('game_id') === $game['game_id']">selected</if>>{$game.game_name}</option>
<option value="{$game.relation_game_id}" <if condition="I('relation_game_id') === $game['relation_game_id']">selected</if>>{$game.relation_game_name}</option>
</volist>
</select>
</div>
<div class="form-group normal_space">
<select id="server-select" name="server_id" class="reselect select_gallery" style="width: 220px;" data-server="{:I('server_id', 0)}">
<option value="0">请选择区服</option>
</select>
</div>
<div class="form-group normal_space">
<select name="sdk_version" class="reselect select_gallery" style="width: 220px;" >
<select id="sdk_version" name="sdk_version" class="reselect select_gallery" style="width: 220px;" >
<option value="0">请选择设备类型</option>
<option value="1" <if condition="I('sdk_version') === '1'">selected</if>>Andriod</option>
<option value="2" <if condition="I('sdk_version') === '2'">selected</if>>IOS</option>
</select>
</div>
<div class="form-group normal_space">
<select id="server-select" name="server_id" class="reselect select_gallery" style="width: 220px;" data-server="{:I('server_id', 0)}">
<option value="0">请选择区服</option>
</select>
</div>
<include file="Public/promote_select" />
<div class="form-group normal_space">
<input type="text" name="role_name" class="txt normal_txt" placeholder="请输入角色名" value="{:I('role_name')}">
@ -224,19 +224,21 @@ $(function(){
});
var gameId = $('#game-select').val();
var sdkVersion = $('#sdk_version').val();
var defaultServerId = $('#server-select').attr('data-server');
getGameServers(gameId, defaultServerId)
$('#game-select').on({
getGameServers(gameId, sdkVersion, defaultServerId)
$('#game-select,#sdk_version').on({
change: function name() {
gameId = $('#game-select').val()
getGameServers(gameId, 0)
gameId = $('#game-select').val();
sdkVersion = $('#sdk_version').val();
getGameServers(gameId, sdkVersion, 0);
}
})
function getGameServers(gameId, defaultServerId) {
});
function getGameServers(gameId, sdkVersion, defaultServerId) {
$.ajax({
url: "{:U('Query/getGameServers')}",
dataType: 'json',
data: {game_id: gameId},
data: {game_id: gameId, sdk_version: sdkVersion},
success: function(response) {
var options = '<option value="0">请选择区服</option>'
for (var i in response.data.servers) {

@ -24,25 +24,25 @@
<div class="trunk-content article">
<div class="trunk-search clearfix jssearch">
<div class="form-group normal_space">
<select id="game-select" name="game_id" class="reselect select_gallery" style="width: 220px;" >
<select id="game-select" name="relation_game_id" class="reselect select_gallery" style="width: 220px;" >
<option value="0">请选择游戏</option>
<volist name="games" id="game">
<option value="{$game.game_id}" <if condition="I('game_id') eq $game['game_id']">selected</if>>{$game.game_name}</option>
<option value="{$game.relation_game_id}" <if condition="I('relation_game_id') eq $game['relation_game_id']">selected</if>>{$game.relation_game_name}</option>
</volist>
</select>
</div>
<div class="form-group normal_space">
<select id="server-select" name="server_id" class="reselect select_gallery" style="width: 220px;" data-server="{:I('server_id', 0)}">
<option value="0">请选择区服</option>
</select>
</div>
<div class="form-group normal_space">
<select name="sdk_version" class="reselect select_gallery" style="width: 220px;" >
<select id="sdk_version" name="sdk_version" class="reselect select_gallery" style="width: 220px;" >
<option value="0">请选择设备类型</option>
<option value="1" <if condition="I('sdk_version') === '1'">selected</if>>Andriod</option>
<option value="2" <if condition="I('sdk_version') === '2'">selected</if>>IOS</option>
</select>
</div>
<div class="form-group normal_space">
<select id="server-select" name="server_id" class="reselect select_gallery" style="width: 220px;" data-server="{:I('server_id', 0)}">
<option value="0">请选择区服</option>
</select>
</div>
<include file="Public/promote_select" />
<div class="form-group normal_space">
<input type="text" name="role_name" class="txt normal_txt" id="uid" placeholder="请输入角色名" value="{:I('role_name')}">
@ -140,35 +140,37 @@ $(function() {
defaultDate: defaultDate,
})
$('.select_gallery').select2()
var gameId = $('#game-select').val();
var defaultServerId = $('#server-select').attr('data-server');
getGameServers(gameId, defaultServerId)
$('#game-select').on({
change: function name() {
gameId = $('#game-select').val()
getGameServers(gameId, 0)
}
})
function getGameServers(gameId, defaultServerId) {
$.ajax({
url: "{:U('Query/getGameServers')}",
dataType: 'json',
data: {game_id: gameId},
success: function(response) {
var options = '<option value="0">请选择区服</option>'
for (var i in response.data.servers) {
var server = response.data.servers[i]
var selected = ''
if (defaultServerId > 0 && server.id==defaultServerId) {
selected = 'selected'
}
options += '<option value="' + server.server_id + '"' + selected + '>' + server.server_name + '</option>'
var gameId = $('#game-select').val();
var sdkVersion = $('#sdk_version').val();
var defaultServerId = $('#server-select').attr('data-server');
getGameServers(gameId, sdkVersion, defaultServerId)
$('#game-select,#sdk_version').on({
change: function name() {
gameId = $('#game-select').val();
sdkVersion = $('#sdk_version').val();
getGameServers(gameId, sdkVersion, 0);
}
$('#server-select').html(options)
$("#server-select").val(defaultServerId).trigger("change")
}
})
}
});
function getGameServers(gameId, sdkVersion, defaultServerId) {
$.ajax({
url: "{:U('Query/getGameServers')}",
dataType: 'json',
data: {game_id: gameId, sdk_version: sdkVersion},
success: function(response) {
var options = '<option value="0">请选择区服</option>'
for (var i in response.data.servers) {
var server = response.data.servers[i]
var selected = ''
if (defaultServerId > 0 && server.id==defaultServerId) {
selected = 'selected'
}
options += '<option value="' + server.server_id + '"' + selected + '>' + server.server_name + '</option>'
}
$('#server-select').html(options)
$("#server-select").val(defaultServerId).trigger("change")
}
})
}
var promoteUrl = "{:U('Query/getSubPromotes')}"
initPromoteSelect(promoteUrl)

@ -510,25 +510,21 @@ 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',
`user_id` int(11) NOT NULL DEFAULT 0 COMMENT '玩家ID',
`promote_id` int(11) NOT NULL DEFAULT 0 COMMENT '推广员ID',
`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 '创建时间',
`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
KEY `create_time` (`create_time`) USING BTREE,
KEY `search` (`user_id`,`promote_id`,`game_id`,`server_id`,`role_id`,`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`, `create_time`) 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;
--
CREATE TABLE `tab_idcard_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
@ -547,3 +543,22 @@ ALTER TABLE `tab_withdraw`
ADD COLUMN `last_up_update_time` int(10) NOT NULL DEFAULT 0 COMMENT '最后更新时间',
ADD COLUMN `spend_ids` longtext NOT NULL COMMENT '充值订单id';
--广oa
ALTER TABLE `tab_promote`
ADD COLUMN`oa_associated` tinyint(1) DEFAULT '0' COMMENT 'oa是否关联',
----
ALTER TABLE `tab_user_play_info`
ADD INDEX `game_id`(`game_id`, `server_id`, `role_id`);
-- SDK菜单配置
INSERT INTO `platform`.`tab_tool` (`name`, `title`, `config`, `template`, `type`, `status`, `create_time` )
VALUES
('personal_menu', '个人中心列表', '[{\"name\":\"gift\",\"title\":\"\\u793c\\u5305\",\"menu_version\":\"0\",\"url\":\"\\/sdk.php\\/GameGiftPage\\/gift_list\",\"type\":\"0\",\"act\":\"gift\",\"ios_url\":\"?action=gift\",\"sort\":\"1\",\"id\":1,\"icon\":\"\\/Uploads\\/Picture\\/2019-11-20\\/5dd526395e339.png\",\"cover\":\"1986\"},{\"name\":\"balance\",\"title\":\"\\u4f59\\u989d\",\"menu_version\":\"0\",\"url\":\"\\/sdk.php\\/UserH\\/get_user_money\",\"type\":\"0\",\"act\":\"\\/sdk.php\\/UserH\\/get_user_money\",\"ios_url\":\"\\/sdk.php\\/UserH\\/get_user_money\",\"sort\":\"2\",\"id\":\"2\",\"icon\":\"\\/Uploads\\/Picture\\/2019-11-20\\/5dd5264d1e202.png\",\"cover\":\"1987\"},{\"name\":\"message\",\"title\":\"\\u6d88\\u606f\",\"menu_version\":\"0\",\"url\":\"\",\"type\":\"1\",\"act\":\"msg\",\"ios_url\":\"\",\"sort\":\"3\",\"id\":3,\"icon\":\"\\/Uploads\\/Picture\\/2019-11-20\\/5dd5265fb396d.png\",\"cover\":\"1988\"},{\"name\":\"support\",\"title\":\"\\u5ba2\\u670d\",\"menu_version\":\"0\",\"url\":\"\",\"type\":\"1\",\"act\":\"support\",\"ios_url\":\"\",\"sort\":\"4\",\"id\":4,\"icon\":\"\\/Uploads\\/Picture\\/2019-11-20\\/5dd52674492b7.png\",\"cover\":\"1989\"}]', '', 5, 1, 1571723212 );
INSERT INTO `platform`.`tab_tool` (`name`, `title`, `config`, `template`, `type`, `status`, `create_time` )
VALUES
('contact_cs', '联系客服', '[{\"name\":\"support\",\"title\":\"\\u8054\\u7cfb\\u5ba2\\u670d\",\"menu_version\":\"0\",\"url\":\"\",\"type\":\"2\",\"act\":\"3007567814\",\"ios_url\":\"3007567814\",\"sort\":\"1\",\"id\":1,\"icon\":\"\",\"cover\":\"\"}]', '', 5, 1, 1571723212 );
INSERT INTO `platform`.`tab_tool` (`name`, `title`, `config`, `template`, `type`, `status`, `create_time` )
VALUES
('sdk_menu', 'SDK用户菜单', '[{\"name\":\"mine\",\"title\":\"\\u6211\\u7684\",\"menu_version\":\"0\",\"url\":\"\",\"type\":\"1\",\"act\":\"my\",\"ios_url\":\"\",\"sort\":\"1\",\"id\":\"1\",\"icon\":\"\\/Uploads\\/Picture\\/2019-11-20\\/5dd524dfd76fa.png\",\"cover\":\"1980\"},{\"name\":\"gift\",\"title\":\"\\u793c\\u5305\",\"menu_version\":\"0\",\"url\":\"\\/sdk.php\\/GameGiftPage\\/gift_list\",\"type\":\"0\",\"act\":\"gift\",\"ios_url\":\"?action=gift\",\"sort\":\"2\",\"id\":2,\"icon\":\"\\/Uploads\\/Picture\\/2019-11-20\\/5dd52509f3767.png\",\"cover\":\"1981\"},{\"name\":\"support\",\"title\":\"\\u5ba2\\u670d\",\"menu_version\":\"0\",\"url\":\"\",\"type\":\"1\",\"act\":\"support\",\"ios_url\":\"\",\"sort\":\"3\",\"id\":3,\"icon\":\"\\/Uploads\\/Picture\\/2019-11-20\\/5dd5251e0aee3.png\",\"cover\":\"1982\"},{\"name\":\"message\",\"title\":\"\\u6d88\\u606f\",\"menu_version\":\"0\",\"url\":\"\",\"type\":\"1\",\"act\":\"msg\",\"ios_url\":\"\",\"sort\":\"4\",\"id\":4,\"icon\":\"\\/Uploads\\/Picture\\/2019-11-20\\/5dd525606ff53.png\",\"cover\":\"1983\"},{\"name\":\"logout\",\"title\":\"\\u9000\\u51fa\",\"menu_version\":\"0\",\"url\":\"\",\"type\":\"1\",\"act\":\"logout\",\"ios_url\":\"\",\"sort\":\"5\",\"id\":5,\"icon\":\"\\/Uploads\\/Picture\\/2019-11-20\\/5dd525d99ed99.png\",\"cover\":\"1984\"},{\"name\":\"suppersign\",\"title\":\"\\u8d85\\u7ea7\\u7b7e\",\"menu_version\":\"2\",\"url\":\"\\/mobile.php\\/ssg\\/home\",\"type\":\"2\",\"act\":\"suppersign\",\"ios_url\":\"http:\\/\\/m.wmtxkj.cn\\/mobile.php\\/ssg\\/home\",\"sort\":\"6\",\"id\":6,\"icon\":\"\\/Uploads\\/Picture\\/2019-11-20\\/5dd525f388843.png\",\"cover\":\"1985\"}]', '', 5, 1, 1571723212 );

@ -5,7 +5,6 @@
top: 0;
left: 0;
z-index: 1500;
background-color: #F5F6FA;
}
.detail-body .detail-box {
@ -29,6 +28,8 @@
.game-detail-inner .detail-list {
padding: 20px;
margin-bottom: 20px;
background-color: #fff;
border-radius: .286rem;
}
.game-detail-inner .detail-list dl {
@ -301,6 +302,7 @@
border-bottom: 1px solid transparent;
border-top-left-radius: .214rem;
border-top-right-radius: .214rem;
border-bottom: 1px solid #e4eaec;
}
.panel-bordered > .panel-heading > .panel-title {

Loading…
Cancel
Save