where('user_id',$request->uid)->first(); $blogger = json_decode(json_encode($blogger),true); if(empty($blogger)){ //拼装一个答主数据 $blogger = [ 'id' => 0, 'user_id' => $request->uid, 'ask_price' => 0, 'sit_price' => 0, 'ask_minute' => 0, 'ask_status' => 0, 'status' => 0, 'order_number' => 0, 'order_eva_score' => 0, 'type_ids' => '', 'title' => '', 'info' => '', 'created_at' => '', 'updated_at' => '', ]; } $userinfo = DB::table('wx_user')->select('user_avatar','user_name')->where('id',$request->uid)->first(); $blogger['user_avatar'] = $userinfo->user_avatar; $blogger['user_name'] = $userinfo->user_name; $blogger['clause_url'] = Settings::get('askorder_blogger_clause_url'); //答主认证条款链接 $blogger['blogger_info_audit_image'] = Settings::get('blogger_info_audit_image'); //答主招募图片 $blogger['blogger_info_audit_clause_url'] = Settings::get('blogger_info_audit_clause_url'); //答主招募图片的链接 return $this->success($blogger); } //用户获得答主的详情 public function info(Request $request){ $blogger = DB::table('blogger') ->leftJoin('wx_user','wx_user.id','=','blogger.user_id') ->select('blogger.*','wx_user.user_avatar','wx_user.user_name') ->where('blogger.user_id',$request->user_id)->first(); if(empty($blogger)){ return $this->fail(200016,[],'没有找到该答主'); } /*if($blogger->status != 1){ return $this->fail(200016,[],'您还没有认证答主'); }*/ return $this->success($blogger); } //答主设置收费 public function setPrice(BloggerRequest $request){ // 验证 $request->validate('setPrice'); if($request->ask_price <= 0){ return $this->fail(200016,[],'咨询价格最小0元'); } if($request->sit_price <= 0){ return $this->fail(200016,[],'旁听价格最小0元'); } if($request->ask_minute <= 0){ return $this->fail(200016,[],'咨询时间最小1分钟'); } $blogger = DB::table('blogger')->where('user_id',$request->uid)->first(); if(empty($blogger)){ return $this->fail(200016,[],'您还没有成为答主'); } /*if($blogger->status != 1){ return $this->fail(200016,[],'您还没有认证答主'); }*/ DB::table('blogger')->where('user_id',$request->uid)->update([ 'ask_price' => $request->ask_price, 'sit_price' => $request->sit_price, 'ask_minute' => $request->ask_minute, ]); //两个需要审核的 $user_temp = []; if($blogger->title != $request->title){ $user_temp['blogger_title'] = $request->title; } if($blogger->info != $request->info){ $user_temp['blogger_info'] = $request->info; } if(!empty($user_temp)){ $check = DB::table('wx_user_temp')->where('user_id','=',$request->uid) ->where(function($query) { $query->orWhere('blogger_title', '<>', '') ->orWhere('blogger_info', '<>', ''); }) ->where('deleted_at',null) ->orderBy('id','desc')->first(); if($check){ DB::table('wx_user_temp')->where('id',$check->id)->update($user_temp); }else{ $user_temp['user_id'] = $request->uid; DB::table('wx_user_temp')->insertGetId($user_temp); } return $this->success('提交完成,资料进入审核中'); } return $this->success(); } //答主设置咨询状态 public function setAskStatus(BloggerRequest $request){ $blogger = DB::table('blogger')->where('user_id',$request->uid)->first(); if(empty($blogger)){ return $this->fail(200016,[],'您还没有成为答主'); } /*if($blogger->status != 1){ return $this->fail(200016,[],'您还没有认证答主'); }*/ DB::table('blogger')->where('user_id',$request->uid)->update([ 'ask_status' => $request->ask_status, ]); return $this->success(); } //答主所属类型列表 public function typeList(Request $request){ $list = DB::table('blogger_type')->orderBy('sort', 'desc')->orderBy('id', 'desc')->get(); return $this->success($list); } //答主列表。 推荐答主列表(随机)、搜索答主列表(排序)、按类型答主列表 public function lists(Request $request){ //分页 $page = $request->page ?? 1; $limit = $request->limit ?? 10; $offset = ($page - 1) * $limit; //按类型搜 // $type_id = $request->type_id ?? 0; //搜索 $keyword = _empty_default_($request->keyword,''); // $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) ->inRandomOrder()->offset($offset)->limit($limit); /* if($type_id){ $list = $list->whereRaw('FIND_IN_SET(?,type_ids)',[$type_id]); }*/ if($keyword){ $list = $list->where(function($query) use ($keyword) { $query->orWhere('wx_user.user_name','like','%'.$keyword.'%') ->orWhere('blogger.info' ,'like','%'.$keyword.'%'); })->reorder('blogger.user_id','desc'); } $list = $list->get(); 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::setex($user_id_redis,1800,json_encode($redis_ids)); } return $this->success($list); } }