Commit b49339d08b3517b9c854eecf04f2ee211385739b
1 parent
1f58fd2b
conversationNo更新
Showing
2 changed files
with
18 additions
and
29 deletions
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 { |
| 41 | 41 | * @return 会话编号 |
| 42 | 42 | */ |
| 43 | 43 | public static String generateConversationNo(Long fromUserId, Long receiverId, Integer conversationType) { |
| 44 | - if (conversationType.equals(ImConversationTypeEnum.SINGLE.getType())) { | |
| 45 | - return "s_" + fromUserId + "_" + receiverId; | |
| 46 | - } else if (conversationType.equals(ImConversationTypeEnum.GROUP.getType())) { | |
| 47 | - return "g_" + receiverId; | |
| 44 | + final String SINGLE_PREFIX = "s_"; | |
| 45 | + final String GROUP_PREFIX = "g_"; | |
| 46 | + | |
| 47 | + if (ImConversationTypeEnum.SINGLE.getType().equals(conversationType)) { | |
| 48 | + long minId = Math.min(fromUserId, receiverId); | |
| 49 | + long maxId = Math.max(fromUserId, receiverId); | |
| 50 | + return SINGLE_PREFIX + minId + "_" + maxId; | |
| 51 | + | |
| 52 | + } else if (ImConversationTypeEnum.GROUP.getType().equals(conversationType)) { | |
| 53 | + return GROUP_PREFIX + receiverId; | |
| 48 | 54 | } |
| 55 | + | |
| 49 | 56 | return null; |
| 50 | 57 | } |
| 51 | 58 | ... | ... |
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 { |
| 49 | 49 | private ImGroupMemberService imGroupMemberService; |
| 50 | 50 | |
| 51 | 51 | @Override |
| 52 | - public List<ImMessageDO> getMessageList(ImMessageListReqVO listReqVO) { | |
| 53 | - // TODO @dylan:userId 从 controller 传递,service 保持无状态 | |
| 54 | - // 1. 获得会话编号 | |
| 55 | - Long loginUserId = getLoginUserId(); | |
| 56 | - // TODO @dylan:修复下 generateConversationNo 方法,fromUserId、receiverId 需要小的放前面,大的放后面。这样,可以保证一定只生成唯一的。 | |
| 57 | - String no1 = generateConversationNo(loginUserId, listReqVO.getReceiverId(), listReqVO.getConversationType()); | |
| 58 | - String no2 = generateConversationNo(listReqVO.getReceiverId(),loginUserId, listReqVO.getConversationType()); | |
| 59 | - | |
| 60 | - // 2. 查询历史消息 | |
| 61 | - ImMessageDO message = new ImMessageDO() | |
| 62 | - .setSendTime(listReqVO.getSendTime()) | |
| 63 | - .setConversationNo(no1); | |
| 64 | - List<ImMessageDO> list = imMessageMapper.selectMessageList(message); | |
| 52 | + public List<ImMessageDO> getMessageList(ImMessageListReqVO listReqVO, Long loginUserId) { | |
| 65 | 53 | |
| 66 | - if (!list.isEmpty()) { | |
| 67 | - return list; | |
| 68 | - } | |
| 54 | + String no = generateConversationNo(loginUserId, listReqVO.getReceiverId(), listReqVO.getConversationType()); | |
| 69 | 55 | |
| 70 | - message.setConversationNo(no2); | |
| 71 | - list = imMessageMapper.selectMessageList(message); | |
| 56 | + ImMessageDO message = new ImMessageDO() | |
| 57 | + .setSendTime(listReqVO.getSendTime()) | |
| 58 | + .setConversationNo(no); | |
| 72 | 59 | |
| 73 | - return list; | |
| 60 | + return imMessageMapper.selectMessageList(message); | |
| 74 | 61 | } |
| 75 | 62 | |
| 76 | 63 | @Override |
| ... | ... | @@ -110,12 +97,7 @@ public class ImMessageServiceImpl implements ImMessageService { |
| 110 | 97 | AdminUserRespDTO fromUser = adminUserApi.getUser(fromUserId); |
| 111 | 98 | |
| 112 | 99 | // 3. 生成conversationNo |
| 113 | - String conversationNo = ""; | |
| 114 | - if (fromUserId == message.getConversationUserId()) { | |
| 115 | - conversationNo = generateConversationNo(fromUserId, message.getReceiverId(), message.getConversationType()); | |
| 116 | - } else { | |
| 117 | - conversationNo = generateConversationNo(message.getReceiverId(), fromUserId, message.getConversationType()); | |
| 118 | - } | |
| 100 | + String conversationNo = generateConversationNo(fromUserId, message.getReceiverId(), message.getConversationType()); | |
| 119 | 101 | |
| 120 | 102 | // 4. 保存消息 |
| 121 | 103 | ImMessageDO imMessageDO = BeanUtil.copyProperties(message, ImMessageDO.class) | ... | ... |