defaultChartOptions()) { $this->chartOptions = $options; } $this->init(); } /** * 处理请求 * * @param Request $request * @return mixed|void */ public function handle(Request $request) { $rankings = $this->getPromotionRankings(); $this->withContent($rankings); } /** * 获取推广排名数据 * * @return array */ private function getPromotionRankings(): array { // 获取直推排名前10 $directRanking = $this->getDirectRanking(); // 获取间推排名前10 $indirectRanking = $this->getIndirectRanking(); // 获取三推排名前10 $thirdRanking = $this->getThirdRanking(); // 获取团队总数排名前10 $teamRanking = $this->getTeamRanking(); return [ 'direct' => $directRanking, 'indirect' => $indirectRanking, 'third' => $thirdRanking, 'team' => $teamRanking, ]; } /** * 获取直推排名 * 统计每个推荐人的直接推荐数量 * * @return array */ private function getDirectRanking(): array { return UrsUserReferral::select([ 'urs_promotion_user_referrals.urs_referrer_id', 'urs_promotion_user_referrals.referrer_id', 'users.username as nickname', DB::raw('COUNT(*) as direct_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', 'users.username') ->orderBy('direct_count', 'desc') ->limit(10) ->get() ->toArray(); } /** * 获取间推排名 * 统计每个推荐人的间接推荐数量(二级推荐) * * @return array */ private function getIndirectRanking(): array { // 暂时返回空数组,间推统计比较复杂 return []; } /** * 获取三推排名 * 统计每个推荐人的三级推荐数量 * * @return array */ private function getThirdRanking(): array { // 暂时返回空数组,三推统计比较复杂 return []; } /** * 获取团队总数排名 * 统计每个推荐人的团队总人数(直推+间推+三推) * * @return array */ private function getTeamRanking(): array { // 团队排名与直推排名相同,统计直推数量 return $this->getDirectRanking(); } /** * 设置卡片内容 * * @param array $rankings 排名数据 * @return $this */ public function withContent(array $rankings) { $directHtml = $this->buildRankingHtml($rankings['direct'], 'direct_count', '直推'); $indirectHtml = $this->buildRankingHtml($rankings['indirect'], 'indirect_count', '间推'); $thirdHtml = $this->buildRankingHtml($rankings['third'], 'third_count', '三推'); $teamHtml = $this->buildRankingHtml($rankings['team'], 'team_count', '团队'); return $this->content( <<