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 137 * - 已存在且 ENABLE:无需重复操作
138 138 * - 已存在但 DISABLE:恢复关系(status=ENABLE,刷新 addTime,清空 deleteTime)
139 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 141 * 当并发 insert 触发 {@link DuplicateKeyException} 时降级为 select + update。
142 142 */
143 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 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 70 * 当并发 insert 触发 {@link DuplicateKeyException} 时降级为 select + update。
71 71 */
72 72 @Override
... ...