package cn.iocoder.yudao.module.im.dal.mysql.group; import cn.hutool.core.date.LocalDateTimeUtil; 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.module.im.controller.admin.manager.group.vo.ImGroupRequestManagerPageReqVO; import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupRequestDO; import cn.iocoder.yudao.module.im.enums.group.ImGroupRequestHandleResultEnum; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.apache.ibatis.annotations.Mapper; import java.time.LocalDateTime; import java.util.Collection; import java.util.List; /** * IM 加群申请记录 Mapper * * @author 芋道源码 */ @Mapper public interface ImGroupRequestMapper extends BaseMapperX { default ImGroupRequestDO selectByGroupIdAndUserId(Long groupId, Long userId) { return selectOne(new LambdaQueryWrapperX() .eq(ImGroupRequestDO::getGroupId, groupId) .eq(ImGroupRequestDO::getUserId, userId)); } default List selectListByGroupIdsAndHandleResult(Collection groupIds, Integer handleResult) { return selectList(new LambdaQueryWrapperX() .in(ImGroupRequestDO::getGroupId, groupIds) .eq(ImGroupRequestDO::getHandleResult, handleResult) .orderByDesc(ImGroupRequestDO::getUpdateTime) .orderByDesc(ImGroupRequestDO::getId)); } default List selectListByGroupId(Long groupId) { // 同上,update_time 倒序优先于 id return selectList(new LambdaQueryWrapperX() .eq(ImGroupRequestDO::getGroupId, groupId) .orderByDesc(ImGroupRequestDO::getUpdateTime) .orderByDesc(ImGroupRequestDO::getId)); } /** * 增量拉取「我管理的群」下的加群申请(含已处理,按 update_time + id 正向游标) * * @param groupIds 群编号集合 * @param lastUpdateTime 上次拉取到的更新时间;首次拉取传 null * @param lastId 上次拉取到的记录编号;首次拉取传 null * @param limit 拉取数量 * @return 加群申请列表 */ default List selectPullListByGroupIds(Collection groupIds, Long lastUpdateTime, Long lastId, Integer limit) { LambdaQueryWrapperX query = new LambdaQueryWrapperX() .in(ImGroupRequestDO::getGroupId, groupIds); if (lastUpdateTime != null && lastId != null) { LocalDateTime lastTime = LocalDateTimeUtil.of(lastUpdateTime); query.and(w -> w.gt(ImGroupRequestDO::getUpdateTime, lastTime) .or(n -> n.eq(ImGroupRequestDO::getUpdateTime, lastTime).gt(ImGroupRequestDO::getId, lastId))); } return selectList(query.orderByAsc(ImGroupRequestDO::getUpdateTime).orderByAsc(ImGroupRequestDO::getId) .last("LIMIT " + limit)); } default int updateByIdAndHandleResult(Long id, Integer expectedHandleResult, ImGroupRequestDO updateObj) { return update(updateObj, new LambdaUpdateWrapper() .eq(ImGroupRequestDO::getId, id).eq(ImGroupRequestDO::getHandleResult, expectedHandleResult)); } /** * 复用主动申请的旧记录:覆盖申请理由 / 来源,重置为未处理 + 清空旧处理痕迹 + 刷 update_time *

* update_time 显式 set,因为 update(null, wrapper) 不会触发 MetaObjectHandler.updateFill; * 列表查询按 update_time 倒序,复用记录必须刷这一列才会排到最前 */ default int updateApplyByIdReset(Long id, String applyContent, Integer addSource, LocalDateTime updateTime) { return update(null, new LambdaUpdateWrapper() .eq(ImGroupRequestDO::getId, id) .set(ImGroupRequestDO::getApplyContent, applyContent) .set(ImGroupRequestDO::getAddSource, addSource) .set(ImGroupRequestDO::getHandleResult, ImGroupRequestHandleResultEnum.UNHANDLED.getResult()) .set(ImGroupRequestDO::getInviterUserId, null) .set(ImGroupRequestDO::getHandleUserId, null) .set(ImGroupRequestDO::getHandleContent, null) .set(ImGroupRequestDO::getHandleTime, null) .set(ImGroupRequestDO::getUpdateTime, updateTime)); } default int updateInviteByIdReset(Long id, Long inviterUserId, Integer addSource, LocalDateTime updateTime) { return update(null, new LambdaUpdateWrapper() .eq(ImGroupRequestDO::getId, id) .set(ImGroupRequestDO::getInviterUserId, inviterUserId) .set(ImGroupRequestDO::getAddSource, addSource) .set(ImGroupRequestDO::getHandleResult, ImGroupRequestHandleResultEnum.UNHANDLED.getResult()) .set(ImGroupRequestDO::getHandleUserId, null) .set(ImGroupRequestDO::getHandleContent, null) .set(ImGroupRequestDO::getHandleTime, null) .set(ImGroupRequestDO::getUpdateTime, updateTime)); } default PageResult selectPage(ImGroupRequestManagerPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(ImGroupRequestDO::getGroupId, reqVO.getGroupId()) .eqIfPresent(ImGroupRequestDO::getUserId, reqVO.getUserId()) .eqIfPresent(ImGroupRequestDO::getInviterUserId, reqVO.getInviterUserId()) .eqIfPresent(ImGroupRequestDO::getHandleResult, reqVO.getHandleResult()) .eqIfPresent(ImGroupRequestDO::getAddSource, reqVO.getAddSource()) .betweenIfPresent(ImGroupRequestDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(ImGroupRequestDO::getId)); } }