package cn.iocoder.yudao.module.im.service.message.dto;
import cn.iocoder.yudao.module.im.dal.dataobject.message.ImGroupMessageDO;
import cn.iocoder.yudao.module.im.enums.ImContentTypeEnum;
import cn.iocoder.yudao.module.im.service.websocket.notification.group.*;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* IM 群聊消息发送 DTO
*
* @author 芋道源码
*/
@Data
public class ImGroupMessageSendDTO {
/**
* 群编号
*/
@NotNull(message = "群编号不能为空")
private Long groupId;
/**
* 消息类型
*
* 枚举 {@link ImContentTypeEnum}
*/
@NotNull(message = "消息类型不能为空")
private Integer type;
/**
* 消息内容
*
* 支持 String / POJO;非 String 时由 service 序列化为 JSON
*/
private Object content;
/**
* @ 目标用户编号列表
*/
private List atUserIds;
/**
* 定向接收用户编号列表
*
* 为空表示全员可见
*/
private List receiverUserIds;
/**
* 是否需要回执
*
* 缺省视为无需回执(false)
*/
private Boolean receipt;
// ========== 群广播事件静态工厂(对应 ImContentTypeEnum 群事件) ==========
public static ImGroupMessageSendDTO ofGroupCreate(Long groupId, Long operatorUserId, Collection memberUserIds) {
GroupCreateNotification notification = new GroupCreateNotification();
notification.setOperatorUserId(operatorUserId);
notification.setMemberUserIds(new ArrayList<>(memberUserIds));
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_CREATE.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupInfoUpdate(Long groupId, Long operatorUserId,
String oldAvatar, String newAvatar,
Boolean oldJoinApproval, Boolean newJoinApproval) {
GroupInfoUpdateNotification notification = new GroupInfoUpdateNotification();
notification.setOperatorUserId(operatorUserId);
notification.setOldAvatar(oldAvatar);
notification.setNewAvatar(newAvatar);
notification.setOldJoinApproval(oldJoinApproval);
notification.setNewJoinApproval(newJoinApproval);
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_INFO_UPDATE.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupMemberQuit(Long groupId, Long operatorUserId) {
GroupMemberQuitNotification notification = new GroupMemberQuitNotification();
notification.setOperatorUserId(operatorUserId);
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_MEMBER_QUIT.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupOwnerTransfer(Long groupId, Long operatorUserId, Long newOwnerUserId) {
GroupOwnerTransferNotification notification = new GroupOwnerTransferNotification();
notification.setOperatorUserId(operatorUserId);
notification.setNewOwnerUserId(newOwnerUserId);
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_OWNER_TRANSFER.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupMemberKick(Long groupId, Long operatorUserId, Collection memberUserIds) {
GroupMemberKickNotification notification = new GroupMemberKickNotification();
notification.setOperatorUserId(operatorUserId);
notification.setMemberUserIds(new ArrayList<>(memberUserIds));
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_MEMBER_KICK.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupMemberInvite(Long groupId, Long operatorUserId, Collection memberUserIds) {
GroupMemberInviteNotification notification = new GroupMemberInviteNotification();
notification.setOperatorUserId(operatorUserId);
notification.setMemberUserIds(new ArrayList<>(memberUserIds));
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_MEMBER_INVITE.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupMemberEnter(Long groupId, Long entrantUserId, Integer addSource) {
GroupMemberEnterNotification notification = new GroupMemberEnterNotification();
notification.setOperatorUserId(entrantUserId);
notification.setEntrantUserId(entrantUserId);
notification.setAddSource(addSource);
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_MEMBER_ENTER.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupDissolve(Long groupId, Long operatorUserId) {
GroupDissolveNotification notification = new GroupDissolveNotification();
notification.setOperatorUserId(operatorUserId);
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_DISSOLVE.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupMemberNicknameUpdate(Long groupId, Long operatorUserId, String displayUserName) {
GroupMemberNicknameUpdateNotification notification = new GroupMemberNicknameUpdateNotification();
notification.setOperatorUserId(operatorUserId);
notification.setDisplayUserName(displayUserName);
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_MEMBER_NICKNAME_UPDATE.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupAdminAdd(Long groupId, Long operatorUserId, Collection memberUserIds) {
GroupAdminAddNotification notification = new GroupAdminAddNotification();
notification.setOperatorUserId(operatorUserId);
notification.setMemberUserIds(new ArrayList<>(memberUserIds));
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_ADMIN_ADD.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupAdminRemove(Long groupId, Long operatorUserId, Collection memberUserIds) {
GroupAdminRemoveNotification notification = new GroupAdminRemoveNotification();
notification.setOperatorUserId(operatorUserId);
notification.setMemberUserIds(new ArrayList<>(memberUserIds));
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_ADMIN_REMOVE.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupNoticeUpdate(Long groupId, Long operatorUserId, String oldNotice, String newNotice) {
GroupNoticeUpdateNotification notification = new GroupNoticeUpdateNotification();
notification.setOperatorUserId(operatorUserId);
notification.setOldNotice(oldNotice).setNewNotice(newNotice);
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_NOTICE_UPDATE.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupNameUpdate(Long groupId, Long operatorUserId, String oldName, String newName) {
GroupNameUpdateNotification notification = new GroupNameUpdateNotification();
notification.setOperatorUserId(operatorUserId);
notification.setOldName(oldName).setNewName(newName);
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_NAME_UPDATE.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupMemberSettingUpdate(Long groupId, Long operatorUserId, Boolean silent, String groupRemark) {
GroupMemberSettingUpdateNotification notification = new GroupMemberSettingUpdateNotification();
notification.setOperatorUserId(operatorUserId);
notification.setSilent(silent).setGroupRemark(groupRemark);
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_MEMBER_SETTING_UPDATE.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupMessagePin(Long groupId, Long operatorUserId, ImGroupMessageDO message) {
GroupMessagePinNotification notification = new GroupMessagePinNotification();
GroupMessagePinNotification.PinnedMessage pinnedMessage = new GroupMessagePinNotification.PinnedMessage()
.setId(message.getId()).setSenderId(message.getSenderId()).setGroupId(message.getGroupId())
.setType(message.getType()).setContent(message.getContent()).setSendTime(message.getSendTime())
.setAtUserIds(message.getAtUserIds()).setReceiverUserIds(message.getReceiverUserIds());
notification.setOperatorUserId(operatorUserId);
notification.setMessageId(message.getId()).setMessage(pinnedMessage);
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_MESSAGE_PIN.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupMessageUnpin(Long groupId, Long operatorUserId, Long messageId) {
GroupMessageUnpinNotification notification = new GroupMessageUnpinNotification();
notification.setOperatorUserId(operatorUserId);
notification.setMessageId(messageId);
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_MESSAGE_UNPIN.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupMemberMuted(Long groupId, Long operatorUserId,
Long mutedUserId,
java.time.LocalDateTime muteEndTime) {
GroupMemberMutedNotification notification = new GroupMemberMutedNotification();
notification.setOperatorUserId(operatorUserId);
notification.setMutedUserId(mutedUserId);
notification.setMuteEndTime(muteEndTime);
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_MEMBER_MUTED.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupMemberCancelMuted(Long groupId, Long operatorUserId, Long mutedUserId) {
GroupMemberCancelMutedNotification notification = new GroupMemberCancelMutedNotification();
notification.setOperatorUserId(operatorUserId);
notification.setMutedUserId(mutedUserId);
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_MEMBER_CANCEL_MUTED.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupMuted(Long groupId, Long operatorUserId) {
GroupMutedNotification notification = new GroupMutedNotification();
notification.setOperatorUserId(operatorUserId);
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_MUTED.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupCancelMuted(Long groupId, Long operatorUserId) {
GroupCancelMutedNotification notification = new GroupCancelMutedNotification();
notification.setOperatorUserId(operatorUserId);
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_CANCEL_MUTED.getType()).setContent(notification);
}
public static ImGroupMessageSendDTO ofGroupBanned(Long groupId, Long operatorUserId, boolean banned) {
GroupBannedNotification notification = new GroupBannedNotification();
notification.setOperatorUserId(operatorUserId);
notification.setBanned(banned);
return new ImGroupMessageSendDTO().setGroupId(groupId)
.setType(ImContentTypeEnum.GROUP_BANNED.getType()).setContent(notification);
}
}