BloggerController.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Requests\Api\PostsRequests\BloggerRequest;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\DB;
  6. use Illuminate\Support\Facades\Redis;
  7. class BloggerController extends BaseController
  8. {
  9. //答主获取自己的详情
  10. public function getInfo(Request $request){
  11. $blogger = DB::table('blogger')->where('user_id',$request->uid)->first();
  12. $blogger = json_decode(json_encode($blogger),true);
  13. if(empty($blogger)){
  14. //拼装一个答主数据
  15. $blogger = [
  16. 'id' => 0,
  17. 'user_id' => $request->uid,
  18. 'ask_price' => 0,
  19. 'sit_price' => 0,
  20. 'ask_minute' => 0,
  21. 'ask_status' => 0,
  22. 'status' => 0,
  23. 'order_number' => 0,
  24. 'order_eva_score' => 0,
  25. 'type_ids' => '',
  26. 'info' => '',
  27. 'created_at' => '',
  28. 'updated_at' => '',
  29. ];
  30. }
  31. $userinfo = DB::table('wx_user')->select('user_avatar','user_name')->where('id',$request->uid)->first();
  32. $blogger['user_avatar'] = $userinfo->user_avatar;
  33. $blogger['user_name'] = $userinfo->user_name;
  34. return $this->success($blogger);
  35. }
  36. //用户获得答主的详情
  37. public function info(Request $request){
  38. $blogger = DB::table('blogger')
  39. ->leftJoin('wx_user','wx_user.id','=','blogger.user_id')
  40. ->select('blogger.*','wx_user.user_avatar','wx_user.user_name')
  41. ->where('blogger.user_id',$request->user_id)->first();
  42. if(empty($blogger)){
  43. return $this->fail(200016,[],'没有找到该答主');
  44. }
  45. /*if($blogger->status != 1){
  46. return $this->fail(200016,[],'您还没有认证答主');
  47. }*/
  48. return $this->success($blogger);
  49. }
  50. //答主设置收费
  51. public function setPrice(BloggerRequest $request){
  52. // 验证
  53. $request->validate('setPrice');
  54. if($request->ask_price <= 0){
  55. return $this->fail(200016,[],'咨询价格最小0元');
  56. }
  57. if($request->sit_price <= 0){
  58. return $this->fail(200016,[],'旁听价格最小0元');
  59. }
  60. if($request->ask_minute <= 0){
  61. return $this->fail(200016,[],'咨询时间最小1分钟');
  62. }
  63. $blogger = DB::table('blogger')->where('user_id',$request->uid)->first();
  64. if(empty($blogger)){
  65. return $this->fail(200016,[],'您还没有成为答主');
  66. }
  67. /*if($blogger->status != 1){
  68. return $this->fail(200016,[],'您还没有认证答主');
  69. }*/
  70. DB::table('blogger')->where('user_id',$request->uid)->update([
  71. 'ask_price' => $request->ask_price,
  72. 'sit_price' => $request->sit_price,
  73. 'ask_minute' => $request->ask_minute,
  74. ]);
  75. return $this->success();
  76. }
  77. //答主设置咨询状态
  78. public function setAskStatus(BloggerRequest $request){
  79. $blogger = DB::table('blogger')->where('user_id',$request->uid)->first();
  80. if(empty($blogger)){
  81. return $this->fail(200016,[],'您还没有成为答主');
  82. }
  83. /*if($blogger->status != 1){
  84. return $this->fail(200016,[],'您还没有认证答主');
  85. }*/
  86. DB::table('blogger')->where('user_id',$request->uid)->update([
  87. 'ask_status' => $request->ask_status,
  88. ]);
  89. return $this->success();
  90. }
  91. //答主所属类型列表
  92. public function typeList(Request $request){
  93. $list = DB::table('blogger_type')->orderBy('sort', 'desc')->orderBy('id', 'desc')->get();
  94. return $this->success($list);
  95. }
  96. //答主列表。 推荐答主列表(随机)、搜索答主列表(排序)、按类型答主列表
  97. public function lists(Request $request){
  98. //分页
  99. $page = $request->page ?? 1;
  100. $limit = $request->limit ?? 10;
  101. $offset = ($page - 1) * $limit;
  102. //按类型搜
  103. // $type_id = $request->type_id ?? 0;
  104. //搜索
  105. $keyword = _empty_default_($request->keyword,'');
  106. //
  107. $list = DB::table('blogger')
  108. ->leftJoin('wx_user','wx_user.id','=','blogger.user_id')
  109. ->select('blogger.*','wx_user.user_avatar','wx_user.user_name')
  110. ->where('blogger.status',1)
  111. ->inRandomOrder()->offset($offset)->limit($limit);
  112. /* if($type_id){
  113. $list = $list->whereRaw('FIND_IN_SET(?,type_ids)',[$type_id]);
  114. }*/
  115. if($keyword){
  116. $list = $list->where(function($query) use ($keyword) {
  117. $query->orWhere('wx_user.user_name','like','%'.$keyword.'%')
  118. ->orWhere('blogger.info' ,'like','%'.$keyword.'%');
  119. })->reorder('blogger.user_id','desc');
  120. }
  121. $list = $list->get();
  122. return $this->success($list);
  123. }
  124. //按类型答主列表
  125. public function listsByType(Request $request){
  126. //按类型搜
  127. $type_id = $request->type_id ?? 0;
  128. $request_id = $request->request_id ?? time(); //防止第二次搜索相同的词
  129. //缓存,防重复
  130. $user_id = $request->uid;
  131. $user_id_redis = 'Blogger:listsByType:'.$user_id.':'.$type_id.':'.$request_id;
  132. $redis_ids = json_decode(Redis::get($user_id_redis),true);
  133. //分页
  134. $page = $request->page ?? 1;
  135. $limit = $request->limit ?? 10;
  136. $offset = ($page - 1) * $limit;
  137. //
  138. $list = DB::table('blogger')
  139. ->leftJoin('wx_user','wx_user.id','=','blogger.user_id')
  140. ->select('blogger.*','wx_user.user_avatar','wx_user.user_name')
  141. ->where('blogger.status',1);
  142. if($type_id){
  143. $list = $list->whereRaw('FIND_IN_SET(?,type_ids)',[$type_id]);
  144. }
  145. if(!empty($redis_ids)){
  146. $list = $list->whereNotIn('blogger.user_id',$redis_ids);
  147. }
  148. $list = $list->inRandomOrder()->offset(0)->limit($limit);
  149. $list = $list->get();
  150. $list = json_decode(json_encode($list),true);
  151. // 追加一个防重复
  152. if($list){
  153. $list_ids = array_column($list,'user_id');
  154. if($redis_ids){
  155. $redis_ids = array_merge($redis_ids,$list_ids);
  156. }else{
  157. $redis_ids = $list_ids;
  158. }
  159. $redis_ids = array_unique($redis_ids);
  160. Redis::set($user_id_redis,json_encode($redis_ids),1800);
  161. }
  162. return $this->success($list);
  163. }
  164. }