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,8 +105,9 @@ public class ImPrivateMessageServiceImpl implements ImPrivateMessageService { | ||
| 105 | privateMessageMapper.updateByIdsAndStatus(messageIds, ImMessageStatusEnum.UNREAD.getStatus(), | 105 | privateMessageMapper.updateByIdsAndStatus(messageIds, ImMessageStatusEnum.UNREAD.getStatus(), |
| 106 | new ImPrivateMessageDO().setStatus(ImMessageStatusEnum.READ.getStatus())); | 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 | @Override | 113 | @Override |
| @@ -134,8 +135,7 @@ public class ImPrivateMessageServiceImpl implements ImPrivateMessageService { | @@ -134,8 +135,7 @@ public class ImPrivateMessageServiceImpl implements ImPrivateMessageService { | ||
| 134 | .setStatus(ImMessageStatusEnum.RECALL.getStatus())); | 135 | .setStatus(ImMessageStatusEnum.RECALL.getStatus())); |
| 135 | 136 | ||
| 136 | // 3. 插入一条 TIP_TEXT 消息作为撤回提示 | 137 | // 3. 插入一条 TIP_TEXT 消息作为撤回提示 |
| 137 | - RecallMessage recallContent = new RecallMessage() | ||
| 138 | - .setMessageId(messageId); | 138 | + RecallMessage recallContent = new RecallMessage().setMessageId(messageId); |
| 139 | ImPrivateMessageDO tipMessage = new ImPrivateMessageDO().setClientMessageId(IdUtil.fastSimpleUUID()) | 139 | ImPrivateMessageDO tipMessage = new ImPrivateMessageDO().setClientMessageId(IdUtil.fastSimpleUUID()) |
| 140 | .setSenderId(userId).setReceiverId(message.getReceiverId()) | 140 | .setSenderId(userId).setReceiverId(message.getReceiverId()) |
| 141 | .setType(ImMessageTypeEnum.TIP_TEXT.getType()).setContent(JsonUtils.toJsonString(recallContent)) | 141 | .setType(ImMessageTypeEnum.TIP_TEXT.getType()).setContent(JsonUtils.toJsonString(recallContent)) |
| @@ -152,14 +152,14 @@ public class ImPrivateMessageServiceImpl implements ImPrivateMessageService { | @@ -152,14 +152,14 @@ public class ImPrivateMessageServiceImpl implements ImPrivateMessageService { | ||
| 152 | */ | 152 | */ |
| 153 | @Async | 153 | @Async |
| 154 | public void sendPrivateMessageEvent(ImPrivateMessageDO message) { | 154 | public void sendPrivateMessageEvent(ImPrivateMessageDO message) { |
| 155 | - ImPrivateMessageSendMessage websocketMessage = BeanUtils.toBean(message, ImPrivateMessageSendMessage.class); | 155 | + ImPrivateMessageDTO dto = ImPrivateMessageDTO.ofSend(message); |
| 156 | // 推送给接收方 | 156 | // 推送给接收方 |
| 157 | webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), message.getReceiverId(), | 157 | webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), message.getReceiverId(), |
| 158 | - ImPrivateMessageSendMessage.TYPE, websocketMessage); | 158 | + ImPrivateMessageDTO.TYPE, dto); |
| 159 | 159 | ||
| 160 | // 推送给发送方自己的其他终端(多端同步) | 160 | // 推送给发送方自己的其他终端(多端同步) |
| 161 | webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), message.getSenderId(), | 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,18 +167,17 @@ public class ImPrivateMessageServiceImpl implements ImPrivateMessageService { | ||
| 167 | * | 167 | * |
| 168 | * @param userId 当前用户编号 | 168 | * @param userId 当前用户编号 |
| 169 | * @param receiverId 对方用户编号 | 169 | * @param receiverId 对方用户编号 |
| 170 | + * @param maxReadId 已读位置(最大已读消息编号) | ||
| 170 | */ | 171 | */ |
| 171 | @Async | 172 | @Async |
| 172 | - public void readPrivateMessageEvent(Long userId, Long receiverId) { | 173 | + public void readPrivateMessageEvent(Long userId, Long receiverId, Long maxReadId) { |
| 173 | // 1. 发送 READ 事件给自己的其他终端(多端同步) | 174 | // 1. 发送 READ 事件给自己的其他终端(多端同步) |
| 174 | - ImMessageReadMessage readMessage = new ImMessageReadMessage() | ||
| 175 | - .setReceiverId(receiverId).setScene(ImMessageSceneEnum.PRIVATE.getScene()); | 175 | + ImPrivateMessageDTO readDto = ImPrivateMessageDTO.ofRead(userId, receiverId, maxReadId); |
| 176 | webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), userId, | 176 | webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), userId, |
| 177 | - ImMessageReadMessage.TYPE, readMessage); | 177 | + ImPrivateMessageDTO.TYPE, readDto); |
| 178 | 178 | ||
| 179 | // 2. 发送 RECEIPT 事件给对方(已读回执) | 179 | // 2. 发送 RECEIPT 事件给对方(已读回执) |
| 180 | - ImMessageReceiptMessage receiptMessage = new ImMessageReceiptMessage() | ||
| 181 | - .setReceiverId(userId).setScene(ImMessageSceneEnum.PRIVATE.getScene()); | 180 | + ImPrivateMessageDTO receiptDto = ImPrivateMessageDTO.ofReceipt(userId, receiverId, maxReadId); |
| 182 | webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), receiverId, | 181 | webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), receiverId, |
| 183 | ImPrivateMessageDTO.TYPE, receiptDto); | 182 | ImPrivateMessageDTO.TYPE, receiptDto); |
| 184 | } | 183 | } |