package cn.iocoder.yudao.module.im.service.message; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.im.controller.admin.manager.message.vo.group.ImGroupMessageManagerPageReqVO; import cn.iocoder.yudao.module.im.controller.admin.message.vo.group.ImGroupMessageListReqVO; import cn.iocoder.yudao.module.im.controller.admin.message.vo.group.ImGroupMessageSendReqVO; import cn.iocoder.yudao.module.im.dal.dataobject.message.ImGroupMessageDO; import cn.iocoder.yudao.module.im.service.message.dto.ImGroupMessageSendDTO; import java.util.Collection; import java.util.List; import java.util.Map; /** * IM 群聊消息 Service 接口 * * @author 芋道源码 */ public interface ImGroupMessageService { /** * 【用户调用】发送群聊消息 *
* 用户在 IM 客户端发送 TEXT / IMAGE 等消息时调用,含幂等、敏感词、quote、@ 解析等业务校验。 * type 校验由 VO 层 {@code @InEnum} + {@code @AssertTrue} 完成(仅允许 normal 类型)。 * * @param senderId 发送人编号 * @param reqVO 发送请求 * @return 消息 */ ImGroupMessageDO sendGroupMessage(Long senderId, ImGroupMessageSendReqVO reqVO); /** * 【系统调用】发送群聊消息:内部查 active 成员 + 推送 *
* 调用方批量调用会触发多次 active 成员查询;如果调用方已经持有成员快照,优先使用 {@link #sendGroupMessage(Long, Collection, ImGroupMessageSendDTO)} 方法,避免重复查询。
*
* @param senderId 发送人编号
* @param dto 消息 DTO
* @return 消息
*/
ImGroupMessageDO sendGroupMessage(Long senderId, ImGroupMessageSendDTO dto);
/**
* 【系统调用】发送群聊消息:显式指定推送目标
*
* @param senderId 发送人编号
* @param targetUserIds 推送目标用户编号集合(调用方在变更成员状态前抓取的快照)
* @param dto 消息 DTO
* @return 构造的消息 DO(持久化时 id 已回填)
*/
ImGroupMessageDO sendGroupMessage(Long senderId, Collection