where('id', $message_id) ->find(); if(!$mesage){ return ['code' => 0, 'msg' => '消息不存在', 'data' => null]; } //插入用户消息表 $data = []; $data['source_id'] = $message_id; $data['user_id'] = $uid; $data['type'] = $mesage['type']; $data['title'] = $mesage['title']; $data['content'] = $mesage['content']; $data['image'] = $mesage['image']; $data['room_id'] = $mesage['room_id']; $data['url'] = $mesage['url']; $data['createtime'] = time(); $res = db::name('user_message')->insert($data); if ($res) { return ['code' => 1, 'msg' => '获取成功', 'data' => null]; } else { return ['code' => 0, 'msg' => '获取失败', 'data' => null]; } } //系统封面消息接口 public function get_user_message_cover_info($uid) { //获取系统消息 $system_message = db::name('system_message') ->where('type', 1)//1系统消息 3公告下的房间推荐,4公告下的活动' ->where('FIND_IN_SET(:user_id, receiving_id)', ['user_id' => $uid]) ->count(); //自己已经阅读过的信息 $user_read_message = db::name('user_message') ->where(['user_id' => $uid,'type' => 1]) ->count(); $system_no_read_count = $system_message - $user_read_message; $system_last_message = db::name('system_message') ->field('id,type,title,content,url') ->where('type', 1)//1系统消息 3公告下的房间推荐,4公告下的活动' ->where('FIND_IN_SET(:user_id, receiving_id)', ['user_id' => $uid]) ->order('id desc') ->find() ?? null; //获取2官方公告 $map['type'] = ['in' , [3, 4]]; $system_message1 = db::name('system_message') ->field('id') ->where($map) ->where('FIND_IN_SET(:user_id, receiving_id)', ['user_id' => $uid]) ->select(); //自己已经阅读过的信息 $map['user_id'] = $uid; $user_read_message1 = db::name('user_message') ->field('source_id') ->where($map) ->select(); $announcement_read_count = count($system_message1) - count($user_read_message1); unset($map['user_id']); $announcement_last_message = db::name('system_message') ->field('id,type,title,content,url') ->where($map) ->where('FIND_IN_SET(:user_id, receiving_id)', ['user_id' => $uid]) ->order('id desc') ->find() ?? null; $data = []; $data['system_no_read_count'] = max($system_no_read_count, 0); $data['system_last_message'] = $system_last_message; $data['announcement_read_count'] = $announcement_read_count; $data['announcement_last_message'] = $announcement_last_message; return ['code' => 1, 'msg' => '获取成功', 'data' => $data]; } //消息列表接口 public function get_user_message_list($uid, $type, $page, $page_limit) { if (!in_array($type, [1, 2])) { return ['code' => 0, 'msg' => 'type非法参数', 'data' => null]; } $page = intval($page); $page_limit = $page_limit < 30 ? $page_limit : 30; if($type == 1){ $where['type'] = $type; }else{ $where['type'] = ['in' , [3, 4]]; } //获取系统消息 $system_message = db::name('system_message') ->field('id as source_id') ->where($where)//1系统消息 3公告下的房间推荐,4公告下的活动' ->where('FIND_IN_SET(:user_id, receiving_id)', ['user_id' => $uid]) ->select(); //自己已经阅读过的信息 $where['user_id'] = $uid; $user_read_message = db::name('user_message') ->field('source_id') ->where($where) ->select(); //取出$system_message和$user_read_message 的差集 // 提取 source_id 列表 $systemMessageIds = array_column((array)$system_message, 'source_id'); $userReadMessageIds = array_column((array)$user_read_message, 'source_id'); // 获取未读消息 ID $unreadMessageIds = array_diff($systemMessageIds, $userReadMessageIds); unset($where['user_id']); if($unreadMessageIds){ //阅读过插入到用户消息表 foreach ($unreadMessageIds as $k=>$v){ $data_s = db::name('system_message')->field('id,type')->where('id', $v)->where($where)->find(); $data[$k]['type'] = $data_s['type']; $data[$k]['source_id'] = $data_s['id']; $data[$k]['user_id'] = $uid; $data[$k]['createtime'] = time(); db::name('user_message')->insert($data[$k]); } } //获取消息 $list = db::name('system_message') ->where($where) ->where('FIND_IN_SET(:user_id, receiving_id)', ['user_id' => $uid]) ->order('id desc') ->page($page, $page_limit)->select(); if($list){ foreach ($list as &$v){ if($v['type'] == 1){ $v['content'] = '【'.$v['title'].'】' . $v['content']; } } } return ['code' => 1, 'msg' => '获取成功', 'data' => $list]; } }