Commit b49339d08b3517b9c854eecf04f2ee211385739b

Authored by dylanmay
1 parent 1f58fd2b

conversationNo更新

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,11 +41,18 @@ public enum ImConversationTypeEnum implements IntArrayValuable {
41 * @return 会话编号 41 * @return 会话编号
42 */ 42 */
43 public static String generateConversationNo(Long fromUserId, Long receiverId, Integer conversationType) { 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 return null; 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,28 +49,15 @@ public class ImMessageServiceImpl implements ImMessageService {
49 private ImGroupMemberService imGroupMemberService; 49 private ImGroupMemberService imGroupMemberService;
50 50
51 @Override 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 @Override 63 @Override
@@ -110,12 +97,7 @@ public class ImMessageServiceImpl implements ImMessageService { @@ -110,12 +97,7 @@ public class ImMessageServiceImpl implements ImMessageService {
110 AdminUserRespDTO fromUser = adminUserApi.getUser(fromUserId); 97 AdminUserRespDTO fromUser = adminUserApi.getUser(fromUserId);
111 98
112 // 3. 生成conversationNo 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 // 4. 保存消息 102 // 4. 保存消息
121 ImMessageDO imMessageDO = BeanUtil.copyProperties(message, ImMessageDO.class) 103 ImMessageDO imMessageDO = BeanUtil.copyProperties(message, ImMessageDO.class)