Ai_GirlFriend/xunifriend_RaeeC/application/common/model/FriendNotification.php
2026-01-31 19:15:41 +08:00

153 lines
4.0 KiB
PHP
Raw Permalink 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\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();
}
}