2025-08-07 20:21:47 +08:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
|
|
namespace app\api\model;
|
|
|
|
|
|
|
|
|
|
|
|
use think\Db;
|
|
|
|
|
|
use think\Model;
|
|
|
|
|
|
|
|
|
|
|
|
class UserMessage extends Model
|
|
|
|
|
|
{
|
|
|
|
|
|
//系统消息接口【废弃】
|
|
|
|
|
|
public function get_message($uid,$message_id)
|
|
|
|
|
|
{
|
|
|
|
|
|
//获取系统消息
|
|
|
|
|
|
$mesage = db::name('system_message')
|
|
|
|
|
|
->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')
|
2025-10-20 09:59:39 +08:00
|
|
|
|
->field('id,type,title,content,url')
|
2025-08-07 20:21:47 +08:00
|
|
|
|
->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')
|
2025-10-20 09:59:39 +08:00
|
|
|
|
->field('id,type,title,content,url')
|
2025-08-07 20:21:47 +08:00
|
|
|
|
->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];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|