From 3eefa14b27b54d98a153e01ad59fe19f5a9fd78f Mon Sep 17 00:00:00 2001 From: xsx <825657193@qq.com> Date: Tue, 22 Jul 2025 00:18:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=87=8D=E5=A4=8D=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=A5=BD=E5=8F=8B=E5=92=8C=E8=BF=9B=E7=BE=A4=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/bx/implatform/contant/RedisKey.java | 11 +++++++++++ .../bx/implatform/controller/FriendController.java | 3 ++- .../java/com/bx/implatform/service/FriendService.java | 3 ++- .../bx/implatform/service/impl/FriendServiceImpl.java | 5 +++-- .../bx/implatform/service/impl/GroupServiceImpl.java | 2 ++ im-web/src/components/chat/ChatMessageItem.vue | 2 +- 6 files changed, 21 insertions(+), 5 deletions(-) diff --git a/im-platform/src/main/java/com/bx/implatform/contant/RedisKey.java b/im-platform/src/main/java/com/bx/implatform/contant/RedisKey.java index 7793598..e19c8aa 100644 --- a/im-platform/src/main/java/com/bx/implatform/contant/RedisKey.java +++ b/im-platform/src/main/java/com/bx/implatform/contant/RedisKey.java @@ -53,6 +53,17 @@ public final class RedisKey { */ public static final String IM_REPEAT_SUBMIT = "im:repeat:submit"; + /** + * 分布式锁-添加好友 + */ + public static final String IM_LOCK_FRIEND_ADD = "im:lock:friend:add"; + + /** + * 分布式锁-进入群聊 + */ + public static final String IM_LOCK_GROUP_ENTER = "im:lock:group:enter"; + + /** * 分布式锁-清理过期文件 */ diff --git a/im-platform/src/main/java/com/bx/implatform/controller/FriendController.java b/im-platform/src/main/java/com/bx/implatform/controller/FriendController.java index 3b54fa0..76e6e5f 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/FriendController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/FriendController.java @@ -5,6 +5,7 @@ import com.bx.implatform.dto.FriendDndDTO; import com.bx.implatform.result.Result; import com.bx.implatform.result.ResultUtils; import com.bx.implatform.service.FriendService; +import com.bx.implatform.session.SessionContext; import com.bx.implatform.vo.FriendVO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -34,7 +35,7 @@ public class FriendController { @PostMapping("/add") @Operation(summary = "添加好友", description = "双方建立好友关系") public Result addFriend(@NotNull(message = "好友id不可为空") @RequestParam Long friendId) { - friendService.addFriend(friendId); + friendService.addFriend(SessionContext.getSession().getUserId(),friendId); return ResultUtils.success(); } diff --git a/im-platform/src/main/java/com/bx/implatform/service/FriendService.java b/im-platform/src/main/java/com/bx/implatform/service/FriendService.java index 282a090..d25a850 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/FriendService.java +++ b/im-platform/src/main/java/com/bx/implatform/service/FriendService.java @@ -43,9 +43,10 @@ public interface FriendService extends IService { /** * 添加好友,互相建立好友关系 * + * @param userId 用户id * @param friendId 好友的用户id */ - void addFriend(Long friendId); + void addFriend(Long userId,Long friendId); /** * 删除好友,双方都会解除好友关系 diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/FriendServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/FriendServiceImpl.java index ec7beec..e0b10ad 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/FriendServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/FriendServiceImpl.java @@ -10,6 +10,7 @@ import com.bx.imclient.IMClient; import com.bx.imcommon.enums.IMTerminalType; import com.bx.imcommon.model.IMPrivateMessage; import com.bx.imcommon.model.IMUserInfo; +import com.bx.implatform.annotation.RedisLock; import com.bx.implatform.contant.RedisKey; import com.bx.implatform.dto.FriendDndDTO; import com.bx.implatform.entity.Friend; @@ -75,10 +76,10 @@ public class FriendServiceImpl extends ServiceImpl impleme return friends.stream().map(this::conver).collect(Collectors.toList()); } + @RedisLock(prefixKey = RedisKey.IM_LOCK_FRIEND_ADD, key = "#userId+':'+#friendId") @Transactional(rollbackFor = Exception.class) @Override - public void addFriend(Long friendId) { - long userId = SessionContext.getSession().getUserId(); + public void addFriend(Long userId, Long friendId) { if (friendId.equals(userId)) { throw new GlobalException("不允许添加自己为好友"); } diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java index 9437908..34daed1 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java @@ -10,6 +10,7 @@ import com.bx.imclient.IMClient; import com.bx.imcommon.model.IMGroupMessage; import com.bx.imcommon.model.IMUserInfo; import com.bx.imcommon.util.CommaTextUtils; +import com.bx.implatform.annotation.RedisLock; import com.bx.implatform.contant.Constant; import com.bx.implatform.contant.RedisKey; import com.bx.implatform.dto.GroupDndDTO; @@ -251,6 +252,7 @@ public class GroupServiceImpl extends ServiceImpl implements }).collect(Collectors.toList()); } + @RedisLock(prefixKey = RedisKey.IM_LOCK_GROUP_ENTER,key = "#dto.getGroupId()") @Override public void invite(GroupInviteDTO dto) { UserSession session = SessionContext.getSession(); diff --git a/im-web/src/components/chat/ChatMessageItem.vue b/im-web/src/components/chat/ChatMessageItem.vue index a59a3d2..068a003 100644 --- a/im-web/src/components/chat/ChatMessageItem.vue +++ b/im-web/src/components/chat/ChatMessageItem.vue @@ -271,7 +271,7 @@ export default { .message-content-wrapper { position: relative; display: flex; - align-items: end; + align-items: flex-end; .sending { width: 25px;