MemberUser::class, // 可以添加其他角色映射 // 'agent' => Agent::class, // 'coach' => Coach::class, ]; /** * 创建邀请关系 * * @param MemberUser $user 被邀请用户 * @param string|null $invite_code 邀请码 * @param int|null $invite_id 邀请人ID * @param string|null $invite_role 邀请人角色 */ public function createInviteRelation(MemberUser $user, ?string $invite_code = null, ?int $invite_id = null, ?string $invite_role = null): bool { try { DB::beginTransaction(); // 检查用户是否已有邀请关系 $existingTeam = $user->inviter; if (! $existingTeam) { // 获取对应的模型类 $inviterModelClass = $this->roleModelMap[$invite_role] ?? null; if ($inviterModelClass) { $inviter = $inviterModelClass::find($invite_id); if ($inviter && $invite_code === strtoupper(substr(md5($inviter->id), 0, 6))) { // 记录邀请关系到Team表 MarketDistTeam::create([ 'object_id' => $inviter->id, 'object_type' => get_class($inviter), 'user_id' => $user->id, 'level' => 1, 'state' => 1, ]); DB::commit(); return true; } } } DB::commit(); return false; } catch (\Exception $e) { DB::rollBack(); Log::error('创建邀请关系失败: '.$e->getMessage()); throw $e; } } /** * 获取团队列表 */ public function getTeamList($userId, $perPage = 15) { try { // 获取当前用户 $user = MemberUser::findOrFail($userId); // 检查用户状态 abort_if($user->state != UserStatus::OPEN->value, 403, '用户状态异常'); // 获取下级用户列表 $teamList = $user->teams()->where('state', 1) ->with(['user']) // 关联用户 ->orderBy('created_at', 'desc') ->paginate($perPage); return response()->json([ 'code' => 200, 'message' => '获取成功', 'data' => [ 'items' => $teamList->items(), 'total' => $teamList->total(), ], ]); } catch (\Exception $e) { Log::error('获取团队列表失败: '.$e->getMessage()); throw $e; } } }