获取历史消息
This commit is contained in:
@@ -6,79 +6,73 @@ use app\chat\model\ChatUnreadCount;
|
||||
use app\chat\model\ChatTop;
|
||||
use app\chat\model\ChatUser;
|
||||
use app\chat\model\ChatGroup;
|
||||
use app\common\controller\ApiController;
|
||||
use app\utils\Session;
|
||||
use support\Request;
|
||||
use support\Response;
|
||||
use support\think\Db;
|
||||
|
||||
class MessageController
|
||||
class MessageController extends ApiController
|
||||
{
|
||||
/**
|
||||
* 获取历史消息
|
||||
*/
|
||||
public function history(Request $request): Response
|
||||
{
|
||||
$uid = $request->uid;
|
||||
$chatType = $request->get('chat_type', 1); // 1=单聊,2=群聊
|
||||
$toId = $request->get('to_id', 0); // 单聊=对方ID,群聊=群ID
|
||||
$page = $request->get('page', 1);
|
||||
$size = $request->get('size', 20);
|
||||
$uid = $this->uid;
|
||||
$chatType = $request->post('chat_type'); // 1=单聊,2=群聊
|
||||
$toId = $request->post('to_id'); // 单聊=对方ID,群聊=群ID
|
||||
$session_id = $request->post('session_id'); // 会话ID
|
||||
$page = $request->post('page', 1)?:1;
|
||||
$size = $request->post('size', 20)?:20;
|
||||
|
||||
if (!$toId) {
|
||||
return json(['code' => 400, 'msg' => '缺少to_id']);
|
||||
if (!$toId || !$chatType || !$session_id) {
|
||||
return $this->error('参数不完整');
|
||||
}
|
||||
|
||||
// 生成会话ID
|
||||
$sessionId = Session::generateSessionId($chatType, $uid, $toId);
|
||||
|
||||
// 构建查询条件
|
||||
$query = ChatMessage::where('session_id', $sessionId);
|
||||
$query = Db::name('chat_message')->where(['session_id' => $session_id]);
|
||||
|
||||
// 群聊需验证是否在群内
|
||||
if ($chatType == 2) {
|
||||
$isMember = app\chat\model\ChatGroupMember::where([
|
||||
$isMember = Db::name('chat_group_member')->where([
|
||||
'group_id' => $toId,
|
||||
'user_id' => $uid,
|
||||
'quit_time' => null,
|
||||
'is_kicked' => 0
|
||||
])->exists();
|
||||
])->find();
|
||||
if (!$isMember) {
|
||||
return json(['code' => 403, 'msg' => '不在群内,无法获取历史消息']);
|
||||
return $this->error('不在群内,无法获取历史消息');
|
||||
}
|
||||
}
|
||||
|
||||
// 分页查询(倒序取,再正序返回)
|
||||
$total = $query->count();
|
||||
$messages = $query->orderBy('send_time', 'desc')
|
||||
$messages = $query->order('send_time', 'desc')
|
||||
->page($page, $size)
|
||||
->get()
|
||||
->toArray();
|
||||
->select()->toArray();
|
||||
$messages = array_reverse($messages);
|
||||
|
||||
// 单聊自动标记已读
|
||||
if ($chatType == 1) {
|
||||
ChatMessage::where([
|
||||
'session_id' => $sessionId,
|
||||
Db::name('chat_message')->where([
|
||||
'session_id' => $session_id,
|
||||
'to_id' => $uid,
|
||||
'is_read' => 0
|
||||
])->update(['is_read' => 1]);
|
||||
|
||||
// 重置未读计数
|
||||
ChatUnreadCount::where([
|
||||
Db::name('chat_unread_count')->where([
|
||||
'user_id' => $uid,
|
||||
'session_id' => $sessionId
|
||||
])->update(['count' => 0, 'updated_at' => time()]);
|
||||
'session_id' => $session_id
|
||||
])->update(['count' => 0, 'updated_time' => d()]);
|
||||
}
|
||||
|
||||
return json([
|
||||
'code' => 200,
|
||||
'msg' => 'success',
|
||||
'data' => [
|
||||
return $this->success([
|
||||
'list' => $messages,
|
||||
'page' => $page,
|
||||
'size' => $size,
|
||||
'total' => $total
|
||||
]
|
||||
]);
|
||||
'total' => $total]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user