TransferLog.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\controller;
  4. use app\BaseController;
  5. use think\facade\Request;
  6. use app\model\TransferLogModel;
  7. /**
  8. * 转账记录控制器
  9. */
  10. class TransferLog extends BaseController
  11. {
  12. /**
  13. * 获取转账记录列表
  14. */
  15. public function list()
  16. {
  17. $userInfo = $this->request->userInfo;
  18. // 获取查询参数
  19. $page = Request::get('page', 1, 'intval');
  20. $limit = Request::get('limit', 20, 'intval');
  21. // 筛选条件
  22. $filters = [
  23. // 时间筛选
  24. 'start_time' => Request::get('start_time', '', 'trim'),
  25. 'end_time' => Request::get('end_time', '', 'trim'),
  26. // 平台ID筛选
  27. 'platform_id' => Request::get('platform_id', '', 'trim'),
  28. // 状态筛选
  29. 'status' => Request::get('status', ''),
  30. // 转账流水号筛选
  31. 'tx_id' => Request::get('tx_id', '', 'trim'),
  32. ];
  33. try {
  34. $result = TransferLogModel::getTransferLogs($userInfo['merchant_id'], $page, $limit, $filters);
  35. return json_success($result, '获取成功');
  36. } catch (\Exception $e) {
  37. return json_error([], '获取转账记录失败:' . $e->getMessage());
  38. }
  39. }
  40. /**
  41. * 获取转账记录详情
  42. */
  43. public function detail()
  44. {
  45. $userInfo = $this->request->userInfo;
  46. $id = Request::get('id', 0, 'intval');
  47. if (!$id) {
  48. return json_error([], '记录ID不能为空');
  49. }
  50. try {
  51. $transfer = TransferLogModel::getTransferDetail($id, $userInfo['merchant_id']);
  52. if (!$transfer) {
  53. return json_error([], '记录不存在');
  54. }
  55. return json_success($transfer, '获取成功');
  56. } catch (\Exception $e) {
  57. return json_error([], '获取记录详情失败:' . $e->getMessage());
  58. }
  59. }
  60. /**
  61. * 获取转账统计信息
  62. */
  63. public function statistics()
  64. {
  65. $userInfo = $this->request->userInfo;
  66. // 筛选条件
  67. $filters = [
  68. 'start_time' => Request::get('start_time', '', 'trim'),
  69. 'end_time' => Request::get('end_time', '', 'trim'),
  70. ];
  71. // 如果没有指定时间范围,默认获取今天
  72. if (empty($filters['start_time']) && empty($filters['end_time'])) {
  73. $filters['start_time'] = date('Y-m-d');
  74. $filters['end_time'] = date('Y-m-d');
  75. }
  76. try {
  77. $statistics = TransferLogModel::getTransferStatistics($userInfo['merchant_id'], $filters);
  78. return json_success([
  79. 'statistics' => $statistics,
  80. 'date_range' => [
  81. 'start_time' => $filters['start_time'],
  82. 'end_time' => $filters['end_time']
  83. ]
  84. ], '获取成功');
  85. } catch (\Exception $e) {
  86. return json_error([], '获取统计信息失败:' . $e->getMessage());
  87. }
  88. }
  89. /**
  90. * 导出转账记录
  91. */
  92. public function export()
  93. {
  94. $userInfo = $this->request->userInfo;
  95. // 筛选条件
  96. $filters = [
  97. 'start_time' => Request::get('start_time', '', 'trim'),
  98. 'end_time' => Request::get('end_time', '', 'trim'),
  99. 'platform_id' => Request::get('platform_id', '', 'trim'),
  100. 'status' => Request::get('status', ''),
  101. 'tx_id' => Request::get('tx_id', '', 'trim'),
  102. ];
  103. try {
  104. // 获取所有符合条件的数据(不分页)
  105. $result = TransferLogModel::getTransferLogs($userInfo['merchant_id'], 1, 100000, $filters);
  106. // 生成CSV数据
  107. $csvData = "创建时间,商户,玩家ID,平台ID,平台昵称,转账流水号,转账金额,转账前余额," .
  108. "转账后余额,转账金额,转账前余额,转账后余额,状态/原因,IP\n";
  109. foreach ($result['list'] as $transfer) {
  110. $csvData .= sprintf(
  111. "%s,%s,%d,%d,%s,%s,%s,%s,%s,%s,%s\n",
  112. $transfer['create_time'], // 创建时间
  113. $transfer['merchant_name'], // 商户
  114. $transfer['uname'], // 玩家ID
  115. $transfer['user_id'], // 平台ID
  116. $transfer['platform_nickname'], // 平台昵称
  117. $transfer['tx_id'], // 转账流水号
  118. $transfer['amount'], // 转账金额
  119. $transfer['prev_amount'], // 转账前余额
  120. $transfer['next_amount'], // 转账后余额
  121. $transfer['status_text'], // 状态/原因
  122. $transfer['ip'] // IP
  123. );
  124. }
  125. // 返回CSV数据
  126. return response($csvData)
  127. ->header(['Content-Type' => 'text/csv; charset=utf-8'])
  128. ->header(['Content-Disposition' => 'attachment; filename="transfer_logs_' . date('YmdHis') . '.csv"'])
  129. ->header(['Cache-Control' => 'no-cache, must-revalidate']);
  130. } catch (\Exception $e) {
  131. return json_error([], '导出转账记录失败:' . $e->getMessage());
  132. }
  133. }
  134. }