MarketDistTeamService.php 2.9 KB

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