Explorar o código

conversationNo更新

dylanmay hai 10 meses
pai
achega
b49339d08b

+ 11 - 4
yudao-module-im/yudao-module-im-api/src/main/java/cn/iocoder/yudao/module/im/enums/conversation/ImConversationTypeEnum.java

@@ -41,11 +41,18 @@ public enum ImConversationTypeEnum implements IntArrayValuable {
      * @return 会话编号
      */
     public static String generateConversationNo(Long fromUserId, Long receiverId, Integer conversationType) {
-        if (conversationType.equals(ImConversationTypeEnum.SINGLE.getType())) {
-            return "s_" + fromUserId + "_" + receiverId;
-        } else if (conversationType.equals(ImConversationTypeEnum.GROUP.getType())) {
-            return "g_" + receiverId;
+        final String SINGLE_PREFIX = "s_";
+        final String GROUP_PREFIX = "g_";
+
+        if (ImConversationTypeEnum.SINGLE.getType().equals(conversationType)) {
+            long minId = Math.min(fromUserId, receiverId);
+            long maxId = Math.max(fromUserId, receiverId);
+            return SINGLE_PREFIX + minId + "_" + maxId;
+
+        } else if (ImConversationTypeEnum.GROUP.getType().equals(conversationType)) {
+            return GROUP_PREFIX + receiverId;
         }
+
         return null;
     }
 

+ 7 - 25
yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageServiceImpl.java

@@ -49,28 +49,15 @@ public class ImMessageServiceImpl implements ImMessageService {
     private ImGroupMemberService imGroupMemberService;
 
     @Override
-    public List<ImMessageDO> getMessageList(ImMessageListReqVO listReqVO) {
-        // TODO @dylan:userId 从 controller 传递,service 保持无状态
-        // 1. 获得会话编号
-        Long loginUserId = getLoginUserId();
-        // TODO @dylan:修复下 generateConversationNo 方法,fromUserId、receiverId 需要小的放前面,大的放后面。这样,可以保证一定只生成唯一的。
-        String no1 = generateConversationNo(loginUserId, listReqVO.getReceiverId(), listReqVO.getConversationType());
-        String no2 = generateConversationNo(listReqVO.getReceiverId(),loginUserId, listReqVO.getConversationType());
-
-        // 2. 查询历史消息
-        ImMessageDO message = new ImMessageDO()
-                .setSendTime(listReqVO.getSendTime())
-                .setConversationNo(no1);
-        List<ImMessageDO>  list = imMessageMapper.selectMessageList(message);
+    public List<ImMessageDO> getMessageList(ImMessageListReqVO listReqVO, Long loginUserId) {
 
-        if (!list.isEmpty()) {
-            return list;
-        }
+        String no = generateConversationNo(loginUserId, listReqVO.getReceiverId(), listReqVO.getConversationType());
 
-        message.setConversationNo(no2);
-        list = imMessageMapper.selectMessageList(message);
+        ImMessageDO message = new ImMessageDO()
+                .setSendTime(listReqVO.getSendTime())
+                .setConversationNo(no);
 
-        return list;
+        return imMessageMapper.selectMessageList(message);
     }
 
     @Override
@@ -110,12 +97,7 @@ public class ImMessageServiceImpl implements ImMessageService {
         AdminUserRespDTO fromUser = adminUserApi.getUser(fromUserId);
 
         // 3. 生成conversationNo
-        String conversationNo = "";
-        if (fromUserId == message.getConversationUserId()) {
-            conversationNo = generateConversationNo(fromUserId, message.getReceiverId(), message.getConversationType());
-        } else {
-            conversationNo = generateConversationNo(message.getReceiverId(), fromUserId, message.getConversationType());
-        }
+        String conversationNo = generateConversationNo(fromUserId, message.getReceiverId(), message.getConversationType());
 
         // 4. 保存消息
         ImMessageDO imMessageDO = BeanUtil.copyProperties(message, ImMessageDO.class)