123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- <?php
- namespace App\Http\Controllers\Api;
- 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
- {
- //答主获取自己的详情
- public function getInfo(Request $request){
- $blogger = DB::table('blogger')->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' => '',
- '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;
- 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,
- ]);
- 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);
- }
- }
|