Browse Source

Merge branch '20241106_lj_chat' into dev

AI 5 months ago
parent
commit
d75c8d503f
1 changed files with 20 additions and 1 deletions
  1. 20 1
      app/JsonRpc/ChatService.php

+ 20 - 1
app/JsonRpc/ChatService.php

@@ -313,6 +313,7 @@ class ChatService implements ChatServiceInterface
         $userId = $data['user_id'];
         $unreadMessages = ChatRecords::where('user_id', $userId)
             ->where('is_read', 0)
+            ->where('action', 'recieved')
             ->leftJoin('user', 'chat_records.receiver_id', '=', 'user.id')
             ->leftJoin('chat_groups', 'chat_records.receiver_id', '=', 'chat_groups.id')
             ->select(
@@ -331,6 +332,7 @@ class ChatService implements ChatServiceInterface
         // 查询已读消息,并将 num 字段设置为 0
         $readMessages = ChatRecords::where('user_id', $userId)
             ->where('is_read', 1)
+            ->where('action', 'recieved')
             ->leftJoin('user', 'chat_records.receiver_id', '=', 'user.id')
             ->leftJoin('chat_groups', 'chat_records.receiver_id', '=', 'chat_groups.id')
             ->select(
@@ -347,7 +349,24 @@ class ChatService implements ChatServiceInterface
             ->get();
 
         // 合并未读消息和已读消息
-        $allMessages = array_merge($unreadMessages->toArray(), $readMessages->toArray());
+        // $allMessages = array_merge($unreadMessages->toArray(), $readMessages->toArray());
+        // 使用关联数组去重,并优先保留未读消息
+        $allMessages = [];
+        foreach ($unreadMessages as $message) {
+            $allMessages[$message['receiver_id']] = $message->toArray();
+        }
+
+        foreach ($readMessages as $message) {
+            if (strlen($message['receiver_id']) === 18) {
+                if (!isset($allMessages[$message['receiver_id']])) {
+                    $allMessages[$message['receiver_id']] = $message->toArray();
+                }
+            } else {
+                $allMessages[$message['receiver_id']] = $message->toArray();
+            }
+
+        }
+
         // var_dump($allMessages);
         // 处理结果,判断是否是群聊
         $formattedMessages = [];