Browse Source

答主列表,登录后,随机排序

lizhen_gitee 2 weeks ago
parent
commit
3f714aff9d
2 changed files with 58 additions and 4 deletions
  1. 56 4
      app/Http/Controllers/Api/BloggerController.php
  2. 2 0
      app/Routes/api/v1.php

+ 56 - 4
app/Http/Controllers/Api/BloggerController.php

@@ -7,6 +7,7 @@ use App\Http\Requests\Api\PostsRequests\BloggerRequest;
 
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Redis;
 
 
 class BloggerController extends BaseController
@@ -121,7 +122,7 @@ class BloggerController extends BaseController
         return $this->success($list);
     }
 
-    //答主列表。 推荐答主列表(随机)、按类型答主列表
+    //答主列表。 推荐答主列表(随机)、搜索答主列表(排序)、按类型答主列表
     public function lists(Request $request){
         //分页
         $page = $request->page ?? 1;
@@ -129,7 +130,7 @@ class BloggerController extends BaseController
         $offset = ($page - 1) * $limit;
 
         //按类型搜
-        $type_id = $request->type_id ?? 0;
+//        $type_id = $request->type_id ?? 0;
 
         //搜索
         $keyword = _empty_default_($request->keyword,'');
@@ -141,9 +142,10 @@ class BloggerController extends BaseController
             ->where('blogger.status',1)
             ->inRandomOrder()->offset($offset)->limit($limit);
 
-        if($type_id){
+       /* if($type_id){
+
             $list = $list->whereRaw('FIND_IN_SET(?,type_ids)',[$type_id]);
-        }
+        }*/
 
         if($keyword){
             $list = $list->where(function($query) use ($keyword) {
@@ -157,5 +159,55 @@ class BloggerController extends BaseController
         return $this->success($list);
     }
 
+    //按类型答主列表
+    public function listsByType(Request $request){
+        //按类型搜
+        $type_id = $request->type_id ?? 0;
+        $request_id = $request->request_id ?? time(); //防止第二次搜索相同的词
+
+        //缓存,防重复
+        $user_id = $request->uid;
+        $user_id_redis = 'Blogger:listsByType:'.$user_id.':'.$type_id.':'.$request_id;
+        $redis_ids = json_decode(Redis::get($user_id_redis),true);
+
+        //分页
+        $page = $request->page ?? 1;
+        $limit = $request->limit ?? 10;
+        $offset = ($page - 1) * $limit;
+
+        //
+        $list = DB::table('blogger')
+            ->leftJoin('wx_user','wx_user.id','=','blogger.user_id')
+            ->select('blogger.*','wx_user.user_avatar','wx_user.user_name')
+            ->where('blogger.status',1);
+
+        if($type_id){
+            $list = $list->whereRaw('FIND_IN_SET(?,type_ids)',[$type_id]);
+        }
+
+        if(!empty($redis_ids)){
+            $list = $list->whereNotIn('blogger.user_id',$redis_ids);
+        }
+
+        $list = $list->inRandomOrder()->offset(0)->limit($limit);
+        $list = $list->get();
+        $list = json_decode(json_encode($list),true);
+
+        // 追加一个防重复
+        if($list){
+            $list_ids = array_column($list,'user_id');
+            if($redis_ids){
+                $redis_ids = array_merge($redis_ids,$list_ids);
+            }else{
+                $redis_ids = $list_ids;
+            }
+            $redis_ids = array_unique($redis_ids);
+            Redis::set($user_id_redis,json_encode($redis_ids),1800);
+        }
+
+        return $this->success($list);
+    }
+
+
 
 }

+ 2 - 0
app/Routes/api/v1.php

@@ -55,6 +55,8 @@ Route::group(
     Route::post('/blogger/setprice', [BloggerController::class, 'setPrice'])->middleware('auth.userstate');
     //答主设置咨询状态
     Route::post('/blogger/setaskstatus', [BloggerController::class, 'setAskStatus'])->middleware('auth.userstate');
+    //按分类搜索答主
+    Route::post('/blogger/listsByType', [BloggerController::class, 'listsByType'])->middleware('auth.userstate');
 
     //咨询,提出新问题
     Route::post('/ask/createnew', [AskController::class, 'createNew'])->middleware('auth.userstate');