diff --git a/app/chat/controller/MessageController.php b/app/chat/controller/MessageController.php index 6e46aa9..e55661f 100644 --- a/app/chat/controller/MessageController.php +++ b/app/chat/controller/MessageController.php @@ -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]); } /**