MarketDistTeamService.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <?php
  2. namespace App\Services\Client;
  3. use App\Enums\UserStatus;
  4. use App\Models\MarketDistTeam;
  5. use App\Models\MemberUser;
  6. use Illuminate\Support\Facades\DB;
  7. use Illuminate\Support\Facades\Log;
  8. class MarketDistTeamService
  9. {
  10. /**
  11. * 角色与模型的映射关系
  12. */
  13. protected $roleModelMap = [
  14. 'user' => MemberUser::class,
  15. // 可以添加其他角色映射
  16. // 'agent' => Agent::class,
  17. // 'coach' => Coach::class,
  18. ];
  19. /**
  20. * 创建邀请关系
  21. *
  22. * @param MemberUser $user 被邀请用户
  23. * @param string|null $invite_code 邀请码
  24. * @param int|null $invite_id 邀请人ID
  25. * @param string|null $invite_role 邀请人角色
  26. */
  27. public function createInviteRelation(MemberUser $user, ?string $invite_code = null, ?int $invite_id = null, ?string $invite_role = null): bool
  28. {
  29. try {
  30. DB::beginTransaction();
  31. // 检查用户是否已有邀请关系
  32. $existingTeam = $user->inviter;
  33. if (! $existingTeam) {
  34. // 获取对应的模型类
  35. $inviterModelClass = $this->roleModelMap[$invite_role] ?? null;
  36. if ($inviterModelClass) {
  37. $inviter = $inviterModelClass::find($invite_id);
  38. if ($inviter && $invite_code === strtoupper(substr(md5($inviter->id), 0, 6))) {
  39. // 记录邀请关系到Team表
  40. MarketDistTeam::create([
  41. 'object_id' => $inviter->id,
  42. 'object_type' => get_class($inviter),
  43. 'user_id' => $user->id,
  44. 'level' => 1,
  45. 'state' => 1,
  46. ]);
  47. DB::commit();
  48. return true;
  49. }
  50. }
  51. }
  52. DB::commit();
  53. return false;
  54. } catch (\Exception $e) {
  55. DB::rollBack();
  56. Log::error('创建邀请关系失败: '.$e->getMessage());
  57. throw $e;
  58. }
  59. }
  60. /**
  61. * 获取团队列表
  62. */
  63. public function getTeamList($userId, $perPage = 15)
  64. {
  65. try {
  66. // 获取当前用户
  67. $user = MemberUser::findOrFail($userId);
  68. // 检查用户状态
  69. abort_if($user->state != UserStatus::OPEN->value, 403, '用户状态异常');
  70. // 获取下级用户列表
  71. $teamList = $user->teams()->where('state', 1)
  72. ->with(['user']) // 关联用户
  73. ->orderBy('created_at', 'desc')
  74. ->paginate($perPage);
  75. return response()->json([
  76. 'code' => 200,
  77. 'message' => '获取成功',
  78. 'data' => [
  79. 'items' => $teamList->items(),
  80. 'total' => $teamList->total(),
  81. ],
  82. ]);
  83. } catch (\Exception $e) {
  84. Log::error('获取团队列表失败: '.$e->getMessage());
  85. throw $e;
  86. }
  87. }
  88. }