Balance.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Http\Controllers\admin;
  3. use App\Constants\HttpStatus;
  4. use App\Http\Controllers\Controller;
  5. use App\Models\BalanceLog;
  6. use App\Services\BalanceLogService;
  7. use Carbon\Carbon;
  8. use Illuminate\Validation\ValidationException;
  9. use App\Services\MemberBonusLogService;
  10. use Exception;
  11. class Balance extends Controller
  12. {
  13. public function log()
  14. {
  15. try {
  16. $params = request()->validate([
  17. 'page' => ['nullable', 'integer', 'min:1'],
  18. 'limit' => ['nullable', 'integer', 'min:1'],
  19. 'type' => ['nullable', 'integer'],
  20. 'member_id' => ['nullable', 'string', 'min:1'],
  21. 'related_id' => ['nullable', 'string', 'min:1'],
  22. 'change_type' => ['nullable', 'string', 'in:' . implode(',', request()->input('is_fancai') == 1
  23. ? MemberBonusLogService::types() : BalanceLogService::$RW)],
  24. 'start_time' => ['nullable', 'date', 'date_format:Y-m-d', 'required_with:end_time'],
  25. 'end_time' => ['nullable', 'date', 'date_format:Y-m-d', 'required_with:start_time'],
  26. 'account' => ['nullable', 'string', 'max:64'],
  27. 'first_name' => ['nullable'],
  28. 'is_fancai' => ['nullable', 'integer','in:0,1'],
  29. // 用户类型/注册来源:-1 tg用户,0 后台客服账号,1 真实用户,2 虚拟用户
  30. 'from' => ['nullable'],
  31. ]);
  32. $page = request()->input('page', 1);
  33. $limit = request()->input('limit', 10);
  34. // 旧版彩金页面固定传 type=2;彩金现在涵盖可用余额及历史冻结奖励。
  35. if (!empty($params['is_fancai'])) {
  36. $changeType = $params['change_type'] ?? null;
  37. unset($params['type'], $params['change_type']);
  38. }
  39. $query = BalanceLog::join('users', 'users.member_id', '=', 'balance_logs.member_id')
  40. ->where(BalanceLogService::getWhere($params));
  41. if (!empty($params['is_fancai'])) {
  42. $bonusLogs = new MemberBonusLogService();
  43. $data['change_types'] = MemberBonusLogService::types();
  44. $query = $query->whereIn('balance_logs.change_type', MemberBonusLogService::LEDGER_TYPES)
  45. ->whereIn('balance_logs.type', [1, 2])->where('balance_logs.amount', '>', 0);
  46. $bonusLogs->filter($query, $changeType);
  47. } else {
  48. $data['change_types'] = BalanceLogService::$RW;
  49. }
  50. // 统计与列表共用筛选条件;clone 避免 count/sum 影响后续分页查询
  51. $data['total'] = (clone $query)->count();
  52. $data['total_amount'] = bcadd((clone $query)->sum('balance_logs.amount'), 0, 2);
  53. $data['data'] = $query->select("balance_logs.*", "users.first_name", "users.account", "users.admin_note as user_admin_note", "users.from as user_from")
  54. ->orderByDesc('balance_logs.id')
  55. ->forPage($page, $limit)
  56. ->with(['member'])
  57. ->get()
  58. ->toArray();
  59. if (isset($bonusLogs)) $data['data'] = $bonusLogs->decorate($data['data']);
  60. } catch (ValidationException $e) {
  61. return $this->error(HttpStatus::CUSTOM_ERROR, $e->validator->errors()->first());
  62. } catch (Exception $e) {
  63. return $this->error($e->getCode(),$e->getMessage());
  64. }
  65. return $this->success($data);
  66. }
  67. }