Browse Source

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

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

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

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

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

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

Loading…
Cancel
Save