Operation.php 7.0 KB

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