Browse Source

fix: 重复添加好友和进群的bug

master
xsx 9 months ago
parent
commit
3eefa14b27
  1. 11
      im-platform/src/main/java/com/bx/implatform/contant/RedisKey.java
  2. 3
      im-platform/src/main/java/com/bx/implatform/controller/FriendController.java
  3. 3
      im-platform/src/main/java/com/bx/implatform/service/FriendService.java
  4. 5
      im-platform/src/main/java/com/bx/implatform/service/impl/FriendServiceImpl.java
  5. 2
      im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java
  6. 2
      im-web/src/components/chat/ChatMessageItem.vue

11
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_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";
/** /**
* 分布式锁-清理过期文件 * 分布式锁-清理过期文件
*/ */

3
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.Result;
import com.bx.implatform.result.ResultUtils; import com.bx.implatform.result.ResultUtils;
import com.bx.implatform.service.FriendService; import com.bx.implatform.service.FriendService;
import com.bx.implatform.session.SessionContext;
import com.bx.implatform.vo.FriendVO; import com.bx.implatform.vo.FriendVO;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@ -34,7 +35,7 @@ public class FriendController {
@PostMapping("/add") @PostMapping("/add")
@Operation(summary = "添加好友", description = "双方建立好友关系") @Operation(summary = "添加好友", description = "双方建立好友关系")
public Result addFriend(@NotNull(message = "好友id不可为空") @RequestParam Long friendId) { public Result addFriend(@NotNull(message = "好友id不可为空") @RequestParam Long friendId) {
friendService.addFriend(friendId); friendService.addFriend(SessionContext.getSession().getUserId(),friendId);
return ResultUtils.success(); return ResultUtils.success();
} }

3
im-platform/src/main/java/com/bx/implatform/service/FriendService.java

@ -43,9 +43,10 @@ public interface FriendService extends IService<Friend> {
/** /**
* 添加好友互相建立好友关系 * 添加好友互相建立好友关系
* *
* @param userId 用户id
* @param friendId 好友的用户id * @param friendId 好友的用户id
*/ */
void addFriend(Long friendId); void addFriend(Long userId,Long friendId);
/** /**
* 删除好友双方都会解除好友关系 * 删除好友双方都会解除好友关系

5
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.enums.IMTerminalType;
import com.bx.imcommon.model.IMPrivateMessage; import com.bx.imcommon.model.IMPrivateMessage;
import com.bx.imcommon.model.IMUserInfo; import com.bx.imcommon.model.IMUserInfo;
import com.bx.implatform.annotation.RedisLock;
import com.bx.implatform.contant.RedisKey; import com.bx.implatform.contant.RedisKey;
import com.bx.implatform.dto.FriendDndDTO; import com.bx.implatform.dto.FriendDndDTO;
import com.bx.implatform.entity.Friend; import com.bx.implatform.entity.Friend;
@ -75,10 +76,10 @@ public class FriendServiceImpl extends ServiceImpl<FriendMapper, Friend> impleme
return friends.stream().map(this::conver).collect(Collectors.toList()); return friends.stream().map(this::conver).collect(Collectors.toList());
} }
@RedisLock(prefixKey = RedisKey.IM_LOCK_FRIEND_ADD, key = "#userId+':'+#friendId")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Override @Override
public void addFriend(Long friendId) { public void addFriend(Long userId, Long friendId) {
long userId = SessionContext.getSession().getUserId();
if (friendId.equals(userId)) { if (friendId.equals(userId)) {
throw new GlobalException("不允许添加自己为好友"); throw new GlobalException("不允许添加自己为好友");
} }

2
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.IMGroupMessage;
import com.bx.imcommon.model.IMUserInfo; import com.bx.imcommon.model.IMUserInfo;
import com.bx.imcommon.util.CommaTextUtils; import com.bx.imcommon.util.CommaTextUtils;
import com.bx.implatform.annotation.RedisLock;
import com.bx.implatform.contant.Constant; import com.bx.implatform.contant.Constant;
import com.bx.implatform.contant.RedisKey; import com.bx.implatform.contant.RedisKey;
import com.bx.implatform.dto.GroupDndDTO; import com.bx.implatform.dto.GroupDndDTO;
@ -251,6 +252,7 @@ public class GroupServiceImpl extends ServiceImpl<GroupMapper, Group> implements
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }
@RedisLock(prefixKey = RedisKey.IM_LOCK_GROUP_ENTER,key = "#dto.getGroupId()")
@Override @Override
public void invite(GroupInviteDTO dto) { public void invite(GroupInviteDTO dto) {
UserSession session = SessionContext.getSession(); UserSession session = SessionContext.getSession();

2
im-web/src/components/chat/ChatMessageItem.vue

@ -271,7 +271,7 @@ export default {
.message-content-wrapper { .message-content-wrapper {
position: relative; position: relative;
display: flex; display: flex;
align-items: end; align-items: flex-end;
.sending { .sending {
width: 25px; width: 25px;

Loading…
Cancel
Save