Ver código fonte

1.聊天已读区分接收者和发送者

fangzhen 6 meses atrás
pai
commit
56387b5fd8

+ 2 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/webSocket/WebSocketServer.java

@@ -251,7 +251,8 @@ public class WebSocketServer {
             chatMsg.setSenderId(senderId);
             chatMsg.setReceiverId(receiverId);
             chatMsg.setCreateBy(senderId);
-            chatMsg.setRead(false);
+            chatMsg.setSenderIsRead(true);
+            chatMsg.setReceiverIsRead(false);
             chatMsg.setType(type);
             chatMsg.setMessageType(messageType);
             chatMsg.setCreateTime(DateUtils.parseDate(DateUtils.getTime()));

+ 9 - 4
ruoyi-generator/src/main/java/com/ruoyi/generator/controller/CommunityChatMsgController.java

@@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -56,13 +57,11 @@ public class CommunityChatMsgController extends BaseController {
                 .orderByDesc("create_time"));
         //更新该消息标记为已读
         List<Long> msgId = chatMsgList.stream()
-                .filter(item -> !item.isRead())
+                .filter(item -> !item.isReceiverIsRead() && Objects.equals(item.getReceiverId(), SecurityUtils.getUserId()))
                 .map(CommunityChatMsg::getId)
                 .collect(Collectors.toList());
         if (!msgId.isEmpty()) {
-            CommunityChatMsg chatMsg = new CommunityChatMsg();
-            chatMsg.setRead(true);
-            communityChatMsgService.update(chatMsg, new UpdateWrapper<CommunityChatMsg>().in("id", msgId));
+            communityChatMsgService.update(new UpdateWrapper<CommunityChatMsg>().in("id", msgId).set("receiver_is_read", true));
         }
 
         List<CommunityChatMsgVo> chatMsgVos = new ArrayList<>();
@@ -72,6 +71,12 @@ public class CommunityChatMsgController extends BaseController {
             BeanUtils.copyProperties(chatMsg, chatMsgVo);
             SysUser senderUser = sysUserMapper.selectUserById(chatMsgVo.getSenderId());
             SysUser receiveUser = sysUserMapper.selectUserById(chatMsgVo.getReceiverId());
+            if (!msgId.isEmpty()) {
+                boolean contains = msgId.contains(chatMsg.getId());
+                if (contains) {
+                    chatMsgVo.setReceiverIsRead(true);
+                }
+            }
             chatMsgVo.setSenderNickName(senderUser.getNickName());
             chatMsgVo.setSenderAvatar(senderUser.getAvatar());
             chatMsgVo.setReceiverNickName(receiveUser.getNickName());

+ 6 - 2
ruoyi-system/src/main/java/com/ruoyi/system/domain/CommunityChatMsg.java

@@ -71,9 +71,13 @@ public class CommunityChatMsg implements Serializable {
      */
     private int messageType;
     /**
-     * 是否已读
+     * 是否已读(发送人)
      */
-    private boolean isRead;
+    private boolean senderIsRead;
+    /**
+     * 是否已读(接收人)
+     */
+    private boolean receiverIsRead;
     /**
     * 创建时间
     */

+ 6 - 2
ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/CommunityChatMsgVo.java

@@ -83,9 +83,13 @@ public class CommunityChatMsgVo implements Serializable {
      */
     private int messageType;
     /**
-     * 是否已读
+     * 是否已读(接收人)
      */
-    private boolean isRead;
+    private boolean receiverIsRead;
+    /**
+     * 是否已读(发送人)
+     */
+    private boolean senderIsRead;
     /**
     * 创建时间
     */

+ 1 - 1
ruoyi-system/src/main/resources/mapper/system/CommunityChatMsgMapper.xml

@@ -9,7 +9,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                u.user_name                                                           as username,
                u.avatar                                                              as avatar,
                (SELECT u2.nick_name from sys_user u2 where u2.user_id = r.sender_id) as senderNickName,
-               r.is_read                                                             as isRead,
+               r.receiver_is_read                                                             as isRead,
                r.content                                                             AS msg,
                r.create_time                                                         AS msgTime
         FROM (SELECT CASE