Db::name('message')->where('user_id',$this->auth->id)->order('id desc')->find(), //第一条个人消息 'msg_unread_num' => Db::name('message')->where('user_id',$this->auth->id)->where('status',0)->count(),//个人消息未读数量 'msgsys_first' => Db::name('message_sys')->order('id desc')->find(),//第一条系统消息 ]; //系统消息未读数量 $sys_ids = Db::name('message_sys')->column('id'); $all_num = count($sys_ids); $read_num = Db::name('user_messagesys')->where('user_id',$this->auth->id)->where('msg_id','IN',$sys_ids)->count(); $rs['msgsys_unread_num'] = $all_num > $read_num ? $all_num - $read_num : 0; //因公告被删除,未读公告没来得及删除,相减可能会负数 //动态评论未读数量 $map = [ 'dt.user_id' => $this->auth->id, 'a.level' => 1, 'a.is_read' => 0, ]; $dt_answer_unread = Db::name('topic_dongtai_answer')->alias('a') ->join('topic_dongtai dt','a.dt_id = dt.id','LEFT') ->where($map)->count(); //动态点赞未读数量 $map = [ 'dt.user_id' => $this->auth->id, 'g.is_read' => 0, ]; $dt_good_unread = Db::name('topic_dongtai_good')->alias('g') ->join('topic_dongtai dt','g.dt_id = dt.id','LEFT') ->where($map)->count(); //互动消息未读数量 $rs['dongtai_unread_num'] = $dt_answer_unread + $dt_good_unread; //家族和公会待审核数量 $rs['audit_unread_num'] = $this->wait_audit(); $this->success(1,$rs); } //个人消息全部改为已读 public function message_read(){ Db::startTrans(); //读取即为已读 $map = [ 'user_id' => $this->auth->id, 'status' => 0, ]; $rs = Db::name('message')->where($map)->update(['status'=>1]); if($rs === false){ Db::rollback(); $this->error('操作失败'); } //系统消息 //全部未读 $rs = Db::name('user_messagesys')->where('user_id',$this->auth->id)->delete(); if($rs === false){ Db::rollback(); $this->error('操作失败'); } //循环全部已读 $list = Db::name('message_sys')->column('id'); if(!empty($list)){ $newall = []; foreach($list as $key => $msg_id){ $newall[] = [ 'user_id' => $this->auth->id, 'msg_id' => $msg_id, ]; } if(!empty($newall)){ $rs = Db::name('user_messagesys')->insertAll($newall); if($rs === false){ Db::rollback(); $this->error('操作失败'); } } } Db::commit(); $this->success(); } //我的个人消息列表 public function mylist(){ $list = Db::name('message')->where('user_id',$this->auth->id)->autopage()->order('id desc')->select(); //读取即为已读 $map = [ 'user_id' => $this->auth->id, 'status' => 0, ]; Db::name('message')->where($map)->update(['status'=>1]); $this->success('success',$list); } /* * 获取系统消息列表 */ public function getmessagesys() { $list = Db::name('message_sys')->autopage()->order('id desc')->select(); Db::startTrans(); //系统消息 //全部未读 $rs = Db::name('user_messagesys')->where('user_id',$this->auth->id)->delete(); if($rs === false){ Db::rollback(); $this->error('操作失败'); } //循环全部已读 $list2 = Db::name('message_sys')->column('id'); if(!empty($list2)){ $newall = []; foreach($list2 as $key => $msg_id){ $newall[] = [ 'user_id' => $this->auth->id, 'msg_id' => $msg_id, ]; } if(!empty($newall)){ $rs = Db::name('user_messagesys')->insertAll($newall); if($rs === false){ Db::rollback(); $this->error('操作失败'); } } } Db::commit(); $this->success("获取成功!",$list); } //最新一条房间内公告 public function getmessageroom() { $info = Db::name('message_room')->order('id desc')->find(); $this->success("获取成功!",$info); } //待审家族申请,待审公会申请 private function wait_audit(){ //公会待审数量 $guild_number = 0; $my_guild = Db::name('guild')->where('status',1)->where('user_id',$this->auth->id)->find(); if($my_guild){ $guild_number = Db::name('guild_joinin')->where('guild_id',$my_guild['id'])->where('status',0)->count(); } //家族待审数量 $family_number = 0; $my_family = Db::name('family')->where('status',1)->where('user_id',$this->auth->id)->find(); if($my_family){ $family_number = Db::name('family_member')->where('guild_id',$my_family['id'])->where('status',0)->count(); } $all_num = $guild_number + $family_number; return $all_num; } }