Files
midi-php/application/api/model/UserMessage.php

159 lines
5.6 KiB
PHP
Raw Normal View History

2025-08-13 10:43:56 +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')
->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];
}
}