|
@@ -370,6 +370,55 @@ public class GroupsServiceImpl extends ServiceImpl<GroupsMapper, Groupss>
|
|
|
return Result.ERR(null, "成员角色更新失败");
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, timeout = 30)
|
|
|
+ public Result outGroup(OutGroupDto outGroupDto, Long currentUserId) {
|
|
|
+ if (outGroupDto.getGroupsId() == null || currentUserId == null) {
|
|
|
+ return Result.ERR(null, "参数不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查找群成员记录
|
|
|
+ LambdaQueryWrapper<GroupMembers> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(GroupMembers::getGroupId, outGroupDto.getGroupsId())
|
|
|
+ .eq(GroupMembers::getUserId, currentUserId);
|
|
|
+ GroupMembers memberToLeave = groupMembersMapper.selectOne(queryWrapper);
|
|
|
+
|
|
|
+ if (memberToLeave == null) {
|
|
|
+ return Result.ERR(null, "您不是该群的成员");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检查是否为群主
|
|
|
+ if (memberToLeave.getRole() == 2) {
|
|
|
+ // 如果是群主,提示需要解散群聊
|
|
|
+ return Result.ERR(null, "群主不能直接退出群聊,请使用解散群聊功能");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 删除群成员记录
|
|
|
+ int rowsAffected = groupMembersMapper.deleteById(memberToLeave);
|
|
|
+ UserShouye userShouye = userShouyeMapper.selectOne(new LambdaQueryWrapper<UserShouye>().eq(UserShouye::getUid1, currentUserId).eq(UserShouye::getGid, outGroupDto.getGroupsId()));
|
|
|
+ if(userShouye != null) {
|
|
|
+ userShouyeMapper.deleteById(userShouye);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (rowsAffected > 0) {
|
|
|
+ // 更新群成员缓存
|
|
|
+ List<GroupMembers> remainingMembers = groupMembersService.list(
|
|
|
+ new LambdaQueryWrapper<GroupMembers>()
|
|
|
+ .eq(GroupMembers::getGroupId, outGroupDto.getGroupsId())
|
|
|
+ );
|
|
|
+ List<Long> memberIds = remainingMembers.stream()
|
|
|
+ .map(GroupMembers::getUserId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ groupMemberCache.updateGroupMembers(outGroupDto.getGroupsId(), memberIds);
|
|
|
+ return Result.OK(null, "成功退出群聊");
|
|
|
+ } else {
|
|
|
+ return Result.ERR(null, "退出群聊失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|