diff --git a/im-platform/src/main/java/com/bx/implatform/controller/third/ThirdUserController.java b/im-platform/src/main/java/com/bx/implatform/controller/third/ThirdUserController.java index bc8f684..ecd357d 100644 --- a/im-platform/src/main/java/com/bx/implatform/controller/third/ThirdUserController.java +++ b/im-platform/src/main/java/com/bx/implatform/controller/third/ThirdUserController.java @@ -3,11 +3,13 @@ package com.bx.implatform.controller.third; import com.bx.implatform.dto.third.user.ThirdCreateOrUpdateUserDTO; import com.bx.implatform.dto.third.user.ThirdGetUserByUserIdDTO; import com.bx.implatform.dto.third.user.ThirdLoginDTO; +import com.bx.implatform.dto.third.user.ThirdUserOnLineStatusDto; import com.bx.implatform.result.Result; import com.bx.implatform.result.ResultUtils; import com.bx.implatform.service.third.ThirdUserService; import com.bx.implatform.vo.third.user.ThirdGetUserByUserIdVO; import com.bx.implatform.vo.third.user.ThirdLoginVO; +import com.bx.implatform.vo.third.user.ThirdUserOnLineStatusVo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; @@ -15,6 +17,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; +import java.util.List; + @Slf4j @RestController @RequestMapping("/third/user") @@ -44,4 +48,10 @@ public class ThirdUserController { return ResultUtils.success(); } + @PostMapping("/getUserOnlineStatusById") + @Operation(summary = "查询用户在线状态", description = "查询用户在线状态") + public Result> getUserOnlineStatusById(@Valid @RequestBody ThirdUserOnLineStatusDto dto) { + return ResultUtils.success(thirdUserService.getUserOnlineStatusById(dto)); + } + } diff --git a/im-platform/src/main/java/com/bx/implatform/dto/third/user/ThirdUserOnLineStatusDto.java b/im-platform/src/main/java/com/bx/implatform/dto/third/user/ThirdUserOnLineStatusDto.java new file mode 100644 index 0000000..0bc080a --- /dev/null +++ b/im-platform/src/main/java/com/bx/implatform/dto/third/user/ThirdUserOnLineStatusDto.java @@ -0,0 +1,17 @@ +package com.bx.implatform.dto.third.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +/** + * 查询用户在线状态 + */ +@Data +public class ThirdUserOnLineStatusDto { + + @Schema(description = "用户ids") + private List userIdList; + +} diff --git a/im-platform/src/main/java/com/bx/implatform/service/third/ThirdUserService.java b/im-platform/src/main/java/com/bx/implatform/service/third/ThirdUserService.java index 79e561d..bddbc61 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/third/ThirdUserService.java +++ b/im-platform/src/main/java/com/bx/implatform/service/third/ThirdUserService.java @@ -4,11 +4,15 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.bx.implatform.dto.third.user.ThirdCreateOrUpdateUserDTO; import com.bx.implatform.dto.third.user.ThirdGetUserByUserIdDTO; import com.bx.implatform.dto.third.user.ThirdLoginDTO; +import com.bx.implatform.dto.third.user.ThirdUserOnLineStatusDto; import com.bx.implatform.entity.User; import com.bx.implatform.vo.third.user.ThirdGetUserByUserIdVO; import com.bx.implatform.vo.third.user.ThirdLoginVO; +import com.bx.implatform.vo.third.user.ThirdUserOnLineStatusVo; import jakarta.validation.Valid; +import java.util.List; + public interface ThirdUserService extends IService { /** @@ -25,4 +29,9 @@ public interface ThirdUserService extends IService { * 根据userId查询用户详情 */ ThirdGetUserByUserIdVO getUserByUserId(@Valid ThirdGetUserByUserIdDTO dto); + + /** + * 查询用户在线状态 + */ + List getUserOnlineStatusById(@Valid ThirdUserOnLineStatusDto dto); } diff --git a/im-platform/src/main/java/com/bx/implatform/service/third/impl/ThirdUserServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/third/impl/ThirdUserServiceImpl.java index 35fb55a..877cab8 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/third/impl/ThirdUserServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/third/impl/ThirdUserServiceImpl.java @@ -2,12 +2,15 @@ package com.bx.implatform.service.third.impl; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bx.imclient.IMClient; import com.bx.imcommon.util.JwtUtil; import com.bx.implatform.config.props.JwtProperties; import com.bx.implatform.dto.third.user.ThirdCreateOrUpdateUserDTO; import com.bx.implatform.dto.third.user.ThirdGetUserByUserIdDTO; import com.bx.implatform.dto.third.user.ThirdLoginDTO; +import com.bx.implatform.dto.third.user.ThirdUserOnLineStatusDto; import com.bx.implatform.entity.User; import com.bx.implatform.exception.GlobalException; import com.bx.implatform.mapper.UserMapper; @@ -16,11 +19,15 @@ import com.bx.implatform.session.UserSession; import com.bx.implatform.util.BeanUtils; import com.bx.implatform.vo.third.user.ThirdGetUserByUserIdVO; import com.bx.implatform.vo.third.user.ThirdLoginVO; +import com.bx.implatform.vo.third.user.ThirdUserOnLineStatusVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; + /** * 第三方用户 */ @@ -32,6 +39,8 @@ public class ThirdUserServiceImpl extends ServiceImpl implemen private final PasswordEncoder passwordEncoder; private final JwtProperties jwtProperties; + private final IMClient imClient; + /** * 用户登录 */ @@ -90,4 +99,24 @@ public class ThirdUserServiceImpl extends ServiceImpl implemen return BeanUtils.copyProperties(user, ThirdGetUserByUserIdVO.class); } + /** + * 查询用户在线状态 + */ + @Override + public List getUserOnlineStatusById(ThirdUserOnLineStatusDto dto) { + if (ObjectUtil.isEmpty(dto.getUserIdList())) { + return new ArrayList<>(); + } + List userIdList = baseMapper.selectList(new LambdaQueryWrapper() + .select(User::getId) + .in(User::getId, dto.getUserIdList()) + ); + return userIdList.stream().map(item -> { + ThirdUserOnLineStatusVo entity = new ThirdUserOnLineStatusVo(); + entity.setId(item.getId()); + entity.setOnline(imClient.isOnline(item.getId())); + return entity; + }).toList(); + } + } diff --git a/im-platform/src/main/java/com/bx/implatform/vo/third/user/ThirdUserOnLineStatusVo.java b/im-platform/src/main/java/com/bx/implatform/vo/third/user/ThirdUserOnLineStatusVo.java new file mode 100644 index 0000000..6e5eaa3 --- /dev/null +++ b/im-platform/src/main/java/com/bx/implatform/vo/third/user/ThirdUserOnLineStatusVo.java @@ -0,0 +1,18 @@ +package com.bx.implatform.vo.third.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 查询用户在线状态 + */ +@Data +public class ThirdUserOnLineStatusVo { + + @Schema(description = "用户id") + private Long id; + + @Schema(description = "是否在线") + private Boolean online; + +}