ArticleController.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <?php
  2. namespace App\Http\Controllers\Wetalk;
  3. use App\Models\Wetalk\Article;
  4. use App\Models\Wetalk\Like;
  5. use App\Models\Wetalk\Read;
  6. use App\Models\Wetalk\Share;
  7. use App\Models\Wetalk\Comment;
  8. use Carbon\Carbon;
  9. use EasyWeChat\Factory;
  10. use Illuminate\Http\Request;
  11. use App\Http\Controllers\Controller;
  12. use Illuminate\Support\Facades\DB;
  13. use Illuminate\Support\Facades\Auth;
  14. use Illuminate\Support\Facades\Redis;
  15. use Illuminate\Support\Facades\Storage;
  16. class ArticleController extends Controller
  17. {
  18. //首页展示数据
  19. public function getDataInfo(Request $request)
  20. {
  21. $data['count']=Read::count();
  22. return $this->success($data);
  23. }
  24. //获取列表
  25. public function list(Request $request): \Illuminate\Http\JsonResponse
  26. {
  27. $page_index=$request->input('page_index');
  28. $page_size=$request->input('page_size');
  29. $sort=$request->input('sort');
  30. $num=$page_size*($page_index-1);
  31. $count=Article::query()->where('shelves',1)->count();
  32. $list=Article::query()->where('shelves',1)
  33. ->select('title','stage','audio','perface','created_at','id','duration','size','shelves','read','like','share','timing_shelves','volume')
  34. ->orderBy('created_at',$sort)->skip($num)->take($page_size)->get();
  35. return $this->success_list($list,'',$count);
  36. }
  37. //获取单个信息详情
  38. public function detail(Request $request)
  39. {
  40. $id=$request->input('id');
  41. $user=Auth::user();
  42. $res=null;
  43. if(!empty($user)){
  44. $res = Like::where('user_id',$user->id)->where('article_id',$id)->exists();
  45. }
  46. $info['article']=Article::query()->where('id',$id)->first();
  47. if($res){
  48. $info['user']['is_like'] = 1;
  49. }else{
  50. $info['user']['is_like'] = 0;
  51. }
  52. if(!empty($user)){
  53. $where=function($query)use($user){
  54. $query->where('user_id',$user->id)->orWhere(function($q)use($user){
  55. $q->where('user_id','<>',$user->id)->where('is_audit',1);
  56. });
  57. };
  58. }else{
  59. $where=function($query){
  60. $query->where('is_audit',1);
  61. };
  62. }
  63. $info['comment']=Comment::where('article_id',$id)->where($where)->with(['user:id,nickname,headimgurl'])->get();
  64. return $this->success($info);
  65. }
  66. //点赞
  67. public function like(Request $request): \Illuminate\Http\JsonResponse
  68. {
  69. $user_id=Auth::user()->id;
  70. $article_id=$request->input('article_id');
  71. // $res=Like::create([
  72. // 'user_id'=>$user_id,
  73. // 'article_id'=>$article_id
  74. // ]);
  75. // $res=Redis::sismember('like:article', $article_id.':'.$user_id);
  76. // if($res){
  77. // Redis::srem('like:article', $article_id.':'.$user_id);
  78. // Redis::decr('article_'.$article_id.'_count');
  79. // Redis::hdel('article_user_like', $article_id.'_'.$user_id);
  80. // }else{
  81. // Redis::sadd('like:article', $article_id.':'.$user_id);
  82. // Redis::incr('article_'.$article_id.'_count');
  83. // Redis::hset('article_user_like', $article_id.'_'.$user_id, Carbon::now());
  84. // }
  85. $res=Like::query()->where('user_id',$user_id)->where('article_id',$article_id)->first();
  86. try{
  87. DB::transaction(function()use($res,$user_id,$article_id) {
  88. if ($res) {
  89. Article::query()->where('id', $article_id)->decrement('like');
  90. Like::query()->where('user_id', $user_id)->where('article_id', $article_id)->delete();
  91. } else {
  92. Article::query()->where('id', $article_id)->increment('like');
  93. Like::query()->create([
  94. 'user_id' => $user_id,
  95. 'article_id' => $article_id,
  96. ]);
  97. }
  98. },5);
  99. return $this->success([]);
  100. }catch(\Exception $e){
  101. return $this->error();
  102. }
  103. // Redis::set('name','wetalk');
  104. // return Redis::get('name');
  105. }
  106. //浏览
  107. public function read(Request $request): \Illuminate\Http\JsonResponse
  108. {
  109. $user_id = Auth::user()->id;
  110. $article_id = $request->input('article_id');
  111. try{
  112. DB::transaction(function()use($user_id,$article_id){
  113. Read::create([
  114. 'user_id' => $user_id,
  115. 'article_id' => $article_id
  116. ]);
  117. Article::where('id',$article_id)->increment('read');
  118. },5);
  119. return $this->success([]);
  120. }catch(\Exception $e){
  121. return $this->error();
  122. }
  123. }
  124. //分享
  125. public function share(Request $request): \Illuminate\Http\JsonResponse
  126. {
  127. $user_id=Auth::user()->id;
  128. $article_id=$request->input('article_id');
  129. try{
  130. DB::transaction(function()use($user_id,$article_id){
  131. Share::create([
  132. 'user_id'=>$user_id,
  133. 'article_id'=>$article_id
  134. ]);
  135. Article::where('id',$article_id)->increment('share');
  136. },5);
  137. return $this->success([]);
  138. }catch(\Exception $e){
  139. return $this->error();
  140. }
  141. }
  142. //提交评论
  143. public function addComment(Request $request)
  144. {
  145. $user_id=Auth::user()->id;
  146. $content=$request->input('content');
  147. if($request->input('article_id')=='wetalk'){
  148. $article_id=0;
  149. }else{
  150. $article_id=$request->input('article_id');
  151. }
  152. $res=Comment::create([
  153. 'user_id'=>$user_id,
  154. 'article_id'=>$article_id,
  155. 'content'=>$content,
  156. 'is_audit'=>0
  157. ]);
  158. if($res){
  159. return $this->success([]);
  160. }else{
  161. return $this->error();
  162. }
  163. }
  164. //获取微聊所有评论
  165. public function getAllWetalkComment(Request $request)
  166. {
  167. $page_index=$request->input('page_index');
  168. $page_size=$request->input('page_size');
  169. $num=$page_size*($page_index-1);
  170. $where=function($query){
  171. $query->where('user_id',Auth::user()->id)->orWhere(function($q){
  172. $q->where('user_id','<>',Auth::user()->id)->where('is_audit',1);
  173. });
  174. };
  175. $count=Comment::where('article_id',0)->where($where)->count();
  176. $list=Comment::where('article_id',0)->where($where)->with(['user:id,nickname,headimgurl'])->skip($num)->take($page_size)->get();
  177. return $this->success_list($list,'',$count);
  178. }
  179. //获取微聊所有点赞
  180. public function getArticleLike(Request $request)
  181. {
  182. $page_index=$request->input('page_index');
  183. $page_size=$request->input('page_size');
  184. $sort=$request->input('sort');
  185. $num=$page_size*($page_index-1);
  186. $user_id=$request->input('user_id')??Auth::user()->id;
  187. $count=Like::where('user_id',$user_id)->count();
  188. $list=Like::where('user_id',$user_id)->has('article')->with(['user:id,nickname,headimgurl','article'=>function($query){
  189. $query->where('id','>',0);
  190. }])->orderBy('created_at',$sort)->skip($num)->take($page_size)->get();
  191. return $this->success_list($list,'',$count);
  192. }
  193. //获取微聊首页三数据
  194. public function getWetalkData(Request $request)
  195. {
  196. $data['like']=Like::where('user_id',Auth::user()->id)->count();
  197. $where=function($query){
  198. $query->where('user_id',Auth::user()->id)->orWhere(function($q){
  199. $q->where('user_id','<>',Auth::user()->id)->where('is_audit',1);
  200. });
  201. };
  202. $data['comment']=Comment::where('article_id',0)->where($where)->count();
  203. $data['share']=Share::where('article_id',0)->count();
  204. return $this->success($data);
  205. }
  206. //获取微信授权
  207. public function getSignPackage()
  208. {
  209. $config = config('wechat.official_account.daweiboshi');
  210. $app = Factory::officialAccount($config);
  211. $url='http://api.app.jiuweiyun.cn/api/gzh';
  212. $app->jssdk->setUrl($url);
  213. $data=$app->jssdk->buildConfig(array('onMenuShareAppMessage','onMenuShareTimeline',
  214. 'openLocation','getLocation','chooseImage',
  215. 'uploadImage', 'downloadImage','scanQRCode',
  216. 'updateAppMessageShareData', 'updateTimelineShareData'), true);
  217. return $this->success($data);
  218. }
  219. }