PostRepositories.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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\PostData;
  13. use App\Models\PostLike;
  14. use Illuminate\Support\Facades\Log;
  15. use Illuminate\Support\Facades\Redis;
  16. class PostRepositories
  17. {
  18. public function __construct(Post $post)
  19. {
  20. $this->post = $post;
  21. }
  22. /**
  23. * 推荐内容列表
  24. */
  25. public function suggestPost($request)
  26. {
  27. $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
  28. $where = [];
  29. $where[] = ['is_hide', 0];
  30. if(isset($request['content'])){
  31. $where[] = ['content', 'like', "%{$request['content']}%"];
  32. }
  33. if(isset($request['is_suggest'])){
  34. $where[] = ['is_suggest', $request['is_suggest']];
  35. }
  36. if(isset($request['type'])){
  37. $where[] = ['type', $request['type']];
  38. }
  39. if(isset($request['uid'])){
  40. $where[] = ['uid', $request['uid']];
  41. }
  42. return $this->post
  43. ->join('post_data', 'post_data.post_id', '=', 'post.id')
  44. ->select('post.*')
  45. ->where($where)
  46. ->where(function($query) use ($request){
  47. if(isset($request['keyword'])){
  48. $query->where('uid', '=', $request['keyword'])
  49. ->orWhere('username', 'like', "%{$request['keyword']}%")
  50. ->orWhere('mobile', 'like', "%{$request['keyword']}%");
  51. }
  52. })
  53. ->where(function($query) use ($request){
  54. if(isset($request['created_at'])){
  55. $time = explode('_', $request['created_at']);
  56. $query->whereBetween('post.created_at', $time);
  57. }
  58. })
  59. ->where(function ($query) use ($request){
  60. if(isset($request['category_ids']) || isset($request['topic_ids'])){
  61. $ids = [];
  62. if (isset($request['category_ids'])) {
  63. $categoryIds = explode('_', $request['category_ids']);
  64. $ids = $this->categoryTopic->whereIn('category_id', $categoryIds)->pluck('topic_id')->toArray();
  65. }
  66. if (isset($request['topic_ids'])) {
  67. $ids = array_merge($ids, explode('_', $request['topic_ids']));
  68. }
  69. foreach ($ids as $key=>$id) {
  70. if ($key==0) {
  71. $query = $query->whereRaw('FIND_IN_SET('.$id.',topic_ids)');
  72. } else {
  73. $query = $query->orWhereRaw('FIND_IN_SET('.$id.',topic_ids)');
  74. }
  75. }
  76. }
  77. })
  78. ->orderBy('weight','desc')
  79. ->paginate($perPage);
  80. }
  81. /**
  82. * 更新帖子统计数量
  83. * @param $request
  84. * @return mixed
  85. */
  86. public function updatePostData($request)
  87. {
  88. $postId = $request['post_id'];
  89. $post = PostData::where('post_id', $postId)->first();
  90. if (isset($request['behavior_flag']) && $request['behavior_flag'] == 'read') {
  91. $post->pv += 1;
  92. $post->pv_real += 1;
  93. } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'unlike') {
  94. $post->dislike += 1;
  95. } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'like') {
  96. if($request['behavior_value']){
  97. $post->praise_count += 1;
  98. $post->praise_real_count += 1;
  99. PostLike::create(['uid'=>$request['target_id'],'post_id'=>$request['post_id']]);
  100. }else{
  101. $post->praise_count -= 1;
  102. $post->praise_real_count -= 1;
  103. PostLike::where(['uid'=>$request['target_id'],'post_id'=>$request['post_id']])->delete();
  104. }
  105. } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'forward') {
  106. $post->share_count += 1;
  107. $post->share_real_count += 1;
  108. } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'comment') {
  109. $post->comment_count += 1;
  110. } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'collect') {
  111. if($request['behavior_value']) {
  112. $post->collect_count += 1;
  113. $post->collect_real_count += 1;
  114. PostCollect::create(['uid'=>$request['target_id'],'post_id'=>$request['post_id']]);
  115. }else{
  116. $post->collect_count -= 1;
  117. $post->collect_real_count -= 1;
  118. PostCollect::where(['uid'=>$request['target_id'],'post_id'=>$request['post_id']])->delete();
  119. }
  120. }
  121. return $post->save();
  122. }
  123. /**
  124. * 收集所有有操作的帖子,存入redis
  125. * 供后续计算帖子权重
  126. * @param $id
  127. */
  128. public function collectPostId($id)
  129. {
  130. $key = "community_calc_post_score";
  131. Redis::sadd($key,$id);
  132. }
  133. }