159 lines
5.6 KiB
PHP
159 lines
5.6 KiB
PHP
<?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')
|
||
->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')
|
||
->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];
|
||
}
|
||
|
||
} |