diff --git a/yudao-module-im/yudao-module-im-api/src/main/java/cn/iocoder/yudao/module/im/enums/conversation/ImConversationTypeEnum.java b/yudao-module-im/yudao-module-im-api/src/main/java/cn/iocoder/yudao/module/im/enums/conversation/ImConversationTypeEnum.java index a72ae7b3ea..d51dc78b60 100644 --- a/yudao-module-im/yudao-module-im-api/src/main/java/cn/iocoder/yudao/module/im/enums/conversation/ImConversationTypeEnum.java +++ b/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; } diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageServiceImpl.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageServiceImpl.java index 1f0c43eb1e..341d9f3242 100755 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageServiceImpl.java +++ b/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 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()); + public List getMessageList(ImMessageListReqVO listReqVO, Long loginUserId) { + + String no = generateConversationNo(loginUserId, listReqVO.getReceiverId(), listReqVO.getConversationType()); - // 2. 查询历史消息 ImMessageDO message = new ImMessageDO() .setSendTime(listReqVO.getSendTime()) - .setConversationNo(no1); - List list = imMessageMapper.selectMessageList(message); + .setConversationNo(no); - if (!list.isEmpty()) { - return list; - } - - message.setConversationNo(no2); - list = imMessageMapper.selectMessageList(message); - - 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)