소스 검색

Merge remote-tracking branch 'origin/develop' into develop

wzq 5 년 전
부모
커밋
5e85334905

+ 12 - 11
app/Console/Commands/ExcellentResidents.php

@@ -61,16 +61,17 @@ class ExcellentResidents extends Command
     public function handle()
     {
         $this->line("开始统计星球居民相关内容");
-        $time = Carbon::now()->startOfDay()->toDateTimeString();
+        $yesterday_start = Carbon::now()->addDays(-1)->startOfDay()->toDateTimeString();
+        $yesterday_end = Carbon::now()->addDays(-1)->endOfDay()->toDateTimeString();
         $sum_quantity_issued = $this->behavior
             ->leftJoin('comment_account_record as c','behavior.virus_behavior_id','=','c.virus_behavior_id')
             ->leftJoin('general_ledger_record as g','behavior.virus_behavior_id','=','g.virus_behavior_id')
             ->leftJoin('registered_accounts_record as a','behavior.virus_behavior_id','=','a.virus_behavior_id')
             ->leftJoin('release_record as r','behavior.virus_behavior_id','=','r.virus_behavior_id')
-            ->where('c.created_at', '>=', $time)
-            ->orwhere('g.created_at', '>=', $time)
-            ->orwhere('a.created_at', '>=', $time)
-            ->orwhere('r.created_at', '>=', $time)
+            ->whereBetween('c.created_at', [$yesterday_start,$yesterday_end])
+            ->orwhereBetween('g.created_at', [$yesterday_start,$yesterday_end])
+            ->orwhereBetween('a.created_at', [$yesterday_start,$yesterday_end])
+            ->orwhereBetween('r.created_at', [$yesterday_start,$yesterday_end])
             ->get(array(
                     DB::raw('SUM(c.quantity_issued) as c_quantity_issued'),
                     DB::raw('SUM(g.quantity_issued) as g_quantity_issued'),
@@ -86,7 +87,7 @@ class ExcellentResidents extends Command
 
         //文章被评论最多用户
         $comment = $this->commentRecord
-            ->where('created_at', '>=', $time)
+            ->whereBetween('created_at', [$yesterday_start,$yesterday_end])
             ->select(DB::raw('count(*) as count'), 'content_author_id', 'related_content_id')
             ->groupBy('related_content_id', 'content_author_id')->orderBy('count', 'desc')->limit(1)->get();
         $comment = $comment->toArray();
@@ -96,7 +97,7 @@ class ExcellentResidents extends Command
 
         //昨日拉新最多用户
         $registered = $this->registeredRecord
-            ->where('created_at', '>=', $time)
+            ->whereBetween('created_at', [$yesterday_start,$yesterday_end])
             ->select(DB::raw('count(*) as count'), 'superior_uid as content_author_id')//作为用户ID
             ->groupBy('superior_uid')->orderBy('count', 'desc')->limit(1)->get();
         $registered = $registered->toArray();
@@ -111,7 +112,7 @@ class ExcellentResidents extends Command
             ->first();
         $collent = $this->generalRecord
             ->where('virus_behavior_id', $virus_id->virus_behavior_id)
-            ->where('created_at', '>=', $time)
+            ->whereBetween('created_at', [$yesterday_start,$yesterday_end])
             ->select(DB::raw('count(*) as count'), 'content_author_id', 'related_content_id')
             ->groupBy('related_content_id', 'content_author_id')->orderBy('count', 'desc')->limit(1)->get();
         $collent = $collent->toArray();
@@ -126,7 +127,7 @@ class ExcellentResidents extends Command
             ->first();
         $like = $this->generalRecord
             ->where('virus_behavior_id', $virus_id->virus_behavior_id)
-            ->where('created_at', '>=', $time)
+            ->whereBetween('created_at', [$yesterday_start,$yesterday_end])
             ->select(DB::raw('count(*) as count'), 'content_author_id', 'related_content_id')
             ->groupBy('related_content_id', 'content_author_id')->orderBy('count', 'desc')->limit(1)->get();
         $like = $like->toArray();
@@ -141,7 +142,7 @@ class ExcellentResidents extends Command
             ->first();
         $forward = $this->generalRecord
             ->where('virus_behavior_id', $virus_id->virus_behavior_id)
-            ->where('created_at', '>=', $time)
+            ->whereBetween('created_at', [$yesterday_start,$yesterday_end])
             ->select(DB::raw('count(*) as count'), 'content_author_id', 'related_content_id')
             ->groupBy('related_content_id', 'content_author_id')->orderBy('count', 'desc')->limit(1)->get();
         $forward = $forward->toArray();
@@ -156,7 +157,7 @@ class ExcellentResidents extends Command
             ->first();
         $read = $this->generalRecord
             ->where('virus_behavior_id', $virus_id->virus_behavior_id)
-            ->where('created_at', '>=', $time)
+            ->whereBetween('created_at', [$yesterday_start,$yesterday_end])
             ->select(DB::raw('count(*) as count'), 'content_author_id', 'related_content_id')
             ->groupBy('related_content_id', 'content_author_id')->orderBy('count', 'desc')->limit(1)->get();
         $read = $read->toArray();

+ 11 - 9
app/Console/Commands/RankingList.php

@@ -55,8 +55,10 @@ class RankingList extends Command
 
     private function _condition($model)
     {
+        $yesterday_start = Carbon::now()->addDays(-1)->startOfDay()->toDateTimeString();
+        $yesterday_end = Carbon::now()->addDays(-1)->endOfDay()->toDateTimeString();
         return  $model->select(DB::raw('count(*) as count'),'generation_quantity','content_author_id','related_content_id')
-            ->where('created_at', '>=', Carbon::now()->startOfDay()->toDateTimeString())
+            ->whereBetween('created_at', [$yesterday_start,$yesterday_end])
             ->groupBy('generation_quantity','related_content_id','content_author_id')
             ->orderBy('generation_quantity','desc')
             ->limit(10)
@@ -72,13 +74,13 @@ class RankingList extends Command
     public function handle()
     {
         $this->line("开始统计排行榜相关内容");
-        $time = Carbon::now()->startOfDay()->toDateTimeString();
-
+        $yesterday_start = Carbon::now()->addDays(-1)->startOfDay()->toDateTimeString();
+        $yesterday_end = Carbon::now()->addDays(-1)->endOfDay()->toDateTimeString();
         //昨日拉新最多前十人
         $registered_most = $this->registeredRecord
-            ->where('created_at', '>=',$time)
-            ->select(DB::raw('count(*) as count'),'superior_uid as content_author_id')
-            ->groupBy('content_author_id')->orderBy('count','desc')->limit(10)->get();
+            ->whereBetween('created_at', [$yesterday_start,$yesterday_end])
+            ->select(DB::raw('count(*) as count'),'superior_uid')
+            ->groupBy('superior_uid')->orderBy('count','desc')->limit(10)->get();
         $registered_most = $registered_most->toArray();
 
         //昨日文章产生彩虹豆最多前十人
@@ -93,7 +95,7 @@ class RankingList extends Command
             $general_best_author[$k]['type'] = 'general';
         }
         $release_author = $this->releaseRecord
-            ->where('created_at', '>=', $time)
+            ->whereBetween('created_at', [$yesterday_start,$yesterday_end])
             ->select(DB::raw('count(*) as count'),'generation_quantity','uid as content_author_id','related_content_id')
             ->groupBy('generation_quantity','content_author_id','related_content_id')->orderBy('generation_quantity','desc')->limit(10)->get();
         $release_best_author = $release_author->toArray();
@@ -110,8 +112,8 @@ class RankingList extends Command
         Log::debug('昨日拉新最多前十人'.json_encode($registered_most));
         Log::debug('昨日文章产生彩虹豆最多前十人'.json_encode($all_best_author));
 
-        Redis::set('yesterday_registered_most', $registered_most);
-        Redis::set('yesterday_best_author', $all_best_author);
+        Redis::set('yesterday_registered_most', json_encode($registered_most));
+        Redis::set('yesterday_best_author', json_encode($all_best_author));
 
         $this->line("统计昨日排行榜内容结束");
     }

+ 18 - 37
app/Http/Controllers/V1/BeanDetailController.php

@@ -32,54 +32,35 @@ class BeanDetailController extends Controller
         if ($beanDetail){
             return $this->jsonSuccess($beanDetail);
         }else{
-            return $this->jsonError('没有找到对应彩虹豆明细');
+            return $this->jsonSuccess();
         }
     }
 
-    //获取星球-用户彩虹豆相关信息
-    public function getBean(Request $request)
+    //排行榜
+    public function rankingList(Request $request)
     {
-        $user_bean = $this->beanRepository->getBean($request->all());
-        if ($user_bean){
-            return $this->jsonSuccess($user_bean);
-        }else{
-            return $this->jsonError('没有找到星球彩虹豆信息');
-        }
-    }
-
-    //昨日优秀居民
-    public function excellentResidents(Request $request)
-    {
-        $excellent_residents = $this->beanRepository->excellentResidents($request->all());
-        if ($excellent_residents){
-            return $this->jsonSuccess($excellent_residents);
-        }else{
-            return $this->jsonError('没有找到昨日优秀居民相关信息');
+        $validator = Validator::make($request->all(), [
+            'type' => ['required',Rule::in([0,1, 2])],
+        ]);
+        if ($validator->fails()) {
+            return $this->jsonError($validator->errors()->first());
         }
-    }
-
-    //昨日拉新最多前十人
-    public function registeredMost(Request $request)
-    {
-        $registered_most = $this->beanRepository->registeredMost($request->all());
-        if ($registered_most){
-            return $this->jsonSuccess($registered_most);
+        $top_most = $this->beanRepository->rankingList($request->all());
+        if ($top_most){
+            return $this->jsonSuccess($top_most);
         }else{
-            return $this->jsonError('没有找到昨日拉新最多人相关信息');
+            return $this->jsonSuccess();
         }
-
     }
 
-    //昨日文章产生彩虹豆最多前十人
-    public function bestAuthor(Request $request)
+    //星球首页
+    public function starHome(Request $request)
     {
-        $best_author = $this->beanRepository->bestAuthor($request->all());
-        if ($best_author){
-            return $this->jsonSuccess($best_author);
+        $star_home = $this->beanRepository->starHome($request->all());
+        if ($star_home){
+            return $this->jsonSuccess($star_home);
         }else{
-            return $this->jsonError('没有找到昨日最佳作者相关信息');
+            return $this->jsonSuccess();
         }
-
     }
-
 }

+ 4 - 2
app/Http/Controllers/V1/PostController.php

@@ -380,6 +380,8 @@ class PostController extends Controller
         $data = $this->postRepositories->getPostVideo($request['ids']);
         return jsonSuccess($data);
     }
-
-
+    //用户内容数统计
+    public function memberPostStatistics(Request $request){
+       return $this->postRepositories->memberPostStatistics();
+    }
 }

+ 109 - 24
app/Repositories/BeanRepository.php

@@ -5,6 +5,8 @@ use App\Models\CommentRecord;
 use App\Models\GeneralRecord;
 use App\Models\Post;
 use App\Models\RegisteredRecord;
+use App\Models\ReleaseRecord;
+use Illuminate\Support\Carbon;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Log;
 use Tymon\JWTAuth\Facades\JWTAuth;
@@ -26,18 +28,8 @@ class BeanRepository
         }
     }
 
-    public function getBean($request)
-    {
-        $user_bean = [];
-        $user_bean['user_count'] = Redis::get('user_count');//已入驻居民
-        $user_bean['yesterday_add_user'] = Redis::get('yesterday_add_user');//昨日新增居民
-        $user_bean['yesterday_add_bean'] = Redis::get('yesterday_add_bean');//昨日发放彩虹豆
-        $user_bean['yesterday_quantity_issued'] = Redis::get('yesterday_quantity_issued');//昨日发放总彩虹豆
-
-        return $user_bean;
-    }
-
-    public function excellentResidents($request)
+    //获取优秀居民信息
+    function excellentResidents($request)
     {
 //        $get_excellent = Redis::get('yesterday_excellent_residents');
 //        $excellent_residents = json_decode($get_excellent);
@@ -74,7 +66,7 @@ class BeanRepository
             ->groupBy('related_content_id', 'content_author_id')->orderBy('count', 'desc')->limit(1)->get();
         $collent = $collent->toArray();
         foreach ($collent as $k=>$v){
-            $collent[$k]['type'] = 'collent';
+            $collent[$k]['type'] = 'collect';
         }
 
         //文章被喜欢最多用户
@@ -142,8 +134,7 @@ class BeanRepository
             }
         }
         $content_author_id = array_column($excellent_residents,'content_author_id');
-        $content_author_id = array_unique($content_author_id);
-        $uids = implode(',', $content_author_id);
+        $uids = implode(',', array_unique($content_author_id));
         $author_data = $this->getFollowMembersStatus($uids);
         if ($author_data){
             foreach ($excellent_residents as $k=>$v){
@@ -157,22 +148,67 @@ class BeanRepository
         return $excellent_residents;
     }
 
-    public function registeredMost($request)
+    public function rankingList($request)
     {
-        $registered_most = Redis::get('yesterday_registered_most');
-
-        return $registered_most;
+        if ($request['type'] == 0){//排行榜赚豆达人
+            $yesterday = Carbon::yesterday()->toDateString();
+            $all_beans = Redis::ZREVRANGEBYSCORE('user_rainbow_bean'.$yesterday, 100000000, 0, array('WITHSCORES'=>true,'limit' => array(0, 20)));
+                $new_arr = [];
+                $i = 0;
+                foreach ($all_beans as $key => $val) {
+                    $new_arr[$i]['uid'] = $key;
+                    $new_arr[$i]['count'] = $val;
+                    $i++;
+                }
+            $uids = implode(',', array_column($new_arr,'uid'));
+            $user_data = $this->getFollowMembersStatus($uids);
+            if ($user_data){
+                foreach ($new_arr as $k=>$v){
+                    if(!isset($user_data[$v['uid']])) continue;
+                    $new_arr[$k]['follow_status'] = $user_data[$v['uid']]['follow_status'];
+                    $new_arr[$k]['username'] = $user_data[$v['uid']]['username'];
+                    $new_arr[$k]['avatar'] = $user_data[$v['uid']]['avatar'];
+                }
+            }
+            return $new_arr;
 
-    }
+        }elseif ($request['type'] == 1){//排行榜人脉达人
+            $registered_mosts = Redis::get('yesterday_registered_most');
+            $registered_most = json_decode($registered_mosts,true);
 
-    public function bestAuthor($request)
-    {
-        $all_best_author = Redis::get('yesterday_best_author');
+            $superior_uid = array_column($registered_most,'superior_uid');
+            $uids = implode(',', array_unique($superior_uid));
+            $user_data = $this->getFollowMembersStatus($uids);
+            if ($user_data){
+                foreach ($registered_most as $k=>$v){
+                    if(!isset($user_data[$v['superior_uid']])) continue;
+                    $registered_most[$k]['follow_status'] = $user_data[$v['superior_uid']]['follow_status'];
+                    $registered_most[$k]['username'] = $user_data[$v['superior_uid']]['username'];
+                    $registered_most[$k]['avatar'] = $user_data[$v['superior_uid']]['avatar'];
+                }
+            }
+            return $registered_most;
 
-        return $all_best_author;
+        }else{//排行榜最佳作者
+            $all_best_authors = Redis::get('yesterday_best_author');
+            $all_best_author = json_decode($all_best_authors,true);
 
+            $content_author_id = array_column($all_best_author,'content_author_id');
+            $uids = implode(',', array_unique($content_author_id));
+            $user_data = $this->getFollowMembersStatus($uids);
+            if ($user_data){
+                foreach ($all_best_author as $k=>$v){
+                    if(!isset($user_data[$v['content_author_id']])) continue;
+                    $all_best_author[$k]['follow_status'] = $user_data[$v['content_author_id']]['follow_status'];
+                    $all_best_author[$k]['username'] = $user_data[$v['content_author_id']]['username'];
+                    $all_best_author[$k]['avatar'] = $user_data[$v['content_author_id']]['avatar'];
+                }
+            }
+            return $all_best_author;
+        }
     }
 
+
     function getFollowMembersStatus($uids) {
         try {
             $url = config("customer.app_service_url").'/user/v2/member/getMemberIds';
@@ -187,4 +223,53 @@ class BeanRepository
 
     }
 
+    public function starHome($request)
+    {
+        $star_home = [];
+        $user_bean = Redis::get('my_bean');
+        $user_bean = json_decode($user_bean,true);
+        $yesterday_quantity_issued = Redis::get('yesterday_quantity_issued');
+        $star_home['mybean']['user_all_bean'] = $user_bean['user_all_bean'] ?? 0;//用户总彩虹豆
+        $star_home['mybean']['yesterday_add_bean'] = $user_bean['yesterday_add_bean'] ?? 0;//昨日发放彩虹豆
+        $star_home['mybean']['user_count'] = $user_bean['user_count'] ?? 0;//已入驻居民
+        $star_home['mybean']['yesterday_add_user'] = $user_bean['yesterday_add_user'] ?? 0;//昨日新增居民
+        $star_home['mybean']['yesterday_quantity_issued'] = $yesterday_quantity_issued ?? 0;//昨日发放总彩虹豆
+
+        $star_home['excellent_residents'] = $this->excellentResidents($request);
+        $star_home['daily_news'] = $this->getNews($request);
+        $star_home['tips'] = $this->getPlatformContent($id = 1);
+
+        return $star_home;
+
+    }
+
+    //获取每日新闻
+    function getNews($request) {
+        try {
+            $url = config("customer.app_service_url").'/config/v2/starNews/lists';
+            $array = [
+                'json' => [], 'query' => [], 'http_errors' => false,'headers'=>['Authorization'=>"Bearer ".JWTAuth::getToken()]
+            ];
+            return http($url,$array,'get');
+        } catch (\Exception $e) {
+            Log::debug($e->getMessage());
+            return [];
+        }
+
+    }
+    //获取平台内容
+    function getPlatformContent($id) {
+        try {
+            $url = config("customer.app_service_url").'/config/v2/platformContent/lists';
+            $array = [
+                'json' => ['id'=>$id], 'query' => [], 'http_errors' => false,'headers'=>['Authorization'=>"Bearer ".JWTAuth::getToken()]
+            ];
+            return http($url,$array,'get');
+        } catch (\Exception $e) {
+            Log::debug($e->getMessage());
+            return [];
+        }
+
+    }
+
 }

+ 32 - 4
app/Repositories/MemberFollowTopicRepository.php

@@ -9,8 +9,10 @@
 namespace App\Repositories;
 
 use App\Models\MemberFollowTopic;
+use Illuminate\Support\Facades\DB;
 use Tymon\JWTAuth\Facades\JWTAuth;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Log;
 
 class MemberFollowTopicRepository {
     public function __construct(MemberFollowTopic $memberFollowTopic,CategoryRepository $categoryRepository) {
@@ -31,12 +33,38 @@ class MemberFollowTopicRepository {
                     'topic_id' => $value['id'],
                 ];
             }
-            $res = $this->memberFollowTopic->insert($category_topic_data);
-            if($res){
-                return jsonSuccess();
-            }else{
+            DB::beginTransaction();
+            try{
+                $res = $this->memberFollowTopic->insert($category_topic_data);
+                $topic = $this->updataMemberFollowSuggestTopic();
+                DB::commit();
+                if($res){
+                    //更改关注状态
+
+                    return jsonSuccess();
+                }else{
+                    return jsonError('关注失败');
+                }
+            }catch (QueryException $exception){
+                DB::rollBack();
+                Log::debug('新增话题:'.$exception->getMessage());
                 return jsonError('关注失败');
             }
+
+        }
+    }
+    //修改关注状态
+    public function updataMemberFollowSuggestTopic(){
+        try {
+            $sign = generateSign([], config('customer.app_secret'));
+            $url = config("customer.app_service_url").'/user/v2/member/updateFollowSuggestTopic';
+            //$url = 'http://localhost:8080/v2/member/updateFollowSuggestTopic';
+            $array = [
+                'json' => ['sign' => $sign], 'query' => [], 'http_errors' => false,'headers'=>['Authorization'=>"Bearer ".JWTAuth::getToken()]
+            ];
+            return http($url,$array,'put');
+        } catch (\Exception $e) {
+            return [];
         }
     }
     //关注单个话题

+ 11 - 1
app/Repositories/PostRepositories.php

@@ -28,6 +28,8 @@ use Illuminate\Support\Carbon;
 use Illuminate\Support\Facades\Log;
 use Illuminate\Support\Facades\Redis;
 use Illuminate\Support\Facades\DB;
+use Tymon\JWTAuth\Facades\JWTAuth;
+
 
 class PostRepositories
 {
@@ -577,6 +579,14 @@ class PostRepositories
             ->where('type', 'video')
             ->get();
     }
-
+    //用户内容数,转发数,收藏数统计
+    public function memberPostStatistics(){
+        $token =  JWTAuth::decode(JWTAuth::getToken());
+        $postCount = $this->post->where('uid',$token['user']->uid)->count();
+        $postCollectCount = $this->postCollect->where('uid',$token['user']->uid)->count();
+        $postShareCount = $this->postShare->where('uid',$token['user']->uid)->count();
+        $data = ['post_count'=>$postCount,'share_count'=>$postShareCount,'collect_count'=>$postCollectCount];
+        return jsonSuccess($data);
+    }
 
 }

+ 8 - 5
routes/api.php

@@ -73,11 +73,14 @@ $api->version('v1', [
         $api->get('getBean', 'BeanDetailController@getBean');
 
         //优秀居民信息获取
-        //排行榜拉新最多
-        $api->get('registeredMost', 'BeanDetailController@registeredMost');
-        //排行榜最佳作者
-        $api->get('bestAuthor', 'BeanDetailController@bestAuthor');
+        $api->get('excellentResidents', 'BeanDetailController@excellentResidents');
+        //排行榜
+        $api->get('rankingList', 'BeanDetailController@rankingList');
+        //星球首页
+        $api->get('starHome', 'BeanDetailController@starHome');
+
+        //用户发布数,收藏数,转发数
+        $api->get('post/memberPostStatistics', 'PostController@memberPostStatistics');
     });
-    $api->get('excellentResidents', 'BeanDetailController@excellentResidents');
 
 });