Files
yusheng-php/application/api/model/UserMessage.php
2025-11-22 09:19:13 +08:00

164 lines
6.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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, 6]])//1系统消息 3公告下的房间推荐4公告下的活动' 6工会邀请
->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, 6]])
->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, 6])//1系统消息 3公告下的房间推荐4公告下的活动' 6工会邀请
->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'] = ['in' , [1, 6]];
}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'];
}
if($v['type'] == 6){
$guild_user_invited = db::name('vs_guild_user_invited')->where('message_id', $v['id'])->field('status')->find();
$v['guild_invited_status'] = $guild_user_invited['status'];
}
}
}
return ['code' => 1, 'msg' => '获取成功', 'data' => $list];
}
}