Operation.php 6.7 KB

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