domain() . '/mobile'; } // 未登录:返回通用分享信息 if (empty($this->userId)) { return $this->data([ 'invite_code' => '', 'nickname' => '世博头条', 'avatar' => '', 'h5_domain' => $h5Domain, ]); } $user = User::findOrEmpty($this->userId); if ($user->isEmpty()) { return $this->data([ 'invite_code' => '', 'nickname' => '世博头条', 'avatar' => '', 'h5_domain' => $h5Domain, ]); } // 如果用户还没有邀请码,自动生成 $inviteCode = $user->getData('invite_code'); if (empty($inviteCode)) { $inviteCode = User::createInviteCode(); $user->save(['invite_code' => $inviteCode]); } // 递归获取所有下级用户数 $teamCount = self::getTeamCount($this->userId); return $this->data([ 'invite_code' => $inviteCode, 'nickname' => $user->getData('nickname'), 'avatar' => $user->avatar, 'h5_domain' => $h5Domain, 'team_count' => $teamCount, ]); } /** * 递归统计所有下级用户总数 */ private static function getTeamCount(int $userId): int { $directIds = User::where('inviter_id', $userId)->column('id'); if (empty($directIds)) { return 0; } $count = count($directIds); foreach ($directIds as $id) { $count += self::getTeamCount($id); } return $count; } /** * @notes 获取我的邀请列表 */ public function getInviteList() { $page = $this->request->get('page/d', 1); $size = $this->request->get('size/d', 20); $level = $this->request->get('level/d', 1); // 未登录:返回空列表 if (empty($this->userId)) { return $this->data([ 'list' => [], 'total' => 0, 'page' => $page, 'size' => $size, ]); } if ($level == 2) { // 二级:我的一级用户邀请的人 $firstLevelIds = User::where('inviter_id', $this->userId)->column('id'); if (empty($firstLevelIds)) { return $this->data([ 'list' => [], 'total' => 0, 'page' => $page, 'size' => $size, ]); } $query = User::whereIn('inviter_id', $firstLevelIds); } else { // 一级:直接邀请的人 $query = User::where('inviter_id', $this->userId); } $list = $query->field('id, sn, nickname, avatar, create_time') ->order('id', 'desc') ->page($page, $size) ->select() ->toArray(); $count = $query->count(); return $this->data([ 'list' => $list, 'total' => $count, 'page' => $page, 'size' => $size, ]); } }