Procházet zdrojové kódy

修复消息乱序的bug

xie.bx před 2 roky
rodič
revize
133d94a3a4

+ 2 - 0
im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.bx.imclient.IMClient;
 import com.bx.imcommon.contant.IMConstant;
+import com.bx.implatform.entity.PrivateMessage;
 import com.bx.implatform.util.DateTimeUtils;
 import com.bx.implatform.vo.GroupMessageVO;
 import com.bx.imcommon.model.IMGroupMessage;
@@ -204,6 +205,7 @@ public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, Gro
                 .gt(GroupMessage::getSendTime, minDate)
                 .in(GroupMessage::getGroupId, ids)
                 .ne(GroupMessage::getStatus, MessageStatus.RECALL.code())
+                .orderByAsc(GroupMessage::getId)
                 .last("limit 100");
 
         List<GroupMessage> messages = this.list(wrapper);

+ 10 - 9
im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java

@@ -191,7 +191,7 @@ public class PrivateMessageServiceImpl extends ServiceImpl<PrivateMessageMapper,
     /**
      * 拉取消息,只能拉取最近3个月的消息,一次拉取100条
      *
-     * @param minId  消息起始id
+     * @param minId 消息起始id
      * @return 聊天消息列表
      */
     @Override
@@ -212,8 +212,9 @@ public class PrivateMessageServiceImpl extends ServiceImpl<PrivateMessageMapper,
                 .and(wrap -> wrap.and(
                         wp -> wp.eq(PrivateMessage::getSendId, session.getUserId())
                                 .in(PrivateMessage::getRecvId, friendIds))
-                                .or(wp -> wp.eq(PrivateMessage::getRecvId, session.getUserId())
-                                        .in(PrivateMessage::getSendId, friendIds)))
+                        .or(wp -> wp.eq(PrivateMessage::getRecvId, session.getUserId())
+                                .in(PrivateMessage::getSendId, friendIds)))
+                .orderByAsc(PrivateMessage::getId)
                 .last("limit 100");
 
         List<PrivateMessage> messages = this.list(queryWrapper);
@@ -236,7 +237,7 @@ public class PrivateMessageServiceImpl extends ServiceImpl<PrivateMessageMapper,
     /**
      * 消息已读,将整个会话的消息都置为已读状态
      *
-     * @param friendId  好友id
+     * @param friendId 好友id
      */
     @Transactional
     @Override
@@ -257,11 +258,11 @@ public class PrivateMessageServiceImpl extends ServiceImpl<PrivateMessageMapper,
         imClient.sendPrivateMessage(sendMessage);
         // 修改消息状态为已读
         LambdaUpdateWrapper<PrivateMessage> updateWrapper = Wrappers.lambdaUpdate();
-        updateWrapper.eq(PrivateMessage::getSendId,friendId)
-                .eq(PrivateMessage::getRecvId,session.getUserId())
-                .eq(PrivateMessage::getStatus,MessageStatus.SENDED.code())
-                .set(PrivateMessage::getStatus,MessageStatus.READED.code());
+        updateWrapper.eq(PrivateMessage::getSendId, friendId)
+                .eq(PrivateMessage::getRecvId, session.getUserId())
+                .eq(PrivateMessage::getStatus, MessageStatus.SENDED.code())
+                .set(PrivateMessage::getStatus, MessageStatus.READED.code());
         this.update(updateWrapper);
-        log.info("消息已读,接收方id:{},发送方id:{}", session.getUserId(),friendId);
+        log.info("消息已读,接收方id:{},发送方id:{}", session.getUserId(), friendId);
     }
 }