Ai_GirlFriend/xunifriend_RaeeC/application/common/model/FriendNotification.php

153 lines
4.0 KiB
PHP
Raw Normal View History

2026-01-31 19:15:41 +08:00
<?php
namespace app\common\model;
use think\Model;
class FriendNotification extends Model
{
protected $name = 'friend_notifications';
protected $autoWriteTimestamp = 'int';
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
// 通知类型常量
const TYPE_FRIEND_REQUEST = 1; // 好友申请
const TYPE_REQUEST_RESULT = 2; // 申请结果
protected $append = [
'createtime_text',
];
protected $type = [
'id' => 'integer',
'to_user_id' => 'integer',
'from_user_id' => 'integer',
'type' => 'integer',
'related_id' => 'integer',
'is_read' => 'integer'
];
public function getCreatetimeTextAttr($value, $data)
{
$value = $value ? $value : ($data['createtime'] ?? "");
return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
}
// 关联用户信息
public function user()
{
return $this->belongsTo('User', 'user_id', 'id');
}
public function fromUser()
{
return $this->belongsTo('User', 'from_user_id', 'id');
}
/**
* 创建好友申请通知
*/
public static function createFriendRequestNotification($params)
{
$message=$params['content'];
$toUserId = $params['to_user_id'];
$fromUserId = $params['from_user_id'];
$content = $message ?
"用户 " . User::get($fromUserId)['nickname'] . " 申请添加您为好友:" . $message :
"用户 " . User::get($fromUserId)['nickname'] . " 申请添加您为好友";
return self::create([
'to_user_id' => $toUserId,
'type' => self::TYPE_FRIEND_REQUEST,
'content' => $content,
]);
}
/**
* 创建申请结果通知
*/
public static function createRequestResultNotification($params)
{
$result = $params['status'];
$fromUserId = $params['from_user_id'];
$toUserId = $params['to_user_id'];
$resultText = $result == 1 ? '同意' : '拒绝';
$content = "用户 " . User::get($fromUserId)['nickname'] . "{$resultText}您的好友申请";
return self::create([
'to_user_id' => $toUserId,
'type' => self::TYPE_REQUEST_RESULT,
'content' => $content,
]);
}
/**
* 创建好友添加成功通知
*/
public static function createFriendAddedNotification($userId, $friendId)
{
$content = "您与 " . User::get($friendId)['nickname'] . " 已成为好友";
return self::create([
'user_id' => $userId,
'from_user_id' => $friendId,
'type' => self::TYPE_FRIEND_ADDED,
'content' => $content
]);
}
/**
* 获取用户未读通知数量
*/
public static function getUnreadCount($userId)
{
return self::where(['to_user_id' => $userId, 'is_read' => 0])->count();
}
/**
* 标记通知为已读
*/
public static function markAsRead($notificationId, $userId = null)
{
$where = ['id' => $notificationId];
if ($userId) {
$where['to_user_id'] = $userId;
}
return self::update(['is_read' => 1], $where);
}
/**
* 批量标记通知为已读
*/
public static function markBatchAsRead($user_id, $ids = [])
{
$where = ['to_user_id' => $user_id];
if (!empty($ids)) {
$where['id'] = ['in', $ids];
}
return self::where($where)->update(['is_read' => 1]);
}
/**
* 获取用户通知列表
*/
public static function getNotificationList($userId)
{
return self::where(['to_user_id' => $userId])
->order('id DESC')
->paginate();
}
/**
* 删除过期通知保留最近30天的记录
*/
public static function cleanupExpiredNotifications()
{
$expireTime = time() - 30 * 24 * 3600; // 30天前的时间戳
return self::where('created_at', '<', $expireTime)->delete();
}
}