GameDataController.php 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Facade\TableName;
  4. use App\Http\Controllers\Controller;
  5. use App\Http\helper\NumConfig;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\DB;
  8. class GameDataController extends Controller
  9. {
  10. public function makeGameid(Request $request){
  11. $userid=DB::connection('write')->table('QPAccountsDB.dbo.GameIdentifier')->select("UserID")->orderByDesc("UserID")->first()->UserID;
  12. for($i=0;$i<1000000;$i++){
  13. $gameid= mt_rand(10893227,20893227);
  14. // echo "<br/>";
  15. if(!DB::connection('write')->table('QPAccountsDB.dbo.GameIdentifier')->where('GameID' , $gameid)->exists()){
  16. $userid++;
  17. DB::connection('write')->table('QPAccountsDB.dbo.GameIdentifier')->updateOrInsert(['UserID'=>$userid,'GameID' => $gameid]);
  18. }
  19. }
  20. }
  21. //实时在线
  22. public function userOnlineView(Request $request)
  23. {
  24. $start_date = $request->start_date ?? date('Y-m-d');
  25. $end_date = $request->end_date ?? date('Y-m-d');
  26. $game_name = DB::connection('read')->table('QPPlatformDB.dbo.GameKindItem')
  27. ->whereIn('GameID', config('games.openKGame'))
  28. ->pluck('KindName as GameName', 'GameID');//单选框数据
  29. return view('admin.game_data.useronline', ['start_date' => $start_date, 'end_date' => $end_date,'game_name' => $game_name]);
  30. }
  31. public function TigerBuyRecord(Request $request)
  32. {
  33. $start_time = $request->start_time ?: '';
  34. $end_time = $request->end_time ?: '';
  35. $start_time = str_replace('T', ' ', $start_time ?? "");
  36. $end_time = str_replace('T', ' ', $end_time ?? "");
  37. $GameID = $request->GameID ?: '';
  38. $Type = $request->Type ?: 0;
  39. $SortID = $request->SortID ?: -1;
  40. $where[] = ['KindID', 5006];
  41. $sortArr = ['-1' => '全部','1' => '初级场','2' => '中级场','3' => '高级场'];
  42. $typeArr = [0 => '全部',1 => '免费',2 => '买入'];
  43. !empty($start_time) && $where[] = ['CreateTime', '>=', $start_time];
  44. !empty($end_time) && $where[] = ['CreateTime', '<=', $end_time];
  45. !empty($GameID) && $where[] = ['GameID', $GameID];
  46. !empty($Type) && $where[] = ['Type', $Type];
  47. ($SortID>=0) && $where[] = ['SortID', $SortID];
  48. $list = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs as ri')
  49. ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'ri.UserID', 'ai.UserID')
  50. ->where($where)
  51. ->selectRaw('ri.*,ai.GameID,ai.NickName,Channel')
  52. ->orderByDesc('CreateTime')
  53. ->paginate(10);
  54. foreach ($where as $k => $v){
  55. if($v[0] == 'GameID'){
  56. unset($where[$k]);
  57. break;
  58. }
  59. }
  60. $sumData = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs')
  61. ->where($where)
  62. ->selectRaw('sum(ChangeScore) sumwin,sum(BuyScore) sumbuy')
  63. ->first();
  64. foreach ($list as $value) {
  65. $value->ChangeScore = number_float($value->ChangeScore / NumConfig::NUM_VALUE);
  66. $value->BuyBase = number_float($value->BuyBase / NumConfig::NUM_VALUE);
  67. $value->BuyScore = $value->BuyScore;
  68. }
  69. $gameName = '金老虎全屏';
  70. $action = '/admin/game_data/TigerBuyRecord';
  71. $data = compact('list', 'Type', 'start_time', 'end_time', 'GameID', 'SortID','typeArr','sortArr','sumData','gameName','action');
  72. return view('admin.game_data.gate_record', $data);
  73. }
  74. public function OxBuyRecord(Request $request)
  75. {
  76. $start_time = $request->start_time ?: '';
  77. $end_time = $request->end_time ?: '';
  78. $start_time = str_replace('T', ' ', $start_time ?? "");
  79. $end_time = str_replace('T', ' ', $end_time ?? "");
  80. $GameID = $request->GameID ?: '';
  81. $Type = $request->Type ?: 0;
  82. $SortID = $request->SortID ?: -1;
  83. $where[] = ['KindID', 5007];
  84. $sortArr = ['-1' => '全部','1' => '初级场','2' => '中级场','3' => '高级场'];
  85. $typeArr = [0 => '全部',1 => '免费',2 => '买入'];
  86. !empty($start_time) && $where[] = ['CreateTime', '>=', $start_time];
  87. !empty($end_time) && $where[] = ['CreateTime', '<=', $end_time];
  88. !empty($GameID) && $where[] = ['GameID', $GameID];
  89. !empty($Type) && $where[] = ['Type', $Type];
  90. ($SortID>=0) && $where[] = ['SortID', $SortID];
  91. $list = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs as ri')
  92. ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'ri.UserID', 'ai.UserID')
  93. ->where($where)
  94. ->selectRaw('ri.*,ai.GameID,ai.NickName,Channel')
  95. ->orderByDesc('CreateTime')
  96. ->paginate(10);
  97. foreach ($where as $k => $v){
  98. if($v[0] == 'GameID'){
  99. unset($where[$k]);
  100. break;
  101. }
  102. }
  103. $sumData = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs')
  104. ->where($where)
  105. ->selectRaw('sum(ChangeScore) sumwin,sum(BuyScore) sumbuy')
  106. ->first();
  107. foreach ($list as $value) {
  108. $value->ChangeScore = number_float($value->ChangeScore / NumConfig::NUM_VALUE);
  109. $value->BuyBase = number_float($value->BuyBase / NumConfig::NUM_VALUE);
  110. $value->BuyScore = $value->BuyScore;
  111. }
  112. $gameName = '金牛全屏';
  113. $action = '/admin/game_data/OxBuyRecord';
  114. $data = compact('list', 'Type', 'start_time', 'end_time', 'GameID', 'SortID','typeArr','sortArr','sumData','gameName','action');
  115. return view('admin.game_data.gate_record', $data);
  116. }
  117. public function RabbitBuyRecord(Request $request)
  118. {
  119. $start_time = $request->start_time ?: '';
  120. $end_time = $request->end_time ?: '';
  121. $start_time = str_replace('T', ' ', $start_time ?? "");
  122. $end_time = str_replace('T', ' ', $end_time ?? "");
  123. $GameID = $request->GameID ?: '';
  124. $Type = $request->Type ?: 0;
  125. $SortID = $request->SortID ?: -1;
  126. $where[] = ['KindID', 5008];
  127. $sortArr = ['-1' => '全部','1' => '初级场','2' => '中级场','3' => '高级场'];
  128. $typeArr = [0 => '全部',1 => '免费',2 => '买入'];
  129. !empty($start_time) && $where[] = ['CreateTime', '>=', $start_time];
  130. !empty($end_time) && $where[] = ['CreateTime', '<=', $end_time];
  131. !empty($GameID) && $where[] = ['GameID', $GameID];
  132. !empty($Type) && $where[] = ['Type', $Type];
  133. ($SortID>=0) && $where[] = ['SortID', $SortID];
  134. $list = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs as ri')
  135. ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'ri.UserID', 'ai.UserID')
  136. ->where($where)
  137. ->selectRaw('ri.*,ai.GameID,ai.NickName,Channel')
  138. ->orderByDesc('CreateTime')
  139. ->paginate(10);
  140. foreach ($where as $k => $v){
  141. if($v[0] == 'GameID'){
  142. unset($where[$k]);
  143. break;
  144. }
  145. }
  146. $sumData = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs')
  147. ->where($where)
  148. ->selectRaw('sum(ChangeScore) sumwin,sum(BuyScore) sumbuy')
  149. ->first();
  150. foreach ($list as $value) {
  151. $value->ChangeScore = number_float($value->ChangeScore / NumConfig::NUM_VALUE);
  152. $value->BuyBase = number_float($value->BuyBase / NumConfig::NUM_VALUE);
  153. $value->BuyScore = $value->BuyScore;
  154. }
  155. $gameName = '金牛全屏';
  156. $action = '/admin/game_data/RabbitBuyRecord';
  157. $data = compact('list', 'Type', 'start_time', 'end_time', 'GameID', 'SortID','typeArr','sortArr','sumData','gameName','action');
  158. return view('admin.game_data.gate_record', $data);
  159. }
  160. public function NewOlympusBuyRecord(Request $request)
  161. {
  162. $start_time = $request->start_time ?: '';
  163. $end_time = $request->end_time ?: '';
  164. $start_time = str_replace('T', ' ', $start_time ?? "");
  165. $end_time = str_replace('T', ' ', $end_time ?? "");
  166. $GameID = $request->GameID ?: '';
  167. $Type = $request->Type ?: 0;
  168. $SortID = $request->SortID ?: -1;
  169. $where[] = ['KindID', 6001];
  170. $sortArr = ['-1' => '全部','1' => '初级场','2' => '中级场','3' => '高级场'];
  171. $typeArr = [0 => '全部',1 => '免费',2 => '买入'];
  172. !empty($start_time) && $where[] = ['CreateTime', '>=', $start_time];
  173. !empty($end_time) && $where[] = ['CreateTime', '<=', $end_time];
  174. !empty($GameID) && $where[] = ['GameID', $GameID];
  175. !empty($Type) && $where[] = ['Type', $Type];
  176. ($SortID>=0) && $where[] = ['SortID', $SortID];
  177. $list = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs as ri')
  178. ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'ri.UserID', 'ai.UserID')
  179. ->where($where)
  180. ->selectRaw('ri.*,ai.GameID,ai.NickName,Channel')
  181. ->orderByDesc('CreateTime')
  182. ->paginate(10);
  183. foreach ($where as $k => $v){
  184. if($v[0] == 'GameID'){
  185. unset($where[$k]);
  186. break;
  187. }
  188. }
  189. $sumData = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs')
  190. ->where($where)
  191. ->selectRaw('sum(ChangeScore) sumwin,sum(BuyScore) sumbuy')
  192. ->first();
  193. foreach ($list as $value) {
  194. $value->ChangeScore = number_float($value->ChangeScore / NumConfig::NUM_VALUE);
  195. $value->BuyBase = number_float($value->BuyBase / NumConfig::NUM_VALUE);
  196. $value->BuyScore = $value->BuyScore;
  197. }
  198. $gameName = '新宙斯全屏';
  199. $action = '/admin/game_data/NewolyBuyRecord';
  200. $data = compact('list', 'Type', 'start_time', 'end_time', 'GameID', 'SortID','typeArr','sortArr','sumData','gameName','action');
  201. return view('admin.game_data.gate_record', $data);
  202. }
  203. public function AztecBuyRecord(Request $request)
  204. {
  205. $start_time = $request->start_time ?: '';
  206. $end_time = $request->end_time ?: '';
  207. $start_time = str_replace('T', ' ', $start_time ?? "");
  208. $end_time = str_replace('T', ' ', $end_time ?? "");
  209. $GameID = $request->GameID ?: '';
  210. $Type = $request->Type ?: 0;
  211. $SortID = $request->SortID ?: -1;
  212. $where[] = ['KindID', 5004];
  213. $sortArr = ['-1' => '全部','1' => '初级场','2' => '中级场','3' => '高级场'];
  214. $typeArr = [0 => '全部',1 => '免费',2 => '买入'];
  215. !empty($start_time) && $where[] = ['CreateTime', '>=', $start_time];
  216. !empty($end_time) && $where[] = ['CreateTime', '<=', $end_time];
  217. !empty($GameID) && $where[] = ['GameID', $GameID];
  218. !empty($Type) && $where[] = ['Type', $Type];
  219. ($SortID>=0) && $where[] = ['SortID', $SortID];
  220. $list = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs as ri')
  221. ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'ri.UserID', 'ai.UserID')
  222. ->where($where)
  223. ->selectRaw('ri.*,ai.GameID,ai.NickName,Channel')
  224. ->orderByDesc('CreateTime')
  225. ->paginate(10);
  226. foreach ($where as $k => $v){
  227. if($v[0] == 'GameID'){
  228. unset($where[$k]);
  229. break;
  230. }
  231. }
  232. $sumData = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs')
  233. ->where($where)
  234. ->selectRaw('sum(ChangeScore) sumwin,sum(BuyScore) sumbuy')
  235. ->first();
  236. foreach ($list as $value) {
  237. $value->ChangeScore = number_float($value->ChangeScore / NumConfig::NUM_VALUE);
  238. $value->BuyBase = number_float($value->BuyBase / NumConfig::NUM_VALUE);
  239. $value->BuyScore = $value->BuyScore;
  240. }
  241. $gameName = 'Aztec全屏';
  242. $action = '/admin/game_data/AztecBuyRecord';
  243. $data = compact('list', 'Type', 'start_time', 'end_time', 'GameID', 'SortID','typeArr','sortArr','sumData','gameName','action');
  244. return view('admin.game_data.gate_record', $data);
  245. }
  246. public function fishBuyRecord(Request $request)
  247. {
  248. $start_time = $request->start_time ?: '';
  249. $end_time = $request->end_time ?: '';
  250. $start_time = str_replace('T', ' ', $start_time ?? "");
  251. $end_time = str_replace('T', ' ', $end_time ?? "");
  252. $GameID = $request->GameID ?: '';
  253. $Type = $request->Type ?: 0;
  254. $SortID = $request->SortID ?: -1;
  255. $where[] = ['KindID', 5005];
  256. $sortArr = ['-1' => '全部','1' => '初级场','2' => '中级场','3' => '高级场'];
  257. $typeArr = [0 => '全部',1 => '免费',2 => '买入'];
  258. !empty($start_time) && $where[] = ['CreateTime', '>=', $start_time];
  259. !empty($end_time) && $where[] = ['CreateTime', '<=', $end_time];
  260. !empty($GameID) && $where[] = ['GameID', $GameID];
  261. !empty($Type) && $where[] = ['Type', $Type];
  262. ($SortID>=0) && $where[] = ['SortID', $SortID];
  263. $list = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs as ri')
  264. ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'ri.UserID', 'ai.UserID')
  265. ->where($where)
  266. ->selectRaw('ri.*,ai.GameID,ai.NickName,Channel')
  267. ->orderByDesc('CreateTime')
  268. ->paginate(10);
  269. foreach ($where as $k => $v){
  270. if($v[0] == 'GameID'){
  271. unset($where[$k]);
  272. break;
  273. }
  274. }
  275. $sumData = DB::connection('write')->table('QPRecordDB.dbo.RecordNewThunderBonueLogs')
  276. ->where($where)
  277. ->selectRaw('sum(ChangeScore) sumwin,sum(BuyScore) sumbuy')
  278. ->first();
  279. foreach ($list as $value) {
  280. $value->ChangeScore = number_float($value->ChangeScore / NumConfig::NUM_VALUE);
  281. $value->BuyBase = number_float($value->BuyBase / NumConfig::NUM_VALUE);
  282. $value->BuyScore = $value->BuyScore;
  283. }
  284. $gameName = '钓鱼全屏';
  285. $action = '/admin/game_data/fishBuyRecord';
  286. $data = compact('list', 'Type', 'start_time', 'end_time', 'GameID', 'SortID','typeArr','sortArr','sumData','gameName','action');
  287. return view('admin.game_data.gate_record', $data);
  288. }
  289. //实时在线
  290. public function userOnline(Request $request)
  291. {
  292. $game_id = $request->game_id ?? '';
  293. $type = $request->type??0;
  294. $start_date = $request->start_date ?? date('Y-m-d');
  295. if($type == 0 && $start_date == date('Y-m-d')){
  296. $time = time();
  297. $where= [['created', '<=', $time],['created', '>=', $time-86400]];
  298. $data = DB::connection('mysql')->table('game-report')
  299. ->where($where)
  300. ->orderBy('created', 'asc')
  301. ->get();
  302. //$whereY[] = ['ldate', '=', date('Ymd', strtotime($yesterday))];
  303. $whereY= [['created', '<=', $time-86400],['created', '>=', $time-86400*2]];
  304. $ydata = DB::connection('mysql')->table('game-report')
  305. ->where($whereY)
  306. ->orderBy('created', 'asc')
  307. ->get();
  308. }else{
  309. $yesterday = date('Y-m-d',strtotime($start_date)-86400);
  310. $where[] = ['ldate', '=', date('Ymd', strtotime($start_date))];
  311. $data = DB::connection('mysql')->table('game-report')
  312. ->where($where)
  313. ->orderBy('created', 'asc')
  314. ->get();
  315. $whereY[] = ['ldate', '=', date('Ymd', strtotime($yesterday))];
  316. $ydata = DB::connection('mysql')->table('game-report')
  317. ->where($whereY)
  318. ->orderBy('created', 'asc')
  319. ->get();
  320. }
  321. $result = [
  322. ];
  323. foreach ($data as $key => $value) {
  324. $online = json_decode($value->online,true);
  325. $onlineNum = 0;
  326. if(is_array($online)){
  327. foreach ($online as $val){
  328. if($val['KindID'] == $game_id){
  329. $onlineNum = $val['game_count'];
  330. break;
  331. }
  332. $onlineNum +=$val['game_count'];
  333. }
  334. }
  335. $min = date('Hi',$value->created);
  336. $min = 'm_'.$min;
  337. $result['online'][$min] = $onlineNum;//训练币消耗
  338. // $result['online'][$min] = $value->online;//训练币消耗
  339. $result['reg'][$min] = $value->register;//累计场次
  340. $result['active'][$min] = $value->active;//参游人数
  341. $result['recharge'][$min] = $value->recharge/100;//新增数
  342. $result['withdraw'][$min] = $value->withdraw/100;
  343. $result['profit'][$min] = ($value->recharge-$value->withdraw)/100;
  344. $result['created_at'][$min] = date('Y-m-d H:i',$value->created);
  345. $result['yonline'][$min] = 0;
  346. $result['yreg'][$min] = 0;
  347. $result['yactive'][$min] = 0;
  348. $result['yrecharge'][$min] = 0;
  349. $result['ywithdraw'][$min] = 0;
  350. }
  351. unset($value);
  352. foreach ($ydata as $key => $value) {
  353. $min = date('Hi',$value->created);
  354. $min = 'm_'.$min;
  355. if(isset($result['reg'][$min])){
  356. $online = json_decode($value->online,true);
  357. $onlineNum = 0;
  358. if(is_array($online)){
  359. foreach ($online as $val){
  360. if($val['KindID'] == $game_id){
  361. $onlineNum = $val['game_count'];
  362. break;
  363. }
  364. $onlineNum +=$val['game_count'];
  365. }
  366. }
  367. $result['yonline'][$min] = $onlineNum;//训练币消耗
  368. $result['yreg'][$min] = $value->register;//累计场次
  369. $result['yactive'][$min] = $value->active;//参游人数
  370. $result['yrecharge'][$min] = $value->recharge/100;//新增数
  371. $result['ywithdraw'][$min] = $value->withdraw/100;
  372. $result['yprofit'][$min] = ($value->recharge-$value->withdraw)/100;
  373. }
  374. }
  375. $rs = [
  376. 'online' => array_values($result['online']),
  377. 'reg' => array_values($result['reg']),
  378. 'active' => array_values($result['active']),
  379. 'recharge' => array_values($result['recharge']),
  380. 'withdraw' => array_values($result['withdraw']),
  381. 'profit' => array_values($result['profit']),
  382. 'created_at' => array_values($result['created_at']),
  383. 'yonline' => array_values($result['yonline']),
  384. 'yreg' => array_values($result['yreg']),
  385. 'yactive' => array_values($result['yactive']),
  386. 'yrecharge' => array_values($result['yrecharge']),
  387. 'ywithdraw' => array_values($result['ywithdraw']),
  388. 'yprofit' => array_values($result['yprofit']?? []),
  389. ];
  390. return $rs;
  391. }
  392. public function onlineList(Request $request){
  393. $GameID = $request->get('GameID');
  394. $SortID = $request->get('SortID');
  395. $uid = $request->get('uid');
  396. if($uid){
  397. $where = [];
  398. $where[] = ['ai.GameID', $uid];
  399. }else{
  400. $where = [];
  401. !empty($GameID) && $where[] = ['gi.GameID', $GameID];
  402. !empty($SortID) && $where[] = ['gi.SortID', $SortID];
  403. }
  404. $list = DB::connection('read')->table('QPTreasureDB.dbo.GameScoreLocker as gl')
  405. ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'gl.UserID', 'ai.UserID')
  406. ->leftJoin('QPPlatformDB.dbo.GameRoomInfo as gi','gl.ServerID','gi.ServerID')
  407. ->leftJoin('QPTreasureDB.dbo.GameScoreInfo as gsi','gl.UserID','=','gsi.UserID')
  408. ->where($where)
  409. ->selectRaw('ai.GameID,ai.NickName,Channel,gi.ServerName,gi.SortID,gl.CollectDate,gl.UserID,gsi.Score')
  410. // ->orderByDesc('CreateTime')
  411. ->paginate(10);
  412. $games = DB::connection('read')->table(TableName::QPPlatformDB() . 'GameKindItem')
  413. ->whereIn('GameID', config('games.openKGame'))
  414. ->select('KindName', 'GameID')
  415. ->pluck('KindName', 'GameID')
  416. ->toArray();
  417. $type = [
  418. 1 => '初级',
  419. 2 => '中级',
  420. 3 => '高级',
  421. 4 => '超高级'
  422. ];
  423. $data = compact('list', 'GameID', 'SortID','uid','games','type');
  424. return view('admin.game_data.game_online', $data);
  425. }
  426. public function gameRankList(Request $request){
  427. $date = $request->date ?: date('Y-m-d');
  428. $dateFormat = date('Ymd',strtotime($date));
  429. $channels =session('admin_channels');;
  430. $Channel = $request->get('Channel');
  431. $sort = $request->sort??1;
  432. $where = [];
  433. $where[] = ['rd.DateID', $dateFormat];
  434. if(!empty($Channel)) {
  435. $where[] = ['ai.Channel', $Channel];
  436. }
  437. $rank = [1 =>'Win Rank',2 =>'Lost Rank',3 => 'MaxWin Rank',4 => 'Recharge Rank',5 => 'Withdraw Rank'];
  438. $order_sql = '(WinScore + LostScore) DESC';
  439. switch ($sort) {
  440. case '1':
  441. $order_sql = '(WinScore + LostScore) DESC';
  442. break;
  443. case '2':
  444. $order_sql = '(WinScore + LostScore) ASC';
  445. break;
  446. case '3':
  447. $order_sql = 'MaxWinScore DESC';
  448. break;
  449. case '4':
  450. $order_sql = 'Recharge DESC';
  451. break;
  452. case '5':
  453. $order_sql = 'Withdraw DESC';
  454. break;
  455. }
  456. $list = DB::connection('read')->table('QPRecordDB.dbo.RecordUserDataStatisticsNew as rd')
  457. ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'rd.UserID', 'ai.UserID')
  458. ->where($where)
  459. ->selectRaw('ai.UserID,ai.GameID,ai.NickName,Channel,ai.LastLogonDate,ai.RegisterDate,Recharge, (WinScore + LostScore) Score,MaxScore,MaxWinScore,Withdraw,MaxDrawBase,Revenue,TotalBet')
  460. ->orderByRaw($order_sql)
  461. ->paginate(20);
  462. $data = compact('list', 'date','rank','sort','Channel','channels');
  463. return view('admin.game_data.rank', $data);
  464. }
  465. public function userDetail(\Illuminate\Http\Request $request)
  466. {
  467. $userId = $request->input('user_id');
  468. $startDate = $request->input('start_date', date('Y-m-d', strtotime('-6 days')));
  469. $endDate = $request->input('end_date', date('Y-m-d'));
  470. $list = [];
  471. if ($userId) {
  472. $list = \DB::connection('read')->table('QPRecordDB.dbo.RecordUserDataStatisticsNew as rd')
  473. ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'rd.UserID', 'ai.UserID')
  474. ->where('ai.GameID', $userId)
  475. ->whereBetween('rd.DateID', [
  476. date('Ymd', strtotime($startDate)),
  477. date('Ymd', strtotime($endDate))
  478. ])
  479. ->selectRaw('rd.DateID, ai.UserID, ai.GameID, ai.NickName, Channel, ai.LastLogonDate, ai.RegisterDate, Recharge, (WinScore + LostScore) Score, MaxScore, MaxWinScore, Withdraw, MaxDrawBase, Revenue, TotalBet')
  480. ->orderBy('rd.DateID', 'desc')
  481. ->paginate(20);
  482. }
  483. return view('admin.game_data.user_detail', [
  484. 'list' => $list,
  485. 'user_id' => $userId,
  486. 'start_date' => $startDate,
  487. 'end_date' => $endDate,
  488. ]);
  489. }
  490. public function userTotalList(\Illuminate\Http\Request $request)
  491. {
  492. $rechargeMax = $request->input('recharge_max', 300);
  493. $withdrawMin = $request->input('withdraw_min', 1000);
  494. $list = \DB::connection('read')->table('QPRecordDB.dbo.RecordUserTotalStatistics as ut')
  495. ->join('QPAccountsDB.dbo.AccountsInfo as ai', 'ut.UserID', '=', 'ai.UserID')
  496. ->where('ut.Recharge', '<=', $rechargeMax)
  497. ->where('ut.Withdraw', '>', $withdrawMin * 100)
  498. ->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')
  499. ->orderByDesc('ai.LastLogonDate')
  500. ->paginate(20);
  501. return view('admin.user_total.list', [
  502. 'list' => $list,
  503. 'recharge_max' => $rechargeMax,
  504. 'withdraw_min' => $withdrawMin,
  505. ]);
  506. }
  507. /**
  508. * 游戏参与情况统计
  509. * 按照注册时间统计不同GameID尾号对应的游戏参与情况
  510. */
  511. public function gameParticipationStatistics(Request $request)
  512. {
  513. // 获取注册时间范围
  514. $startDate = $request->input('start_date', date('Y-m-d', strtotime('-30 days')));
  515. $endDate = $request->input('end_date', date('Y-m-d'));
  516. // 转换为日期时间格式(包含时间)
  517. $startDateTime = $startDate . ' 00:00:00';
  518. $endDateTime = $endDate . ' 23:59:59';
  519. // 1. 统计注册人数(按GameID尾号分组)
  520. // 使用 SUBSTRING 和 LEN 函数获取最后一位数字(SQL Server 兼容)
  521. $registerStats = DB::connection('read')
  522. ->table(TableName::QPAccountsDB() . 'AccountsInfo as ai')
  523. ->whereBetween('ai.RegisterDate', [$startDateTime, $endDateTime])
  524. ->whereNotNull('ai.GameID')
  525. ->where('ai.GameID', '!=', '')
  526. ->selectRaw('
  527. CAST(SUBSTRING(CAST(ai.GameID AS VARCHAR), LEN(CAST(ai.GameID AS VARCHAR)), 1) AS INT) as last_digit,
  528. COUNT(DISTINCT ai.UserID) as register_count
  529. ')
  530. ->groupBy(DB::raw('CAST(SUBSTRING(CAST(ai.GameID AS VARCHAR), LEN(CAST(ai.GameID AS VARCHAR)), 1) AS INT)'))
  531. ->get()
  532. ->keyBy('last_digit');
  533. // 2. 获取所有参与游戏的用户(WinInning + LostInning > 0)
  534. $playedUsers = DB::connection('read')
  535. ->table('QPRecordDB.dbo.RecordUserTotalStatistics as ut')
  536. ->join(TableName::QPAccountsDB() . 'AccountsInfo as ai', 'ut.UserID', '=', 'ai.UserID')
  537. ->whereBetween('ai.RegisterDate', [$startDateTime, $endDateTime])
  538. ->whereNotNull('ai.GameID')
  539. ->where('ai.GameID', '!=', '')
  540. ->whereRaw('(ISNULL(ut.WinInning, 0) + ISNULL(ut.LostInning, 0)) > 0')
  541. ->selectRaw('
  542. ai.UserID,
  543. CAST(SUBSTRING(CAST(ai.GameID AS VARCHAR), LEN(CAST(ai.GameID AS VARCHAR)), 1) AS INT) as last_digit
  544. ')
  545. ->get()
  546. ->groupBy('last_digit')
  547. ->map(function ($users) {
  548. return $users->pluck('UserID')->unique()->count();
  549. });
  550. // 3. 获取游戏映射关系
  551. $gameMappings = DB::connection('write')
  552. ->table('agent.dbo.game_number_mapping')
  553. ->select('number', 'game_id')
  554. ->get()
  555. ->keyBy('number');
  556. // 4. 获取游戏信息(从MySQL)
  557. $gameIds = $gameMappings->pluck('game_id')->unique()->toArray();
  558. $games = [];
  559. if (!empty($gameIds)) {
  560. $gamesData = DB::connection('mysql')
  561. ->table('webgame.games')
  562. ->whereIn('id', $gameIds)
  563. ->select('id', 'brand', 'title')
  564. ->get();
  565. foreach ($gamesData as $game) {
  566. $games[$game->id] = $game;
  567. }
  568. }
  569. // 5. 组装统计数据
  570. $statistics = [];
  571. for ($i = 0; $i <= 9; $i++) {
  572. $registerStat = $registerStats->get($i);
  573. $registerCount = $registerStat ? $registerStat->register_count : 0;
  574. $playedCount = $playedUsers->get($i) ?? 0;
  575. $participationRate = $registerCount > 0 ? round(($playedCount / $registerCount) * 100, 2) : 0;
  576. $mapping = $gameMappings->get($i);
  577. $gameName = '未配置';
  578. if ($mapping && isset($games[$mapping->game_id])) {
  579. $game = $games[$mapping->game_id];
  580. $gameName = $game->brand . ' - ' . $game->title;
  581. }
  582. $statistics[] = [
  583. 'last_digit' => $i,
  584. 'game_name' => $gameName,
  585. 'register_count' => $registerCount,
  586. 'played_count' => $playedCount,
  587. 'participation_rate' => $participationRate,
  588. ];
  589. }
  590. // 按注册人数排序(降序)
  591. usort($statistics, function ($a, $b) {
  592. return $b['register_count'] <=> $a['register_count'];
  593. });
  594. return view('admin.game_data.participation_statistics', [
  595. 'statistics' => $statistics,
  596. 'start_date' => $startDate,
  597. 'end_date' => $endDate,
  598. ]);
  599. }
  600. }