ArticleController.php 8.5 KB

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