| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- <?php
- namespace app\controller\v2;
- use app\extra\basic\Base;
- use app\extra\service\blue\ExpertPlatformService;
- use app\extra\service\blue\TaskService;
- use app\extra\tools\IpRegion;
- use app\middleware\WxMiddleware;
- use app\model\blue\BlueBanner;
- use app\model\blue\BlueCategory;
- use app\model\blue\BlueExpertGroup;
- use app\model\blue\BlueExpertPlatform;
- use app\model\blue\BlueIncomeMon;
- use app\model\blue\BlueTaskRevenue;
- use app\model\blue\BlueTaskUser;
- use app\model\blue\BlueUserOpen;
- use DI\Attribute\Inject;
- use LinFly\Annotation\Route\Controller;
- use LinFly\Annotation\Route\Middleware;
- use LinFly\Annotation\Route\Route;
- use support\Request;
- use support\Response;
- #[Controller(prefix: "/wx_v2/portal"),Middleware(WxMiddleware::class)]
- class Portal extends Base
- {
- protected array $noNeedLogin = ['getPortal','getStarList'];
- #[Inject]
- protected TaskService $service;
- /**
- * 小程序首页信息
- * @param Request $request
- * @return Response
- */
- #[Route(path: "home",methods: "get")]
- public function getPortal(Request $request): Response
- {
- try {
- $param = $this->_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());
- }
- }
- }
|