Player.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\controller;
  4. use app\BaseController;
  5. use app\model\PlayerModel;
  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. 'nickname' => Request::get('nickname', '', 'trim'),
  21. 'player_id' => Request::get('player_id', 0, 'intval'),
  22. 'status' => Request::get('status', ''),
  23. 'adjust_status' => Request::get('adjust_status', ''),
  24. 'login_ip' => Request::get('login_ip', '', 'trim'),
  25. 'reg_ip' => Request::get('reg_ip', '', 'trim'),
  26. 'balance_min' => Request::get('balance_min', 0, 'floatval'),
  27. 'balance_max' => Request::get('balance_max', 0, 'floatval'),
  28. 'today_win_min' => Request::get('today_win_min', 0, 'floatval'),
  29. 'today_win_max' => Request::get('today_win_max', 0, 'floatval'),
  30. 'history_win_min' => Request::get('history_win_min', 0, 'floatval'),
  31. 'history_win_max' => Request::get('history_win_max', 0, 'floatval'),
  32. 'login_time_start' => Request::get('login_time_start', '', 'trim'),
  33. 'login_time_end' => Request::get('login_time_end', '', 'trim'),
  34. 'create_time_start' => Request::get('create_time_start', '', 'trim'),
  35. 'create_time_end' => Request::get('create_time_end', '', 'trim'),
  36. 'order' => Request::get('order', 'player_id', 'trim'),
  37. 'sort' => Request::get('sort', 'desc', 'trim'),
  38. ];
  39. try {
  40. // 获取玩家列表
  41. $result = PlayerModel::getPlayerListByMerchant($userInfo['merchant_id'], $page, $limit, $filters);
  42. // 处理列表数据
  43. foreach ($result['list'] as &$player) {
  44. $player['status_text'] = PlayerModel::getStatusText($player['status']);
  45. $player['adjust_status_text'] = PlayerModel::getAdjustStatusText($player['adjust_status']);
  46. $player['login_time_text'] = $player['login_time'] ? date('Y-m-d H:i:s', $player['login_time']) : '未登录';
  47. $player['create_time_text'] = date('Y-m-d H:i:s', $player['create_time']);
  48. $player['update_time_text'] = date('Y-m-d H:i:s', $player['update_time']);
  49. }
  50. return json_success($result, '获取成功');
  51. } catch (\Exception $e) {
  52. return json_error([], '获取玩家列表失败:' . $e->getMessage());
  53. }
  54. }
  55. /**
  56. * 获取玩家详情
  57. */
  58. public function detail()
  59. {
  60. $userInfo = $this->request->userInfo;
  61. $playerId = Request::get('player_id', 0, 'intval');
  62. if (!$playerId) {
  63. return json_error([], '玩家ID不能为空');
  64. }
  65. try {
  66. $player = PlayerModel::getPlayerDetail($playerId, $userInfo['merchant_id']);
  67. if (!$player) {
  68. return json_error([], '玩家不存在');
  69. }
  70. // 添加状态文本
  71. $player['status_text'] = PlayerModel::getStatusText($player['status']);
  72. $player['adjust_status_text'] = PlayerModel::getAdjustStatusText($player['adjust_status']);
  73. $player['login_time_text'] = $player['login_time'] ? date('Y-m-d H:i:s', $player['login_time']) : '未登录';
  74. $player['create_time_text'] = date('Y-m-d H:i:s', $player['create_time']);
  75. $player['update_time_text'] = date('Y-m-d H:i:s', $player['update_time']);
  76. return json_success($player, '获取成功');
  77. } catch (\Exception $e) {
  78. return json_error([], '获取玩家详情失败:' . $e->getMessage());
  79. }
  80. }
  81. /**
  82. * 更新玩家状态
  83. */
  84. public function updateStatus()
  85. {
  86. $userInfo = $this->request->userInfo;
  87. $playerId = Request::post('player_id', 0, 'intval');
  88. $status = Request::post('status', 0, 'intval');
  89. if (!$playerId) {
  90. return json_error([], '玩家ID不能为空');
  91. }
  92. if (!in_array($status, [PlayerModel::STATUS_NORMAL, PlayerModel::STATUS_FROZEN])) {
  93. return json_error([], '状态值无效');
  94. }
  95. try {
  96. $result = PlayerModel::updatePlayerStatus($playerId, $userInfo['merchant_id'], $status);
  97. if ($result) {
  98. return json_success([], '状态更新成功');
  99. } else {
  100. return json_error([], '状态更新失败');
  101. }
  102. } catch (\Exception $e) {
  103. return json_error([], '更新玩家状态失败:' . $e->getMessage());
  104. }
  105. }
  106. /**
  107. * 更新玩家调控状态
  108. */
  109. public function updateAdjustStatus()
  110. {
  111. $userInfo = $this->request->userInfo;
  112. $playerId = Request::post('player_id', 0, 'intval');
  113. $adjustStatus = Request::post('adjust_status', 0, 'intval');
  114. if (!$playerId) {
  115. return json_error([], '玩家ID不能为空');
  116. }
  117. if (!in_array($adjustStatus, [
  118. PlayerModel::ADJUST_STATUS_NORMAL,
  119. PlayerModel::ADJUST_STATUS_WIN,
  120. PlayerModel::ADJUST_STATUS_LOSE
  121. ])) {
  122. return json_error([], '调控状态值无效');
  123. }
  124. try {
  125. $result = PlayerModel::updatePlayerAdjustStatus($playerId, $userInfo['merchant_id'], $adjustStatus);
  126. if ($result) {
  127. return json_success([], '调控状态更新成功');
  128. } else {
  129. return json_error([], '调控状态更新失败');
  130. }
  131. } catch (\Exception $e) {
  132. return json_error([], '更新玩家调控状态失败:' . $e->getMessage());
  133. }
  134. }
  135. /**
  136. * 获取玩家统计信息
  137. */
  138. public function statistics()
  139. {
  140. $userInfo = $this->request->userInfo;
  141. try {
  142. $statistics = PlayerModel::getPlayerStatistics($userInfo['merchant_id']);
  143. return json_success($statistics, '获取成功');
  144. } catch (\Exception $e) {
  145. return json_error([], '获取玩家统计失败:' . $e->getMessage());
  146. }
  147. }
  148. /**
  149. * 批量更新玩家状态
  150. */
  151. public function batchUpdateStatus()
  152. {
  153. $userInfo = $this->request->userInfo;
  154. $playerIds = Request::post('player_ids', []);
  155. $status = Request::post('status', 0, 'intval');
  156. if (empty($playerIds) || !is_array($playerIds)) {
  157. return json_error([], '请选择要更新的玩家');
  158. }
  159. if (!in_array($status, [PlayerModel::STATUS_NORMAL, PlayerModel::STATUS_FROZEN])) {
  160. return json_error([], '状态值无效');
  161. }
  162. try {
  163. $result = PlayerModel::batchUpdateStatus($playerIds, $userInfo['merchant_id'], $status);
  164. if ($result > 0) {
  165. return json_success(['updated' => $result], '批量更新成功');
  166. } else {
  167. return json_error([], '批量更新失败');
  168. }
  169. } catch (\Exception $e) {
  170. return json_error([], '批量更新玩家状态失败:' . $e->getMessage());
  171. }
  172. }
  173. /**
  174. * 批量更新玩家调控状态
  175. */
  176. public function batchUpdateAdjustStatus()
  177. {
  178. $userInfo = $this->request->userInfo;
  179. $playerIds = Request::post('player_ids', []);
  180. $adjustStatus = Request::post('adjust_status', 0, 'intval');
  181. if (empty($playerIds) || !is_array($playerIds)) {
  182. return json_error([], '请选择要更新的玩家');
  183. }
  184. if (!in_array($adjustStatus, [
  185. PlayerModel::ADJUST_STATUS_NORMAL,
  186. PlayerModel::ADJUST_STATUS_WIN,
  187. PlayerModel::ADJUST_STATUS_LOSE
  188. ])) {
  189. return json_error([], '调控状态值无效');
  190. }
  191. try {
  192. $result = PlayerModel::batchUpdateAdjustStatus($playerIds, $userInfo['merchant_id'], $adjustStatus);
  193. if ($result > 0) {
  194. return json_success(['updated' => $result], '批量更新成功');
  195. } else {
  196. return json_error([], '批量更新失败');
  197. }
  198. } catch (\Exception $e) {
  199. return json_error([], '批量更新玩家调控状态失败:' . $e->getMessage());
  200. }
  201. }
  202. /**
  203. * 导出玩家列表
  204. */
  205. public function export()
  206. {
  207. $userInfo = $this->request->userInfo;
  208. // 获取所有过滤条件
  209. $filters = [
  210. 'nickname' => Request::get('nickname', '', 'trim'),
  211. 'player_id' => Request::get('player_id', 0, 'intval'),
  212. 'status' => Request::get('status', ''),
  213. 'adjust_status' => Request::get('adjust_status', ''),
  214. 'login_ip' => Request::get('login_ip', '', 'trim'),
  215. 'reg_ip' => Request::get('reg_ip', '', 'trim'),
  216. 'balance_min' => Request::get('balance_min', 0, 'floatval'),
  217. 'balance_max' => Request::get('balance_max', 0, 'floatval'),
  218. 'today_win_min' => Request::get('today_win_min', 0, 'floatval'),
  219. 'today_win_max' => Request::get('today_win_max', 0, 'floatval'),
  220. 'history_win_min' => Request::get('history_win_min', 0, 'floatval'),
  221. 'history_win_max' => Request::get('history_win_max', 0, 'floatval'),
  222. 'login_time_start' => Request::get('login_time_start', '', 'trim'),
  223. 'login_time_end' => Request::get('login_time_end', '', 'trim'),
  224. 'create_time_start' => Request::get('create_time_start', '', 'trim'),
  225. 'create_time_end' => Request::get('create_time_end', '', 'trim'),
  226. ];
  227. try {
  228. // 获取所有数据
  229. $result = PlayerModel::getPlayerListByMerchant($userInfo['merchant_id'], 1, 100000, $filters);
  230. // 生成CSV数据
  231. $csvData = "玩家ID,昵称,注册IP,登录IP,余额,今日输赢,历史输赢,今日下注,今日登录次数,历史登录次数,状态,调控状态,最后登录时间,注册时间\n";
  232. foreach ($result['list'] as $player) {
  233. $csvData .= sprintf(
  234. "%d,%s,%s,%s,%.4f,%.4f,%.4f,%.4f,%d,%d,%s,%s,%s,%s\n",
  235. $player['player_id'],
  236. $player['nickname'],
  237. $player['reg_ip'],
  238. $player['login_ip'],
  239. $player['balance'],
  240. $player['today_win_amount'],
  241. $player['history_win_amount'],
  242. $player['today_bet_amount'],
  243. $player['today_login_count'],
  244. $player['history_login_count'],
  245. PlayerModel::getStatusText($player['status']),
  246. PlayerModel::getAdjustStatusText($player['adjust_status']),
  247. $player['login_time'] ? date('Y-m-d H:i:s', $player['login_time']) : '未登录',
  248. date('Y-m-d H:i:s', $player['create_time'])
  249. );
  250. }
  251. // 返回CSV数据
  252. return response($csvData)
  253. ->header('Content-Type', 'text/csv; charset=utf-8')
  254. ->header('Content-Disposition', 'attachment; filename="players_' . date('YmdHis') . '.csv"')
  255. ->header('Cache-Control', 'no-cache, must-revalidate');
  256. } catch (\Exception $e) {
  257. return json_error([], '导出玩家列表失败:' . $e->getMessage());
  258. }
  259. }
  260. }