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 UrsUserMapping::select([ 'urs_promotion_user_mappings.urs_user_id', 'urs_promotion_user_mappings.user_id', 'urs_promotion_user_mappings.direct_count', 'users.nickname' ]) ->leftJoin('users', 'urs_promotion_user_mappings.user_id', '=', 'users.id') ->where('urs_promotion_user_mappings.status', UrsUserMapping::STATUS_VALID) ->where('urs_promotion_user_mappings.direct_count', '>', 0) ->orderBy('urs_promotion_user_mappings.direct_count', 'desc') ->limit(10) ->get() ->toArray(); } /** * 获取间推排名 * * @return array */ private function getIndirectRanking(): array { return UrsUserMapping::select([ 'urs_promotion_user_mappings.urs_user_id', 'urs_promotion_user_mappings.user_id', 'urs_promotion_user_mappings.indirect_count', 'users.nickname' ]) ->leftJoin('users', 'urs_promotion_user_mappings.user_id', '=', 'users.id') ->where('urs_promotion_user_mappings.status', UrsUserMapping::STATUS_VALID) ->where('urs_promotion_user_mappings.indirect_count', '>', 0) ->orderBy('urs_promotion_user_mappings.indirect_count', 'desc') ->limit(10) ->get() ->toArray(); } /** * 获取三推排名 * * @return array */ private function getThirdRanking(): array { return UrsUserMapping::select([ 'urs_promotion_user_mappings.urs_user_id', 'urs_promotion_user_mappings.user_id', 'urs_promotion_user_mappings.third_count', 'users.nickname' ]) ->leftJoin('users', 'urs_promotion_user_mappings.user_id', '=', 'users.id') ->where('urs_promotion_user_mappings.status', UrsUserMapping::STATUS_VALID) ->where('urs_promotion_user_mappings.third_count', '>', 0) ->orderBy('urs_promotion_user_mappings.third_count', 'desc') ->limit(10) ->get() ->toArray(); } /** * 获取团队总数排名 * * @return array */ private function getTeamRanking(): array { return UrsUserMapping::select([ 'urs_promotion_user_mappings.urs_user_id', 'urs_promotion_user_mappings.user_id', 'urs_promotion_user_mappings.promotion_count', 'users.nickname' ]) ->leftJoin('users', 'urs_promotion_user_mappings.user_id', '=', 'users.id') ->where('urs_promotion_user_mappings.status', UrsUserMapping::STATUS_VALID) ->where('urs_promotion_user_mappings.promotion_count', '>', 0) ->orderBy('urs_promotion_user_mappings.promotion_count', 'desc') ->limit(10) ->get() ->toArray(); } /** * 设置卡片内容 * * @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'], 'promotion_count', '团队'); return $this->content( <<