Operation.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <?php
  2. namespace App\Http\Controllers\admin;
  3. use App\Http\Controllers\Controller;
  4. use Exception;
  5. use App\Models\User;
  6. use App\Models\FundsRecord;
  7. use App\Models\Order;
  8. use App\Models\Operation as OperationModel;
  9. use App\Constants\HttpStatus;
  10. class Operation extends Controller
  11. {
  12. /**
  13. * 用户报表
  14. */
  15. function exchangeList()
  16. {
  17. try {
  18. $params = request()->validate([
  19. 'page' => ['nullable', 'integer', 'min:1'],
  20. 'limit' => ['nullable', 'integer', 'min:1', 'max:200'],
  21. 'start_time' => ['nullable', 'date', 'date_format:Y-m-d', 'required_with:end_time'],
  22. 'end_time' => ['nullable', 'date', 'date_format:Y-m-d', 'required_with:start_time'],
  23. 'user_id' => ['nullable', 'string'],
  24. ]);
  25. $page = request()->input('page', 1);
  26. $limit = request()->input('limit', 15);
  27. $query = User::query();
  28. if (isset($params['user_id'])) {
  29. $user_id = $params['user_id'];
  30. $query->where(function ($query1) use ($user_id) {
  31. $query1->where('user_id', $user_id)
  32. ->orWhere('first_name', 'like', "%{$user_id}%");
  33. });
  34. }
  35. $count = $query->count();
  36. $list = $query->join('wallets', 'users.member_id', '=', 'wallets.member_id')
  37. ->select(['users.id', 'users.member_id', 'users.user_id', 'users.first_name', 'users.money','users.remark','wallets.available_balance as money'])
  38. ->forPage($page, $limit)
  39. ->orderByDesc("last_login_time")
  40. ->get()->toArray();
  41. $start = !empty($params['start_time']) ? "{$params['start_time']} 00:00:00" : null;
  42. $end = !empty($params['end_time']) ? "{$params['end_time']} 23:59:59" : null;
  43. foreach ($list as &$item) {
  44. $item['recharge'] = number_format(FundsRecord::where('member_id', $item['member_id'])
  45. ->whereIn('change_type', ['充值','人工充值','三方充值'])
  46. ->where(function ($query1) use ($start, $end) {
  47. if ($start && $end) {
  48. $query1->where('created_at', '>=', $start)
  49. ->where('created_at', '<=', $end);
  50. }
  51. })
  52. ->sum('amount'), 2);
  53. $item['withdraw'] = number_format(FundsRecord::where('member_id', $item['member_id'])
  54. ->whereIn('change_type', ['提现','三方提现'])
  55. ->where(function ($query1) use ($start, $end) {
  56. if ($start && $end) {
  57. $query1->where('created_at', '>=', $start)
  58. ->where('created_at', '<=', $end);
  59. }
  60. })
  61. ->sum('amount'), 2);
  62. //订单总额
  63. $item['order_amount'] = number_format(Order::where('user_id', $item['user_id'])
  64. ->where('status', 1)
  65. ->where('pay_status', 1)
  66. ->where('return_status', 0)
  67. ->where(function ($query1) use ($start, $end) {
  68. if ($start && $end) {
  69. $start = strtotime($start.' 00:00:00');
  70. $end = strtotime($end.' 23:59:59');
  71. $query1->where('create_time', '>=', $start)
  72. ->where('create_time', '<=', $end);
  73. }
  74. })
  75. ->sum('amount'), 2);
  76. }
  77. } catch (Exception $e) {
  78. return $this->error(HttpStatus::CUSTOM_ERROR, $e->getMessage());
  79. }
  80. return $this->success(['total' => $count, 'data' => $list]);
  81. }
  82. /**
  83. * 运营数据
  84. * @apiParam {String{'day','week','month','all'}} type 类型
  85. * - day 今日
  86. * - week 本周
  87. * - month 本月
  88. * - all 全部
  89. */
  90. function index()
  91. {
  92. try {
  93. $params = request()->validate([
  94. 'page' => ['nullable', 'integer', 'min:1'],
  95. 'limit' => ['nullable', 'integer', 'min:1', 'max:200'],
  96. 'type' => ['required', 'string', 'in:day,week,month,all'],
  97. 'start_time' => ['nullable', 'date', 'date_format:Y-m-d', 'required_with:end_time'],
  98. 'end_time' => ['nullable', 'date', 'date_format:Y-m-d', 'required_with:start_time'],
  99. ]);
  100. $data = [
  101. 'recharge' => 0,
  102. 'withdraw' => 0,
  103. 'total_price' => 0,
  104. 'profit_price' => 0
  105. ];
  106. $page = request()->input('page', 1);
  107. $limit = request()->input('limit', 15);
  108. $query = OperationModel::query();
  109. $query1 = OperationModel::query();
  110. if (!empty($params['start_time'])) {
  111. $query->where('date', '>=', $params['start_time'])
  112. ->where('date', '<=', $params['end_time']);
  113. $query1->where('date', '>=', $params['start_time'])
  114. ->where('date', '<=', $params['end_time']);
  115. } else if ($params['type'] != 'all') {
  116. switch ($params['type']) {
  117. case 'day':
  118. $date = date('Y-m-d');
  119. break;
  120. case "week":
  121. $date = date('Y-m-d', strtotime('this week'));
  122. break;
  123. case "month":
  124. $date = date('Y-m-d', strtotime('this month'));
  125. break;
  126. }
  127. $query->where('date', '>=', $date);
  128. $query1->where('date', '>=', $date);
  129. }
  130. $data['recharge'] = $query1->sum('recharge');
  131. $data['withdraw'] = $query1->sum('withdraw');
  132. $data['total_price'] = $query1->sum('total_price');
  133. $count = $query->count();
  134. $list = $query
  135. ->forPage($page, $limit)
  136. ->orderByDesc('date')
  137. ->get()->toArray();
  138. } catch (Exception $e) {
  139. return $this->error(HttpStatus::CUSTOM_ERROR, $e->getMessage());
  140. }
  141. return $this->success(['total' => $count, 'data' => $list, 'count' => $data]);
  142. }
  143. }