diff --git a/Application/Admin/Controller/AutoPackController.class.php b/Application/Admin/Controller/AutoPackController.class.php index 622619e61..e7da748cd 100644 --- a/Application/Admin/Controller/AutoPackController.class.php +++ b/Application/Admin/Controller/AutoPackController.class.php @@ -319,7 +319,7 @@ class AutoPackController extends Think $launchCountList = M('apply_launch', 'tab_')->field(['apply_id', 'count(*) count'])->where(['apply_id' => ['in', $applyIds]])->group('apply_id')->select(); $launchCountList = index_by_column('apply_id', $launchCountList); - $gameSources = M('game_source', 'tab_')->field(['id', 'file_name', 'source_version', 'file_type', 'bao_name', 'game_id'])->where(['game_id' => ['in', $gameIds]])->select(); + $gameSources = M('game_source', 'tab_')->field(['id', 'file_name', 'source_version', 'file_type', 'bao_name', 'game_id', 'is_new_sdk'])->where(['game_id' => ['in', $gameIds]])->select(); $gameSources = index_by_column('game_id', $gameSources); $gameSourceService = new GameSourceService(); diff --git a/Application/Admin/Controller/ExportController.class.php b/Application/Admin/Controller/ExportController.class.php index 80f10074a..8809d0684 100644 --- a/Application/Admin/Controller/ExportController.class.php +++ b/Application/Admin/Controller/ExportController.class.php @@ -102,15 +102,21 @@ class ExportController extends Controller break; case 2: $xlsName = $xlsName?$xlsName:"渠道注册"; +// $xlsCell = array( +// array('account', "玩家账号"), +// array('fgame_name', "注册游戏"), +// array('promote_account', L('Subordinate_channel')), +// array('register_time', L('Registration_time'), 'time_format', '*'), +// array('register_ip', L('Register_iP')), +// array('parent_id', "上级推广员"), +// array('ba_id', '商务专员'), +// ); + $xlsCell = array( - array('account', "玩家账号"), - array('fgame_name', "注册游戏"), - array('promote_account', L('Subordinate_channel')), - array('register_time', L('Registration_time'), 'time_format', '*'), - array('register_ip', L('Register_iP')), - array('parent_id', "上级推广员"), - array('ba_id', '商务专员', 'get_business_affairs_account', '*'), + "玩家账号", "注册游戏", L('Subordinate_channel'), L('Registration_time'), L('Register_iP'), + "上级推广员", '商务专员', ); + if (isset($_REQUEST['game_name'])) { if ($_REQUEST['game_name'] == L('All')) { unset($_REQUEST['game_name']); @@ -121,16 +127,41 @@ class ExportController extends Controller } $map['tab_user.promote_id'] = array("neq", 0); if (isset($_REQUEST['promote_name'])) { - if ($_REQUEST['promote_name'] == L('All')) { + if ($_REQUEST['promote_name']=='全部') { unset($_REQUEST['promote_name']); - } else if ($_REQUEST['promote_name'] == "官方渠道") { - $map['tab_user.promote_id'] = array("elt", 0); + } elseif ($_REQUEST['promote_name']=='自然注册') { + $map['tab_user.promote_id']=array("elt",0); unset($_REQUEST['promote_name']); } else { - $map['tab_user.promote_id'] = get_promote_id($_REQUEST['promote_name']); + $promoteid = get_promote_id($_REQUEST['promote_name']); + $map['tab_user.promote_id']=array('eq',get_promote_id($_REQUEST['promote_name'])); unset($_REQUEST['promote_name']); + + if (isset($_REQUEST['parent_id'])) { + $parent_id = get_promote_id($_REQUEST['parent_id']); + if ($promoteid == $parent_id) { + $map['tab_user.promote_id'] = $promoteid; + } else { + $parent_id = get_promote_id($_REQUEST['parent_id']); + } + } else { + $map['tab_user.promote_id'] = $promoteid; + } + } + } else { + if (isset($_REQUEST['parent_id'])) { + $parent_id = get_promote_id($_REQUEST['parent_id']); + $pro = M('promote', 'tab_')->field('id,account')->where("chain like '%/{$parent_id}/%'")->select(); + $pro_ids = array_column($pro, 'id'); + $pro_ids[] = get_promote_id($_REQUEST['parent_id']); + if (!empty($pro_ids)) { + $map['tab_user.promote_id'] = ['in',$pro_ids]; + } else { + $map['tab_user.promote_id'] = array('eq',-1); + } } } + if (isset($_REQUEST['is_check']) && $_REQUEST['is_check'] != L('All')) { $map['is_check'] = check_status($_REQUEST['is_check']); unset($_REQUEST['is_check']); @@ -172,7 +203,8 @@ class ExportController extends Controller 'promote_account', 'tab_user.parent_name', 'is_check', - 'tab_promote.ba_id' + 'tab_promote.ba_id', + "REPLACE(substring_index(tab_promote.chain, '/', 2),'/','') as top_promote" ), 'key' => array('tab_user.account', 'tab_game.fgame_name'), 'map' => $map, @@ -180,8 +212,21 @@ class ExportController extends Controller 'title' => "渠道注册", 'template_list' => 'ch_reg_list', ); + + $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流中 + $name = $model['m_name']; - $xlsData = M($name, "tab_") + $xlsData = M($name, "tab_",'union_table') ->field($model['fields']) ->join($model['join']) ->join($model['joins']) @@ -189,10 +234,65 @@ class ExportController extends Controller ->where($model['map']) ->order($model['order']) ->group($model['group']) - ->select(); - foreach ($xlsData as $key => &$value) { - $xlsData[$key]['parent_id'] = get_top_promote($value['promote_id'], $value['parent_id']); + ->select(false); + + $accessNum = M()->table("({$xlsData}) as a") + ->field("a.id,count(a.account) as count") + ->join("left join tab_promote ON a.top_promote = tab_promote.id") + ->join("left join tab_business_affairs ON tab_business_affairs.id=a.ba_id") + ->order("id desc") + ->find(); + $accessNum =$accessNum['count']; + + $perSize = 2000;//每次查询的条数 + $pages = ceil($accessNum / $perSize); + $lastId = 0; + + // $xlsCell = array( +// array('account', "玩家账号"), +// array('fgame_name', "注册游戏"), +// array('promote_account', L('Subordinate_channel')), +// array('register_time', L('Registration_time'), 'time_format', '*'), +// array('register_ip', L('Register_iP')), +// array('parent_id', "上级推广员"), +// array('ba_id', '商务专员'), +// ); + + + for($i = 1; $i <= $pages; $i++) { + $xlsData = M($name, "tab_",'union_table') + ->field($model['fields']) + ->join($model['join']) + ->join($model['joins']) + ->join($model['joinss']) + ->where($model['map']) + ->limit(($i-1)*$perSize ,$perSize) + ->order($model['order']) + ->group($model['group']) + ->select(false); + $xlsData = M()->table("({$xlsData}) as a") + ->field("a.account,a.fgame_name,a.promote_account,a.register_time,a.register_ip,tab_promote.account as parent_id,tab_business_affairs.account as ba_id") + ->join("left join tab_promote ON a.top_promote = tab_promote.id") + ->join("left join tab_business_affairs ON tab_business_affairs.id=a.ba_id") + ->order("a.id desc") + ->select(); + + foreach($xlsData as $value) { + if (!$value['ba_id']) { + $value['ba_id'] = "暂无"; + } + $value['register_time'] = date("Y-m-d H:i:s",$value['register_time']); + 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 3: if($_REQUEST['type']==2){ @@ -922,28 +1022,76 @@ class ExportController extends Controller } else { $total = sprintf("%.2f", $total); } - $xlsData = D('Spend') - ->field('pay_order_number,pay_time,user_account,game_name,promote_account,spend_ip,pay_amount,pay_amount,pay_status,pay_game_status,pay_way,server_name,game_player_name,cost') + + + $xlsCell = array( + "支付订单号","CP订单号", "充值时间", "玩家账号", "游戏名称", L('Subordinate_channel'), "充值ip","区服ID", "游戏区服", + "角色ID","角色名称", "订单金额", "实付金额", "充值方式", L('Order_status'), "游戏通知状态", "消费"."{$total}" + ); + + $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 = D('Spend') + ->field('pay_order_number,pay_time,user_account,game_name,promote_account,spend_ip,server_name,game_player_id,game_player_name,cost,pay_amount,pay_way,pay_status,pay_game_status') ->where($map) ->join($tab_promote_join) ->order('pay_time DESC') - ->select(); - $xlsCell = array( - array('pay_order_number', "订单号"), - array('pay_time', "充值时间", 'time_format', '*'), - array('user_account', "玩家账号"), - array('game_name', "游戏名称"), - array('promote_account', L('Subordinate_channel')), - array('spend_ip', "充值ip"), - array('server_name', "游戏区服"), - array('game_player_name', "角色名称"), - array('cost', "订单金额"), - array('pay_amount', "实付金额"), - array('pay_way', "充值方式", 'get_pay_way', '*'), - array('pay_status', L('Order_status'), 'get_info_status', '*', '9'), - array('pay_game_status', "游戏通知状态", 'get_info_status', '*', '14'), - array('', "消费"."{$total}") - ); + ->count(); + + $perSize = 10000;//每次查询的条数 + $pages = ceil($accessNum / $perSize); + +// var_dump($count);die(); + for($i = 1; $i <= $pages; $i++) { + $xlsData = D('Spend') + ->field('pay_order_number,extend,pay_time,user_account,game_name,promote_account,spend_ip,server_id,server_name,game_player_id,game_player_name,cost,pay_amount,pay_way,pay_status,pay_game_status') + ->where($map) + ->limit(($i-1)*$perSize ,$perSize) + ->join($tab_promote_join) + ->order('pay_time DESC') + ->select(); + + foreach($xlsData as $value) { + $value['pay_time'] = date('Y-m-d H:i:s',$value['pay_time']); + $value['pay_way'] = get_pay_way($value['pay_way']); + $value['pay_status'] = get_info_status($value['pay_status'],9); + $value['pay_game_status'] = get_info_status($value['pay_game_status'],14); + mb_convert_variables('GBK', 'UTF-8', $value); + fputcsv($fp, $value); + } + unset($xlsData);//释放变量的内存 + //刷新输出缓冲到浏览器 + ob_flush(); + flush();//必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。 + } + fclose($fp); + exit(); +// $xlsCell = array( +// array('pay_order_number', "订单号"), +// array('pay_time', "充值时间", 'time_format', '*'), +// array('user_account', "玩家账号"), +// array('game_name', "游戏名称"), +// array('promote_account', L('Subordinate_channel')), +// array('spend_ip', "充值ip"), +// array('server_name', "游戏区服"), +// array('game_player_name', "角色名称"), +// array('cost', "订单金额"), +// array('pay_amount', "实付金额"), +// array('pay_way', "充值方式", 'get_pay_way', '*'), +// array('pay_status', L('Order_status'), 'get_info_status', '*', '9'), +// array('pay_game_status', "游戏通知状态", 'get_info_status', '*', '14'), +// array('', "消费"."{$total}") +// ); break; case 8: $xlsName = $xlsName?$xlsName:L('Platform_currency_recharge'); @@ -1132,20 +1280,23 @@ class ExportController extends Controller break; case 11: $xlsName = $xlsName?$xlsName:"礼包领取"; +// $xlsCell = array( +// array('user_account', "玩家账号"), +// array('game_name', "游戏名称"), +// array('gift_name', '礼包名称'), +// array('novice', '礼包卡号'), +// array('gift_id', '运营平台', 'get_operation_platform', '*', 'giftbag'), +// array('create_time', '领取时间', 'time_format', '*'), +// ); $xlsCell = array( - array('user_account', "玩家账号"), - array('game_name', "游戏名称"), - array('gift_name', '礼包名称'), - array('novice', '礼包卡号'), - array('gift_id', '运营平台', 'get_operation_platform', '*', 'giftbag'), - array('create_time', '领取时间', 'time_format', '*'), + "玩家账号", "游戏名称", '礼包名称', '礼包卡号', '运营平台', '领取时间', ); if (isset($_REQUEST['game_name'])) { - $extend['game_name'] = trim($_REQUEST['game_name']); + $extend['tab_gift_record.game_name'] = trim($_REQUEST['game_name']); unset($_REQUEST['game_name']); } if (isset($_REQUEST['user_account'])) { - $extend['user_account'] = trim($_REQUEST['user_account']); + $extend['tab_gift_record.user_account'] = trim($_REQUEST['user_account']); unset($_REQUEST['user_account']); } if (isset($_REQUEST['sdk_version'])) { @@ -1155,14 +1306,70 @@ class ExportController extends Controller $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['tab_gift_record.game_id'] = ['in', $game_ids]; unset($_REQUEST['sdk_version']); } } - $xlsData = M('gift_record', 'tab_') +// var_dump($extend);die(); + + $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 = M('gift_record', 'tab_') + ->field("user_account,game_name,gift_name,novice,gift_id,FROM_UNIXTIME(create_time) as create_time") ->where($extend) ->order("id DESC") - ->select(); + ->count(); + + $perSize = 5000;//每次查询的条数 + $pages = ceil($accessNum / $perSize); + +// var_dump($count);die(); + for($i = 1; $i <= $pages; $i++) { + + $xlsData = M('gift_record', 'tab_') + ->field("tab_gift_record.user_account,tab_gift_record.game_name,tab_gift_record.gift_name,tab_gift_record.novice,giftbag_version,FROM_UNIXTIME(tab_gift_record.create_time) as create_time") + ->join("left join tab_giftbag on tab_gift_record.gift_id = tab_giftbag.id") + ->where($extend) + ->limit(($i-1)*$perSize ,$perSize) + ->order("tab_gift_record.id DESC") + ->select(); + + foreach($xlsData as $value) { + if($value['giftbag_version']==0){ + $value['giftbag_version']= '双平台'; + }elseif($value['giftbag_version']==1){ + $value['giftbag_version']= "安卓"; + }elseif($value['giftbag_version']==2){ + $value['giftbag_version']= "苹果"; + } else { + $value['giftbag_version']= ""; + } +// $value['gift_id'] = get_operation_platform($value['gift_id'],'giftbag'); + mb_convert_variables('GBK', 'UTF-8', $value); + fputcsv($fp, $value); + } + unset($xlsData);//释放变量的内存 + //刷新输出缓冲到浏览器 + ob_flush(); + flush();//必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。 + } + fclose($fp); + exit(); + + break; case 12: get_info_status(); @@ -4908,11 +5115,12 @@ if ($key == 'model'){ } $map['id']=array('in',$zid); } - $map['level'] = I('promote_level'); + if (I("promote_level")) { + $map['level'] = I("promote_level"); + } if(I('oa_associated',-1) != -1) { $map['oa_associated'] = I('oa_associated'); } - } diff --git a/Application/Admin/Controller/ServerNoticeController.class.php b/Application/Admin/Controller/ServerNoticeController.class.php new file mode 100644 index 000000000..51a118437 --- /dev/null +++ b/Application/Admin/Controller/ServerNoticeController.class.php @@ -0,0 +1,260 @@ + + */ +class ServerNoticeController extends ThinkController { + const model_name = 'ServerNotice'; + + public function lists(){ + if(isset($_REQUEST['show_status'])){ + $extend['show_status']=$_REQUEST['show_status']; + unset($_REQUEST['show_status']); + } + if(isset($_REQUEST['server_version'])){ + $extend['server_version']=$_REQUEST['server_version']; + unset($_REQUEST['server_version']); + } + if(isset($_REQUEST['timestart']) && isset($_REQUEST['timeend'])){ + $extend['start_time'] = array('BETWEEN',array(strtotime($_REQUEST['timestart']),strtotime($_REQUEST['timeend'])+24*60*60-1)); + unset($_REQUEST['timestart']);unset($_REQUEST['timeend']); + }elseif(isset($_REQUEST['timestart'])){ + $extend['start_time']=array('EGT',strtotime($_REQUEST['timestart'])); + }elseif(isset($_REQUEST['timeend'])){ + $extend['start_time']=array('ELT',strtotime($_REQUEST['timeend'])); + } + if(isset($_REQUEST['start']) && isset($_REQUEST['end'])){ + $extend['start_time'] = array('BETWEEN',array(strtotime($_REQUEST['start']),strtotime($_REQUEST['end'])+24*60*60-1)); + unset($_REQUEST['start']);unset($_REQUEST['end']); + } + if(isset($_REQUEST['game_name'])){ + if($_REQUEST['game_name']=='全部'){ + unset($_REQUEST['game_name']); + }else{ + $extend['game_name']=['like', "{$_REQUEST['game_name']}%"]; + unset($_REQUEST['game_name']); + } + } + if(isset($_REQUEST['server_name'])){ + $extend['server_name']=$_REQUEST['server_name']; + unset($_REQUEST['server_name']); + } + if(empty($_GET['type']) || $_GET['type'] == 1) { + $extend['developers'] = array('EQ',0); + }else{ + $extend['developers'] = array('NEQ',0); + $this->assign('show_status',1); + } + + $this->m_title = '区服预告'; + $this->assign('commonset',M('Kuaijieicon')->where(['url'=>'ServerNotice/lists','status'=>1])->find()); + + + parent::order_lists(self::model_name,$_GET["p"],$extend); + } + + public function add(){ + $model = M('Model')->getByName(self::model_name); + $this->m_title = '区服预告'; + $this->assign('commonset',M('Kuaijieicon')->where(['url'=>'ServerNotice/lists','status'=>1])->find()); + + parent::add($model["id"]); + } + + public function edit($id=0){ + $id || $this->error('请选择要编辑的用户!'); + $this->m_title = '区服预告'; + $this->assign('commonset',M('Kuaijieicon')->where(['url'=>'ServerNotice/lists','status'=>1])->find()); + + $model = M('Model')->getByName(self::model_name); /*通过Model名称获取Model完整信息*/ + parent::edit($model['id'],$id); + } + + public function del($model = null, $ids=null){ + $model = M('Model')->getByName(self::model_name); /*通过Model名称获取Model完整信息*/ + parent::del($model["id"],$ids); + } + + /** + * 批量导入游戏区服区服 + */ + public function batch(){ + if(IS_POST){ + switch($_POST['batchType']){ + case 1: + $this->batchExcel(); + break; + case 2: + $this->batchImport(); + break; + } + }else{ + $this->meta_title = '新增区服管理'; + + $this->m_title = '区服预告'; + $this->assign('commonset',M('Kuaijieicon')->where(['url'=>'Server/lists','status'=>1])->find()); + + $this->display(); + } + + } + + //批量新增 + public function batchImport(){ + $server_str = str_replace(array("\r\n", "\r", "\n"), "", I('server')); + $server_ar1 = explode(';',$server_str); + array_pop($server_ar1); + $num = count($server_ar1); + if ($num<1) {$this->error('请添加区服数据');} + if($num > 100 ){ + $this->error('区服数量过多,最多只允许添加100个!'); + } + $verify = ['game_id','server_name','time']; + $server_model = D('ServerNotice'); + foreach ($server_ar1 as $key=>$value) { + $arr = explode(',',$value); + foreach ($arr as $k=>$v) { + $att = explode('=',$v); + if(in_array($att[0],$verify)){ + switch ($att[0]){ + case 'time' : + $patten = '/^\d{4}-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])(\s+(0[0-9]|1[0-9]|2[0-3])\:(0[0-9]|[1-5][0-9])(\:(0[0-9]|[1-5][0-9]))?)$/'; + if(!strtotime($att[1]) || !preg_match($patten,$att[1])){ + $this->error('开服时间不正确'); + }else{ + $time = $server[$key]['start_time'] = strtotime($att[1]); + } + break; + case 'game_id': + $game = M('Game','tab_')->where('developers = 0')->find($att[1]); + if(empty($game)){ + $this->error('game_id='.$att[1].' 数据错误,请重新上传'); + } + $server[$key]['game_id'] = $att[1]; + break; + default: + $server[$key][$att[0]] = $att[1]; + } + } + } + $server[$key]['game_name'] = get_game_name($server[$key]['game_id']); + $server[$key]['server_num'] = 0; + $server[$key]['recommend_status'] = 1; + $server[$key]['show_status'] = 1; + $server[$key]['stop_status'] = 0; + $server[$key]['server_status'] = 0; + $server[$key]['parent_id'] = 0; + $server[$key]['create_time'] = time(); + $version = get_sdk_version($server[$key]['game_id']); + $server[$key]['server_version'] = empty($version) ? 0 : $version; + + if(!$server_model->create($server[$key])){ + switch ($server_model->getError()) { + case '区服名称不能为空': + $msg = '游戏ID:'.$server[$key]['game_id'].' <'.$server[$key]['server_name'].'> 区服名称不能为空'; + break; + case '区服名称不能超过30个字符': + $msg = '游戏ID:'.$server[$key]['game_id'].' <'.$server[$key]['server_name'].'> 区服名称不能超过30个字符'; + break; + case '同游戏下区服名称已存在': + $msg = '游戏ID:'.$server[$key]['game_id'].' <'.$server[$key]['server_name'].'> 区服名称重复'; + break; + case '开始时间不能为空': + $msg = '游戏ID:'.$server[$key]['game_id'].' <'.$server[$key]['server_name'].'> 开始时间不能为空'; + break; + default: + $msg = "批量添加失败"; + break; + } + $this->error($msg); + } + } + $server = $this->array_unset_tt($server); + $res = M('ServerNotice','tab_')->addAll($server); + if($res !== false){ + $this->success('添加成功!',U('ServerNotice/lists')); + }else{ + $this->error('添加失败!'.M()->getError()); + } + } + + function array_unset_tt($arr){ + //建立一个目标数组 + $res = array(); + foreach ($arr as $key => $value) { + //查看有没有重复项 + if($res[$key-1]['game_id'] == $value['game_id'] && $res[$key-1]['server_name'] == $value['server_name']){ + + $this->error("游戏ID:{$value['game_id']} <{$value['server_name']}> 游戏区服名称重复"); + + //有:销毁 + //unset($arr[$key]); + } + else{ + $res[$key] = $value; + } + } + return $res; + } + + /** + * excel 批量导入游戏区服 + */ + public function batchExcel(){ + $excel = new BatchImportExcelEvent(); + if (empty($_FILES['fileExcel'])) {$this->ajaxReturn(["status"=>0,"info"=>'请选择文件']);exit;} + $info = $excel->uploadExcel($_FILES['fileExcel']); + $data = []; + if(is_array($info)){ + $filename = './Uploads/' . $info['savepath'] . $info['savename']; + $data = $excel->importExcel($filename); + if(is_array($data)){ + $excel->serverDataInsert($data,U('ServerNotice/lists'),true); + }else{ + $this->ajaxReturn(["status"=>0,"info"=>$data]); + } + }else{ + $this->ajaxReturn(["status"=>0,"info"=>$info]); + } + + } + + + + /** + * 区服状态修改 + * @author 鹿文学 + */ + public function change_status($field = null,$value=null) { + $id = array_unique((array)I('ids', 0)); + $id = is_array($id) ? implode(',', $id) : $id; + if (empty($id)) { + $this->error('请选择要操作的数据!'); + } + $map['id'] = array('in', $id); + $servermodel = D(self::model_name); + $server = $servermodel->where($map)->find(); + //开发者区服 + if($server['developers'] > 0){ + $save[$field] = $value; + $result = $servermodel->where($map)->save($save); + }else{ + $result = $servermodel->where($map)->setField($field,$value); + } + $msg = "操作"; + if($result !== false){ + $this->success($msg.'成功'); + }else{ + $this->error($msg.'失败'); + } + } + + + + + +} diff --git a/Application/Admin/Controller/TimingController.class.php b/Application/Admin/Controller/TimingController.class.php index 2a089ff0e..438a28079 100644 --- a/Application/Admin/Controller/TimingController.class.php +++ b/Application/Admin/Controller/TimingController.class.php @@ -114,6 +114,7 @@ class TimingController extends AdminController { } + public function caculateTodayDevice() { $start = strtotime(date("Ymd",time())); diff --git a/Application/Admin/Event/BatchImportExcelEvent.class.php b/Application/Admin/Event/BatchImportExcelEvent.class.php index 43d05a584..7ac435222 100644 --- a/Application/Admin/Event/BatchImportExcelEvent.class.php +++ b/Application/Admin/Event/BatchImportExcelEvent.class.php @@ -102,9 +102,15 @@ class BatchImportExcelEvent extends Controller{ /** * 插入区服数据到数据库 + * isnotice 是否是区服预告 */ - public function serverDataInsert($serverData,$url=''){ - $serverModel = new \Admin\Model\ServerModel(); + public function serverDataInsert($serverData,$url='',$isnotice=false){ + if($isnotice){ + $serverModel = new \Admin\Model\ServerNoticeModel(); + }else{ + $serverModel = new \Admin\Model\ServerModel(); + } + $sData = []; $key = 0; foreach($serverData as $server){ diff --git a/Application/Admin/Event/SourceEvent.class.php b/Application/Admin/Event/SourceEvent.class.php index 8627141d9..64c9862bb 100644 --- a/Application/Admin/Event/SourceEvent.class.php +++ b/Application/Admin/Event/SourceEvent.class.php @@ -96,7 +96,6 @@ class SourceEvent extends Controller } } $data['source_version'] = $game_source['source_version'] + 1; - $version = ''; $packageName = ''; if ($data['file_type'] == 1) { diff --git a/Application/Admin/Model/ServerNoticeModel.class.php b/Application/Admin/Model/ServerNoticeModel.class.php new file mode 100644 index 000000000..cbcf0e3c0 --- /dev/null +++ b/Application/Admin/Model/ServerNoticeModel.class.php @@ -0,0 +1,102 @@ + +// +---------------------------------------------------------------------- + +namespace Admin\Model; +use Think\Model; + +/** + * 文档基础模型 + */ +class ServerNoticeModel extends Model{ + + + + /* 自动验证规则 */ + protected $_validate = array( + array('game_id', '/^[1-9]\d*$/', '请选择游戏', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH), + array('server_name', 'require', '区服名称不能为空', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH), + array('server_name', '1,30', '区服名称不能超过30个字符', self::VALUE_VALIDATE, 'length', self::MODEL_BOTH), + array("server_name,game_id,id", 'checkServerName', '同游戏下区服名称已存在', self::MUST_VALIDATE, 'callback', self::MODEL_BOTH), + array('start_time', 'require', '开始时间不能为空', self::MUST_VALIDATE, 'regex', self::MODEL_BOTH), + ); + + /* 自动完成规则 */ + protected $_auto = array( + array('create_time', 'getCreateTime', self::MODEL_INSERT,'callback'), + array('server_num', 0, self::MODEL_INSERT), + array('start_time', 'strtotime', self::MODEL_BOTH, 'function'), + array('parent_id', 0,self::MODEL_INSERT,'string'), + ); + + /** + * 构造函数 + * @param string $name 模型名称 + * @param string $tablePrefix 表前缀 + * @param mixed $connection 数据库连接信息 + */ + public function __construct($name = '', $tablePrefix = '', $connection = '') { + /* 设置默认的表前缀 */ + $this->tablePrefix ='tab_'; + /* 执行构造方法 */ + parent::__construct($name, $tablePrefix, $connection); + } + + + + + /** + * 创建时间不写则取当前时间 + * @return int 时间戳 + * @author huajie + */ + protected function getCreateTime(){ + $create_time = I('post.create_time'); + return $create_time?strtotime($create_time):NOW_TIME; + } + + + + /** + * 生成不重复的name标识 + * @author huajie + */ + private function generateName(){ + $str = 'abcdefghijklmnopqrstuvwxyz0123456789'; //源字符串 + $min = 10; + $max = 39; + $name = false; + while (true){ + $length = rand($min, $max); //生成的标识长度 + $name = substr(str_shuffle(substr($str,0,26)), 0, 1); //第一个字母 + $name .= substr(str_shuffle($str), 0, $length); + //检查是否已存在 + $res = $this->getFieldByName($name, 'id'); + if(!$res){ + break; + } + } + return $name; + } + + /** + *判断同游戏下区服名称是否存在 + */ + public function checkServerName($args=null){ + $map['game_id'] = $args['game_id']; + $map['server_name'] = $args['server_name']; + if(empty($args['id'])){ + $data = $this->field('id')->where($map)->find(); + return empty($data); + }else{ + $data = $this->field('id')->where($map)->find(); + return empty($data['id'])?true:$data['id'] == $args['id'] ? true:false; + } + + } +} \ No newline at end of file diff --git a/Application/Admin/View/GameSource/add.html b/Application/Admin/View/GameSource/add.html index aeabae76f..1c9c6d83f 100644 --- a/Application/Admin/View/GameSource/add.html +++ b/Application/Admin/View/GameSource/add.html @@ -91,6 +91,14 @@ + + 是否新包 + + + + + + *上传原包 @@ -420,8 +428,10 @@ $("#game_id").change(function(){ $("#game_name").val($("#game_id option:selected").text()); $("#file_type").val(type); if (type == 2){ + $('#is-new-sdk').show(); $('#apply_bz').show(); }else{ + $('#is-new-sdk').hide(); $('#apply_bz').hide(); } //if(type == 1){$('.pack_name_class').show();}else{$('.pack_name_class').hide();} diff --git a/Application/Admin/View/GameSource/edit.html b/Application/Admin/View/GameSource/edit.html index 251a72ceb..9f4d450a8 100644 --- a/Application/Admin/View/GameSource/edit.html +++ b/Application/Admin/View/GameSource/edit.html @@ -78,7 +78,16 @@ - + + + 是否新包 + + + + + + + 上传原包 diff --git a/Application/Admin/View/ServerNotice/add.html b/Application/Admin/View/ServerNotice/add.html new file mode 100644 index 000000000..862d085cb --- /dev/null +++ b/Application/Admin/View/ServerNotice/add.html @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
*游戏名称: + + +
运营平台 + + + + + + + +
*区服名称: + +
显示状态: + + + + +
*开服时间: + +
区服描述: + +
+
+ +
+ + + 返回 + +
+
+ +
+
+ + + +
+ + + +if(C('COLOR_STYLE')=='blue_color') echo ''; + + + + + diff --git a/Application/Admin/View/ServerNotice/batch.html b/Application/Admin/View/ServerNotice/batch.html new file mode 100644 index 000000000..7e5f3038a --- /dev/null +++ b/Application/Admin/View/ServerNotice/batch.html @@ -0,0 +1,168 @@ + + + + + + + + + + + + + +
+ +
+ +
+ +
+ + + + + + + +
添加方式: + + + + +
+ + + + + + + + + + + +
Execl模板:下载模板
导入模板
+ + + + + + + + + + +
+
+ + + + 返回 + +
+
+ +
+
+ + + +
+ + + +if(C('COLOR_STYLE')=='blue_color') echo ''; + + + + + diff --git a/Application/Admin/View/ServerNotice/edit.html b/Application/Admin/View/ServerNotice/edit.html new file mode 100644 index 000000000..08fda9125 --- /dev/null +++ b/Application/Admin/View/ServerNotice/edit.html @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
*游戏名称: + + +
运营平台: + + + + + + +
*区服名称: + +
显示状态: + + + + + + + + + + +
*开服时间: + +
区服描述: + +
+
+ + +
+ + + 返回 + +
+
+ +
+
+ + + +
+ + + +if(C('COLOR_STYLE')=='blue_color') echo ''; + + + + + diff --git a/Application/Admin/View/ServerNotice/lists.html b/Application/Admin/View/ServerNotice/lists.html new file mode 100644 index 000000000..220741070 --- /dev/null +++ b/Application/Admin/View/ServerNotice/lists.html @@ -0,0 +1,354 @@ + + + + + + + + + + + + + +
+
+ +
+ + 新增 + 批量添加 + + 删除 +
+ +
+ +
+
+ +
+ +
+ +
+
+
+ +
+
+ +
+
+ +
+
+ + - +
+ + +
+
+
+ +
+ +
+ 搜索 +
+
+
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 游戏名称区服名称运营平台显示状态开服时间操作
aOh! 暂时还没有内容!
{$data.game_name}{$data.server_name}{:get_systems_name($data['server_version'])} + + {:set_show_time($data['start_time'])} + 编辑 + 删除 +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 开发者账号游戏名称区服名称运营平台显示状态开服时间
aOh! 暂时还没有内容!
{:get_developer_account($data['developers'])}{$data.game_name}{$data.server_name}{:get_systems_name($data['server_version'])} + + {:set_show_time($data['start_time'])}
+
+
+ +
+
+ 导出 + {$_page|default=''} +
+ + + +
+ + + + +if(C('COLOR_STYLE')=='blue_color') echo ''; + + + + + + diff --git a/Application/Base/Service/GameSourceService.class.php b/Application/Base/Service/GameSourceService.class.php index dcfe7edf7..595b13c3b 100644 --- a/Application/Base/Service/GameSourceService.class.php +++ b/Application/Base/Service/GameSourceService.class.php @@ -92,7 +92,8 @@ class GameSourceService { return false; } - if (self::IS_FIXED_IOS13 && $game['sdk_version'] == 2) { + $isNewSdk = (isset($gameSource['is_new_sdk']) && $gameSource['is_new_sdk'] == 1); + if ($isNewSdk && $game['sdk_version'] == 2) { $channelFolder = $this->getChannelConfigFolder($zip, $packData); return $this->packChannelFolder($zip, $channelFolder); } else { diff --git a/Application/Home/Controller/DownloadController.class.php b/Application/Home/Controller/DownloadController.class.php index 2315964a0..8b6c93ea7 100644 --- a/Application/Home/Controller/DownloadController.class.php +++ b/Application/Home/Controller/DownloadController.class.php @@ -1639,7 +1639,7 @@ class DownloadController extends BaseController { $map["apply_time"] = ["between",[strtotime($begtime1),strtotime($endtime1)]]; } if(!empty($begtime) && !empty($endtime)) { - $map["apply_time"] = ["between",[strtotime($begtime),strtotime($endtime) + 3600 * 24 -1]]; + $map["apply_time"] = ["between",[strtotime($begtime),strtotime($endtime) + 3600 * 24]]; } $serverField = ''; $serverJoin = ''; @@ -1760,26 +1760,59 @@ class DownloadController extends BaseController { public function registerExcelInfo($id,$map) { $xlsName = "注册明细"; $xlsCell = array( - array('account','玩家账号'), - array('promote_account','推广账号'), - array('device_number','设备IMIE/IDFA'), - array('register_time','注册时间'), - array('register_ip','注册ip'), - array('login_time','登陆时间'), - array('login_ip','登陆ip') + '玩家账号', + '推广账号', + '设备IMIE/IDFA', + '注册时间', + '注册ip', + '登陆时间', + '登陆ip' ); $model = M('user','tab_'); - $data = $model->field('account,device_number,promote_account,register_time,register_ip,login_time,login_ip')->where($map)->order('tab_user.id desc')->select(); - $xlsData = []; - foreach ($data as $key1 => $value1) { - $value1['register_time'] = date("Y-m-d H:i:s",$value1['register_time']); - $value1['login_time'] = date("Y-m-d H:i:s",$value1['login_time']); - $value1['account'] = $this->encryption($value1['account']); - $value1['device_number'] = $this->encryption($value1['device_number']); - $xlsData[] = $value1; + $data1 = $model->field('account')->where($map)->order('tab_user.id desc')->select(); + $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($data1)?:0 ; + + $perSize = 5000;//每次查询的条数 + $pages = ceil($accessNum / $perSize); + for($i = 1; $i <= $pages; $i++) { + $model = M('user','tab_'); + + $data = $model + ->field('account,device_number,promote_account,register_time,register_ip,login_time,login_ip') + ->where($map) + ->limit(($i-1)*$perSize ,$perSize) + ->order('tab_user.id desc') + ->select(); + foreach($data as $value1) { + $csvData['account'] = $this->encryption($value1['account']); + $csvData['promote_account'] = $value1['promote_account']; + $csvData['device_number'] = $this->encryption($value1['device_number']); + $csvData['register_time'] = date("Y-m-d H:i:s",$value1['register_time']); + $csvData['register_ip'] = $value1['register_ip']; + $csvData['login_time'] = date("Y-m-d H:i:s",$value1['login_time']); + $csvData['login_ip'] = $value1['login_ip']; + mb_convert_variables('GBK', 'UTF-8', $csvData); + fputcsv($fp, $csvData); + } + unset($csvData); + ob_flush(); + flush(); } - $this->exportExcel($xlsName, $xlsCell, $xlsData,$id); + fclose($fp); + $this->backSuccessExport($id); } //玩家角色excel信息 @@ -1838,12 +1871,12 @@ class DownloadController extends BaseController { $begTime = strtotime($initBegTime); $endTime = strtotime($initEndTime); $params['begin_time'] = $begTime; - $params['end_time'] = $endTime +3600 * 24 -1; + $params['end_time'] = $endTime -1; if(!empty($map['apply_time'][1])) { $begTime = $map['apply_time'][1][0]; $endTime = $map['apply_time'][1][1]; $params['begin_time'] = $begTime; - $params['end_time'] = $endTime + 3600 * 24 -1; + $params['end_time'] = $endTime -1; unset($map['apply_time']); } if(!empty($map['tab_server.server_id'])) { @@ -2736,7 +2769,20 @@ class DownloadController extends BaseController { $spendGenericList = $spendRepository->getPayAmountGroupByDayAndType($params);//通用币充值 $params['pay_way'] = -1; $spendBindingList = $spendRepository->getPayAmountGroupByDayAndType($params);//绑定币充值 - + $allData['role_num'] = 0; + $allData['user_num'] = 0; + $allData['new_user_num'] = 0; + $allData['new_device_num'] = 0; + $allData['new_ip_num'] = 0; + $allData['login_user_num'] = 0; + $allData['spend_user_num'] = 0; + $allData['spend_num'] = 0; + $allData['spend_all_amount'] = 0; + $allData['spend_cash'] = 0; + $allData['spend_generic'] = 0; + $allData['spend_binding'] = 0; + $allData['spend_discount'] = 0; + $allData['spend_voucher'] = 0; foreach ($params['dayList'] as $day) { $date = date('Ymd', strtotime($day)); $records[] = [ @@ -2756,12 +2802,29 @@ class DownloadController extends BaseController { 'spend_discount' => 0, 'spend_voucher' => 0, ]; - + $allData['role_num'] += $roleNumList[$day]; + $allData['user_num'] += $userNumList[$day]; + $allData['new_user_num'] += $newUserNumList[$day]; + $allData['new_device_num'] += $newDeviceNumList[$day]; + $allData['new_ip_num'] += $newIpNumList[$day]; + $allData['login_user_num'] += $loginUserNumList[$day]; + $allData['spend_user_num'] += $spendUserNumList[$day]; + $allData['spend_num'] += $spendNumList[$day]; + $allData['spend_all_amount'] = bcadd($allData['spend_all_amount'], $spendAllAmountList[$day], 2); + $allData['spend_cash'] = bcadd($allData['spend_cash'], $spendCashList[$day], 2); + $allData['spend_generic'] = bcadd($allData['spend_generic'], $spendGenericList[$day], 2); + $allData['spend_binding'] = bcadd($allData['spend_binding'], $spendBindingList[$day], 2); + $allData['spend_discount'] = bcadd($allData['spend_discount'], 0, 2); + $allData['spend_voucher'] = bcadd($allData['spend_voucher'], 0, 2); + } + $allData['day'] = '合计'; + $records[] = $allData; $xlsData = []; foreach ($records as $key1 => $value1) { $xlsData[] = $value1; } + $this->exportExcel($xlsName, $xlsCell, $xlsData,$id); } @@ -2892,18 +2955,18 @@ class DownloadController extends BaseController { public function userRechargeExcelInfo($id,$map) { $xlsName = "充值玩家"; $xlsCell = array( - array('user_account','玩家账号'), - array('game_name','游戏名称'), - array('server_name','游戏区服'), - array('sdk_version','平台'), - array('role_name','角色名'), - array('role_level','等级'), - array('recharge_cost','充值总额'), - array('recharge_count','充值次数'), - array('recharge_cost_today','昨日充值'), - array('unlogin_day','未登录天数'), - array('play_time','最后登录时间'), - array('promote_account','推广员账号'), + '玩家账号', + '游戏名称', + '游戏区服', + '平台', + '角色名', + '等级', + '充值总额', + '充值次数', + '昨日充值', + '未登录天数', + '最后登录时间', + '推广员账号', ); $subMap = []; @@ -2957,6 +3020,7 @@ class DownloadController extends BaseController { unset($map['begintime']); unset($map['endtime']); //$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; @@ -2975,55 +3039,72 @@ class DownloadController extends BaseController { ->join('left 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) ->find(); - foreach ($roles as $role) { - $records[] = [ - 'user_account' => empty($role['user_account']) ? '--' : encryption($role['user_account']), - 'game_name' => empty($role['game_name']) ? '--' : $role['game_name'], - 'role_name' => empty($role['role_name']) ? '--' : $role['role_name'], - 'role_id' => empty($role['role_id']) ? '--' : $role['role_id'], - 'role_level' => empty($role['role_level']) ? '--' : $role['role_level'], - 'server_id' => empty($role['server_id']) ? '--' : $role['server_id'], - 'server_name' => empty($role['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' => empty($role['play_time']) ? '--' : $role['play_time'], - 'play_ip' => empty($role['play_ip']) ? '--' : $role['play_ip'], - 'promote_id' => empty($role['promote_id']) ? '--' : $role['promote_id'], - 'promote_account' => empty($role['promote_account']) ? '--' : $role['promote_account'], - 'sdk_version' => empty($role['sdk_version']) ? '--' : $role['sdk_version'], - 'unlogin_day' => empty($role['play_time']) ? '--' : intval((strtotime(date('Y-m-d 00:00:00')) - strtotime(date('Y-m-d 00:00:00', $role['play_time']))) / (24 * 3600)) - ]; - } + $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($roles)?:0 ; + + $perSize = 5000;//每次查询的条数 + $pages = ceil($accessNum / $perSize); + for($i = 1; $i <= $pages; $i++) { + $data = M()->alias('record') + ->table($subQuery) + ->limit(($i-1)*$perSize ,$perSize) + ->select(); + foreach($data as $key => $value) { + $csvData['user_account'] = empty($value['user_account']) ? '--' : encryption($value['user_account']); + $csvData['game_name'] = empty($value['game_name']) ? '--' :$value['game_name']; + $csvData['server_name'] = empty($value['server_name']) ? '--' :$value['server_name']; + if($value['sdk_version'] == 1) { + $csvData['sdk_version'] = "Android"; + }else if($value['sdk_version'] == 2) { + $csvData['sdk_version'] = "ios"; + } else { + $csvData['sdk_version'] = "--"; + } + $csvData['role_name'] = empty($value['role_name']) ? '--' :$value['role_name']; + $csvData['role_level'] = empty($value['role_level']) ? '--' :$value['role_level']; + $csvData['recharge_cost'] = empty($value['recharge_cost']) ? 0 : $value['recharge_cost']; + $csvData['recharge_count'] = empty($value['recharge_count']) ? 0 : $value['recharge_count']; + $csvData['recharge_cost_today'] = empty($value['recharge_cost_today']) ? 0 : $value['recharge_cost_today']; + $csvData['unlogin_day'] = empty($value['play_time']) ? '--' : intval((strtotime(date('Y-m-d 00:00:00')) - strtotime(date('Y-m-d 00:00:00', $value['play_time']))) / (24 * 3600)); + $csvData['play_time'] = empty($value['play_time']) ? '--' :date('Y-m-d H:i:s',$value['play_time']); + $csvData['promote_account'] = empty($value['promote_account']) ? '--' :$value['promote_account']; + + mb_convert_variables('GBK', 'UTF-8', $csvData); + fputcsv($fp, $csvData); + $xlsData[] = $csvData; + } + unset($xlsData); + ob_flush(); + flush(); + } $allData['user_account'] = '合计'; $allData['game_name'] = '--'; + $allData['server_name'] = '--'; + $allData['sdk_version'] = '--'; $allData['role_name'] = '--'; - $allData['role_id'] = '--'; $allData['role_level'] = '--'; - $allData['server_id'] = '--'; - $allData['server_name'] = '--'; $allData['recharge_cost'] = $total['recharge_cost']; $allData['recharge_count'] = $total['recharge_count']; $allData['recharge_cost_today'] = $total['recharge_cost_today']; + $allData['unlogin_day'] = '--'; $allData['play_time'] = '--'; - $allData['play_ip'] = '--'; - $allData['promote_id'] = '--'; $allData['promote_account'] = '--'; - $allData['sdk_version'] = '--'; - $allData['unlogin_day'] = '--'; - $xlsData = []; - 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; - } + mb_convert_variables('GBK', 'UTF-8', $allData); + fputcsv($fp, $allData); $xlsData[] = $allData; - $this->exportExcel($xlsName, $xlsCell, $xlsData,$id); + fclose($fp); + $this->backSuccessExport($id); } public function rechargeExcelInfo($id,$map) { diff --git a/Application/Home/Controller/HomeController.class.php b/Application/Home/Controller/HomeController.class.php index b40b6ac1b..07d67af4e 100644 --- a/Application/Home/Controller/HomeController.class.php +++ b/Application/Home/Controller/HomeController.class.php @@ -198,7 +198,7 @@ class HomeController extends Controller ->find(); $game['icon'] = get_cover($game['icon'], 'path'); - $gameSource = M('GameSource', 'tab_')->field(['create_time', 'org_plist_url'])->where(array('game_id' => $game['id']))->find(); + $gameSource = M('GameSource', 'tab_')->field(['create_time', 'org_plist_url', 'is_new_sdk'])->where(array('game_id' => $game['id']))->find(); $imageIds = explode(',', $game['flooring_page_imgs']) ?? []; $imageUrls = []; @@ -208,9 +208,9 @@ class HomeController extends Controller $game['flooring_page_imgs'] = $imageUrls; $isNewIos = false; - /* if ($gameSource['create_time'] > strtotime(date('2019-11-27 00:00:00'))) { + if ($gameSource['is_new_sdk'] == 1) { $isNewIos = true; - } */ + } $downloadUrl = ''; if (!$isNewIos && $isIOS13) { diff --git a/Application/Home/Controller/PromoteController.class.php b/Application/Home/Controller/PromoteController.class.php index f505a8857..7be4e73b6 100644 --- a/Application/Home/Controller/PromoteController.class.php +++ b/Application/Home/Controller/PromoteController.class.php @@ -100,7 +100,7 @@ class PromoteController extends BaseController $today_start = mktime(0, 0, 0, date('m'), date('d'), date('Y')); $today_end = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; - $today_open_server_list = M("server as sv", "tab_") + $today_open_server_list = M("ServerNotice as sv", "tab_") ->where( array("sv.start_time" => array("BETWEEN", array($today_start, $today_end)), "sv.show_status" => 1)) @@ -110,7 +110,7 @@ class PromoteController extends BaseController ->page(1, 20) ->select(); - $count = M("server", "tab_") + $count = M("ServerNotice", "tab_") ->where( array("start_time" => array("BETWEEN", array($today_start, $today_end)), "show_status" => 1)) @@ -240,121 +240,79 @@ class PromoteController extends BaseController private function caculateSpend($pay_time, $condition, $create = [], $type = 0) { - $map1['promote_id'] = $map['promote_id'] = array('egt', 0); + $map['promote_id'] = array('egt', 0); $spend = M('Spend', 'tab_'); - $map1['pay_status'] = $map['pay_status'] = 1; + $map['pay_status'] = 1; $today = total(1); $yesterday = total(5); $week = total(2); $mounth = total(3); - unset( $map['create_time']); - - $promote_id = get_pid(); - - $promoteId = M("promote", "tab_") - ->field("id") - ->where(array('chain' => ['like', '/'.$promote_id . '/%'],'id'=>$promote_id,'_logic'=>'or')) - ->select(); - $promoteId = implode(',',array_column($promoteId,'id')); - - $whereUser['promote_id'] = ['IN', $promoteId]; - - if ($type == 1) { - $pay_time = total(1); - $start = mktime(0, 0, 0, date('m'), date('d'), date('Y')); - $end = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; - $whereUser['register_time'] = ['between', array($start, $end - 1)]; - $userId = M('user', 'tab_')->field('id')->where($whereUser)->select(); - - } else if ($type == 2) { - $pay_time = total(3); - $start = mktime(0, 0, 0, date('m'), 1, date('Y')); - $end = mktime(0, 0, 0, date('m') + 1, 1, date('Y')) - 1; + $this->getLoginPromote(); + + $promoteId = $this->loginPromote['id']; + + $promoteIds = M("promote", "tab_") + ->where(array('chain' => ['like', $this->loginPromote['chain'] . $promoteId . '/%'])) + ->getField('id', true); + $promoteIds[] = $promoteId; + + $map['promote_id'] = ['IN', $promoteIds]; + if (in_array($type, [1, 2])) { + $whereUser['promote_id'] = $map['promote_id']; + if ($type == 1) { + $pay_time = total(1); + $start = mktime(0, 0, 0, date('m'), date('d'), date('Y')); + $end = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; + } else { + $pay_time = total(3); + $start = mktime(0, 0, 0, date('m'), 1, date('Y')); + $end = mktime(0, 0, 0, date('m') + 1, 1, date('Y')) - 1; + } $whereUser['register_time'] = ['between', array($start, $end - 1)]; - $userId = M('user', 'tab_')->field('id')->where($whereUser)->select(); - } -// if ($userId) { -// var_dump($userId); -// } - - if ($userId) { + $userId = M('user', 'tab_')->where($whereUser)->getField('id', true); - $userId = implode(',', array_column($userId, 'id')); -// var_dump($userId); - $map1['user_id'] = $map['user_id'] = ['IN', $userId]; - } else if (!$userId && $type != 0) { - return array('sum_mounth' => 0, 'sum_today' => 0); + if ($userId) { + $map['user_id'] = ['IN', $userId]; + } else if (!$userId && $type != 0) { + return array('sum_mounth' => 0, 'sum_today' => 0); + } } - //获取所有会长 - $promote_map = "`chain` = '%/{$promote_id}/%' OR id = {$promote_id}"; - - $promote = M("promote","tab_")->field("id,account")->where($promote_map)->select(); - $data =array(); - for ($i=0; $i < count($promote); $i++) { - # code... - $proid = M("promote","tab_")->field("id")->where("`chain` like '%/{$promote[$i]['id']}/%'")->select(); - $str = ''; - for($k=0; $kfield(' - floor(sum(IF(pay_time ' . $pay_time . ',pay_amount,0))*100) as count, - floor(sum(IF(pay_time ' . $today . ',pay_amount,0))*100) as today, + $data = $spend + ->field(' + floor(sum(IF(pay_time ' . $pay_time . ',pay_amount,0))*100) as sum_count, + floor(sum(IF(pay_time ' . $today . ',pay_amount,0))*100) as sum_today, floor(sum(IF(pay_time ' . $yesterday . ',pay_amount,0))*100) as yesterday, - floor(sum(IF(pay_time ' . $week . ',pay_amount,0))*100) as week, - floor(sum(IF(pay_time ' . $mounth . ',pay_amount,0))*100) as mounth') - ->where($map) - ->where("pay_time".$pay_time) - ->find(); - $dbdata['promote_account'] = $promote[$i]['account']; - } else { - $dbdata = $spend - ->field(' - floor(sum(IF(pay_time ' . $pay_time . ',pay_amount,0))*100) as count, - floor(sum(IF(pay_time ' . $today . ',pay_amount,0))*100) as today, + floor(sum(IF(pay_time ' . $week . ',pay_amount,0))*100) as sum_week, + floor(sum(IF(pay_time ' . $mounth . ',pay_amount,0))*100) as sum_mounth') + ->where($map) + ->where("pay_time".$pay_time) + ->find(); + } else { + $data = $spend + ->field(' + floor(sum(IF(pay_time ' . $pay_time . ',pay_amount,0))*100) as sum_count, + floor(sum(IF(pay_time ' . $today . ',pay_amount,0))*100) as sum_today, floor(sum(IF(pay_time ' . $yesterday . ',pay_amount,0))*100) as yesterday, - floor(sum(IF(pay_time ' . $week . ',pay_amount,0))*100) as week, - floor(sum(IF(pay_time ' . $mounth . ',pay_amount,0))*100) as mounth') - ->where($map) - ->where("pay_time".$pay_time) - ->find(); - $dbdata['promote_account'] = $promote[$i]['account']; - } - $data[] = $dbdata; - } -// if ($userId) { -// echo $spend->_sql();die(); -// } - foreach ($data as $key => $value) { - $value['count'] ?: 0; - $value['today'] ?: 0; - $value['week'] ?: 0; - $value['mounth'] ?: 0; - static $i = 0; - $i++; - $data[$key]['rand'] = $i; - $data[$key]['count'] = $value['count'] / 100; - $data[$key]['today'] = $value['today'] / 100; - $data[$key]['yesterday'] = $value['yesterday'] / 100; - $data[$key]['week'] = $value['week'] / 100; - $data[$key]['mounth'] = $value['mounth'] / 100; - } - $total = $this->data_total($data); - - return $total; -// + floor(sum(IF(pay_time ' . $week . ',pay_amount,0))*100) as sum_week, + floor(sum(IF(pay_time ' . $mounth . ',pay_amount,0))*100) as sum_mounth') + ->where($map) + ->where("pay_time".$pay_time) + ->find(); + } + $data['sum_count'] = empty($data['sum_count']) ? 0 : bcdiv($data['sum_count'], 100 ,2); + $data['sum_today'] = empty($data['sum_today']) ? 0 : bcdiv($data['sum_today'], 100 ,2); + $data['yesterday'] = empty($data['yesterday']) ? 0 : bcdiv($data['yesterday'], 100 ,2); + $data['sum_week'] = empty($data['sum_week']) ? 0 : bcdiv($data['sum_week'], 100 ,2); + $data['sum_mounth'] = empty($data['sum_mounth']) ? 0 : bcdiv($data['sum_mounth'], 100 ,2); + return $data; } public function data_total($data) @@ -484,7 +442,7 @@ class PromoteController extends BaseController $map['sv.show_status'] = 1; $count_map['show_status'] = 1; - $open_server_list = M("server as sv", "tab_") + $open_server_list = M("ServerNotice as sv", "tab_") ->where($map) ->join("left join tab_game gm on gm.id=sv.game_id") ->field('sv.*,gm.icon') @@ -492,7 +450,7 @@ class PromoteController extends BaseController ->page($pg, 20) ->select(); - $count = M("server", "tab_") + $count = M("ServerNotice", "tab_") ->where($count_map) ->count(); //var_dump($count); diff --git a/Application/Home/View/default/Home/landingPage.html b/Application/Home/View/default/Home/landingPage.html index ea2721885..e6d6bfb78 100644 --- a/Application/Home/View/default/Home/landingPage.html +++ b/Application/Home/View/default/Home/landingPage.html @@ -17,7 +17,7 @@ {$game['relation_game_name']} - + -
+
-
找回密码 +
忘记密码
-
- -
-
- -
手机号
+
+ - -
-
- -
验证码
- + + + + +
+
通过手机号找回密码只适用于手机号注册的账号
+
用户名注册的账号可联系客服
-
获取验证码
-
-
下一步
-
-

- 通过手机号找回密码只适用于手机号注册的账号
用户名注册的账号可 - 联系客服 -

-
+
@@ -90,27 +89,49 @@ $(".submit").click(function(){ var mobile = $.trim($("#mobile").val()); var code = $.trim($("#code").val()); + var new_pwd = $.trim($("#new_pwd").val()); + var new_pwd_confirm = $.trim($("#new_pwd_confirm").val()); if(mobile.length == 0){ pmsg.msg('请输入手机号码'); return false; } + if(new_pwd.length == 0){ + pmsg.msg('请输入密码'); + return false; + } + if(new_pwd_confirm.length == 0){ + pmsg.msg('请输入确认密码'); + return false; + } if(code.length == 0){ pmsg.msg('请输入验证码'); return false; } + if(new_pwd.length < 6 || new_pwd.length > 12){ + pmsg.msg('密码长度6-12个字符'); + return false; + } + if(new_pwd != new_pwd_confirm){ + pmsg.msg('两次密码输入不一致'); + return false; + } $.ajax({ - url:"{:U('forget')}", + url:"{:U('forget1')}", type:"POST", dataType:"json", - data:{phone:$.trim($('#mobile').val()),code:$("#code").val()}, + data:{ + phone:$.trim($('#mobile').val()), + code:$("#code").val(), + new_pwd:new_pwd + }, success:function(result){ if(result.status == 1){ - pmsg.msg("验证成功"); + pmsg.msg("修改成功"); setTimeout(function () { window.location.href = result.url; }, 2000); } else { - pmsg.msg(result.msg); + pmsg.msg(result.info ? result.info : result.msg); } }, error:function(){ diff --git a/Application/Mobile/View/User/login.html b/Application/Mobile/View/User/login.html index a01e69225..55080ffd7 100644 --- a/Application/Mobile/View/User/login.html +++ b/Application/Mobile/View/User/login.html @@ -13,7 +13,7 @@ -
+
- -
@@ -84,26 +70,22 @@ if(real_name == ""){ pmsg.msg("请输入真实姓名"); - $('#real_name').focus(); return false; } if(idcard.length == 0){ pmsg.msg("身份证号码不能为空"); - $('#idcard').focus(); return false; } if(real_name.length <2){ pmsg.msg("真实姓名必须大于两个字"); - $('#real_name').focus(); return false; } var reg = /^[\u4E00-\u9FA5]+$/; if(reg.test(real_name) == false){ pmsg.msg("输入姓名不合法"); - $('#real_name').focus(); return false; } @@ -111,7 +93,10 @@ cache:true, type:'post', url:"{:U('User/userauth')}", - data:$('#form').serialize(), + data:{ + "idcard":idcard, + "real_name":real_name + }, dataType:'json', success:function(result){ pmsg.msg(result.info); @@ -130,4 +115,4 @@ }); - \ No newline at end of file + \ No newline at end of file diff --git a/Application/Mobile/View/User/usergame.html b/Application/Mobile/View/User/usergame.html index 17dbad32f..a3daf2a7e 100644 --- a/Application/Mobile/View/User/usergame.html +++ b/Application/Mobile/View/User/usergame.html @@ -34,42 +34,42 @@ {$vo.game_name}
- - 立即进入 - - - - - 立即进入 - - 立即进入 - - - - - 立即进入 - - 立即进入 - - - - - - 立即进入 - - 立即进入 - - - - - 立即进入 - - 立即进入 - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/Application/Mobile/View/User/userpassword.html b/Application/Mobile/View/User/userpassword.html index 9de7f1e4b..8837cc52c 100644 --- a/Application/Mobile/View/User/userpassword.html +++ b/Application/Mobile/View/User/userpassword.html @@ -4,47 +4,39 @@ - -
-
-
-
- -
修改密码 - -
-
- -
-
- -
原始密码
-
- -
- -
-
- -
新密码
-
- -
- -
-
- -
确认密码
-
- -
- -
保存修改
-
+ + +
+ +
修改密码 + +
+ +
-
+ + + +
+ +
+
-
绑定手机解除绑定
-
- -
- - -
-
- -
手机号
+ + - - -
-
- -
手机号
+ + - -
- - - - - -
-
- -
验证码
+ + -
获取验证码
+
-
保存修改
- - - -
+
diff --git a/Application/Mobile/View/User/userset.html b/Application/Mobile/View/User/userset.html index c5794e7de..68b8ed751 100644 --- a/Application/Mobile/View/User/userset.html +++ b/Application/Mobile/View/User/userset.html @@ -84,7 +84,7 @@
{$user['nickname']}
-
+