Commit 843cc90b872758743735b588b56029dbe9b07d84

Authored by YunaiV
1 parent 106cf1c9

✨ feat(im): 好友/群成员添加增加唯一索引并发兼容

- ImFriendServiceImpl#addFriend0 捕获 DuplicateKeyException
  并发插入冲突时忽略(另一方插入必然为 ENABLE 状态)
- ImGroupMemberServiceImpl#addGroupMember 改为先查后写:
  已存在 DISABLE 复活为 ENABLE,新记录 insert 失败降级 select 返回
- ImGroupMemberServiceImpl#addGroupMembers 批量 insert 触发
  DuplicateKey 时降级为逐个 addGroupMember 走幂等兜底
- 依赖 im_friend.uk_user_friend 与 im_group_member.uk_group_user 唯一索引
yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/friend/ImFriendServiceImpl.java
@@ -137,7 +137,7 @@ public class ImFriendServiceImpl implements ImFriendService { @@ -137,7 +137,7 @@ public class ImFriendServiceImpl implements ImFriendService {
137 * - 已存在且 ENABLE:无需重复操作 137 * - 已存在且 ENABLE:无需重复操作
138 * - 已存在但 DISABLE:恢复关系(status=ENABLE,刷新 addTime,清空 deleteTime) 138 * - 已存在但 DISABLE:恢复关系(status=ENABLE,刷新 addTime,清空 deleteTime)
139 * <p> 139 * <p>
140 - * 并发安全:依靠 im_friend 表的唯一索引 uk_user_friend(user_id, friend_user_id) 保证幂等, 140 + * 并发安全:依靠 im_friend 表的唯一索引 uk_im_friend_user_friend(user_id, friend_user_id) 保证幂等,
141 * 当并发 insert 触发 {@link DuplicateKeyException} 时降级为 select + update。 141 * 当并发 insert 触发 {@link DuplicateKeyException} 时降级为 select + update。
142 */ 142 */
143 @CacheEvict(cacheNames = FRIEND, key = "#userId + '_' + #friendUserId") 143 @CacheEvict(cacheNames = FRIEND, key = "#userId + '_' + #friendUserId")
yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupMemberServiceImpl.java
@@ -66,7 +66,7 @@ public class ImGroupMemberServiceImpl implements ImGroupMemberService { @@ -66,7 +66,7 @@ public class ImGroupMemberServiceImpl implements ImGroupMemberService {
66 } 66 }
67 67
68 /** 68 /**
69 - * 并发安全:依靠 im_group_member 表的唯一索引 uk_group_user(group_id, user_id) 保证幂等, 69 + * 并发安全:依靠 im_group_member 表的唯一索引 uk_im_group_member_group_user(group_id, user_id) 保证幂等,
70 * 当并发 insert 触发 {@link DuplicateKeyException} 时降级为 select + update。 70 * 当并发 insert 触发 {@link DuplicateKeyException} 时降级为 select + update。
71 */ 71 */
72 @Override 72 @Override