Browse Source

fix: 消息送达状态异常的bug

master
xsx 5 months ago
parent
commit
c328524c9f
  1. 12
      im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java
  2. 6
      im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java

12
im-platform/src/main/java/com/bx/implatform/listener/PrivateMessageListener.java

@ -26,19 +26,23 @@ public class PrivateMessageListener implements MessageListener<PrivateMessageVO>
@Lazy @Lazy
@Autowired @Autowired
private PrivateMessageService privateMessageService; private PrivateMessageService privateMessageService;
@Override @Override
public void process(List<IMSendResult<PrivateMessageVO>> results) { public void process(List<IMSendResult<PrivateMessageVO>> results) {
Set<Long> messageIds = new HashSet<>(); Set<Long> messageIds = new HashSet<>();
for(IMSendResult<PrivateMessageVO> result : results){ for (IMSendResult<PrivateMessageVO> result : results) {
PrivateMessageVO messageInfo = result.getData(); PrivateMessageVO messageInfo = result.getData();
// 更新消息状态,这里只处理成功消息,失败的消息继续保持未读状态 // 更新消息状态,这里只处理成功消息,失败的消息继续保持未读状态
if (result.getCode().equals(IMSendCode.SUCCESS.code()) && !Objects.isNull(messageInfo.getId())) { if (result.getCode().equals(IMSendCode.SUCCESS.code()) && !Objects.isNull(messageInfo.getId())) {
messageIds.add(messageInfo.getId()); if (result.getReceiver().getId().equals(messageInfo.getRecvId())) {
log.info("消息送达,消息id:{},发送者:{},接收者:{},终端:{}", messageInfo.getId(), result.getSender().getId(), result.getReceiver().getId(), result.getReceiver().getTerminal()); messageIds.add(messageInfo.getId());
log.info("消息送达,消息id:{},发送者:{},接收者:{},终端:{}", messageInfo.getId(),
result.getSender().getId(), result.getReceiver().getId(), result.getReceiver().getTerminal());
}
} }
} }
// 批量修改状态 // 批量修改状态
if(CollUtil.isNotEmpty(messageIds)){ if (CollUtil.isNotEmpty(messageIds)) {
UpdateWrapper<PrivateMessage> updateWrapper = new UpdateWrapper<>(); UpdateWrapper<PrivateMessage> updateWrapper = new UpdateWrapper<>();
updateWrapper.lambda().in(PrivateMessage::getId, messageIds) updateWrapper.lambda().in(PrivateMessage::getId, messageIds)
.eq(PrivateMessage::getStatus, MessageStatus.PENDING.code()) .eq(PrivateMessage::getStatus, MessageStatus.PENDING.code())

6
im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java

@ -189,9 +189,9 @@ public class PrivateMessageServiceImpl extends ServiceImpl<PrivateMessageMapper,
wrapper.orderByAsc(PrivateMessage::getId); wrapper.orderByAsc(PrivateMessage::getId);
List<PrivateMessage> messages = this.list(wrapper); List<PrivateMessage> messages = this.list(wrapper);
// 更新消息为送达状态 // 更新消息为送达状态
List<Long> messageIds = List<Long> messageIds = messages.stream().filter(m -> m.getRecvId().equals(session.getUserId()))
messages.stream().filter(m -> m.getStatus().equals(MessageStatus.PENDING.code())).map(PrivateMessage::getId) .filter(m -> m.getStatus().equals(MessageStatus.PENDING.code())).map(PrivateMessage::getId)
.collect(Collectors.toList()); .collect(Collectors.toList());
if (!messageIds.isEmpty()) { if (!messageIds.isEmpty()) {
LambdaUpdateWrapper<PrivateMessage> updateWrapper = Wrappers.lambdaUpdate(); LambdaUpdateWrapper<PrivateMessage> updateWrapper = Wrappers.lambdaUpdate();
updateWrapper.in(PrivateMessage::getId, messageIds); updateWrapper.in(PrivateMessage::getId, messageIds);

Loading…
Cancel
Save