| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769 |
- <?php
- namespace App\Http\Controllers\Admin;
- use App\Facade\TableName;
- use App\Http\Controllers\Controller;
- use App\Http\helper\NumConfig;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\DB;
- class GameDataController extends Controller
- {
- public function makeGameid(Request $request){
- $userid=DB::connection('write')->table('QPAccountsDB.dbo.GameIdentifier')->select("UserID")->orderByDesc("UserID")->first()->UserID;
- for($i=0;$i<1000000;$i++){
- $gameid= mt_rand(10893227,20893227);
- // echo "<br/>";
- if(!DB::connection('write')->table('QPAccountsDB.dbo.GameIdentifier')->where('GameID' , $gameid)->exists()){
- $userid++;
- DB::connection('write')->table('QPAccountsDB.dbo.GameIdentifier')->updateOrInsert(['UserID'=>$userid,'GameID' => $gameid]);
- }
- }
- }
- //实时在线
- public function userOnlineView(Request $request)
- {
- $start_date = $request->start_date ?? date('Y-m-d');
- $end_date = $request->end_date ?? date('Y-m-d');
- $game_name = DB::connection('read')->table('QPPlatformDB.dbo.GameKindItem')
- ->whereIn('GameID', config('games.openKGame'))
- ->pluck('KindName as GameName', 'GameID');//单选框数据
- return view('admin.game_data.useronline', ['start_date' => $start_date, 'end_date' => $end_date,'game_name' => $game_name]);
- }
- public function TigerBuyRecord(Request $request)
- {
- $start_time = $request->start_time ?: '';
- $end_time = $request->end_time ?: '';
- $start_time = str_replace('T', ' ', $start_time ?? "");
- $end_time = str_replace('T', ' ', $end_time ?? "");
- $GameID = $request->GameID ?: '';
- $Type = $request->Type ?: 0;
- $SortID = $request->SortID ?: -1;
- $where[] = ['KindID', 5006];
- $sortArr = ['-1' => '全部','1' => '初级场','2' => '中级场','3' => '高级场'];
- $typeArr = [0 => '全部',1 => '免费',2 => '买入'];
- !empty($start_time) && $where[] = ['CreateTime', '>=', $start_time];
- !empty($end_time) && $where[] = ['CreateTime', '<=', $end_time];
- !empty($GameID) && $where[] = ['GameID', $GameID];
- !empty($Type) && $where[] = ['Type', $Type];
- ($SortID>=0) && $where[] = ['SortID', $SortID];
- $list = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs as ri')
- ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'ri.UserID', 'ai.UserID')
- ->where($where)
- ->selectRaw('ri.*,ai.GameID,ai.NickName,Channel')
- ->orderByDesc('CreateTime')
- ->paginate(10);
- foreach ($where as $k => $v){
- if($v[0] == 'GameID'){
- unset($where[$k]);
- break;
- }
- }
- $sumData = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs')
- ->where($where)
- ->selectRaw('sum(ChangeScore) sumwin,sum(BuyScore) sumbuy')
- ->first();
- foreach ($list as $value) {
- $value->ChangeScore = number_float($value->ChangeScore / NumConfig::NUM_VALUE);
- $value->BuyBase = number_float($value->BuyBase / NumConfig::NUM_VALUE);
- $value->BuyScore = $value->BuyScore;
- }
- $gameName = '金老虎全屏';
- $action = '/admin/game_data/TigerBuyRecord';
- $data = compact('list', 'Type', 'start_time', 'end_time', 'GameID', 'SortID','typeArr','sortArr','sumData','gameName','action');
- return view('admin.game_data.gate_record', $data);
- }
- public function OxBuyRecord(Request $request)
- {
- $start_time = $request->start_time ?: '';
- $end_time = $request->end_time ?: '';
- $start_time = str_replace('T', ' ', $start_time ?? "");
- $end_time = str_replace('T', ' ', $end_time ?? "");
- $GameID = $request->GameID ?: '';
- $Type = $request->Type ?: 0;
- $SortID = $request->SortID ?: -1;
- $where[] = ['KindID', 5007];
- $sortArr = ['-1' => '全部','1' => '初级场','2' => '中级场','3' => '高级场'];
- $typeArr = [0 => '全部',1 => '免费',2 => '买入'];
- !empty($start_time) && $where[] = ['CreateTime', '>=', $start_time];
- !empty($end_time) && $where[] = ['CreateTime', '<=', $end_time];
- !empty($GameID) && $where[] = ['GameID', $GameID];
- !empty($Type) && $where[] = ['Type', $Type];
- ($SortID>=0) && $where[] = ['SortID', $SortID];
- $list = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs as ri')
- ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'ri.UserID', 'ai.UserID')
- ->where($where)
- ->selectRaw('ri.*,ai.GameID,ai.NickName,Channel')
- ->orderByDesc('CreateTime')
- ->paginate(10);
- foreach ($where as $k => $v){
- if($v[0] == 'GameID'){
- unset($where[$k]);
- break;
- }
- }
- $sumData = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs')
- ->where($where)
- ->selectRaw('sum(ChangeScore) sumwin,sum(BuyScore) sumbuy')
- ->first();
- foreach ($list as $value) {
- $value->ChangeScore = number_float($value->ChangeScore / NumConfig::NUM_VALUE);
- $value->BuyBase = number_float($value->BuyBase / NumConfig::NUM_VALUE);
- $value->BuyScore = $value->BuyScore;
- }
- $gameName = '金牛全屏';
- $action = '/admin/game_data/OxBuyRecord';
- $data = compact('list', 'Type', 'start_time', 'end_time', 'GameID', 'SortID','typeArr','sortArr','sumData','gameName','action');
- return view('admin.game_data.gate_record', $data);
- }
- public function RabbitBuyRecord(Request $request)
- {
- $start_time = $request->start_time ?: '';
- $end_time = $request->end_time ?: '';
- $start_time = str_replace('T', ' ', $start_time ?? "");
- $end_time = str_replace('T', ' ', $end_time ?? "");
- $GameID = $request->GameID ?: '';
- $Type = $request->Type ?: 0;
- $SortID = $request->SortID ?: -1;
- $where[] = ['KindID', 5008];
- $sortArr = ['-1' => '全部','1' => '初级场','2' => '中级场','3' => '高级场'];
- $typeArr = [0 => '全部',1 => '免费',2 => '买入'];
- !empty($start_time) && $where[] = ['CreateTime', '>=', $start_time];
- !empty($end_time) && $where[] = ['CreateTime', '<=', $end_time];
- !empty($GameID) && $where[] = ['GameID', $GameID];
- !empty($Type) && $where[] = ['Type', $Type];
- ($SortID>=0) && $where[] = ['SortID', $SortID];
- $list = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs as ri')
- ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'ri.UserID', 'ai.UserID')
- ->where($where)
- ->selectRaw('ri.*,ai.GameID,ai.NickName,Channel')
- ->orderByDesc('CreateTime')
- ->paginate(10);
- foreach ($where as $k => $v){
- if($v[0] == 'GameID'){
- unset($where[$k]);
- break;
- }
- }
- $sumData = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs')
- ->where($where)
- ->selectRaw('sum(ChangeScore) sumwin,sum(BuyScore) sumbuy')
- ->first();
- foreach ($list as $value) {
- $value->ChangeScore = number_float($value->ChangeScore / NumConfig::NUM_VALUE);
- $value->BuyBase = number_float($value->BuyBase / NumConfig::NUM_VALUE);
- $value->BuyScore = $value->BuyScore;
- }
- $gameName = '金牛全屏';
- $action = '/admin/game_data/RabbitBuyRecord';
- $data = compact('list', 'Type', 'start_time', 'end_time', 'GameID', 'SortID','typeArr','sortArr','sumData','gameName','action');
- return view('admin.game_data.gate_record', $data);
- }
- public function NewOlympusBuyRecord(Request $request)
- {
- $start_time = $request->start_time ?: '';
- $end_time = $request->end_time ?: '';
- $start_time = str_replace('T', ' ', $start_time ?? "");
- $end_time = str_replace('T', ' ', $end_time ?? "");
- $GameID = $request->GameID ?: '';
- $Type = $request->Type ?: 0;
- $SortID = $request->SortID ?: -1;
- $where[] = ['KindID', 6001];
- $sortArr = ['-1' => '全部','1' => '初级场','2' => '中级场','3' => '高级场'];
- $typeArr = [0 => '全部',1 => '免费',2 => '买入'];
- !empty($start_time) && $where[] = ['CreateTime', '>=', $start_time];
- !empty($end_time) && $where[] = ['CreateTime', '<=', $end_time];
- !empty($GameID) && $where[] = ['GameID', $GameID];
- !empty($Type) && $where[] = ['Type', $Type];
- ($SortID>=0) && $where[] = ['SortID', $SortID];
- $list = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs as ri')
- ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'ri.UserID', 'ai.UserID')
- ->where($where)
- ->selectRaw('ri.*,ai.GameID,ai.NickName,Channel')
- ->orderByDesc('CreateTime')
- ->paginate(10);
- foreach ($where as $k => $v){
- if($v[0] == 'GameID'){
- unset($where[$k]);
- break;
- }
- }
- $sumData = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs')
- ->where($where)
- ->selectRaw('sum(ChangeScore) sumwin,sum(BuyScore) sumbuy')
- ->first();
- foreach ($list as $value) {
- $value->ChangeScore = number_float($value->ChangeScore / NumConfig::NUM_VALUE);
- $value->BuyBase = number_float($value->BuyBase / NumConfig::NUM_VALUE);
- $value->BuyScore = $value->BuyScore;
- }
- $gameName = '新宙斯全屏';
- $action = '/admin/game_data/NewolyBuyRecord';
- $data = compact('list', 'Type', 'start_time', 'end_time', 'GameID', 'SortID','typeArr','sortArr','sumData','gameName','action');
- return view('admin.game_data.gate_record', $data);
- }
- public function AztecBuyRecord(Request $request)
- {
- $start_time = $request->start_time ?: '';
- $end_time = $request->end_time ?: '';
- $start_time = str_replace('T', ' ', $start_time ?? "");
- $end_time = str_replace('T', ' ', $end_time ?? "");
- $GameID = $request->GameID ?: '';
- $Type = $request->Type ?: 0;
- $SortID = $request->SortID ?: -1;
- $where[] = ['KindID', 5004];
- $sortArr = ['-1' => '全部','1' => '初级场','2' => '中级场','3' => '高级场'];
- $typeArr = [0 => '全部',1 => '免费',2 => '买入'];
- !empty($start_time) && $where[] = ['CreateTime', '>=', $start_time];
- !empty($end_time) && $where[] = ['CreateTime', '<=', $end_time];
- !empty($GameID) && $where[] = ['GameID', $GameID];
- !empty($Type) && $where[] = ['Type', $Type];
- ($SortID>=0) && $where[] = ['SortID', $SortID];
- $list = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs as ri')
- ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'ri.UserID', 'ai.UserID')
- ->where($where)
- ->selectRaw('ri.*,ai.GameID,ai.NickName,Channel')
- ->orderByDesc('CreateTime')
- ->paginate(10);
- foreach ($where as $k => $v){
- if($v[0] == 'GameID'){
- unset($where[$k]);
- break;
- }
- }
- $sumData = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs')
- ->where($where)
- ->selectRaw('sum(ChangeScore) sumwin,sum(BuyScore) sumbuy')
- ->first();
- foreach ($list as $value) {
- $value->ChangeScore = number_float($value->ChangeScore / NumConfig::NUM_VALUE);
- $value->BuyBase = number_float($value->BuyBase / NumConfig::NUM_VALUE);
- $value->BuyScore = $value->BuyScore;
- }
- $gameName = 'Aztec全屏';
- $action = '/admin/game_data/AztecBuyRecord';
- $data = compact('list', 'Type', 'start_time', 'end_time', 'GameID', 'SortID','typeArr','sortArr','sumData','gameName','action');
- return view('admin.game_data.gate_record', $data);
- }
- public function fishBuyRecord(Request $request)
- {
- $start_time = $request->start_time ?: '';
- $end_time = $request->end_time ?: '';
- $start_time = str_replace('T', ' ', $start_time ?? "");
- $end_time = str_replace('T', ' ', $end_time ?? "");
- $GameID = $request->GameID ?: '';
- $Type = $request->Type ?: 0;
- $SortID = $request->SortID ?: -1;
- $where[] = ['KindID', 5005];
- $sortArr = ['-1' => '全部','1' => '初级场','2' => '中级场','3' => '高级场'];
- $typeArr = [0 => '全部',1 => '免费',2 => '买入'];
- !empty($start_time) && $where[] = ['CreateTime', '>=', $start_time];
- !empty($end_time) && $where[] = ['CreateTime', '<=', $end_time];
- !empty($GameID) && $where[] = ['GameID', $GameID];
- !empty($Type) && $where[] = ['Type', $Type];
- ($SortID>=0) && $where[] = ['SortID', $SortID];
- $list = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs as ri')
- ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'ri.UserID', 'ai.UserID')
- ->where($where)
- ->selectRaw('ri.*,ai.GameID,ai.NickName,Channel')
- ->orderByDesc('CreateTime')
- ->paginate(10);
- foreach ($where as $k => $v){
- if($v[0] == 'GameID'){
- unset($where[$k]);
- break;
- }
- }
- $sumData = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs')
- ->where($where)
- ->selectRaw('sum(ChangeScore) sumwin,sum(BuyScore) sumbuy')
- ->first();
- foreach ($list as $value) {
- $value->ChangeScore = number_float($value->ChangeScore / NumConfig::NUM_VALUE);
- $value->BuyBase = number_float($value->BuyBase / NumConfig::NUM_VALUE);
- $value->BuyScore = $value->BuyScore;
- }
- $gameName = '钓鱼全屏';
- $action = '/admin/game_data/fishBuyRecord';
- $data = compact('list', 'Type', 'start_time', 'end_time', 'GameID', 'SortID','typeArr','sortArr','sumData','gameName','action');
- return view('admin.game_data.gate_record', $data);
- }
- //实时在线
- public function userOnline(Request $request)
- {
- $game_id = $request->game_id ?? '';
- $type = $request->type??0;
- $start_date = $request->start_date ?? date('Y-m-d');
- if($type == 0 && $start_date == date('Y-m-d')){
- $time = time();
- $where= [['created', '<=', $time],['created', '>=', $time-86400]];
- $data = DB::connection('mysql')->table('game-report')
- ->where($where)
- ->orderBy('created', 'asc')
- ->get();
- //$whereY[] = ['ldate', '=', date('Ymd', strtotime($yesterday))];
- $whereY= [['created', '<=', $time-86400],['created', '>=', $time-86400*2]];
- $ydata = DB::connection('mysql')->table('game-report')
- ->where($whereY)
- ->orderBy('created', 'asc')
- ->get();
- }else{
- $yesterday = date('Y-m-d',strtotime($start_date)-86400);
- $where[] = ['ldate', '=', date('Ymd', strtotime($start_date))];
- $data = DB::connection('mysql')->table('game-report')
- ->where($where)
- ->orderBy('created', 'asc')
- ->get();
- $whereY[] = ['ldate', '=', date('Ymd', strtotime($yesterday))];
- $ydata = DB::connection('mysql')->table('game-report')
- ->where($whereY)
- ->orderBy('created', 'asc')
- ->get();
- }
- $result = [
- ];
- foreach ($data as $key => $value) {
- $online = json_decode($value->online,true);
- $onlineNum = 0;
- if(is_array($online)){
- foreach ($online as $val){
- if($val['KindID'] == $game_id){
- $onlineNum = $val['game_count'];
- break;
- }
- $onlineNum +=$val['game_count'];
- }
- }
- $min = date('Hi',$value->created);
- $min = 'm_'.$min;
- $result['online'][$min] = $onlineNum;//训练币消耗
- // $result['online'][$min] = $value->online;//训练币消耗
- $result['reg'][$min] = $value->register;//累计场次
- $result['active'][$min] = $value->active;//参游人数
- $result['recharge'][$min] = $value->recharge/100;//新增数
- $result['withdraw'][$min] = $value->withdraw/100;
- $result['profit'][$min] = ($value->recharge-$value->withdraw)/100;
- $result['created_at'][$min] = date('Y-m-d H:i',$value->created);
- $result['yonline'][$min] = 0;
- $result['yreg'][$min] = 0;
- $result['yactive'][$min] = 0;
- $result['yrecharge'][$min] = 0;
- $result['ywithdraw'][$min] = 0;
- }
- unset($value);
- foreach ($ydata as $key => $value) {
- $min = date('Hi',$value->created);
- $min = 'm_'.$min;
- if(isset($result['reg'][$min])){
- $online = json_decode($value->online,true);
- $onlineNum = 0;
- if(is_array($online)){
- foreach ($online as $val){
- if($val['KindID'] == $game_id){
- $onlineNum = $val['game_count'];
- break;
- }
- $onlineNum +=$val['game_count'];
- }
- }
- $result['yonline'][$min] = $onlineNum;//训练币消耗
- $result['yreg'][$min] = $value->register;//累计场次
- $result['yactive'][$min] = $value->active;//参游人数
- $result['yrecharge'][$min] = $value->recharge/100;//新增数
- $result['ywithdraw'][$min] = $value->withdraw/100;
- $result['yprofit'][$min] = ($value->recharge-$value->withdraw)/100;
- }
- }
- $rs = [
- 'online' => array_values($result['online']),
- 'reg' => array_values($result['reg']),
- 'active' => array_values($result['active']),
- 'recharge' => array_values($result['recharge']),
- 'withdraw' => array_values($result['withdraw']),
- 'profit' => array_values($result['profit']),
- 'created_at' => array_values($result['created_at']),
- 'yonline' => array_values($result['yonline']),
- 'yreg' => array_values($result['yreg']),
- 'yactive' => array_values($result['yactive']),
- 'yrecharge' => array_values($result['yrecharge']),
- 'ywithdraw' => array_values($result['ywithdraw']),
- 'yprofit' => array_values($result['yprofit']?? []),
- ];
- return $rs;
- }
- public function onlineList(Request $request){
- $GameID = $request->get('GameID');
- $SortID = $request->get('SortID');
- $uid = $request->get('uid');
- if($uid){
- $where = [];
- $where[] = ['ai.GameID', $uid];
- }else{
- $where = [];
- !empty($GameID) && $where[] = ['gi.GameID', $GameID];
- !empty($SortID) && $where[] = ['gi.SortID', $SortID];
- }
- $list = DB::connection('read')->table('QPTreasureDB.dbo.GameScoreLocker as gl')
- ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'gl.UserID', 'ai.UserID')
- ->leftJoin('QPPlatformDB.dbo.GameRoomInfo as gi','gl.ServerID','gi.ServerID')
- ->leftJoin('QPTreasureDB.dbo.GameScoreInfo as gsi','gl.UserID','=','gsi.UserID')
- ->where($where)
- ->selectRaw('ai.GameID,ai.NickName,Channel,gi.ServerName,gi.SortID,gl.CollectDate,gl.UserID,gsi.Score')
- // ->orderByDesc('CreateTime')
- ->paginate(10);
- $games = DB::connection('read')->table(TableName::QPPlatformDB() . 'GameKindItem')
- ->whereIn('GameID', config('games.openKGame'))
- ->select('KindName', 'GameID')
- ->pluck('KindName', 'GameID')
- ->toArray();
- $type = [
- 1 => '初级',
- 2 => '中级',
- 3 => '高级',
- 4 => '超高级'
- ];
- $data = compact('list', 'GameID', 'SortID','uid','games','type');
- return view('admin.game_data.game_online', $data);
- }
- public function gameRankList(Request $request){
- $date = $request->date ?: date('Y-m-d');
- $dateFormat = date('Ymd',strtotime($date));
- $channels =session('admin_channels');;
- $Channel = $request->get('Channel');
- $sort = $request->sort??1;
- $where = [];
- $where[] = ['rd.DateID', $dateFormat];
- if(!empty($Channel)) {
- $where[] = ['ai.Channel', $Channel];
- }
- $rank = [1 =>'Win Rank',2 =>'Lost Rank',3 => 'MaxWin Rank',4 => 'Recharge Rank',5 => 'Withdraw Rank'];
- $order_sql = '(WinScore + LostScore) DESC';
- switch ($sort) {
- case '1':
- $order_sql = '(WinScore + LostScore) DESC';
- break;
- case '2':
- $order_sql = '(WinScore + LostScore) ASC';
- break;
- case '3':
- $order_sql = 'MaxWinScore DESC';
- break;
- case '4':
- $order_sql = 'Recharge DESC';
- break;
- case '5':
- $order_sql = 'Withdraw DESC';
- break;
- }
- $list = DB::connection('read')->table('QPRecordDB.dbo.RecordUserDataStatisticsNew as rd')
- ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'rd.UserID', 'ai.UserID')
- ->where($where)
- ->selectRaw('ai.UserID,ai.GameID,ai.NickName,Channel,ai.LastLogonDate,ai.RegisterDate,Recharge, (WinScore + LostScore) Score,MaxScore,MaxWinScore,Withdraw,MaxDrawBase,Revenue,TotalBet')
- ->orderByRaw($order_sql)
- ->paginate(20);
- $data = compact('list', 'date','rank','sort','Channel','channels');
- return view('admin.game_data.rank', $data);
- }
- public function userDetail(\Illuminate\Http\Request $request)
- {
- $userId = $request->input('user_id');
- $startDate = $request->input('start_date', date('Y-m-d', strtotime('-6 days')));
- $endDate = $request->input('end_date', date('Y-m-d'));
- $list = [];
- if ($userId) {
- $list = \DB::connection('read')->table('QPRecordDB.dbo.RecordUserDataStatisticsNew as rd')
- ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'rd.UserID', 'ai.UserID')
- ->where('ai.GameID', $userId)
- ->whereBetween('rd.DateID', [
- date('Ymd', strtotime($startDate)),
- date('Ymd', strtotime($endDate))
- ])
- ->selectRaw('rd.DateID, ai.UserID, ai.GameID, ai.NickName, Channel, ai.LastLogonDate, ai.RegisterDate, Recharge, (WinScore + LostScore) Score, MaxScore, MaxWinScore, Withdraw, MaxDrawBase, Revenue, TotalBet')
- ->orderBy('rd.DateID', 'desc')
- ->paginate(20);
- }
- return view('admin.game_data.user_detail', [
- 'list' => $list,
- 'user_id' => $userId,
- 'start_date' => $startDate,
- 'end_date' => $endDate,
- ]);
- }
- public function userTotalList(\Illuminate\Http\Request $request)
- {
- $rechargeMax = $request->input('recharge_max', 300);
- $withdrawMin = $request->input('withdraw_min', 1000);
- $list = \DB::connection('read')->table('QPRecordDB.dbo.RecordUserTotalStatistics as ut')
- ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'ut.UserID', '=', 'ai.UserID')
- ->where('ut.Recharge', '<=', $rechargeMax)
- ->where('ut.Withdraw', '>', $withdrawMin * 100)
- ->selectRaw('ai.UserID, ai.GameID, ai.NickName, ai.Channel, ai.LastLogonDate, ai.RegisterDate, (ut.WinScore + ut.LostScore) as TotalScore, ut.WinScore, ut.LostScore, ut.Revenue, ut.Withdraw, ut.Recharge, ut.DrawBase, ut.TotalBet, ut.RechargeTimes')
- ->orderByDesc('ai.LastLogonDate')
- ->paginate(20);
- return view('admin.user_total.list', [
- 'list' => $list,
- 'recharge_max' => $rechargeMax,
- 'withdraw_min' => $withdrawMin,
- ]);
- }
- /**
- * 游戏参与情况统计
- * 按照注册时间统计不同UserMedal(推荐游戏ID)对应的游戏参与情况
- */
- public function gameParticipationStatistics(Request $request)
- {
- // 获取注册时间范围,默认近3天
- $startDate = $request->input('start_date', date('Y-m-d', strtotime('-3 days')));
- $endDate = $request->input('end_date', date('Y-m-d'));
- // 转换为日期时间格式(包含时间)
- $startDateTime = $startDate . ' 00:00:00';
- $endDateTime = $endDate . ' 23:59:59';
- // 1. 统计注册人数(按UserMedal分组)
- $registerStats = DB::connection('read')
- ->table(TableName::QPAccountsDB() . 'AccountsInfo as ai')
- ->whereBetween('ai.RegisterDate', [$startDateTime, $endDateTime])
- ->whereNotNull('ai.UserMedal')
- ->where('ai.UserMedal', '!=', '')
- ->where('ai.UserMedal', '!=', 0)
- ->where('ai.Channel', '!=', 100)
- ->selectRaw('
- ai.UserMedal as game_id,
- COUNT(DISTINCT ai.UserID) as register_count
- ')
- ->groupBy('ai.UserMedal')
- ->get()
- ->keyBy('game_id');
- // 2. 统计参与游戏的用户数(WinInning + LostInning > 0,按UserMedal分组)
- $playedStats = DB::connection('read')
- ->table('QPRecordDB.dbo.RecordUserTotalStatistics as ut')
- ->join(TableName::QPAccountsDB() . 'AccountsInfo as ai', 'ut.UserID', '=', 'ai.UserID')
- ->whereBetween('ai.RegisterDate', [$startDateTime, $endDateTime])
- ->whereNotNull('ai.UserMedal')
- ->where('ai.UserMedal', '!=', '')
- ->where('ai.UserMedal', '!=', 0)
- ->where('ai.Channel', '!=', 100)
- ->whereRaw('(ISNULL(ut.WinInning, 0) + ISNULL(ut.LostInning, 0)) > 0')
- ->selectRaw('
- ai.UserMedal as game_id,
- COUNT(DISTINCT ai.UserID) as played_count
- ')
- ->groupBy('ai.UserMedal')
- ->get()
- ->keyBy('game_id');
- // 3. 统计付费用户数(Recharge > 0,按UserMedal分组)
- $paidStats = DB::connection('read')
- ->table('QPRecordDB.dbo.RecordUserTotalStatistics as ut')
- ->join(TableName::QPAccountsDB() . 'AccountsInfo as ai', 'ut.UserID', '=', 'ai.UserID')
- ->whereBetween('ai.RegisterDate', [$startDateTime, $endDateTime])
- ->whereNotNull('ai.UserMedal')
- ->where('ai.UserMedal', '!=', '')
- ->where('ai.UserMedal', '!=', 0)
- ->where('ai.Channel', '!=', 100)
- ->where('ut.Recharge', '>', 0)
- ->selectRaw('
- ai.UserMedal as game_id,
- COUNT(DISTINCT ai.UserID) as paid_count
- ')
- ->groupBy('ai.UserMedal')
- ->get()
- ->keyBy('game_id');
- // 4. 获取所有涉及的游戏ID
- $allGameIds = collect([$registerStats, $playedStats, $paidStats])
- ->flatMap(function ($stats) {
- return $stats->pluck('game_id');
- })
- ->unique()
- ->filter()
- ->toArray();
- // 5. 获取游戏信息(从MySQL)
- $games = [];
- if (!empty($allGameIds)) {
- $gamesData = DB::connection('mysql')
- ->table('webgame.games')
- ->whereIn('id', $allGameIds)
- ->select('id', 'brand', 'title')
- ->get();
- foreach ($gamesData as $game) {
- $games[$game->id] = $game;
- }
- }
- // 6. 组装统计数据
- $statistics = [];
- foreach ($allGameIds as $gameId) {
- $registerStat = $registerStats->get($gameId);
- $registerCount = $registerStat ? (int)$registerStat->register_count : 0;
-
- $playedStat = $playedStats->get($gameId);
- $playedCount = $playedStat ? (int)$playedStat->played_count : 0;
-
- $paidStat = $paidStats->get($gameId);
- $paidCount = $paidStat ? (int)$paidStat->paid_count : 0;
-
- // 参游率 = 参与游戏人数 / 注册人数
- $participationRate = $registerCount > 0 ? round(($playedCount / $registerCount) * 100, 2) : 0;
-
- // 付费率 = 付费人数 / 注册人数
- $paidRate = $registerCount > 0 ? round(($paidCount / $registerCount) * 100, 2) : 0;
-
- // 获取游戏名称
- $gameName = '未知游戏';
- if (isset($games[$gameId])) {
- $game = $games[$gameId];
- $gameName = $game->brand . ' - ' . $game->title;
- }
- $statistics[] = [
- 'game_id' => $gameId,
- 'game_name' => $gameName,
- 'register_count' => $registerCount,
- 'played_count' => $playedCount,
- 'participation_rate' => $participationRate,
- 'paid_count' => $paidCount,
- 'paid_rate' => $paidRate,
- ];
- }
- // 按注册人数排序(降序)
- usort($statistics, function ($a, $b) {
- return $b['register_count'] <=> $a['register_count'];
- });
- return view('admin.game_data.participation_statistics', [
- 'statistics' => $statistics,
- 'start_date' => $startDate,
- 'end_date' => $endDate,
- ]);
- }
- }
|