Player.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\controller;
  4. use app\BaseController;
  5. use app\model\MerchantsUserModel;
  6. use think\facade\Request;
  7. class Player extends BaseController
  8. {
  9. /**
  10. * 获取玩家列表
  11. */
  12. public function list()
  13. {
  14. $userInfo = $this->request->userInfo;
  15. // 获取查询参数
  16. $page = Request::get('page', 1, 'intval');
  17. $limit = Request::get('limit', 10, 'intval');
  18. // 过滤条件
  19. $filters = [
  20. 'uname' => Request::get('uname', '', 'trim'),
  21. 'nickname' => Request::get('nickname', '', 'trim'),
  22. 'player_id' => Request::get('user_id', 0, 'intval'),
  23. 'status' => Request::get('status', ''),
  24. 'adjust_status' => Request::get('adjust_status', ''),
  25. 'login_ip' => Request::get('login_ip', '', 'trim'),
  26. 'reg_ip' => Request::get('reg_ip', '', 'trim'),
  27. 'login_time_start' => Request::get('login_time_start', '', 'trim'),
  28. 'login_time_end' => Request::get('login_time_end', '', 'trim'),
  29. 'order' => Request::get('order', 'user_id', 'trim'),
  30. 'sort' => Request::get('sort', 'desc', 'trim'),
  31. ];
  32. try {
  33. // 获取玩家列表
  34. $result = MerchantsUserModel::getPlayerListByMerchant($userInfo['merchant_id'], $page, $limit, $filters);
  35. // 处理列表数据
  36. foreach ($result['list'] as &$player) {
  37. $player['status_text'] = MerchantsUserModel::getStatusText($player['status']);
  38. $player['adjust_status_text'] = MerchantsUserModel::getAdjustStatusText($player['adjust_status']);
  39. $player['login_time'] = $player['login_time'] ? date('Y-m-d H:i:s', (int)$player['login_time']) : '未登录';
  40. }
  41. return json_success($result, '获取成功');
  42. } catch (\Exception $e) {
  43. return json_error([], '获取玩家列表失败:' . $e->getMessage());
  44. }
  45. }
  46. /**
  47. * 获取玩家详情
  48. */
  49. public function detail()
  50. {
  51. $userInfo = $this->request->userInfo;
  52. $playerId = Request::get('user_id', 0, 'intval');
  53. if (!$playerId) {
  54. return json_error([], '玩家ID不能为空');
  55. }
  56. try {
  57. $player = MerchantsUserModel::getPlayerDetail($playerId, $userInfo['merchant_id']);
  58. if (!$player) {
  59. return json_error([], '玩家不存在');
  60. }
  61. // 添加状态文本
  62. $player['status_text'] = MerchantsUserModel::getStatusText($player['status']);
  63. $player['adjust_status_text'] = MerchantsUserModel::getAdjustStatusText($player['adjust_status']);
  64. $player['login_time_text'] = $player['login_time'] ? date('Y-m-d H:i:s', (int)$player['login_time']) : '未登录';
  65. return json_success($player, '获取成功');
  66. } catch (\Exception $e) {
  67. return json_error([], '获取玩家详情失败:' . $e->getMessage());
  68. }
  69. }
  70. /**
  71. * 更新玩家状态
  72. */
  73. public function updateStatus()
  74. {
  75. $userInfo = $this->request->userInfo;
  76. print_r($userInfo);
  77. $playerIds = Request::post('user_ids', []);
  78. $status = Request::post('status', 0, 'intval');
  79. if (empty($playerIds) || !is_array($playerIds)) {
  80. return json_error([], '请选择要更新的玩家');
  81. }
  82. if (!in_array($status, [MerchantsUserModel::STATUS_NORMAL, MerchantsUserModel::STATUS_FROZEN])) {
  83. return json_error([], '状态值无效');
  84. }
  85. try {
  86. $result = MerchantsUserModel::updatePlayerStatus($playerIds, $userInfo['merchant_id'], $status);
  87. if ($result) {
  88. return json_success([], '状态更新成功');
  89. } else {
  90. return json_error([], '状态更新失败');
  91. }
  92. } catch (\Exception $e) {
  93. return json_error([], '更新玩家状态失败:' . $e->getMessage());
  94. }
  95. }
  96. /**
  97. * 更新玩家调控状态
  98. */
  99. public function updateAdjustStatus()
  100. {
  101. $userInfo = $this->request->userInfo;
  102. $playerIds = Request::post('user_ids', []);
  103. $adjustStatus = Request::post('adjust_status', 0, 'intval');
  104. if (empty($playerIds) || !is_array($playerIds)) {
  105. return json_error([], '请选择要更新的玩家');
  106. }
  107. if (!in_array($adjustStatus, [
  108. MerchantsUserModel::ADJUST_STATUS_NORMAL,
  109. MerchantsUserModel::ADJUST_STATUS_WIN,
  110. MerchantsUserModel::ADJUST_STATUS_LOSE
  111. ])) {
  112. return json_error([], '调控状态值无效');
  113. }
  114. try {
  115. $result = MerchantsUserModel::updatePlayerAdjustStatus($playerIds, $userInfo['merchant_id'], $adjustStatus);
  116. if ($result) {
  117. return json_success([], '调控状态更新成功');
  118. } else {
  119. return json_error([], '调控状态更新失败');
  120. }
  121. } catch (\Exception $e) {
  122. return json_error([], '更新玩家调控状态失败:' . $e->getMessage());
  123. }
  124. }
  125. /**
  126. * 获取玩家统计信息
  127. */
  128. public function statistics()
  129. {
  130. $userInfo = $this->request->userInfo;
  131. try {
  132. $statistics = MerchantsUserModel::getPlayerStatistics($userInfo['merchant_id']);
  133. return json_success($statistics, '获取成功');
  134. } catch (\Exception $e) {
  135. return json_error([], '获取玩家统计失败:' . $e->getMessage());
  136. }
  137. }
  138. /**
  139. * 导出玩家列表
  140. */
  141. public function export()
  142. {
  143. $userInfo = $this->request->userInfo;
  144. // 获取所有过滤条件
  145. $filters = [
  146. 'nickname' => Request::get('nickname', '', 'trim'),
  147. 'player_id' => Request::get('user_id', 0, 'intval'),
  148. 'status' => Request::get('status', ''),
  149. 'adjust_status' => Request::get('adjust_status', ''),
  150. 'login_ip' => Request::get('login_ip', '', 'trim'),
  151. 'reg_ip' => Request::get('reg_ip', '', 'trim'),
  152. 'login_time_start' => Request::get('login_time_start', '', 'trim'),
  153. 'login_time_end' => Request::get('login_time_end', '', 'trim'),
  154. 'order' => Request::get('order', 'player_id', 'trim'),
  155. 'sort' => Request::get('sort', 'desc', 'trim'),
  156. ];
  157. try {
  158. // 获取所有数据
  159. $result = MerchantsUserModel::getPlayerListByMerchant($userInfo['merchant_id'], 1, 100000, $filters);
  160. // 生成CSV数据
  161. $csvData = "玩家ID,昵称,注册IP,登录IP,余额,今日输赢,历史输赢,今日下注,今日登录次数,历史登录次数,状态,调控状态,最后登录时间,注册时间\n";
  162. foreach ($result['list'] as $player) {
  163. $csvData .= sprintf(
  164. "%d,%s,%s,%s,%.4f,%.4f,%.4f,%.4f,%d,%d,%s,%s,%s,%s\n",
  165. $player['user_id'],
  166. $player['nickname'],
  167. $player['reg_ip'],
  168. $player['login_ip'],
  169. $player['balance'],
  170. $player['today_win_amount'],
  171. $player['history_win_amount'],
  172. $player['today_bet_amount'],
  173. $player['today_login_count'],
  174. $player['history_login_count'],
  175. MerchantsUserModel::getStatusText($player['status']),
  176. MerchantsUserModel::getAdjustStatusText($player['adjust_status']),
  177. $player['login_time'] ? date('Y-m-d H:i:s', (int)$player['login_time']) : '未登录',
  178. $player['create_time']
  179. );
  180. }
  181. // 返回CSV数据
  182. return response($csvData)
  183. ->header(['Content-Type' => 'text/csv; charset=utf-8'])
  184. ->header(['Content-Disposition' => 'attachment; filename="players_' . date('YmdHis') . '.csv"'])
  185. ->header(['Cache-Control' => 'no-cache, must-revalidate']);
  186. } catch (\Exception $e) {
  187. return json_error([], '导出玩家列表失败:' . $e->getMessage());
  188. }
  189. }
  190. }