123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- <?php
- /**
- * Created by PhpStorm.
- * User: edz
- * Date: 2019-06-10
- * Time: 17:53
- */
- namespace App\Repositories;
- use App\Models\Behavior;
- use App\Models\Post;
- use App\Models\PostCollect;
- use App\Models\PostData;
- use App\Models\PostLike;
- use Illuminate\Support\Facades\Log;
- use Illuminate\Support\Facades\Redis;
- class PostRepositories
- {
- public function __construct(Post $post)
- {
- $this->post = $post;
- }
- /**
- * 推荐内容列表
- */
- public function suggestPost($request)
- {
- $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
- $where = [];
- if(isset($request['content'])){
- $where[] = ['content', 'like', "%{$request['content']}%"];
- }
- if(isset($request['is_suggest'])){
- $where[] = ['is_suggest', $request['is_suggest']];
- }
- if(isset($request['type'])){
- $where[] = ['type', $request['type']];
- }
- if(isset($request['uid'])){
- $where[] = ['uid', $request['uid']];
- }
- $sort = 'post.id';
- if(isset($request['sort']) && in_array($request['sort'], ['praise_count', 'share_count', 'pv', 'comment_count', 'create_bean'])){
- $sort = $request['sort'];
- }
- return $this->post
- ->join('post_data', 'post_data.post_id', '=', 'post.id')
- ->select('post.*')
- ->where($where)
- ->where(function($query) use ($request){
- if(isset($request['keyword'])){
- $query->where('uid', '=', $request['keyword'])
- ->orWhere('username', 'like', "%{$request['keyword']}%")
- ->orWhere('mobile', 'like', "%{$request['keyword']}%");
- }
- })
- ->where(function($query) use ($request){
- if(isset($request['created_at'])){
- $time = explode('_', $request['created_at']);
- $query->whereBetween('post.created_at', $time);
- }
- })
- ->where(function ($query) use ($request){
- if(isset($request['category_ids']) || isset($request['topic_ids'])){
- $ids = [];
- if (isset($request['category_ids'])) {
- $categoryIds = explode('_', $request['category_ids']);
- $ids = $this->categoryTopic->whereIn('category_id', $categoryIds)->pluck('topic_id')->toArray();
- }
- if (isset($request['topic_ids'])) {
- $ids = array_merge($ids, explode('_', $request['topic_ids']));
- }
- foreach ($ids as $key=>$id) {
- if ($key==0) {
- $query = $query->whereRaw('FIND_IN_SET('.$id.',topic_ids)');
- } else {
- $query = $query->orWhereRaw('FIND_IN_SET('.$id.',topic_ids)');
- }
- }
- }
- })
- ->orderBy($sort,'desc')
- ->paginate($perPage);
- }
- /**
- * 更新帖子统计数量
- * @param $request
- * @return mixed
- */
- public function updatePostData($request)
- {
- $postId = $request['post_id'];
- $post = PostData::where('post_id', $postId)->first();
- if (isset($request['behavior_flag']) && $request['behavior_flag'] == 'read') {
- $post->pv += 1;
- $post->pv_real += 1;
- } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'unlike') {
- $post->dislike += 1;
- } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'like') {
- if($request['behavior_value']){
- $post->praise_count += 1;
- $post->praise_real_count += 1;
- PostLike::create(['uid'=>$request['target_id'],'post_id'=>$request['post_id']]);
- }else{
- $post->praise_count -= 1;
- $post->praise_real_count -= 1;
- PostLike::where(['uid'=>$request['target_id'],'post_id'=>$request['post_id']])->delete();
- }
- } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'forward') {
- $post->share_count += 1;
- $post->share_real_count += 1;
- } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'comment') {
- $post->comment_count += 1;
- } elseif (isset($request['behavior_flag']) && $request['behavior_flag'] == 'collect') {
- if($request['behavior_value']) {
- $post->collect_count += 1;
- $post->collect_real_count += 1;
- PostCollect::create(['uid'=>$request['target_id'],'post_id'=>$request['post_id']]);
- }else{
- $post->collect_count -= 1;
- $post->collect_real_count -= 1;
- PostCollect::where(['uid'=>$request['target_id'],'post_id'=>$request['post_id']])->delete();
- }
- }
- return $post->save();
- }
- /**
- * 收集所有有操作的帖子,存入redis
- * 供后续计算帖子权重
- * @param $id
- */
- public function collectPostId($id)
- {
- $key = "community_calc_post_score";
- Redis::sadd($key,$id);
- }
- }
|