title('团队排行榜'); } /** * 处理请求 * * @param Request $request * @return mixed|void */ public function handle(Request $request) { $data = $this->getTeamRankingData(); // 卡片内容 $this->withContent($data); } /** * 获取团队排名数据 * 统计每个推荐人的团队总人数(直推+间推+三推) * * @return array */ protected function getTeamRankingData(): array { // 使用子查询统计团队总数 $fullTableName = DB::getTablePrefix() . (new UrsUserReferral())->getTable(); $rankings = UrsUserReferral::select([ 'urs_referrer_id', 'referrer_id', 'users.username', DB::raw('( -- 直推数量 SELECT COUNT(DISTINCT r_direct.urs_user_id) FROM ' . $fullTableName . ' r_direct WHERE r_direct.urs_referrer_id = ' . $fullTableName . '.urs_referrer_id AND r_direct.status = 1 ) + ( -- 间推数量 SELECT COUNT(DISTINCT r_indirect.urs_user_id) FROM ' . $fullTableName . ' r_level1 JOIN ' . $fullTableName . ' r_indirect ON r_level1.urs_user_id = r_indirect.urs_referrer_id WHERE r_level1.urs_referrer_id = ' . $fullTableName . '.urs_referrer_id AND r_level1.status = 1 AND r_indirect.status = 1 ) + ( -- 三推数量 SELECT COUNT(DISTINCT r_third.urs_user_id) FROM ' . $fullTableName . ' r_level1 JOIN ' . $fullTableName . ' r_level2 ON r_level1.urs_user_id = r_level2.urs_referrer_id JOIN ' . $fullTableName . ' r_third ON r_level2.urs_user_id = r_third.urs_referrer_id WHERE r_level1.urs_referrer_id = ' . $fullTableName . '.urs_referrer_id AND r_level1.status = 1 AND r_level2.status = 1 AND r_third.status = 1 ) as team_count') ]) ->leftJoin('users', 'urs_promotion_user_referrals.referrer_id', '=', 'users.id') ->where('urs_promotion_user_referrals.status', UrsUserReferral::STATUS_VALID) ->groupBy('urs_promotion_user_referrals.urs_referrer_id', 'urs_promotion_user_referrals.referrer_id', 'urs_promotion_user_referrals.urs_user_id', 'users.username') ->orderBy('team_count', 'desc') ->limit(10) ->get(); $result = []; foreach ($rankings as $index => $ranking) { $username = $ranking->username ?: 'URS用户' . $ranking->urs_referrer_id; $result[] = [ 'rank' => $index + 1, 'title' => $username, 'number' => $ranking->team_count . ' 人', ]; } // 如果没有数据,返回空排名提示 if (empty($result)) { $result[] = [ 'rank' => '-', 'title' => '暂无团队数据', 'number' => '0 人', ]; } return $result; } }