WalletService.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Services\Client;
  3. use App\Enums\UserStatus;
  4. use App\Models\MemberUser;
  5. use Illuminate\Support\Facades\Log;
  6. class WalletService
  7. {
  8. /**
  9. * [钱包管理]获取钱包明细
  10. *
  11. * @param int $userId 用户ID
  12. * @param int $perPage 每页记录数
  13. * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
  14. *
  15. * @throws \Exception
  16. */
  17. public function getWalletRecords($userId, $perPage = 10)
  18. {
  19. try {
  20. // 获取当前用户
  21. $user = MemberUser::find($userId);
  22. // 检查用户是否存在
  23. abort_if(! $user, 400, '用户不存在');
  24. // 检查用户状态
  25. abort_if($user->state != UserStatus::OPEN->value, 400, '用户状态异常');
  26. // 获取钱包交易记录
  27. $records = $user->wallet->transRecords()
  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. }