WalletService.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Services\Client;
  3. use App\Models\MemberUser;
  4. use Illuminate\Support\Facades\Log;
  5. class WalletService
  6. {
  7. /**
  8. * [钱包管理]获取钱包明细
  9. *
  10. * @param int $userId 用户ID
  11. * @param int $perPage 每页记录数
  12. * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
  13. *
  14. * @throws \Exception
  15. */
  16. public function getWalletRecords($userId, $perPage = 10)
  17. {
  18. try {
  19. // 获取当前用户
  20. $user = MemberUser::find($userId);
  21. // 检查用户是否存在
  22. abort_if(! $user, 400, '用户不存在');
  23. // 检查用户状态
  24. abort_if($user->state !== 'enable', 400, '用户状态异常');
  25. // 获取钱包交易记录
  26. $records = $user->wallet->transRecords()
  27. ->where('state', 'enable')
  28. ->orderBy('created_at', 'desc')
  29. ->paginate($perPage);
  30. return $records;
  31. } catch (\Exception $e) {
  32. // 记录错误日志
  33. \Log::error('获取钱包明细失败', [
  34. 'userId' => $userId,
  35. 'error' => $e->getMessage(),
  36. 'trace' => $e->getTraceAsString(),
  37. ]);
  38. throw $e;
  39. }
  40. }
  41. /**
  42. * 获取用户钱包
  43. */
  44. public function getUserWallet($userId)
  45. {
  46. try {
  47. $user = MemberUser::find($userId);
  48. abort_if(! $user, 400, '用户不存在');
  49. abort_if($user->state !== 'enable', 400, '用户状态异常');
  50. $wallet = $user->wallet;
  51. if (! $wallet) {
  52. Log::warning('用户钱包不存在', ['user_id' => $user->id]);
  53. throw new \Exception('钱包不存在');
  54. }
  55. return $wallet;
  56. } catch (\Exception $e) {
  57. Log::error('获取用户钱包失败', ['error' => $e->getMessage()]);
  58. throw $e;
  59. }
  60. }
  61. }