BloggerController.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  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. use App\Wen\Utils\Settings;
  8. class BloggerController extends BaseController
  9. {
  10. //答主获取自己的详情
  11. public function getInfo(Request $request){
  12. $blogger = DB::table('blogger')->where('user_id',$request->uid)->first();
  13. $blogger = json_decode(json_encode($blogger),true);
  14. if(empty($blogger)){
  15. //拼装一个答主数据
  16. $blogger = [
  17. 'id' => 0,
  18. 'user_id' => $request->uid,
  19. 'ask_price' => 0,
  20. 'sit_price' => 0,
  21. 'ask_minute' => 0,
  22. 'ask_status' => 0,
  23. 'status' => 0,
  24. 'order_number' => 0,
  25. 'order_eva_score' => 0,
  26. 'type_ids' => '',
  27. 'title' => '',
  28. 'info' => '',
  29. 'created_at' => '',
  30. 'updated_at' => '',
  31. ];
  32. }
  33. $userinfo = DB::table('wx_user')->select('user_avatar','user_name')->where('id',$request->uid)->first();
  34. $blogger['user_avatar'] = $userinfo->user_avatar;
  35. $blogger['user_name'] = $userinfo->user_name;
  36. $blogger['clause_url'] = Settings::get('askorder_blogger_clause_url'); //答主认证条款链接
  37. $blogger['blogger_info_audit_image'] = Settings::get('blogger_info_audit_image'); //答主招募图片
  38. $blogger['blogger_info_audit_clause_url'] = Settings::get('blogger_info_audit_clause_url'); //答主招募图片的链接
  39. return $this->success($blogger);
  40. }
  41. //用户获得答主的详情
  42. public function info(Request $request){
  43. $blogger = DB::table('blogger')
  44. ->leftJoin('wx_user','wx_user.id','=','blogger.user_id')
  45. ->select('blogger.*','wx_user.user_avatar','wx_user.user_name')
  46. ->where('blogger.user_id',$request->user_id)->first();
  47. if(empty($blogger)){
  48. return $this->fail(200016,[],'没有找到该答主');
  49. }
  50. /*if($blogger->status != 1){
  51. return $this->fail(200016,[],'您还没有认证答主');
  52. }*/
  53. return $this->success($blogger);
  54. }
  55. //答主设置收费
  56. public function setPrice(BloggerRequest $request){
  57. // 验证
  58. $request->validate('setPrice');
  59. if($request->ask_price <= 0){
  60. return $this->fail(200016,[],'咨询价格最小0元');
  61. }
  62. if($request->sit_price <= 0){
  63. return $this->fail(200016,[],'旁听价格最小0元');
  64. }
  65. if($request->ask_minute <= 0){
  66. return $this->fail(200016,[],'咨询时间最小1分钟');
  67. }
  68. $blogger = DB::table('blogger')->where('user_id',$request->uid)->first();
  69. if(empty($blogger)){
  70. return $this->fail(200016,[],'您还没有成为答主');
  71. }
  72. /*if($blogger->status != 1){
  73. return $this->fail(200016,[],'您还没有认证答主');
  74. }*/
  75. DB::table('blogger')->where('user_id',$request->uid)->update([
  76. 'ask_price' => $request->ask_price,
  77. 'sit_price' => $request->sit_price,
  78. 'ask_minute' => $request->ask_minute,
  79. ]);
  80. //两个需要审核的
  81. $user_temp = [];
  82. if($blogger->title != $request->title){
  83. $user_temp['blogger_title'] = $request->title;
  84. }
  85. if($blogger->info != $request->info){
  86. $user_temp['blogger_info'] = $request->info;
  87. }
  88. if(!empty($user_temp)){
  89. $check = DB::table('wx_user_temp')->where('user_id','=',$request->uid)
  90. ->where(function($query) {
  91. $query->orWhere('blogger_title', '<>', '')
  92. ->orWhere('blogger_info', '<>', '');
  93. })
  94. ->where('user_state','<>',1)
  95. ->where('deleted_at',null)
  96. ->orderBy('id','desc')->first();
  97. if($check){
  98. DB::table('wx_user_temp')->where('id',$check->id)->update($user_temp);
  99. }else{
  100. $user_temp['user_id'] = $request->uid;
  101. DB::table('wx_user_temp')->insertGetId($user_temp);
  102. }
  103. return $this->success('',200,'提交完成,资料进入审核中');
  104. }
  105. return $this->success();
  106. }
  107. //答主设置咨询状态
  108. public function setAskStatus(BloggerRequest $request){
  109. $blogger = DB::table('blogger')->where('user_id',$request->uid)->first();
  110. if(empty($blogger)){
  111. return $this->fail(200016,[],'您还没有成为答主');
  112. }
  113. /*if($blogger->status != 1){
  114. return $this->fail(200016,[],'您还没有认证答主');
  115. }*/
  116. DB::table('blogger')->where('user_id',$request->uid)->update([
  117. 'ask_status' => $request->ask_status,
  118. ]);
  119. return $this->success();
  120. }
  121. //答主所属类型列表
  122. public function typeList(Request $request){
  123. $list = DB::table('blogger_type')->orderBy('sort', 'desc')->orderBy('id', 'desc')->get();
  124. return $this->success($list);
  125. }
  126. //答主列表。 推荐答主列表(随机)、搜索答主列表(排序)、按类型答主列表
  127. public function lists(Request $request){
  128. //分页
  129. $page = $request->page ?? 1;
  130. $limit = $request->limit ?? 10;
  131. $offset = ($page - 1) * $limit;
  132. //按类型搜
  133. // $type_id = $request->type_id ?? 0;
  134. //搜索
  135. $keyword = _empty_default_($request->keyword,'');
  136. //
  137. $list = DB::table('blogger')
  138. ->leftJoin('wx_user','wx_user.id','=','blogger.user_id')
  139. ->select('blogger.*','wx_user.user_avatar','wx_user.user_name')
  140. ->where('blogger.status',1)
  141. ->inRandomOrder()->offset($offset)->limit($limit);
  142. /* if($type_id){
  143. $list = $list->whereRaw('FIND_IN_SET(?,type_ids)',[$type_id]);
  144. }*/
  145. if($keyword){
  146. $list = $list->where(function($query) use ($keyword) {
  147. $query->orWhere('wx_user.user_name','like','%'.$keyword.'%')
  148. ->orWhere('blogger.info' ,'like','%'.$keyword.'%');
  149. })->reorder('blogger.user_id','desc');
  150. }
  151. $list = $list->get();
  152. return $this->success($list);
  153. }
  154. //按类型答主列表
  155. public function listsByType(Request $request){
  156. //按类型搜
  157. $type_id = $request->type_id ?? 0;
  158. $request_id = $request->request_id ?? time(); //防止第二次搜索相同的词
  159. //缓存,防重复
  160. $user_id = $request->uid;
  161. $user_id_redis = 'Blogger:listsByType:'.$user_id.':'.$type_id.':'.$request_id;
  162. $redis_ids = json_decode(Redis::get($user_id_redis),true);
  163. //分页
  164. $page = $request->page ?? 1;
  165. $limit = $request->limit ?? 10;
  166. $offset = ($page - 1) * $limit;
  167. //
  168. $list = DB::table('blogger')
  169. ->leftJoin('wx_user','wx_user.id','=','blogger.user_id')
  170. ->select('blogger.*','wx_user.user_avatar','wx_user.user_name')
  171. ->where('blogger.status',1);
  172. if($type_id){
  173. $list = $list->whereRaw('FIND_IN_SET(?,type_ids)',[$type_id]);
  174. }
  175. if(!empty($redis_ids)){
  176. $list = $list->whereNotIn('blogger.user_id',$redis_ids);
  177. }
  178. $list = $list->inRandomOrder()->offset(0)->limit($limit);
  179. $list = $list->get();
  180. $list = json_decode(json_encode($list),true);
  181. // 追加一个防重复
  182. if($list){
  183. $list_ids = array_column($list,'user_id');
  184. if($redis_ids){
  185. $redis_ids = array_merge($redis_ids,$list_ids);
  186. }else{
  187. $redis_ids = $list_ids;
  188. }
  189. $redis_ids = array_unique($redis_ids);
  190. Redis::setex($user_id_redis,1800,json_encode($redis_ids));
  191. }
  192. return $this->success($list);
  193. }
  194. }