add
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
namespace app\models\chat;
|
||||
|
||||
use think\Model;
|
||||
|
||||
/**
|
||||
* 聊天消息模型
|
||||
* Class ChatMessage
|
||||
* @package app\models\chat
|
||||
*/
|
||||
class ChatMessage extends Model
|
||||
{
|
||||
protected $table = 'cg_chat_message';
|
||||
protected $pk = 'id';
|
||||
protected $autoWriteTimestamp = false;
|
||||
|
||||
// 发送者类型
|
||||
const SENDER_USER = 1; // 用户
|
||||
const SENDER_ADMIN = 2; // 客服
|
||||
|
||||
// 消息类型
|
||||
const MSG_TYPE_TEXT = 1; // 文字
|
||||
const MSG_TYPE_IMAGE = 2; // 图片
|
||||
|
||||
// 消息状态
|
||||
const STATUS_PENDING = 0; // 待发送
|
||||
const STATUS_SENT = 1; // 已发送
|
||||
const STATUS_DELIVERED = 2; // 已送达
|
||||
const STATUS_READ = 3; // 已读
|
||||
const STATUS_FAILED = 4; // 发送失败
|
||||
|
||||
/**
|
||||
* 获取会话消息列表
|
||||
*/
|
||||
public static function getBySessionId(int $sessionId, int $limit = 50, int $lastId = 0): array
|
||||
{
|
||||
$query = self::where('session_id', $sessionId);
|
||||
if ($lastId > 0) {
|
||||
$query->where('id', '<', $lastId);
|
||||
}
|
||||
return $query->order('id', 'desc')
|
||||
->limit($limit)
|
||||
->select()
|
||||
->toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会话未读消息
|
||||
*/
|
||||
public static function getUnreadBySessionId(int $sessionId, int $senderType, int $limit = 50): array
|
||||
{
|
||||
return self::where('session_id', $sessionId)
|
||||
->where('sender_type', '<>', $senderType)
|
||||
->where('status', '<', self::STATUS_READ)
|
||||
->order('id', 'asc')
|
||||
->limit($limit)
|
||||
->select()
|
||||
->toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查消息ID是否存在(幂等性)
|
||||
*/
|
||||
public static function existsByMsgId(int $msgId): bool
|
||||
{
|
||||
return self::where('msg_id', $msgId)->count() > 0;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user