Commit ab35a13fc40560623f5c523d8f182a9cfc3ffe3e
1 parent
4ab95695
📝 docs(diff): 更新私聊已读位置文档,明确不再通过 HTTP 读取 maxReadId
Showing
1 changed file
with
12 additions
and
13 deletions
yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImPrivateMessageServiceImpl.java
| ... | ... | @@ -105,8 +105,9 @@ public class ImPrivateMessageServiceImpl implements ImPrivateMessageService { |
| 105 | 105 | privateMessageMapper.updateByIdsAndStatus(messageIds, ImMessageStatusEnum.UNREAD.getStatus(), |
| 106 | 106 | new ImPrivateMessageDO().setStatus(ImMessageStatusEnum.READ.getStatus())); |
| 107 | 107 | |
| 108 | - // 2. 异步发送 READ + RECEIPT 事件 | |
| 109 | - getSelf().readPrivateMessageEvent(userId, receiverId); | |
| 108 | + // 2. 异步发送 READ + RECEIPT 事件(携带已读位置) | |
| 109 | + Long maxReadId = CollUtil.max(messageIds); | |
| 110 | + getSelf().readPrivateMessageEvent(userId, receiverId, maxReadId); | |
| 110 | 111 | } |
| 111 | 112 | |
| 112 | 113 | @Override |
| ... | ... | @@ -134,8 +135,7 @@ public class ImPrivateMessageServiceImpl implements ImPrivateMessageService { |
| 134 | 135 | .setStatus(ImMessageStatusEnum.RECALL.getStatus())); |
| 135 | 136 | |
| 136 | 137 | // 3. 插入一条 TIP_TEXT 消息作为撤回提示 |
| 137 | - RecallMessage recallContent = new RecallMessage() | |
| 138 | - .setMessageId(messageId); | |
| 138 | + RecallMessage recallContent = new RecallMessage().setMessageId(messageId); | |
| 139 | 139 | ImPrivateMessageDO tipMessage = new ImPrivateMessageDO().setClientMessageId(IdUtil.fastSimpleUUID()) |
| 140 | 140 | .setSenderId(userId).setReceiverId(message.getReceiverId()) |
| 141 | 141 | .setType(ImMessageTypeEnum.TIP_TEXT.getType()).setContent(JsonUtils.toJsonString(recallContent)) |
| ... | ... | @@ -152,14 +152,14 @@ public class ImPrivateMessageServiceImpl implements ImPrivateMessageService { |
| 152 | 152 | */ |
| 153 | 153 | @Async |
| 154 | 154 | public void sendPrivateMessageEvent(ImPrivateMessageDO message) { |
| 155 | - ImPrivateMessageSendMessage websocketMessage = BeanUtils.toBean(message, ImPrivateMessageSendMessage.class); | |
| 155 | + ImPrivateMessageDTO dto = ImPrivateMessageDTO.ofSend(message); | |
| 156 | 156 | // 推送给接收方 |
| 157 | 157 | webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), message.getReceiverId(), |
| 158 | - ImPrivateMessageSendMessage.TYPE, websocketMessage); | |
| 158 | + ImPrivateMessageDTO.TYPE, dto); | |
| 159 | 159 | |
| 160 | 160 | // 推送给发送方自己的其他终端(多端同步) |
| 161 | 161 | webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), message.getSenderId(), |
| 162 | - ImPrivateMessageSendMessage.TYPE, websocketMessage); | |
| 162 | + ImPrivateMessageDTO.TYPE, dto); | |
| 163 | 163 | } |
| 164 | 164 | |
| 165 | 165 | /** |
| ... | ... | @@ -167,18 +167,17 @@ public class ImPrivateMessageServiceImpl implements ImPrivateMessageService { |
| 167 | 167 | * |
| 168 | 168 | * @param userId 当前用户编号 |
| 169 | 169 | * @param receiverId 对方用户编号 |
| 170 | + * @param maxReadId 已读位置(最大已读消息编号) | |
| 170 | 171 | */ |
| 171 | 172 | @Async |
| 172 | - public void readPrivateMessageEvent(Long userId, Long receiverId) { | |
| 173 | + public void readPrivateMessageEvent(Long userId, Long receiverId, Long maxReadId) { | |
| 173 | 174 | // 1. 发送 READ 事件给自己的其他终端(多端同步) |
| 174 | - ImMessageReadMessage readMessage = new ImMessageReadMessage() | |
| 175 | - .setReceiverId(receiverId).setScene(ImMessageSceneEnum.PRIVATE.getScene()); | |
| 175 | + ImPrivateMessageDTO readDto = ImPrivateMessageDTO.ofRead(userId, receiverId, maxReadId); | |
| 176 | 176 | webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), userId, |
| 177 | - ImMessageReadMessage.TYPE, readMessage); | |
| 177 | + ImPrivateMessageDTO.TYPE, readDto); | |
| 178 | 178 | |
| 179 | 179 | // 2. 发送 RECEIPT 事件给对方(已读回执) |
| 180 | - ImMessageReceiptMessage receiptMessage = new ImMessageReceiptMessage() | |
| 181 | - .setReceiverId(userId).setScene(ImMessageSceneEnum.PRIVATE.getScene()); | |
| 180 | + ImPrivateMessageDTO receiptDto = ImPrivateMessageDTO.ofReceipt(userId, receiverId, maxReadId); | |
| 182 | 181 | webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), receiverId, |
| 183 | 182 | ImPrivateMessageDTO.TYPE, receiptDto); |
| 184 | 183 | } | ... | ... |