0, 'msg' => '发布内容和图片不能为空', 'data' => null]; } //维禁判断 if(!empty($content)) { $result = model('Tencent')->content_moderation('Text', $content); if($result['code'] != 1) { return ['code' => 0, 'msg' => '内容存在违禁词!', 'data' => null]; } } $data = []; $data['user_id'] = $uid; $data['images'] = $images; $data['content'] = $content; $data['show_status'] = 1; ///1:显示 0不显示 $data['topic_id'] = $topic_id; $data['room_id'] = $room_id; $data['ip'] = $ip; $data['createtime'] = time(); $reslut = $this->save($data); //获取上一步的id $did = $this->id; if ($reslut) { //$topic_id 有值 if (isset($topic_id)) { $top = explode(',', $topic_id); foreach ($top as $kk){ //插入关联表 $datad = []; $datad['zone_id'] = $did; $datad['topic_id'] = $kk; $res = db::name('user_zone_topic')->insert($datad); } } //判断是不是第一次发布 $count = db::name('user_zone')->where('user_id' , $uid)->count(); if($count <= 1){ //首次发布动态【完成任务】 model('DailyTasks')->tasks_complete($uid,12); } //发布的是几张 图片 $count_images = count(explode(',', $images)); if($count_images == 9){ $first = db::name('vs_user_zone_manjiujiang')->where('user_id' , $uid)->find(); if(!$first){ //发布动态头图上传满九张【完成任务】第一次给奖励 model('DailyTasks')->tasks_complete($uid,13); db::name('vs_user_zone_manjiujiang')->insert(['user_id' => $uid, 'createtime' =>time()]); } } //注册后累计发布M条动态,奖励X金币 【完成任务】 model('DailyTasks')->tasks_complete($uid,16); return ['code' => 1, 'msg' => '发布成功', 'data' => null]; } else { return ['code' => 0, 'msg' => '发布失败', 'data' => null]; } } //获取动态列表 public function get_zone_list($uid, $page, $page_limit,$topic_id = 0) { $page = intval($page); $page_limit = $page_limit < 10 ? $page_limit : 15; $map = []; if($topic_id){ //查询引用话题的动态ID $topic_id = db::name('user_zone_topic')->where('topic_id' , $topic_id)->field('zone_id')->select(); $topic_id = array_map(function($item){ return $item['zone_id']; },$topic_id); $map['a.id'] = ['in',$topic_id]; } $map['a.show_status'] = 1;//1:显示 0不显示 $map['a.is_delete'] = 1;//是否删除 1否2是 $map['b.status'] = ['<>',0];//是否注销 1正常,2禁止登录,0注销 $order_string = 'a.createtime desc'; //排序规则 $list = db::name('user_zone')->alias('a')->join('fa_user b', 'a.user_id = b.id','left') ->where($map) ->field('a.id,a.user_id,a.images,a.content,a.like_num,a.comment_num,a.is_recommend,b.nickname,b.sex,b.avatar,b.user_code,a.room_id,a.ip,a.createtime,a.topic_id') ->order($order_string)->page($page, $page_limit)->select(); foreach ($list as $k => &$v) { //头像装扮 $v['dress'] = model('Decorate')->user_decorate_detail($v['user_id'],1); $v['title'] = []; if(isset($v['topic_id'])){ $top = explode(',', $v['topic_id']); foreach ($top as $kk){ $title = db::name('topic')->where(['id' => $kk])->find(); if(isset($title)){ $title['topic_id'] = $title['id']; $title['count'] = db::name('user_zone_topic')->where('topic_id',$kk)->count(); } $v['title'][] =$title; } } //房间分享到动态 if($v['room_id']){ //查询房主此时是否在聊天室 $room_id = db::name('vs_room_visitor')->where(['user_id' => $v['user_id'], 'is_delete' => 1])->value('room_id'); if ($room_id) { $room = db::name('vs_room')->where(['id' => $room_id, 'room_status' => 1])->field('id,room_name,room_number,room_cover,room_intro,today_hot_value as hot_value,type_id')->find(); $v['room_id'] = $room['id']; $v['room_cover'] = $room['room_cover']; $v['room_type'] = db::name('vs_room_type')->where(['id' => $room['type_id'], 'status' => 1])->field('type_name'); $v['room_intro'] = $room['intro']; $v['hot_value'] = $room['hot_value']; $v['room_number'] = $room['room_number']; $v['room_name'] = $room['room_name']; } else { $v['room_id'] = 0; } //分享出去的URL $v['share_url'] = get_system_config_value('web_site').'/api/Share/zone_detail?id='.$v['id']; }else{ $v['is_like'] = 0; //是否点赞is_room $praise = db::name('user_zone_like')->where(['zone_id' => $v['id'], 'user_id' => $uid,'delete_time' => 0])->find(); if (!empty($praise)) { $v['is_like'] = 1; } $v['room_id'] = 0; //是否在聊天室 //判断是否在聊天室 $room_id = db::name('vs_room_visitor')->where(['user_id' => $v['user_id'], 'is_delete' => 1])->order('id desc')->value('room_id'); if (isset($room_id)) { $v['room_id'] = $room_id; } $v['rewards_num'] = 0;//打赏 $rewards = db::name('user_zone_rewards')->where('zone_id' , $v['id'])->field('sum(gift_price_total) as rewards_num')->find(); if (isset($rewards)) { $v['rewards_num'] = $rewards['rewards_num']??0; } //分享出去的URL $v['share_url'] = get_system_config_value('web_url').'/share/index.html?id='.$v['id']; } } //根据 is_recommend = 1推荐 排序 推荐的拍前面 $top = array_filter((array)$list, function($item) { return $item['is_recommend'] == 1; }); $untop = array_filter((array)$list, function($item) { return $item['is_recommend'] != 1; }); $list = array_merge($top, $untop); return ['code' => 1, 'msg' => '获取成功', 'data' => $list]; } //动态详情 public function get_zone_info($zid,$uid=0) { $map = []; $map['a.id'] = $zid; $map['a.show_status'] = 1;//1:显示 0不显示 $map['a.is_delete'] =1;//是否删除 1否2是 $model = Db::name('UserZone')->alias('a')->join('fa_user b', 'a.user_id = b.id'); $model = $model->where($map); $info = $model->field('a.id,a.user_id,a.images,a.content,a.like_num,a.read_num,a.comment_num,a.is_recommend,a.createtime,a.ip,b.nickname,b.sex,b.avatar,b.user_code,a.topic_id')->find(); if (empty($info)) { return ['code' => 0, 'msg' => '动态不存在', 'data' => null]; } $info['title'] = []; if(isset($info['topic_id'])){ $top = explode(',', $info['topic_id']); foreach ($top as $kk){ $title = db::name('topic')->where(['id' => $kk])->find(); if(isset($title)){ $title['topic_id'] = $title['id']; $title['count'] = db::name('user_zone_topic')->where('topic_id',$kk)->count(); } $info['title'][] =$title; } } $info['is_like'] = 0; //是否点赞 if(isset($uid) && $uid > 0){ $praise = db::name('user_zone_like')->where(['zone_id' => $info['id'], 'user_id' => $uid,'delete_time' => 0])->find(); if (!empty($praise)) { $info['is_like'] = 1; } } //点赞列表 $info['like_list'] = []; $praise_list = db::name('user_zone_like')->alias('a')->join('fa_user b', 'a.user_id = b.id') ->field('a.user_id,b.nickname,b.sex,b.avatar,b.birthday') ->where(['a.zone_id' => $zid,'a.delete_time' => 0]) ->limit(3) ->select(); if (!empty($praise_list)) { foreach ($praise_list as $k => &$v) { if ($v['birthday']) { $v['age'] = getAge($v['birthday']); $v['constellation'] = get_user_constellation($v['birthday']); }else{ $v['age'] = 0; $v['constellation'] = ''; } } $info['like_list'] = $praise_list; } $info['room_id'] = "0"; //判断是否在聊天室 $rid = db::name('vs_room_visitor')->where(['user_id' => $info['user_id'], 'is_delete' => 1])->order('id desc')->value('room_id'); if ($rid) { $info['room_id'] = $rid; } //打赏列表 $info['rewards_list'] = []; $info['rewards_num'] = 0;//打赏金额 $rewards = db::name('user_zone_rewards')->where(['zone_id' => $info['id']])->field('sum(gift_price_total) as rewards_num')->find(); if ($rewards) { $info['rewards_num'] = $rewards['rewards_num']??0; $rewards_list = db::name('user_zone_rewards')->alias('a')->join('fa_user b', 'a.user_id = b.id') ->where(['a.zone_id' => $zid])->field('a.user_id,a.gift_price_total,b.nickname,b.avatar') ->order('a.gift_price_total desc') ->select(); if (!empty($rewards_list)) { foreach ($rewards_list as $k => &$v) { $v['room_id'] = 0; //是否在聊天室 $rrid = db::name('vs_room_visitor')->where(['user_id' => $v['user_id'], 'is_delete' => 1])->value('room_id'); if ($rrid) { $v['room_id'] = $rrid; } } $info['rewards_list'] = $rewards_list; } } //评论数量 // $info['comment_num'] = db::name('user_zone_comment')->where(['zone_id' => $zid])->count(); $info['comment_list'] = []; $comment_list = db::name('user_zone_comment')->alias('a')->join('fa_user b', 'a.user_id = b.id') ->where(['a.zone_id' => $zid,'a.is_delete' => 1,'pid' => 0,'is_show' => 1]) ->field('a.id,a.user_id,a.content,a.createtime,b.nickname,b.avatar,b.sex,b.birthday') ->order('a.createtime desc') ->limit(3) ->select(); if (!empty($comment_list)) { foreach ($comment_list as $k => &$v) { //时间戳转换为日期格式 $v['createtime'] = date('Y-m-d H:i:s', $v['createtime']); if ($v['birthday']) { $v['age'] = getAge($v['birthday']); $v['constellation'] = get_user_constellation($v['birthday']); }else{ $v['age'] = 0; $v['constellation'] = ''; } } $info['comment_list'] = $comment_list; } //分享出去的URL $info['share_url'] = get_system_config_value('web_url').'/share/index.html?id='.$zid; return ['code' => 1, 'msg' => '获取成功', 'data' => $info]; } //(动态)评论 public function comment_zone($uid, $zid, $content,$pid, $reply_to) { $info = db::name('user_zone')->find($zid); if (empty($info)) { return ['code' => 0, 'msg' => "评论的动态不存在", 'data' => null]; } Db::startTrans(); $data = []; $data['zone_id'] = $zid; $data['user_id'] = $uid; $data['pid'] = $pid; $data['reply_to'] = $reply_to; $data['content'] = $content; // $data['praise_num'] = 0; $data['is_show'] = 1; $data['createtime'] = time(); $reslut = db::name('user_zone_comment')->insert($data); if (!$reslut) { Db::rollback(); return ['code' => 0, 'msg' => '请重试,', 'data' => null]; } //评论別人的帖子- 每天第一条奖励【完成任务】 // if($info['user_id'] != $uid){ //今天的第一条评论奖励 $first_comment = db::name('user_zone_comment')->where(['user_id' => $uid, 'createtime' => ['between', [strtotime(date('Y-m-d 00:00:00')), strtotime(date('Y-m-d 23:59:59'))]]])->count(); if ($first_comment ==1) { model('DailyTasks')->tasks_complete($uid,5); } // } //增加评论数量 $reslut = db::name('user_zone')->where('id', $zid)->setInc('comment_num', 1); if (!$reslut) { Db::rollback(); return ['code' => 0, 'msg' => '请重试。', 'data' => null]; } //提醒说说动态发布人有人评论 $user_info=db::name('user')->where('id',$uid)->find(); $content = $user_info['nickname'] . "评论了您的动态"; // model('api/user_message')->send_message($info['user_id'], 4,$info['zid'], "我的动态", $content); Db::commit(); return ['code' => 1, 'msg' => "评论成功", 'data' => null]; } /** * 获取评论及其回复 */ public function getCommentsWithReplies($zid, $page, $page_limit) { // 获取顶级评论 $page = intval($page); $page_limit = $page_limit < 30 ? $page_limit : 30; $map = []; $map['a.is_show'] = 1; $map['a.zone_id'] = $zid; $map['a.pid'] = 0; $map['a.is_delete'] = 1;//是否删除 1否2是 $order_string = 'a.createtime desc'; //排序规则 $model = Db::name('user_zone_comment')->alias('a')->join('fa_user b', 'a.user_id = b.id'); $model = $model->where($map); $list = $model->field('a.id,a.zone_id,a.content,a.createtime,a.user_id,b.nickname,b.avatar') ->order($order_string)->page($page, $page_limit)->select(); if ($list) { $commentIds = array_column($list, 'id'); foreach ($list as $k => &$v) { //判断评论用户是否是作者 $v['is_author'] = 0; $uid = Db::name('user_zone')->where('id', $zid)->value('user_id'); if (isset($uid) && $v['user_id'] == $uid) { $v['is_author'] = 1; } } // 获取这些评论的回复 $replies = Db::name('user_zone_comment')->alias('a')->join('fa_user b', 'a.user_id = b.id') ->whereIn('a.pid', $commentIds) ->where('a.is_show', 1) ->where('a.is_delete', 1) ->field('a.id,a.reply_to,a.zone_id,a.content,a.createtime,a.user_id,b.nickname,b.avatar,a.pid') ->order('a.createtime', 'asc') ->select(); if($replies){ foreach ($replies as $k => &$vv) { //判断评论用户是否是作者 $vv['is_author'] = 0; $uidd = Db::name('user_zone')->where('id', $zid)->value('user_id'); if (isset($uidd) && $vv['user_id'] == $uidd) { $vv['is_author'] = 1; } $vv['reply_to_user'] = ""; if(isset($vv['reply_to'])){ $vv['reply_to_user'] = Db::name('user')->where('id',$vv['reply_to'])->value('nickname'); } } // 将回复按父评论ID分组 $replyGroups = []; foreach ($replies as $reply) { $replyGroups[$reply['pid']][] = $reply; } } // 将回复关联到对应的评论 foreach ($list as &$comment) { $comment['replies'] = $replyGroups[$comment['id']] ?? []; } } return ['code' => 1, 'msg' => '获取成功', 'data' => $list]; } /** * 获取评论总数 */ public function getCommentCount($zid) { return Db::name('user_zone_comment')->where(['zone_id'=> $zid,'is_show' => 1, 'is_delete' => 1])->count(); } //点赞 取消点赞 public function praise_zone($uid, $zid) { //第一条点赞奖励 【任务废弃】 // $first_praise = db::name('user_zone_like')->where('user_id',$uid)->find(); // if(empty($first_praise)){ // $kay = get_system_config_value('task_like_others_for_the_first_time'); // model('DailyTasks')->daily_tasks_complete($uid,$kay); // } $map['user_id'] = $uid; $map['zone_id'] = $zid; $info = db::name('user_zone_like')->where($map)->find(); if (!empty($info)) { if ($info['delete_time'] == 0) { $del1 = db::name('user_zone')->where('id',$zid)->setDec('like_num'); $del = db::name('user_zone_like')->where($map)->update(['delete_time' => time()]); if (!$del || !$del1) { return ['code' => 0, 'msg' => '请重试!', 'data' => null]; } return ['code' => 1, 'msg' => '取消点赞成功', 'data' => null]; }else{ $add1 = db::name('user_zone')->where('id',$zid)->setInc('like_num'); $add = db::name('user_zone_like')->where($map)->update(['delete_time' => 0]); if (!$add || !$add1) { return ['code' => 0, 'msg' => '请重试!', 'data' => null]; } return ['code' => 1, 'msg' => '点赞成功', 'data' => null]; } }else{ Db::startTrans(); $data = []; $data['user_id'] = $uid; $data['zone_id'] = $zid; $data['createtime'] = time(); $reslut = db::name('user_zone_like')->insert($data); if (!$reslut) { Db::rollback(); return ['code' => 0, 'msg' => '请重试!', 'data' => null]; } //增加点赞数量 $reslut = db::name('user_zone')->where('id', $zid)->setInc('like_num'); if (!$reslut) { Db::rollback(); return ['code' => 0, 'msg' => '请重试!!', 'data' => null]; } Db::commit(); return ['code' => 1, 'msg' => "点赞成功", 'data' => null]; } } //点赞列表 public function get_like_list($zid, $page, $page_limit) { $page = intval($page); $page_limit = $page_limit < 30 ? $page_limit : 30; $praise_list = db::name('user_zone_like')->alias('a')->join('fa_user b', 'a.user_id = b.id') ->field('a.user_id,b.nickname,b.sex,b.avatar,b.birthday') ->where('a.zone_id' , $zid) ->where('a.delete_time', 0) ->page($page, $page_limit) ->select(); if (!empty($praise_list)) { foreach ($praise_list as $k => &$v) { if ($v['birthday']) { $v['age'] = getAge($v['birthday']); $v['constellation'] = get_user_constellation($v['birthday']); }else{ $v['age'] = 0; $v['constellation'] = ''; } } } return $praise_list; } //引用话题的动态 public function get_zone_topic_list($uid,$topic_id, $page, $page_limit) { $list = $this->get_zone_list($uid, $page, $page_limit,$topic_id); return $list['data']; } //用户主页的动态列表 /* * @param $uid 当前用户id * @param $from_id 访问id 要看谁的ID */ public function get_user_zone_list($uid ,$from_id,$page=1, $page_limit=0) { $page = intval($page); $page_limit = $page_limit < 30 ? $page_limit : 30; $map = []; $map['user_id'] = $from_id; $map['show_status'] = 1;//1:显示 $map['is_delete'] =1;//是否删除 1否2是 $order_string = 'createtime desc'; //排序规则 $model = Db::name('user_zone'); $list = $model->where($map) ->field('id,images,content,like_num,comment_num,user_id,createtime,topic_id') ->order($order_string)->page($page, $page_limit)->select(); foreach ($list as $k => &$v) { $v['is_like'] = 0; //是否点赞 $praise = db::name('user_zone_like')->where(['zone_id' => $v['id'], 'user_id' => $uid])->find(); if (!empty($praise)) { $v['is_like'] = 1; } $v['rewards_num'] = 0; $rewards = db::name('user_zone_rewards')->where(['zone_id' => $v['id']])->field('sum(gift_price_total) as rewards_num')->find(); if ($rewards) { $v['rewards_num'] = $rewards['rewards_num']??0; } $v['avatar'] = db::name('user')->where('id', $v['user_id'])->value('avatar'); $v['nickname'] = db::name('user')->where('id', $v['user_id'])->value('nickname'); $v['sex'] = db::name('user')->where('id', $v['user_id'])->value('sex'); //头像装扮 $v['dress'] = model('Decorate')->user_decorate_detail($v['user_id'],1); $v['title'] = []; if(isset($v['topic_id'])){ $top = explode(',', $v['topic_id']); foreach ($top as $kk){ $title = db::name('topic')->where(['id' => $kk])->find(); if(isset($title)){ $title['topic_id'] = $title['id']; $title['count'] = db::name('user_zone_topic')->where('topic_id',$kk)->count(); } $v['title'][] =$title; } } } return $list; } //删除动态 public function delete_zone($uid, $zid) { $map['user_id'] = $uid; $map['id'] = $zid; $map['is_delete'] = 1; $zone_info = db::name('user_zone')->where($map)->find(); if (empty($zone_info)) { return ['code' => 0, 'msg' => '信息不存在', 'data' => null]; } $data = []; $data['is_delete'] = 2; $data['delete_time'] = time(); $reslut = db::name('user_zone')->where('id', $zid)->update($data); $top_zone = db::name('user_zone_topic')->where('zone_id',$zid)->select(); if($top_zone){ foreach ($top_zone as $v){ db::name('user_zone_topic')->where('id',$v['id'])->delete(); } } if ($reslut) { return ['code' => 1, 'msg' => '删除成功', 'data' => null]; } else { return ['code' => 0, 'msg' => '删除失败', 'data' => null]; } } //删除评论 public function delete_zone_comment($uid,$cid) { $map = []; $map['user_id'] = $uid; $map['id'] = $cid; $map['is_delete'] =1; $comment_info = db::name('user_zone_comment')->where($map)->find(); if (empty($comment_info)) { return ['code' => 0, 'msg'=> '评论不存在', 'data' => null]; } $data = []; $data['is_delete'] = 2; $data['updatetime'] = time(); //开启事务 Db::startTrans(); try { $reslut = db::name('user_zone_comment')->where('id', $cid)->update($data); if (!$reslut) { Db::rollback(); return ['code' => 0, 'msg' => '请重试!', 'data' => null]; } //删除评论的回复 $dd = db::name('user_zone_comment')->where('pid', $cid)->find(); if($dd){ $reslut1 = db::name('user_zone_comment')->where('pid', $cid)->update(['is_delete' => 2,'updatetime' => time()]); if (!$reslut1) { Db::rollback(); return ['code' => 0, 'msg' => '请重试!!', 'data' => null]; } } //减少评论数量 $num = db::name('user_zone_comment')->where('pid', $cid)->count(); if($num > 0){ $num = $num + 1; }else{ $num = 1; } $reslut2 = db::name('user_zone')->where('id', $comment_info['zone_id'])->setDec('comment_num', $num); if (!$reslut2) { Db::rollback(); return ['code' => 0, 'msg' => '请重试!!', 'data' => null]; } Db::commit(); return ['code' => 1, 'msg' => '删除成功', 'data' => null]; } catch (\Exception $e) { Db::rollback(); return ['code' => 0, 'msg' => "请重试.", 'data' => null]; } } //扩列 public function expand_zone($uid, $type, $page, $page_limit) { $page = intval($page); $page_limit = $page_limit < 30 ? $page_limit : 30; if($type){ $map['a.sex'] = $type; }else{ $map['a.sex'] = ['in', [1, 2]]; } $map['a.status'] = 1; //查询用户信息 $user_info = db::name('user')->alias('a')->join('fa_user_data b', 'a.id = b.user_id') ->where($map)->field('a.id as user_id,a.sex,a.nickname,a.avatar,a.birthday,a.address_ip as loginip,b.home_bgimages') ->order('a.id desc') ->page($page, $page_limit) ->select(); if($user_info){ foreach ($user_info as &$v){ if($v['loginip'] == null){ $v['loginip'] = '未知'; }else{ //获取字符串的长度和 判断字符串里面是否有, if((mb_strlen($v['loginip'], 'utf-8') > 8 && mb_strpos($v['loginip'], ',') !== false)){ $ipd = explode(',', $v['loginip']); // $v['loginip'] = $ipd[0].' · '.$ipd[1];//省·市 $sheng = $ipd[0] =='(null)' ? '' : $ipd[0]; $shi = $ipd[1] ?? ''; $v['loginip'] = $sheng.' '.$shi;//省·市 }else{ $v['loginip'] = '未知'; } } $v['room_id'] = 0; //是否在房间 $is_room = db::name('vs_room_visitor')->where(['user_id' => $v['user_id'], 'is_delete' => 1])->order('id desc')->value('room_id'); if ($is_room) { $v['room_id'] = $is_room; } //用户等级标 $v['icon'][0] = model('UserData')->user_wealth_icon($v['user_id']);//财富图标 $v['icon'][1] = model('UserData')->user_charm_icon($v['user_id']);//魅力图标 } } return $user_info; } //相互关注的用户 public function mutual_follow($uid, $page, $page_limit) { $page = intval($page); $page_limit = $page_limit < 30 ? $page_limit : 30; $map = []; $map['a.user_id'] = $uid;//我关注的 $map['a.type'] = 1; $model = Db::name('user_follow')->alias('a')->join('fa_user b', 'a.follow_id = b.id'); $list = $model->where($map) ->field('b.id as user_id,b.nickname,b.avatar,b.sex') ->order('a.id desc') ->page($page, $page_limit) ->select(); $user_list = []; if($list){ foreach ($list as &$v){ //我关注的是否关注我了 $is_follow = db::name('user_follow')->where(['user_id' => $v['id'], 'follow_id' => $uid, 'type' => 1])->find(); if($is_follow){ $i = 0; $user_list[$i]['user_id'] = $v['user_id']; $user_list[$i]['nickname'] = $v['nickname']; $user_list[$i]['avatar'] = $v['avatar']; $user_list[$i]['sex'] = $v['sex']; $i++; } } } return $user_list??[]; } }