|
@@ -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 = [];
|