You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1436 lines
55 KiB
PHP

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace Admin\Controller;
use Sdk\Controller\AgeController;
use Think\Log;
use User\Api\MemberApi as MemberApi;
use Org\WeixinSDK\Weixin;
class MemberController extends ThinkController
{
/**
*玩家列表信息
*/
public function user_info($p=0){
//设定默认时间
// if(!array_key_exists("time_start",$_REQUEST) && I('type') != 2){
// $this->redirect(ACTION_NAME, array('time_start' => date('Y-m-d',strtotime('-30 day')),"time_end"=>date('Y-m-d')));
// }
//基础信息
$page = intval($p);
$page = $page ? $page : 1; //默认显示第一页数据
if (isset($_REQUEST['row'])) {
$row = $_REQUEST['row'];
} else {
$row = 10;
}
//累计充值,账户平台币排序
$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 .= 'tab_user.id desc';
//1条件筛选
$map = [];
$map['puid'] = array('eq', 0);
$map['is_platform'] = 0;
$havs=false;
//1.1 user表相关
if (isset($_REQUEST['user_id'])) {
$map['tab_user.id'] = $_REQUEST['user_id'];
}
if (isset($_REQUEST['account'])) {
$map['tab_user.account'] = ['like',I('account') . "%"];
}
if (isset($_REQUEST['time_start']) && isset($_REQUEST['time_end'])) {
$map['tab_user.register_time'] = ['between', [strtotime(I('time_start')), strtotime(I('time_end')) + 86399]];
} elseif (isset($_REQUEST['time_start'])) {
$map['tab_user.register_time'] = ['GT', strtotime(I('time_start'))];
} elseif (isset($_REQUEST['time_end'])) {
$map['tab_user.register_time'] = ['LT', strtotime(I('time_end')) + 86399];
}
if (isset($_GET['register_way'])) {
$map['tab_user.register_type'] = $_GET['register_way'];
}else{
if (I('type', 1) == 1) {
$map['tab_user.register_type'] = ['not in', [0, 3, 4, 5, 6]];
}else{
$map['tab_user.register_type'] = ['in', [0, 3, 4, 5, 6]];
}
}
//判断重复
$is_repeat = false;
if (isset($_REQUEST['is_repeat'])) {
$map['tab_user.is_repeat'] = $_REQUEST['is_repeat'];
$is_repeat = true;
}
if (isset($_REQUEST['status'])) {
$map['lock_status'] = $_REQUEST['status'];
}
if (isset($_REQUEST['viplevel'])) {
$havs = get_vip_level_limit('recharge_total', $_REQUEST['viplevel']);
}
//1.2 与游戏相关 查询游戏玩家表
$gameplay =false;
if (isset($_REQUEST['game_name']) || isset($_REQUEST['game_type'])) {
$gameplay = " and tab_user_play.game_id in (" . implode(',', array_column(getGameByName($_REQUEST['game_name'], $_REQUEST['game_type']), 'id')) . ")";
}
//查询游戏角色表
$game_map = false;
if (isset($_REQUEST['server_id'])) { //有区服,一定有游戏
$gameplay =false;
$game_map = " and tab_user_play_info.server_id = '{$_REQUEST['server_id']}' ";
$game_map .= " and tab_user_play_info.game_id in (" . implode(',', array_column(getGameByName($_REQUEST['game_name'], $_REQUEST['game_type']), 'id')) . ")";
}
//查询设备号
if (isset($_REQUEST['device_number'])) {
$map['tab_user.device_number'] = $_REQUEST['device_number'];
}
$promoteRoot = getPowerPromoteIds();
setPowerPromoteIds($map,'tab_user.promote_id');
//1.3 与推广员相关
$promoterSelect = false;
if ($_REQUEST['promote_id'] != '') {
$promoterSelect = true;
$spendprom = '';
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 ($promoteRoot) {
$promoteRoot = " and id IN({$promoteRoot})";
}
if ($promoteRoot!='all') {
$promoteRoot = '';
}
$promoter_ids = D("Promote")->where("(chain like '%/{$_REQUEST['promote_id']}/%' or id={$_REQUEST['promote_id']})".$promoteRoot)->field('id')->select();
if ($promoter_ids) {
$map['tab_user.promote_id'] = ['in', implode(',', array_column($promoter_ids, 'id'))];
$spendprom = " AND ss.promote_id IN (" . implode(',', array_column($promoter_ids, 'id')) . ") ";
}
}
}
//判断是否有列表和统计的权限
$this->checkListOrCountAuthRestMap($map,["tab_user.id","tab_user.account","tab_user.device_number"]);
//计算用户列表
$data = M("user","tab_")
->field("tab_user.id,`device_number`,`age_status`,`account`,`balance`,`gold_coin`,`alipay`,tab_user.promote_id,`register_type`,tab_user.promote_account,`register_time`,`lock_status`,lock_remark,
`register_way`,`register_ip`,`login_time`,`check_status`,IFNULL(ss.pay_amount,0) AS recharge_total,tab_user.is_repeat")
->where($map)
->group("tab_user.id")
->order($order);
if($havs){
$data->having($havs);
}
if($gameplay){
$data->join("
(select user_id from tab_user_play where 1 $gameplay group by tab_user_play.user_id) a ON a.user_id = tab_user.id
");
}
if($game_map){
$data->join("
(select user_id from tab_user_play_info where 1 $game_map group by tab_user_play_info.user_id) a ON a.user_id = tab_user.id
");
}
$data->join("tab_user_data AS ss ON ss.user_id = tab_user.id","left");
if(!isset($_REQUEST['export'])){
$data ->page($page, $row);
}
$data = $data->select();
if(isset($_REQUEST['export'])){
$isadmin = is_administrator();
//获取等级
$tool = M('tool',"tab_")->field('config,status')->where(['name'=>'viplevel'])->find();
$viplevel = false;
if(!empty($tool) && $tool['status']==1){
$viplevel = json_decode($tool['config'],true);
$len = count($viplevel);
if(empty($viplevel)) {$viplevel = false;}
}
foreach ($data as $k => &$v) {
$v['register_type'] = get_registertype($v['register_type']);
if(!$isadmin){
$v['account'] = encryptStr($v['account']);
$v['promote_account'] = encryptStr($v['promote_account']);
$v['device_number'] = encryptStr($v['device_number']);
}
empty($v['alipay']) && $v['alipay']="--";
empty($v['small_count']) && $v['small_count']="--";
$v['gold_coin']?:'0.00';
if($viplevel){
$vl=0;
$money = intval($v['recharge_total']*10000);
foreach($viplevel as $k=>$value) {
$i = intval(str_replace('vip','',$k));
if($money<intval($value*10000)) {$vl = $i-1;break;}
if($i == $len) {$vl = $i;}
}
$v['vip_level'] = $vl;
}else{
$v['vip_level'] = 0;
}
$v['register_time'] = date('Y-m-d H:i:s',$v['register_time']);
$v['login_time'] = set_show_time($v['login_time']);
$v['lock_status'] = get_info_status($v['lock_status'],4);
$v['check_status'] = $v['check_status']==1 ? "正常" :"拉黑";
$v['is_repeat'] = $v['is_repeat']==1 ? "" :"";
}
$field = array(
"id"=>"账号ID","account"=>"玩家账号","promote_account"=>"所属推广员","balance"=>"账户平台币","recharge_total"=>"累计充值","gold_coin"=>"金币",
"small_count"=>"小号","vip_level"=>"VIP等级","register_type"=>"注册方式","register_time"=>"注册时间","register_ip"=>"注册IP","login_time"=>"最后登录时间",
"device_number"=>"设备号","is_repeat"=>"去重数据","lock_remark"=>"锁定备注","lock_status"=>"账号状态","check_status"=>"拉黑状态"
);
//操作日志
unset($_GET['export']);
addOperationLog(array(
"op_type"=>3,
"key"=>getNowDate(),
"url"=>U("Member/user_info",$_GET),
'menu'=>"用户-玩家组-玩家列表-导出"
));
data2csv($data,"玩家_玩家列表",$field);
}
//计算总人数
if($is_repeat){
$field ="count(*) user_count,IFNULL(sum(ss.pay_amount), 0) recharge_total";
}else{
$field = "IFNULL(SUM(CASE WHEN is_repeat > 0 THEN 1 ELSE 0 END),0) as repeat_count,IFNULL(SUM(CASE WHEN is_repeat = 0 THEN 1 ELSE 0 END),0) as no_repeat_count,IFNULL(sum(ss.pay_amount), 0) recharge_total";
}
if($havs){
$map["_string"] = get_vip_level_limit('ss.pay_amount', $_REQUEST['viplevel']);
}
$user_count = M("user","tab_")
->field($field)
->where($map);
if($game_map){
$user_count->join("
(select user_id from tab_user_play_info where 1 $game_map group by tab_user_play_info.user_id) a ON a.user_id = tab_user.id
");
}
if($gameplay){
$user_count->join("
(select user_id from tab_user_play where 1 $gameplay group by tab_user_play.user_id) a ON a.user_id = tab_user.id
");
}
$user_count->join("tab_user_data AS ss ON ss.user_id = tab_user.id","left");
$userDbRes = $user_count->find();
if($is_repeat){
$user_count =$userDbRes['user_count'];
if($_REQUEST['is_repeat'] == 0){
$repeat_count = 0;
$no_repeat_count = $user_count;
}else{
$repeat_count = $user_count;
$no_repeat_count = 0;
}
}else{
$user_count = $userDbRes['no_repeat_count']-0+$userDbRes['repeat_count'];
$repeat_count = $userDbRes['repeat_count'];
$no_repeat_count = $userDbRes['no_repeat_count'];
}
$this->assign('repeat_count',$repeat_count);
$this->assign('no_repeat_count',$no_repeat_count);
$this->assign('user_count',$user_count);
$this->assign('now_count', $userDbRes['recharge_total']);
$page = set_pagination($user_count, $row);
if ($page) {
$this->assign('_page', $page);
}
$this->assign('list_data', $data);
$show_data_power = (is_administrator()|| session('user_auth')['show_data']);
$this->assign('show_data_power', $show_data_power);
$this->display();
}
/**
* 小号列表
* @author 鹿文学
*/
public function small_list($p = 1)
{
//$map['puid'] = $_GET['id'];
$pid = intval($_GET['id']);
if (is_numeric($pid) && $pid > 0) {
$map['_string'] = ' (puid = ' . $pid . ') or (source_puid = ' . $pid . ' and source_time = 0) ';
$page = intval($p);
$page = $page ? $page : 1; //默认显示第一页数据
if (isset($_REQUEST['row'])) {
$row = $_REQUEST['row'];
} else {
$row = 10;
}
if ($_REQUEST['small']) {
$map['account'] = array('like', '%' . $_REQUEST['small'] . '%');
}
$data = M('User', 'tab_')
->field('id,account,register_time,puid,source_puid,source_time,fgame_id,fgame_name,cumulative,balance,lock_status,DATEDIFF(curdate(),FROM_UNIXTIME(register_time,"%Y-%m-%d")) as day')
// 查询条件
->where($map)
/* 默认通过id逆序排列 */
->order('register_time desc')
/* 数据分页 */
->page($page, $row)
/* 执行查询 */
->select();
/* 查询记录总数 */
$count = M('User', 'tab_')->where($map)->count();
//分页
$page = set_pagination($count, $row);
if ($page) {
$this->assign('_page', $page);
}
$this->assign('list_data', $data);
$this->assign('pid', $pid);
}
$this->display();
}
/**
* 公用小号列表
* @author 鹿文学
*/
public function public_small_list($p = 1)
{
$pid = intval($_GET['id']);
if (is_numeric($pid) && $pid > 0) {
$page = intval($p);
$page = $page ? $page : 1; //默认显示第一页数据
if (isset($_REQUEST['row'])) {
$row = $_REQUEST['row'];
} else {
$row = 10;
}
$map['u.puid'] = $pid;
if ($_REQUEST['small']) {
$map['u.account'] = array('like', '%' . $_REQUEST['small'] . '%');
}
$data = M('User', 'tab_')->alias('u')
->field('u.id,u.account,u.register_time,u.cumulative,u.balance,fgame_id,fgame_name,u.lock_status,DATEDIFF(curdate(),FROM_UNIXTIME(u.register_time,"%Y-%m-%d")) as day')
->join('tab_merchandise as m on ((m.status = 3 or m.status=0 or m.status = 4) and m.small_id = u.id) ')
// 查询条件
->where($map)
/* 默认通过id逆序排列 */
->order('u.register_time desc')
/* 数据分页 */
->page($page, $row)
/* 执行查询 */
->select();
/* 查询记录总数 */
$count = M('User', 'tab_')->alias('u')
->join('tab_merchandise as m on ((m.status = 3 or m.status=0 or m.status = 4) and m.small_id = u.id) ')
->where($map)->count();
//分页
$page = set_pagination($count, $row);
if ($page) {
$this->assign('_page', $page);
}
$this->assign('list_data', $data);
}
$this->display();
}
/**
* 金币提现记录
* @author 鹿文学
*/
public function gold_coin($p = 1, $user_id = '')
{
if (is_numeric($user_id) && $user_id > 0) {
$wgc = D('WithdrawGoldCoin');
$list = $wgc->listsByUser($p, $user_id);
$map = array('pay_status' => 1, 'user_id' => $user_id);
$total = null_to_0($wgc->where($map)->sum('coin'));
$ttotal = null_to_0($wgc->where('create_time' . total(1))->where($map)->sum('coin'));
$poundage = null_to_0($wgc->where($map)->sum('poundage'));
$this->assign('total', $total);
$this->assign('ttotal', $ttotal);
$this->assign('poundage', $poundage);
$this->assign('list_data', $list);
}
$this->display();
}
public function role_list($p = 1, $user_id = '', $row = 10)
{
$limit = ($p - 1) * $row . ", $row";
$list = M("user_play_info", 'tab_')->where(['user_id' => $user_id])->limit($limit)->order('play_time desc')->select();
$count = M("user_play_info", 'tab_')->where(['user_id' => $user_id])->count();
$page = set_pagination($count, $row);
if ($page) {
$this->assign('_page', $page);
}
$this->assign('list', $list);
$this->display();
}
/**
* 公用账户
* @author 鹿文学
*/
public function public_account()
{
if (IS_POST) {
$user = new MemberApi();
if (!empty($data['account'])) {
$data['account'] = str_replace('pa_', '', $data['account']);
}
$res = $user->updateUserInfo($_POST);
if ($res['status'] !== false) {
\Think\Log::actionLog("Member/public_account", "Member", $id);
$this->success($res['msg'], U('public_account'));
} else {
$this->error($res['msg']);
}
} else {
$map['is_platform'] = 1;
$user = D('User');
$data = $user->where($map)->find();
if ($data['id']) {
$data['small_count'] = $user->alias('u')->join('tab_merchandise as m on ((m.status = 3 or m.status=0 or m.status=4) and m.small_id = u.id) ')
->where(['u.puid' => $data['id']])->count();
}
$this->assign('data', $data);
$this->meta_title = "公用账户信息";
$this->m_title = '公用账户信息';
$this->assign('commonset', M('Kuaijieicon')->where(['url' => 'Member/public_account', 'status' => 1])->find());
$this->display();
}
}
//设置状态
public function set_status($model = 'User')
{
if (isset($_REQUEST['model'])) {
$model = $_REQUEST['model'];
unset($_REQUEST['model']);
}
parent::set_status($model);
}
public function edit($id = null)
{
if (IS_POST) {
$member = new MemberApi();
$data = $_REQUEST;
if (empty($data['password'])) {
unset($data['password']);
}
if (!empty($data['real_name']) && (\mb_strlen($data['real_name']) > 5 || \mb_strlen($data['real_name']) <= 1)) {
$this->error('请填写正确的名字');
}
/* if (!empty($data['idcard']) && !preg_match('/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/', $data['idcard'])) {
$this->error('请输入正确的身份证号码');
}*/
$res = $member->updateInfo($data);
if ($res !== false) {
\Think\Log::actionLog("Member/edit", "Member", $id);
//操作日志
$this->userEditOperationLog($id);
$this->success("修改成功", U('user_info'));
} else {
$this->error("修改失败");
}
} else {
$user = A('User', 'Event');
$data = $user->user_entity($id);
if (is_numeric($data['head_img'])) {
$data['head_img'] = get_cover($data['head_img'], 'cover');
}
if (empty($data['head_img'])) {
$data['head_img'] = $data['sex'] == 1 ? C('TMPL_PARSE_STRING.__IMG__') . '/head_women.png' : C('TMPL_PARSE_STRING.__IMG__') . '/logoo.png';
}
$this->assign('data', $data);
$this->meta_title = "玩家信息";
$spend_totle = M('spend', 'tab_')->where(['user_id' => $id, 'pay_status' => 1])->sum('pay_amount');
$deposit_totle = M('deposit', 'tab_')->where(['user_id' => $id, 'pay_status' => 1])->sum('pay_amount');
$this->assign('recharge_total', $spend_totle + $deposit_totle);
$this->m_title = '玩家列表';
$this->assign("is_admin",is_administrator());
$show_data_power = (is_administrator()|| session('user_auth')['show_data']);
$this->assign('show_data_power', $show_data_power);
$this->assign('commonset', M('Kuaijieicon')->where(['url' => 'Member/user_info', 'status' => 1])->find());
$this->display();
}
}
public function bind_balance($p = 1)
{
$map['user_id'] = $_REQUEST['id'];
$data = M("user_play", "tab_")
// 查询条件
->where($map)
->group('user_account,game_name')
/* 执行查询 */
->select();
$this->assign('list_data', $data);
$this->display();
}
public function balance($p = 1)
{
$map['user_id'] = $_REQUEST['id'];
$data = M("user", "tab_")
// 查询条件
->where($map)
/* 执行查询 */
->select();
$this->assign('list_data', $data);
$this->display();
}
/**
* 系统非常规MD5加密方法
* @param string $str 要加密的字符串
* @return string
*/
function think_ucenter_md5($str, $key = 'ThinkUCenter')
{
return '' === $str ? '' : md5(sha1($str) . $key);
}
public function checkpwd()
{
$res = D('Member')->check_sc_pwd(I('second_pwd'));
if ($res) {
$this->ajaxReturn(array("status" => 1, "msg" => "成功"));
} else {
$this->ajaxReturn(array("status" => -1, "msg" => "二级密码错误"));
}
}
public function balance_edit()
{
$res = D('Member')->check_sc_pwd($_REQUEST['second_pwd_']);
if ($res) {
$map['id'] = $_REQUEST['id'];
$data = array(
'balance' => $_REQUEST['balance']
);
$user = M('user', 'tab_')->where($map)->find();
$pro = M("user", "tab_")->where($map)->setfield('balance', $_REQUEST['balance']);
if ($pro !== false) {
$data = array(
'user_id' => $_REQUEST['id'],
'user_account' => get_user_account($_REQUEST['id']),
'game_id' => '',
'game_name' => '',
'prev_amount' => $user['balance'],
'amount' => $_REQUEST['balance'],
'type' => 0,
'op_id' => UID,
'op_account' => get_admin_name(UID),
'create_time' => time()
);
M('balance_edit', 'tab_')->add($data);
$this->ajaxReturn(array("status" => 1, "msg" => "成功"));
} else {
$this->ajaxReturn(array("status" => -1, "msg" => "失败"));
}
} else {
$this->ajaxReturn(array("status" => -1, "msg" => "二级密码错误"));
}
}
public function bind_balance_edit($p = 1)
{
$map['id'] = $_REQUEST['id'];
$map['user_id'] = $_REQUEST['user_id'];
$map['game_id'] = $_REQUEST['game_id'];
$res = D('Member')->check_sc_pwd($_REQUEST['second_pwd']);
if ($res) {
$user_play = M('user_play', 'tab_')->where($map)->find();
$pro = M("user_play", "tab_")
->where($map)
->setField('bind_balance', $_REQUEST['bind_balance']);
if ($pro !== false) {
$data = array(
'user_id' => $_REQUEST['user_id'],
'user_account' => get_user_account($_REQUEST['user_id']),
'game_id' => $_REQUEST['game_id'],
'game_name' => get_game_name($_REQUEST['game_id']),
'prev_amount' => $user_play['bind_balance'],
'amount' => $_REQUEST['bind_balance'],
'type' => 1,
'op_id' => is_login(),
'op_account' => get_admin_nickname(is_login()),
'create_time' => time()
);
M('balance_edit', 'tab_')->add($data);
$this->ajaxReturn(array("status" => 1, "msg" => "成功"));
} else {
$this->ajaxReturn(array("status" => 0, "msg" => "失败"));
}
} else {
$this->ajaxReturn(array("status" => 0, "msg" => "二级密码错误"));
}
}
public function chax($p = 1)
{
$map['user_account'] = get_user_account($_REQUEST['id']);
$map['pay_status'] = 1;
$page = intval($p);
$page = $page ? $page : 1; //默认显示第一页数据
$row = 10;
if (isset($_REQUEST['row'])) {
$row = $_REQUEST['row'];
} else {
$row = 10;
}
//$new_model = D($name);
$data = M("spend", "tab_")
// 查询条件
->where($map)
/* 默认通过id逆序排列 */
->order('pay_time desc')
/* 数据分页 */
->page($page, $row)
/* 执行查询 */
->select();
/* 查询记录总数 */
$count = M("spend", "tab_")->where($map)->count();
//分页
$page = set_pagination($count, $row);
if ($page) {
$this->assign('_page', $page);
}
$total = null_to_0(D('spend')->where($map)->sum('pay_amount'));
$ttotal = null_to_0(D('spend')->where('pay_time' . total(1))->where($map)->sum('pay_amount'));
$ytotal = null_to_0(D('spend')->where('pay_time' . total(5))->where($map)->sum('pay_amount'));
$this->assign('total', $total);
$this->assign('ttotal', $ttotal);
$this->assign('ytotal', $ytotal);
$this->assign('list_data', $data);
$this->display();
}
public function changephone()
{
if (preg_match('/^[1][3578][0-9]{9}/', $_POST['phone'])) {
//重复判断
$where['phone'] = $_POST['phone'];
$user = M('User', 'tab_')->where($where)->field('id,account')->find();
if ($user) {
$this->ajaxReturn(array("status" => 0, "msg" => "该手机号已被" . $user['account'] . "(" . $user['id'] . ")绑定"));
}
$map['id'] = $_POST['id'];
$pro = M("User", "tab_")
->where($map)
->setField('phone', $_POST['phone']);
if ($pro !== false) {
$this->userEditOperationLog($_POST['id']);
$this->ajaxReturn(array("status" => 1, "msg" => "手机修改成功"));
} else {
$this->ajaxReturn(array("status" => 0, "msg" => "手机修改失败"));
}
} else {
$this->ajaxReturn(array("status" => 0, "msg" => "手机输入错误"));
}
}
public function changeprelname()
{
if (preg_match('/^([\xe4-\xe9][\x80-\xbf]{2}){2,4}$/', $_POST['real_name'])) {
//重复判断
$map['id'] = $_POST['id'];
$pro = M("User", "tab_")
->where($map)
->setField('real_name', $_POST['real_name']);
if ($pro !== false) {
addOperationLog(array(
"op_type"=>1,
"key"=>get_user_account($_POST['id']),
"url"=>U("Member/edit",array("id"=>$_POST['id'])),
"menu"=>"用户-玩家组-玩家列表-编辑-真实姓名修改",
));
$this->ajaxReturn(array("status" => 1, "msg" => "真实姓名修改成功"));
} else {
$this->ajaxReturn(array("status" => 0, "msg" => "真实姓名修改失败"));
}
} else {
$this->ajaxReturn(array("status" => 0, "msg" => "真实姓名输入错误"));
}
}
public function changepidcard()
{
if (preg_match('/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/', $_POST['idcard'])) {
//重复判断
//$where['idcard'] = $_POST['idcard'];
/*$user = M('User', 'tab_')->where($where)->field('id,account')->find();
if ($user) {
$this->ajaxReturn(array("status" => 0, "msg" => "该身份证号码已被" . $user['account'] . "(" . $user['id'] . ")绑定"));
}*/
$map['id'] = $_POST['id'];
$pro = M("User", "tab_")
->where($map)
->setField('idcard', $_POST['idcard']);
if ($pro !== false) {
$this->userEditOperationLog($_POST['id']);
$this->ajaxReturn(array("status" => 1, "msg" => "身份证号码修改成功"));
} else {
$this->ajaxReturn(array("status" => 0, "msg" => "身份证号码修改失败"));
}
} else {
$this->ajaxReturn(array("status" => 0, "msg" => "请输入正确的身份证号码"));
}
}
public function denglu($p = 1)
{
$map['user_id'] = $_REQUEST['id'];
$page = intval($p);
$page = $page ? $page : 1; //默认显示第一页数据
$row = 10;
if (isset($_REQUEST['row'])) {
$row = $_REQUEST['row'];
} else {
$row = 10;
}
$data = M("user_login_record", "tab_")
// 查询条件
->where($map)
/* 默认通过id逆序排列 */
->order('login_time desc')
/* 数据分页 */
->page($page, $row)
/* 执行查询 */
->select();
/* 查询记录总数 */
$count = M("user_login_record", "tab_")->where($map)->count();
//分页
$page = set_pagination($count, $row);
if ($page) {
$this->assign('_page', $page);
}
$this->assign('list_data', $data);
$this->display();
}
/**
*用户登录记录
*/
public function login_record($p = 1)
{
if (isset($_REQUEST['game_name'])) {
$map['game_name'] = ['like', $_REQUEST['game_name'] . "%"];
unset($_REQUEST['game_name']);
}
if (isset($_REQUEST['game_type'])) {
$map['sdk_version'] = $_REQUEST['game_type'];
unset($_REQUEST['game_type']);
}
if (isset($_REQUEST['login_ip'])) {
$map['login_ip'] = $_REQUEST['login_ip'];
unset($_REQUEST['login_ip']);
}
if (isset($_REQUEST['timestart']) && isset($_REQUEST['timeend'])) {
$map['login_time'] = array('BETWEEN', array(strtotime($_REQUEST['timestart']), strtotime($_REQUEST['timeend']) + 24 * 60 * 60 - 1));
unset($_REQUEST['timestart']);
unset($_REQUEST['timeend']);
} elseif (isset($_REQUEST['timestart'])) {
$map['login_time'] = array('GT', strtotime($_REQUEST['timestart']));
unset($_REQUEST['timestart']);
} elseif (isset($_REQUEST['timeend'])) {
$map['login_time'] = array('lt', (strtotime($_REQUEST['timeend']) + 24 * 60 * 60 - 1));
unset($_REQUEST['timeend']);
}
if (isset($_REQUEST['start']) && isset($_REQUEST['end'])) {
$map['login_time'] = array('BETWEEN', array(strtotime($_REQUEST['start']), strtotime($_REQUEST['end']) + 24 * 60 * 60 - 1));
unset($_REQUEST['start']);
unset($_REQUEST['end']);
}
if (isset($_REQUEST['account'])) {
$map['user_account'] = array('like', trim($_REQUEST['account']) . '%');
unset($_REQUEST['account']);
}
if (isset($_REQUEST['server_id'])) {
$map['server_id'] = $_REQUEST['server_id'];
unset($_REQUEST['server_id']);
}
// $promoteRoot = getPowerPromoteIds();
// $data_empower_type = session('user_auth')['data_empower_type'];
//
// if ($promoteRoot) {
// $map['promote_id'] =array('in',$promoteRoot);
// } else if(!$promoteRoot&&$data_empower_type!=1){
// $map['id'] = array('lt',1);
// }
setPowerPromoteIds($map,'promote_id');
if (isset($_REQUEST['promote_id'])) {
if (I('promote_level') ==1) {
$promote_ids = getOffspringByPromoteId($_REQUEST['promote_id']);
$map['promote_id'] = ['exp', "in($promote_ids)"];
} else {
$map['promote_id'] = $_REQUEST['promote_id'];
}
unset($_REQUEST['promote_id']);
} elseif (I('promote_level') ==1) {
$promote_ids = getOffspringByPromoteId();
if ($promote_ids != 'all') {
$map['promote_id'] = ['exp', "in($promote_ids)"];
}
}
// $map['type'] = 1;
// $map['login_time'] = ['exp', 'login_time<>0'];
//判断是否有列表和统计的权限
$this->checkListOrCountAuthRestMap($map,["user_account"]);
$extend = array();
$extend['map'] = $map;
$count = M('UserLoginRecord','tab_')
// ->table('tab_user_login_record FORCE INDEX(user_id_promote_idx)')
->field('user_id')->where($extend['map'])
->group('user_id')
->select(false);
$sql = "select count(user_id) as count from ({$count})t";
// dd($sql);
$count = M('UserLoginRecord','tab_')->query($sql);
$this->m_title = '登录记录';
$this->assign('user_count',$count[0]['count']);
$this->assign("is_admin",is_administrator());
$this->assign('commonset', M('Kuaijieicon')->where(['url' => 'Member/login_record', 'status' => 1])->find());
$show_data_power = (is_administrator()|| session('user_auth')['show_data']);
$this->assign('show_data_power', $show_data_power);
parent::lists("UserLoginRecord", $p, $extend['map']);
}
//登陆记录删除
public function del($model = null, $ids = null)
{
$map = array();
if (isset($_REQUEST['id'])) {
$map['id'] = $_REQUEST['id'];
//获取玩家账号
addOperationLog(array(
"op_type"=>2,
"key"=>M('user_login_record', 'tab_')->where($map)->field('user_account')->find()['user_account'],
"url"=>U("Member/login_record")
));
$data = M('user_login_record', 'tab_')->where($map)->delete();
\Think\Log::actionLog('Member/del', 'Member', $_REQUEST['id']);
$this->success('删除成功!', U('login_record'), 2);
} else {
$this->error('请选择要操作的数据!');
}
}
public function delprovide($ids = null)
{
if (empty($ids)) {
$this->error('请选择要操作的数据!');
}
$ids = implode(",", $ids);
$list = M("user_login_record", "tab_");
$map['id'] = array("in", $ids);
//操作日志
$lr = M("user_login_record", "tab_")->field('user_account')->where($map)->select();
foreach ($lr as $k => $v) {
addOperationLog(array(
"op_type"=>2,
"key"=>$v['user_account'],
"url"=>U("Member/login_record")
));
}
$delete = $list->where($map)->delete();
if ($delete) {
\Think\Log::actionLog('Member/delprovide', 'Member', 1);
$this->success("批量删除成功!", U("login_record"));
} else {
$this->error("批量删除失败!", U("login_record"));
}
}
/**
* 锁定玩家
* @param $id
* @param $lock_status
*/
public function lock_status($id="", $lock_status, $accounts = "")
{
if ($accounts) $map['account'] = ['in', array_unique(explode("\n", $accounts))];
if ($id) $map['id'] = ['in', array_unique(explode("\n", $id))];
$users = M('user', 'tab_')->where($map)->field('id,lock_status')->select();
if($_POST['lock_remark']){
$res = M('user', 'tab_')->where($map)->setField(['lock_status' => $lock_status,"lock_remark" => $_POST['lock_remark']]);
}else{
$res = M('user', 'tab_')->where($map)->setField(['lock_status' => $lock_status]);
}
if ($res) {
foreach ($users as $item) {
if($item['lock_status'] != $lock_status){
$this->userEditOperationLog($item['id'],"锁定/解锁");
}
\Think\Log::actionLog('Member/lock_status', 'Member', $item['id']);
}
$this->success('操作成功!');
} else {
$this->error('操作失败!');
}
}
/**
* 对年龄的审核
*/
public function age_check()
{
$id = I("id");
$arr = explode(',', $id);
$i = 0;
$q = 0;
$t = 0;
//已经审核过的不审核 信息为空的也不审核
foreach ($arr as $key) {
$where['id'] = $key;
$where['status'] = array('neq', '2');
$res = D("User")->where($where)->select();
if (empty($res[0]['idcard']) || empty($res[0]['real_name'])) {
$i++;
} else {
$return = age_verify($res[0]['idcard'], $res[0]['real_name']);
if ($return == 1 && $return > 0) {
$q++;
$data['id'] = $key;
$data['age_status'] = 2;
} elseif ($return == 2 && $return > 0) {
$q++;
$data['id'] = $key;
$data['age_status'] = 3;
} elseif ($return == -1) {
echo json_encode(array('status' => 2, 'info' => '短信数量已经使用完'));
exit;
} elseif ($return == -2) {
echo json_encode(array('status' => 2, 'info' => '连接失败,请检查数据库配置'));
exit;
} else {
$t++;
$data['id'] = $key;
$data['age_status'] = 1;
}
$re = D("User")->data($data)->save();
}
}
echo json_encode(array('status' => 1, 'info' => '未填写' . $i . "个,审核通过" . $q . "个,审核未通过" . $t . ""));
exit;
}
/**
* @函数或方法说明
* @防刷预警设置
* @param int $cate_id
* @param int $group_id
*
* @author: 郭家屯
* @since: 2019/4/29 15:03
*/
public function brush_set()
{
$cate_id = I('cate_id', 8);
$group_id = I('group_id', 0);
$this->m_title = '站点设置(PC官网)';
$this->assign('commonset', M('Kuaijieicon')->where(['url' => 'Site/media', 'status' => 1])->find());
$map['status'] = 1;
$map['category'] = $cate_id;
$map['group'] = $group_id;
$list = M("Config")->where($map)->field('id,name,title,extra,value,remark,type')->order('sort')->select();
if ($list) {
$this->assign('list', $list);
}
$this->assign('id', $group_id);
$this->meta_title = '防刷预警设置';
$this->display();
}
/**
* @函数或方法说明
* @保存防刷预警参数
* @author: 郭家屯
* @since: 2019/4/30 10:08
*/
public function brush_save($config)
{
if ($config && is_array($config)) {
$Config = M('Config');
foreach ($config as $name => $value) {
$map = array('name' => $name);
if ($name == 'CACHE_TYPE' && $value != 0) {
$res = $this->check_cache($value, $config['CACHE_TYPE_HOST']);
if ($res) {
$this->set_config($name, $value);
} else {
$this->error('缓存服务器连接不上,开启缓存失败');
}
} elseif ($name == 'CACHE_TYPE_HOST' || $name == 'CACHE_TYPE_TIME') {
$this->set_config($name, $value);
}
$res = $Config->where($map)->setField('value', $value);
if($res >0){
//操作日志
addOperationLog(array(
"op_type"=>1,
"key"=>$name,
"url"=>U("Member/blockconfig")
));
}
}
}
S('DB_CONFIG_DATA', null);
$this->success('保存成功!');
}
/**
*设置config
*/
private function set_config($name = "", $config = "")
{
$config_file = "./Application/Common/Conf/pay_config.php";
if (file_exists($config_file)) {
$configs = include $config_file;
} else {
$configs = array();
}
#定义一个数组
$data = array();
#给数组赋值
$data[$name] = $config;
$configs = array_merge($configs, $data);
$result = file_put_contents($config_file, "<?php\treturn " . var_export($configs, true) . ";");
}
/**
* @函数或方法说明
* @黑名单列表
* @author: 郭家屯
* @since: 2019/5/5 17:11
*/
public function blacklist($p = 1)
{
$page = intval($p);
$page = $page ? $page : 1; //默认显示第一页数据
if (isset($_REQUEST['row'])) {
$row = $_REQUEST['row'];
} else {
$row = 10;
}
//排序
if ($_REQUEST['account']) {
$map['account'] = ['like', '%' . $_REQUEST['account'] . '%'];
}
$map['check_status'] = 0;
$order = 'block_time desc';
$black = M('user', 'tab_')->field('id,account,block_time')->where($map)->order($order)->page($p, $row)->select();
$count = M('user', 'tab_')->where($map)->count();
$this->assign('list_data', $black);
$page = set_pagination($count, $row);
if ($page) {
$this->assign('_page', $page);
}
$this->meta_title = '黑名单列表';
$this->display();
}
/**
* @函数或方法说明
* @拉黑设置
* @author: 郭家屯
* @since: 2019/5/5 17:12
*/
public function blockconfig()
{
$cate_id = I('cate_id', 9);
$group_id = I('group_id', 0);
$this->m_title = '站点设置(PC官网)';
$this->assign('commonset', M('Kuaijieicon')->where(['url' => 'Site/media', 'status' => 1])->find());
$map['status'] = 1;
$map['category'] = $cate_id;
$map['group'] = $group_id;
$list = M("Config")->where($map)->field('id,name,title,extra,value,remark,type')->order('sort')->select();
if ($list) {
$this->assign('list', $list);
}
$this->assign('id', $group_id);
$this->meta_title = '拉黑设置';
$this->display();
}
/**
* @函数或方法说明
* @平台币订单
* @author: 郭家屯
* @since: 2019/5/6 10:50
*/
public function deposit_order()
{
$user_id = I('id', 0, 'intval');
$user_entity = get_user_entity($user_id);
//平台币充值订单
$brush_map['user_id'] = $user_entity['id'];
$brush_map['pay_status'] = 1;
$brush_map['create_time'] = ['egt', $user_entity['check_time']];
$deposit_order = M('deposit', 'tab_')->where($brush_map)->field('id,order_number,pay_order_number,user_id,pay_amount,check_sign,create_time,pay_way,pay_ip')->select();
$abnormal = 0;
$deposit_money = 0;
$weixn = new Weixin();
$alipay = new \Think\Pay('alipay');
foreach ($deposit_order as $key => $v) {
$sign = get_check_sign($v['user_id'], $v['order_number'], $v['pay_amount'], $v['create_time']);
if ($sign != $v['check_sign']) {
$deposit_order[$key]['error_type'] = '订单标识违规';
$abnormal++;
}
if ($v['pay_way'] == 2 || $v['pay_way'] == 3) {
$deposit_order[$key]['weixin_pay_money'] = $weixn->weixin_block_orderquery($v['order_number']);
}
if ($v['pay_way'] == 1) {
$deposit_order[$key]['alipay_money'] = $alipay->alipay_orderquery($v['order_number'], $v['pay_order_number']);
}
$deposit_money += $v['pay_amount'];
}
$this->assign('deposit_order', $deposit_order);
//发放平台币金额
$batch_map['user_id'] = $user_entity['id'];
$batch_map['status'] = 1;
$batch_map['create_time'] = ['egt', $user_entity['check_time']];
$batch_order = M('provide_user', 'tab_')->field('order_number,pay_order_number,amount,create_time')->where($batch_map)->select();
$batch_amount = 0;
foreach ($batch_order as $key => $v) {
$batch_amount += $v['amount'];
}
$this->assign('batch_order', $batch_order);
//积分兑换平台币
$point_map['user_id'] = $user_entity['id'];
$point_map['good_type'] = 3;
$point_map['create_time'] = ['egt', $user_entity['check_time']];
$point_order = M('point_shop_record', 'tab_')->field('number,create_time')->where($point_map)->select();
$point_money = 0;
foreach ($point_order as $key => $v) {
$point_money += $v['number'];
}
$this->assign('point_order', $point_order);
//分享获取平台币
$share_map['invite_id'] = $user_entity['id'];
$share_map['create_time'] = ['egt', $user_entity['check_time']];
$share_order = M('share_record', 'tab_')->field('order_number,award_coin as amount,create_time')->where($share_map)->select();
$share_amount = 0;
foreach ($share_order as $key => $v) {
$share_amount += $v['amount'];
}
$this->assign('share_order', $share_order);
//消费平台币金额
$spend_map['user_id'] = $user_entity['id'];
$spend_map['pay_status'] = 1;
$spend_map['pay_way'] = 0;
$spend_map['pay_time'] = ['egt', $user_entity['check_time']];
$spend_order = M('spend', 'tab_')->field('order_number,pay_order_number,user_id,pay_amount,spend_ip,pay_time')->where($spend_map)->select();
$spend_amount = 0;
foreach ($spend_order as $key => $v) {
$spend_amount += $v['pay_amount'];
}
//统计标识金额
$total_money = floatval($user_entity['balance']) - $deposit_money - $batch_amount - $point_money - $share_amount + floatval($spend_amount) - $user_entity['check_money'];
$this->assign('total_money', abs(round((float)$total_money, 2)));
$this->assign('spend_order', $spend_order);
$this->assign('abnormal', $abnormal);
$this->assign('user', $user_entity);
$this->display();
}
/**
* @函数或方法说明
* @绑币订单
* @author: 郭家屯
* @since: 2019/5/6 10:51
*/
public function bind_order()
{
$user_id = I('id', 0, 'intval');
$user_entity = get_user_entity($user_id);
$brush_map['user_id'] = $user_entity['id'];
$brush_map['pay_status'] = 1;
$brush_map['create_time'] = ['egt', $user_entity['check_time']];
$bind_recharge_order = M('bind_recharge', 'tab_')->where($brush_map)->field('id,user_id,order_number,pay_order_number,amount,user_id,real_amount,check_sign,create_time,zhekou,recharge_ip,pay_way')->select();
$bind_recharge_amount = 0;
$abnormal = 0;
$weixn = new Weixin();
$alipay = new \Think\Pay('alipay');
foreach ($bind_recharge_order as $key => $v) {
$sign = get_check_sign($v['user_id'], $v['order_number'], $v['amount'], $v['create_time']);
if ($sign != $v['check_sign']) {
$bind_recharge_order[$key]['error_type'] = '订单标识违规';
$abnormal++;
}
if ($v['pay_way'] == 2 || $v['pay_way'] == 3) {
$bind_recharge_order[$key]['weixin_pay_money'] = $weixn->weixin_block_orderquery($v['order_number']);
}
if ($v['pay_way'] == 1) {
$bind_recharge_order[$key]['alipay_money'] = $alipay->alipay_orderquery($v['order_number'], $v['pay_order_number']);
}
$bind_recharge_amount += $v['amount'];
}
$this->assign('bind_recharge_order', $bind_recharge_order);
//发放绑币金额
$batch_map['user_id'] = $user_entity['id'];
$batch_map['status'] = 1;
$batch_map['create_time'] = ['egt', $user_entity['check_time']];
$batch_order = M('provide', 'tab_')->field('order_number,pay_order_number,amount,create_time')->where($batch_map)->select();
$batch_amount = 0;
foreach ($batch_order as $key => $v) {
$batch_amount += $v['amount'];
}
$this->assign('batch_order', $batch_order);
//消费返利
$rebate_map['user_id'] = $user_entity['id'];
$rebate_map['create_time'] = ['egt', $user_entity['check_time']];
$rebate_order = M("rebate_list", "tab_")->field('pay_order_number,ratio_amount as amount,create_time')->where($rebate_map)->select();
$rebate_money = 0;
foreach ($rebate_order as $key => $v) {
$rebate_money += $v['amount'];
}
$this->assign('rebate_order', $rebate_order);
//会长代充
$agent_map['user_id'] = $user_entity['id'];
$agent_map['pay_status'] = 1;
$agent_map['create_time'] = ['egt', $user_entity['check_time']];
$agent_order = M('agent', 'tab_')->field('order_number,pay_order_number,amount,real_amount,create_time,zhekou,pay_way')->where($agent_map)->select();
$agent_amount = 0;
foreach ($agent_order as $key => $v) {
$agent_amount += $v['amount'];
}
$this->assign('agent_order', $agent_order);
//消费平台币金额
$spend_map['user_id'] = $user_entity['id'];
$spend_map['pay_status'] = 1;
$spend_map['pay_way'] = -1;
$spend_map['pay_time'] = ['egt', $user_entity['check_time']];
$spend_order = M('spend', 'tab_')->field('order_number,pay_order_number,user_id,pay_amount,spend_ip,pay_time')->where($spend_map)->select();
$spend_amount = 0;
foreach ($spend_order as $key => $v) {
$spend_amount += $v['pay_amount'];
}
$this->assign('spend_order', $spend_order);
$this->assign('abnormal', $abnormal);
//检查绑币金额
$check_map['user_id'] = $user_entity['id'];
$check_money = M('user_play', 'tab_')->where($check_map)->sum('check_money');
$sum_money = M('user_play', 'tab_')->where($check_map)->sum('bind_balance');
//统计标识金额
$total_money = $sum_money - $bind_recharge_amount - $batch_amount - $rebate_money - $agent_amount + $spend_amount - $check_money;
$this->assign('total_money', abs(round((float)$total_money, 2)));
$this->assign('user', $user_entity);
$this->display();
}
/**
* @函数或方法说明
* @移除拉黑状态
* @author: 郭家屯
* @since: 2019/5/6 10:35
*/
public function block_status()
{
$user_id = I('id', 0, 'intval');
$user_entity = get_user_entity($user_id);
if (!$user_entity) {
$this->error('账号不存在');
}
$model = M('user', 'tab_');
$result = $model->execute("update tab_user set check_money=balance,check_status=1,check_time=" . time() . " where id=" . $user_id);
$result1 = $model->execute("update tab_user_play set check_money=bind_balance where user_id=" . $user_id);
if ($result !== false && $result1 !== false) {
$this->success('移除成功');
} else {
$this->error('移除失败');
}
}
public function device_bans_list($row = 10, $type = '', $tag = '', $p = 1)
{
$map = [];
if (!empty($type)) {
$map['type'] = $type;
}
if (!empty($tag)) {
$map['tag'] = $tag;
}
$list = M('device_bans', 'tab_')->where($map)->page($p, $row)->order("create_time desc")->select();
$count = M('device_bans', 'tab_')->where($map)->count();
if (!empty($list)) {
foreach ($list as &$item) {
switch ($item['type']) {
case '1':
$item['type_name'] = '设备号';
break;
case '2':
$item['type_name'] = 'IP';
break;
case '3':
$item['type_name'] = '落地页链接';
break;
case '4':
$item['type_name'] = '下载链接';
break;
}
}
}
$page = set_pagination($count, $row);
if ($page) {
$this->assign('_page', $page);
}
$this->assign('list_data', $list);
$this->display();
}
public function save_device_bans($id = '', $type = '', $tag = '')
{
if (empty($id)) {
if (IS_GET) {
return $this->display('device_bans_edit');
} else {
$map = [];
if (empty($type) || empty($tag)) {
return $this->error("请填写完整信息");
}
if (\in_array($type, [3,4]) && !preg_match("/^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+/i", $tag)) {
return $this->error("请填写正确的url地址");
}
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");
}
if ($type == 1 && (preg_match("/(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}/i", $tag) || preg_match("/^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+/i", $tag))) {
return $this->error("请填写正确的设备信息");
}
$map['type'] = $type;
$map['tag'] = $tag;
$item = M('device_bans', 'tab_')->where($map)->find();
if ($item) {
return $this->error("该禁用已经存在(ID{$item['id']})");
}
$res = M('device_bans', 'tab_')->add(['type' => $type, 'tag' => $tag, 'create_time' => time(), 'operator_id' => is_login()]);
addOperationLog(array(
"op_type"=>0,
"key"=>$res,
"menu"=>"用户-玩家组-分控列表-新增",
"url"=>U("Member/device_bans_list")
));
}
return $this->success("新增成功", U('Member/device_bans_list'));
} else {
M('device_bans', 'tab_')->where(['id' => $id])->delete();
addOperationLog(array(
"op_type"=>2,
"key"=>$id,
"menu"=>"用户-玩家组-分控列表-解除",
"url"=>U("Member/device_bans_list")
));
return $this->success("解除成功");
}
}
public function userEditOperationLog($id,$op_name = false)
{
$option = array(
"op_type"=>1,
"key"=>get_user_account($id),
"url"=>U("Member/edit",array("id"=>$id))
);
if($op_name){
$option['op_name'] = $op_name;
}
addOperationLog($option);
}
}