PostRepositories.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: edz
  5. * Date: 2019-06-10
  6. * Time: 17:53
  7. */
  8. namespace App\Repositories;
  9. use App\Models\Behavior;
  10. use App\Models\Post;
  11. use App\Models\PostCollect;
  12. use App\Models\PostComment;
  13. use App\Models\PostData;
  14. use App\Models\PostLike;
  15. use Illuminate\Support\Facades\Log;
  16. use Illuminate\Support\Facades\Redis;
  17. class PostRepositories
  18. {
  19. public function __construct(Post $post,PostComment $postComment)
  20. {
  21. $this->post = $post;
  22. $this->postComment = $postComment;
  23. }
  24. /**
  25. * 推荐内容列表
  26. */
  27. public function suggestPost($request)
  28. {
  29. $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
  30. $where = [];
  31. $where[] = ['is_hide', 0];
  32. if(isset($request['content'])){
  33. $where[] = ['content', 'like', "%{$request['content']}%"];
  34. }
  35. if(isset($request['is_suggest'])){
  36. $where[] = ['is_suggest', $request['is_suggest']];
  37. }
  38. if(isset($request['type'])){
  39. $where[] = ['type', $request['type']];
  40. }
  41. if(isset($request['uid'])){
  42. $where[] = ['uid', $request['uid']];
  43. }
  44. return $this->post
  45. ->join('post_data', 'post_data.post_id', '=', 'post.id')
  46. ->select('post.*')
  47. ->where($where)
  48. ->where(function($query) use ($request){
  49. if(isset($request['keyword'])){
  50. $query->where('uid', '=', $request['keyword'])
  51. ->orWhere('username', 'like', "%{$request['keyword']}%")
  52. ->orWhere('mobile', 'like', "%{$request['keyword']}%");
  53. }
  54. })
  55. ->where(function($query) use ($request){
  56. if(isset($request['created_at'])){
  57. $time = explode('_', $request['created_at']);
  58. $query->whereBetween('post.created_at', $time);
  59. }
  60. })
  61. ->where(function ($query) use ($request){
  62. if(isset($request['category_ids']) || isset($request['topic_ids'])){
  63. $ids = [];
  64. if (isset($request['category_ids'])) {
  65. $categoryIds = explode('_', $request['category_ids']);
  66. $ids = $this->categoryTopic->whereIn('category_id', $categoryIds)->pluck('topic_id')->toArray();
  67. }
  68. if (isset($request['topic_ids'])) {
  69. $ids = array_merge($ids, explode('_', $request['topic_ids']));
  70. }
  71. foreach ($ids as $key=>$id) {
  72. if ($key==0) {
  73. $query = $query->whereRaw('FIND_IN_SET('.$id.',topic_ids)');
  74. } else {
  75. $query = $query->orWhereRaw('FIND_IN_SET('.$id.',topic_ids)');
  76. }
  77. }
  78. }
  79. })
  80. ->orderBy('weight','desc')
  81. ->paginate($perPage);
  82. }
  83. /**
  84. * 评论列表
  85. */
  86. public function commentList($request)
  87. {
  88. $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
  89. return $this->postComment
  90. ->where('post_id', $request['post_id'])
  91. ->where('parent_id', 0)
  92. ->orderBy('id','desc')
  93. ->paginate($perPage);
  94. }
  95. /**
  96. * 回复列表
  97. */
  98. public function replyList($request)
  99. {
  100. $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
  101. return $this->postComment
  102. ->where('parent_id', $request['id'])
  103. ->orderBy('id','desc')
  104. ->paginate($perPage);
  105. }
  106. /**
  107. * 评论详情
  108. */
  109. public function commentDetail($request)
  110. {
  111. return $this->postComment
  112. ->where('id', $request['id'])
  113. ->first();
  114. }
  115. /**
  116. * 更新帖子统计数量
  117. * @param $request
  118. * @return mixed
  119. */
  120. public function updatePostData($request)
  121. {
  122. $postId = $request['post_id'];
  123. $post = PostData::where('post_id', $postId)->first();
  124. if (isset($request['behavior_flag']) && $request['behavior_flag'] == 'read') {
  125. $post->pv += 1;
  126. $post->pv_real += 1;
  127. } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'unlike') {
  128. $post->dislike += 1;
  129. } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'like') {
  130. if($request['behavior_value']){
  131. $post->praise_count += 1;
  132. $post->praise_real_count += 1;
  133. PostLike::create(['uid'=>$request['target_id'],'post_id'=>$request['post_id']]);
  134. }else{
  135. $post->praise_count -= 1;
  136. $post->praise_real_count -= 1;
  137. PostLike::where(['uid'=>$request['target_id'],'post_id'=>$request['post_id']])->delete();
  138. }
  139. } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'forward') {
  140. $post->share_count += 1;
  141. $post->share_real_count += 1;
  142. } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'comment') {
  143. $post->comment_count += 1;
  144. } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'collect') {
  145. if($request['behavior_value']) {
  146. $post->collect_count += 1;
  147. $post->collect_real_count += 1;
  148. PostCollect::create(['uid'=>$request['target_id'],'post_id'=>$request['post_id']]);
  149. }else{
  150. $post->collect_count -= 1;
  151. $post->collect_real_count -= 1;
  152. PostCollect::where(['uid'=>$request['target_id'],'post_id'=>$request['post_id']])->delete();
  153. }
  154. }
  155. return $post->save();
  156. }
  157. /**
  158. * 收集所有有操作的帖子,存入redis
  159. * 供后续计算帖子权重
  160. * @param $id
  161. */
  162. public function collectPostId($id)
  163. {
  164. $key = "community_calc_post_score";
  165. Redis::sadd($key,$id);
  166. }
  167. }