package cn.iocoder.yudao.module.im.dal.mysql.message; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; import cn.iocoder.yudao.module.im.controller.admin.manager.message.vo.channel.ImChannelMessagePageReqVO; import cn.iocoder.yudao.module.im.dal.dataobject.message.ImChannelMessageDO; import org.apache.ibatis.annotations.Mapper; import java.util.List; /** * IM 频道消息 Mapper * * @author 芋道源码 */ @Mapper public interface ImChannelMessageMapper extends BaseMapperX { /** * 拉取指定用户应收的频道消息 *

* 命中条件:id 大于游标 + (receiver_user_ids 为空表示全员 OR 逗号分隔列表里包含当前 userId) * * @param userId 当前用户编号 * @param minId 游标;返回大于此值的消息 * @param size 返回条数 * @return 频道消息列表;按 id 升序 */ default List selectListByUserAndMinId(Long userId, Long minId, Integer size) { return selectList(new LambdaQueryWrapperX() .gt(ImChannelMessageDO::getId, minId) .and(w -> w.isNull(ImChannelMessageDO::getReceiverUserIds) .or().eq(ImChannelMessageDO::getReceiverUserIds, "") .or().apply(MyBatisUtils.findInSet("receiver_user_ids"), userId)) .orderByAsc(ImChannelMessageDO::getId) .last("LIMIT " + size)); } default Long selectCountByMaterialId(Long materialId) { return selectCount(ImChannelMessageDO::getMaterialId, materialId); } default PageResult selectPage(ImChannelMessagePageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(ImChannelMessageDO::getChannelId, reqVO.getChannelId()) .eqIfPresent(ImChannelMessageDO::getMaterialId, reqVO.getMaterialId()) .betweenIfPresent(ImChannelMessageDO::getSendTime, reqVO.getSendTime()) .orderByDesc(ImChannelMessageDO::getId)); } }