mirror of
https://gitee.com/zhijiantianya/ruoyi-vue-pro.git
synced 2026-06-07 10:22:14 +08:00
✨ feat(im): 完善 friend、group 相关的本地存储(疯狂优化)
This commit is contained in:
@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
|
||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Parameters;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.validation.Valid;
|
||||
@ -51,11 +52,25 @@ public class ImGroupMemberController {
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得群成员")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@Parameters({
|
||||
@Parameter(name = "id", description = "编号(与 groupId + userId 二选一)", example = "1024"),
|
||||
@Parameter(name = "groupId", description = "群编号(与 userId 配合查)", example = "1"),
|
||||
@Parameter(name = "userId", description = "用户编号(与 groupId 配合查)", example = "100")
|
||||
})
|
||||
@PreAuthorize("@ss.hasPermission('im:group-member:query')")
|
||||
public CommonResult<ImGroupMemberRespVO> getGroupMember(@RequestParam("id") Long id) {
|
||||
ImGroupMemberDO groupMember = groupMemberService.getGroupMember(id);
|
||||
return success(BeanUtils.toBean(groupMember, ImGroupMemberRespVO.class));
|
||||
public CommonResult<ImGroupMemberRespVO> getGroupMember(@RequestParam(value = "id", required = false) Long id,
|
||||
@RequestParam(value = "groupId", required = false) Long groupId,
|
||||
@RequestParam(value = "userId", required = false) Long userId) {
|
||||
ImGroupMemberDO member;
|
||||
if (id != null) {
|
||||
member = groupMemberService.getGroupMember(id);
|
||||
} else if (groupId != null && userId != null) {
|
||||
member = groupMemberService.getGroupMember(groupId, userId);
|
||||
} else {
|
||||
// 避免 selectByGroupIdAndUserId 收到 null 参数走全表扫 / 抛 SQL 异常
|
||||
throw new IllegalArgumentException("参数缺失:需传 id 或 (groupId, userId)");
|
||||
}
|
||||
return success(BeanUtils.toBean(member, ImGroupMemberRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/list")
|
||||
@ -67,8 +82,8 @@ public class ImGroupMemberController {
|
||||
List<ImGroupMemberDO> members = groupMemberService.getGroupMemberListByGroupId(groupId);
|
||||
// 1.2 校验当前登录用户是否为群的有效成员,非成员不可查看
|
||||
Long loginUserId = getLoginUserId();
|
||||
if (CollUtil.findOne(members, m -> loginUserId.equals(m.getUserId())
|
||||
&& CommonStatusEnum.ENABLE.getStatus().equals(m.getStatus())) == null) {
|
||||
if (CollUtil.findOne(members, member -> loginUserId.equals(member.getUserId())
|
||||
&& CommonStatusEnum.ENABLE.getStatus().equals(member.getStatus())) == null) {
|
||||
throw exception(GROUP_MEMBER_NOT_IN_GROUP);
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,22 @@
|
||||
package cn.iocoder.yudao.module.im.controller.admin.manager.group.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
|
||||
@Schema(description = "管理后台 - IM 群聊封禁 Request VO")
|
||||
@Data
|
||||
public class ImGroupManagerBanReqVO {
|
||||
|
||||
@Schema(description = "群编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
@NotNull(message = "群编号不能为空")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "封禁原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "违规内容")
|
||||
@NotBlank(message = "封禁原因不能为空")
|
||||
@Size(max = 200, message = "封禁原因长度不能超过 200")
|
||||
private String reason;
|
||||
|
||||
}
|
||||
@ -0,0 +1,35 @@
|
||||
package cn.iocoder.yudao.module.im.controller.admin.manager.group.vo;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - IM 群聊分页 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class ImGroupManagerPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "群名称,模糊匹配", example = "技术交流群")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "群主用户编号", example = "1024")
|
||||
private Long ownerUserId;
|
||||
|
||||
@Schema(description = "群状态,参见 CommonStatusEnum 枚举类(0 正常 / 1 已解散)", example = "0")
|
||||
private Integer status;
|
||||
|
||||
@Schema(description = "是否封禁", example = "false")
|
||||
private Boolean banned;
|
||||
|
||||
// TODO DONE @AI:这个不太对,参考别的模块
|
||||
@Schema(description = "创建时间", example = "[2026-04-01 00:00:00, 2026-04-30 23:59:59]")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
}
|
||||
@ -0,0 +1,51 @@
|
||||
package cn.iocoder.yudao.module.im.controller.admin.manager.group.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Schema(description = "管理后台 - IM 群聊 Response VO")
|
||||
@Data
|
||||
public class ImGroupManagerRespVO {
|
||||
|
||||
@Schema(description = "群编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "群名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "技术交流群")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "群头像")
|
||||
private String avatar;
|
||||
|
||||
@Schema(description = "群公告")
|
||||
private String notice;
|
||||
|
||||
@Schema(description = "群主用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Long ownerUserId;
|
||||
|
||||
@Schema(description = "群主昵称", example = "张三")
|
||||
private String ownerNickname;
|
||||
|
||||
@Schema(description = "群成员数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "12")
|
||||
private Integer memberCount;
|
||||
|
||||
@Schema(description = "群状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
|
||||
private Integer status; // 参见 CommonStatusEnum 枚举类
|
||||
|
||||
@Schema(description = "解散时间")
|
||||
private LocalDateTime dissolvedTime;
|
||||
|
||||
@Schema(description = "是否封禁", requiredMode = Schema.RequiredMode.REQUIRED, example = "false")
|
||||
private Boolean banned;
|
||||
|
||||
@Schema(description = "封禁原因")
|
||||
private String bannedReason;
|
||||
|
||||
@Schema(description = "封禁时间")
|
||||
private LocalDateTime bannedTime;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
package cn.iocoder.yudao.module.im.controller.admin.manager.group.vo.member;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Schema(description = "管理后台 - IM 群成员 Response VO")
|
||||
@Data
|
||||
public class ImGroupMemberManagerRespVO {
|
||||
|
||||
@Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Long userId;
|
||||
|
||||
@Schema(description = "用户昵称", example = "张三")
|
||||
private String nickname;
|
||||
|
||||
@Schema(description = "用户头像")
|
||||
private String avatar;
|
||||
|
||||
@Schema(description = "入群时间")
|
||||
private LocalDateTime joinTime;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user