feat: 创建新 AI 会话时将旧会话消息批量标记已读

This commit is contained in:
kuaifan 2025-11-07 07:54:04 +00:00
parent e83fd7af1b
commit e75aa5c2b9
2 changed files with 30 additions and 0 deletions

View File

@ -3582,6 +3582,8 @@ class DialogController extends AbstractController
return Base::retError('当前对话不支持');
}
//
$previousSessionId = intval($dialog->session_id);
//
$session = WebSocketDialogSession::whereDialogId($dialog->id)->whereTitle('')->first();
if ($session) {
$dialog->session_id = $session->id;
@ -3596,6 +3598,8 @@ class DialogController extends AbstractController
$dialog->session_id = $session->id;
$dialog->save();
//
WebSocketDialogMsgRead::markSessionMessagesAsRead($dialog->id, $previousSessionId);
//
return Base::retSuccess('success', $session);
}

View File

@ -121,4 +121,30 @@ class WebSocketDialogMsgRead extends AbstractModel
DB::update($sql, $bindings);
}
}
/**
* 标记指定会话的历史消息为已读
* @param int $dialogId
* @param int $sessionId
* @param int $chunkSize
* @return void
*/
public static function markSessionMessagesAsRead(int $dialogId, int $sessionId, int $chunkSize = 100): void
{
if ($dialogId <= 0 || $sessionId <= 0) {
return;
}
self::whereDialogId($dialogId)
->whereNull('read_at')
->whereIn('msg_id', function ($query) use ($dialogId, $sessionId) {
$query->select('id')
->from((new WebSocketDialogMsg())->getTable())
->where('dialog_id', $dialogId)
->where('session_id', $sessionId);
})
->chunkById($chunkSize, function ($list) {
self::onlyMarkRead($list);
});
}
}