_valid([ "category.default" => 0, "size.default" => 10, "page.default" => 1, ],$request->method()); $banner = (new BlueBanner)->where("status",1)->field("title,img,path")->select()->toArray(); $category = (new BlueCategory)->where("type",1)->field("name,icon,small_icon,sign")->append(['id'])->withAttr(['id' => function($data,$resp){ return $resp['sign']; }])->select()->toArray(); if (empty($param['category']) || $param['category'] == 0) { $param['category'] = $category[0]['id']; } $share = [ "image" => sConf("wechat.share"), "title" => sConf("wechat.share_title") ]; $rank = []; $star = (new BlueExpertPlatform)->order("create_at","desc")->field("source,nickname,avatar,follower_count,uid,create_at")->limit(10)->select()->toArray(); $list = $this->service->getHomeList(['category' => $param['category'],'pageSize' => $param['size'],'page' => $param['page']]); $task = pageFormat($list); return success("ok",compact("banner","category",'task','share','rank','star')); } catch (\Throwable $throwable) { return error($throwable->getMessage()); } } /** * 达人之家 * @param Request $request * @return Response */ #[Route(path: "star",methods: "get")] public function getStarList(Request $request): Response { try { $param = $this->_valid([ "nick.default" => "", "source.default" => "" ],$request->method()); if (!is_array($param)) return error($param); $data = (new ExpertPlatformService)->getListStar($param,"uid,nickname,avatar,follower_count,unique_id,openid,source"); if (empty($data)) return successTrans("success.data",$data); $list = []; foreach ($data as $key=>$val) { $list[$key] = [ "uid" => $val['uid'], "nickname" => $val['nickname'], "avatar" => $val['avatar'], "source" => $val['source'], "follower" => formatMoneyKw($val['follower_count']), "income" => 0, "job" => count($val['job']), "level" => [ "name" => $val['user']['level']['name']??'-', "num" => $val['user']['level']['level']??0 ], ]; } $monIncome = (new BlueIncomeMon)->where("mon")->sum("money"); $lastMonIncome = (new BlueIncomeMon)->where("mon",date("Ym",strtotime("-1 mon")))->sum("money"); $total = [ "join" => (new BlueExpertPlatform)->count(), "join_mon" => (new BlueExpertPlatform)->whereMonth("create_at")->count(), "auth" => (new BlueExpertPlatform)->where("status",1)->count(), "income" => $monIncome, "income_rate" => $lastMonIncome > 0 ? (($monIncome - $lastMonIncome) / $lastMonIncome * 100) : 100 ]; return successTrans("success.data",compact("list","total")); } catch (\Throwable $throwable) { return error($throwable->getMessage()); } } /** * 个人主页 * @param Request $request * @return Response */ #[Route(path: "person",methods: "get")] public function getHomePage(Request $request): Response { try { $param = $this->_valid([ "uid.require" => trans("empty.require"), ],$request->method()); if (!is_array($param)) return error($param); $data = (new BlueExpertPlatform)->where("uid",$param["uid"])->findOrEmpty(); if ($data->isEmpty()) return error("达人不存在"); $platform = (new BlueCategory)->where(["type" =>1,"status" => 1])->with(['platform' => function($query) use($data){ $query->where("openid",$data['openid'])->field("source,nickname,avatar,follower_count,unique_id"); }])->field("name,icon,sign")->select(); $userData = (new BlueUserOpen)->where("openid",$data['openid'])->field("nickname,headimg,openid,create_ip")->with(['star' => function($query) { $query->field("openid,group_id,level_exp")->with(['level' => function($query) { $query->field("id,level,name,exp"); }]); }])->append(['level',"tags"])->withAttr([ "tags" => function ($query,$resp) { $fans = (new BlueExpertPlatform)->where("openid",$resp['openid'])->sum("follower_count"); $income = (new BlueTaskRevenue)->where("openid",$resp['openid'])->sum("indicator_agg_data_20022"); return [ [ "name" => "任务", "value" => (new BlueTaskUser)->where("openid",$resp['openid'])->where("status",'in',[1,3])->count(), ], [ "name" => "收益(元)", "value" => formatMoneyKw($income/1000) ], [ "name" => "粉丝", "value" => formatMoneyKw($fans), ], [ "name" => "消耗", "value" => "0.00", ] ]; }, "level" => function($query,$resp) { if ($resp['star']) { return [ "level_num" => $resp['star']['level']['level']??'0', "level_name" => $resp['star']['level']['name']??'0' ]; } else { return []; } } ])->findOrEmpty(); if ($userData->isEmpty()) return errorTrans("error.data"); $user = $userData->toArray(); $ip = new IpRegion(); $user['ip_address'] = $ip->setIp($user['create_ip'])->getProvince(); unset($user['star'],$user['openid'],$user['create_ip']); return successTrans("success.data",compact("platform","user")); } catch (\Throwable $throwable) { return error($throwable->getMessage()); } } /** * 排行榜 * @param Request $request * @return Response */ #[Route(path: "rank",methods: "get")] public function getRankData(Request $request): Response { try { $param = $this->_valid([ "type.default" => 'income' ],$request->method()); if (!is_array($param)) return error($param); $data = [ [ "name" => "迅猛龙", "avatar" => "https://p3-pc.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-i-0813_owAAafIQICAgfidek5L06cAeEp0mmDA1GIc2AF.jpeg?from=2956013662", "val" => "29.3w", "index" => 1 ], [ "name" => "迅猛龙2", "avatar" => "https://p3-pc.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-i-0813_owAAafIQICAgfidek5L06cAeEp0mmDA1GIc2AF.jpeg?from=2956013662", "val" => "29.1w", "index" => 2 ] ]; $self = [ [ "name" => "迅猛龙2", "avatar" => "https://p3-pc.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-i-0813_owAAafIQICAgfidek5L06cAeEp0mmDA1GIc2AF.jpeg?from=2956013662", "val" => "29.1w", "index" => 0 ] ]; return successTrans("success.data",compact("data","self")); } catch (\Throwable $throwable) { return error($throwable->getMessage()); } } }