TransferLogModel.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\model;
  4. use think\Model;
  5. use think\facade\Db;
  6. use app\model\MerchantsUserModel;
  7. /**
  8. * 转账记录模型
  9. */
  10. class TransferLogModel extends Model
  11. {
  12. protected $name = 'merchants_user_balance_transfer_logs';
  13. protected $connection = 'fortue_tiger';
  14. protected $pk = 'id';
  15. // 状态常量
  16. const STATUS = [
  17. 0 => '失败',
  18. 1 => '成功',
  19. 2 => '等待处理',
  20. ];
  21. /**
  22. * 获取转账记录列表
  23. */
  24. public static function getTransferLogs($merchantId, $page = 1, $limit = 20, $filters = [])
  25. {
  26. $where = [
  27. ['app_id', '=', $merchantId]
  28. ];
  29. // 时间筛选
  30. if (!empty($filters['start_time'])) {
  31. $startTime = strtotime($filters['start_time'] . ' 00:00:00');
  32. $where[] = ['create_time', '>=', $startTime];
  33. }
  34. if (!empty($filters['end_time'])) {
  35. $endTime = strtotime($filters['end_time'] . ' 23:59:59');
  36. $where[] = ['create_time', '<=', $endTime];
  37. }
  38. // 平台ID筛选
  39. if (!empty($filters['uname'])) {
  40. $where[] = ['uname', '=', $filters['uname']];
  41. }
  42. // 平台昵称筛选
  43. if (!empty($filters['nickname'])) {
  44. $where[] = ['uname', 'like', '%' . $filters['nickname'] . '%'];
  45. }
  46. // 玩家id筛选
  47. if (!empty($filters['player_id'])) {
  48. $where[] = ['user_id', 'like', '%' . $filters['player_id'] . '%'];
  49. }
  50. // 状态筛选
  51. if ($filters['status'] !== '') {
  52. $where[] = ['status', '=', $filters['status']];
  53. }
  54. // 转账流水号筛选
  55. if (!empty($filters['tx_id'])) {
  56. $where[] = ['tx_id', 'like', '%' . $filters['tx_id'] . '%'];
  57. }
  58. $query = self::where($where);
  59. // 统计总数
  60. $total = $query->count();
  61. // 获取列表数据
  62. $list = $query->field([
  63. 'id', 'user_id', 'uname', 'tx_id', 'ptx_id', 'amount',
  64. 'prev_amount', 'next_amount', 'status', 'ip',
  65. 'message', 'create_time'
  66. ])
  67. ->order('create_time', 'desc')
  68. ->page($page, $limit)
  69. ->select()
  70. ->toArray();
  71. // 获取用户信息
  72. $userIds = array_unique(array_column($list, 'user_id'));
  73. $userMap = [];
  74. if (!empty($userIds)) {
  75. // 从玩家表获取玩家信息
  76. $users = MerchantsUserModel::whereIn('user_id', $userIds)->field('user_id, nickname')->select()->toArray();
  77. foreach ($users as $user) {
  78. $userMap[$user['user_id']] = $user['nickname'];
  79. }
  80. }
  81. // 格式化数据
  82. foreach ($list as &$item) {
  83. // 格式化金额(分转元)
  84. $item['amount'] = bcdiv($item['amount'], "10000", 2);
  85. $item['prev_amount'] = bcdiv($item['prev_amount'], "10000", 2);
  86. $item['next_amount'] = bcdiv($item['next_amount'], "10000", 2);
  87. // 状态文本
  88. $item['status_text'] = self::getStatusText($item['status']);
  89. // 平台昵称
  90. $item['nickname'] = $userMap[$item['user_id']] ?? '';
  91. }
  92. return [
  93. 'list' => $list,
  94. 'total' => $total,
  95. 'page' => $page,
  96. 'limit' => $limit
  97. ];
  98. }
  99. /**
  100. * 获取状态文本
  101. */
  102. public static function getStatusText($status)
  103. {
  104. return self::STATUS[$status] ?? '未知';
  105. }
  106. }