package cn.iocoder.yudao.module.im.dal.mysql.group; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupMemberDO; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.apache.ibatis.annotations.Mapper; import java.time.LocalDateTime; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; /** * IM 群成员 Mapper * * @author 芋道源码 */ @Mapper public interface ImGroupMemberMapper extends BaseMapperX { default List selectListByGroupId(Long groupId) { return selectList(new LambdaQueryWrapperX().eq(ImGroupMemberDO::getGroupId, groupId)); } default ImGroupMemberDO selectByGroupIdAndUserId(Long groupId, Long userId) { return selectOne(new LambdaQueryWrapperX() .eq(ImGroupMemberDO::getGroupId, groupId) .eq(ImGroupMemberDO::getUserId, userId)); } default List selectListByGroupIdAndUserIds(Long groupId, Collection userIds) { return selectList(new LambdaQueryWrapperX() .eq(ImGroupMemberDO::getGroupId, groupId) .in(ImGroupMemberDO::getUserId, userIds)); } default List selectListByGroupIdAndStatus(Long groupId, Integer status) { return selectList(new LambdaQueryWrapperX() .eq(ImGroupMemberDO::getGroupId, groupId) .eq(ImGroupMemberDO::getStatus, status)); } default List selectListByGroupIdAndStatusAndRoles(Long groupId, Integer status, Collection roles) { return selectList(new LambdaQueryWrapperX() .eq(ImGroupMemberDO::getGroupId, groupId) .eq(ImGroupMemberDO::getStatus, status) .in(ImGroupMemberDO::getRole, roles)); } default List selectListByUserIdAndStatus(Long userId, Integer status) { return selectList(new LambdaQueryWrapperX() .eq(ImGroupMemberDO::getUserId, userId) .eq(ImGroupMemberDO::getStatus, status)); } default List selectListByUserId(Long userId) { return selectList(ImGroupMemberDO::getUserId, userId); } @SuppressWarnings("UnusedReturnValue") default int updateByGroupIdAndStatus(Long groupId, Integer oldStatus, ImGroupMemberDO updateObj) { return update(updateObj, new LambdaQueryWrapperX() .eq(ImGroupMemberDO::getGroupId, groupId) .eq(ImGroupMemberDO::getStatus, oldStatus)); } @SuppressWarnings("UnusedReturnValue") default int updateByGroupIdAndUserIdsAndStatus(Long groupId, Collection userIds, Integer oldStatus, ImGroupMemberDO updateObj) { return update(updateObj, new LambdaQueryWrapperX() .eq(ImGroupMemberDO::getGroupId, groupId) .in(ImGroupMemberDO::getUserId, userIds) .eq(ImGroupMemberDO::getStatus, oldStatus)); } @SuppressWarnings("UnusedReturnValue") default int updateListByGroupIdAndUserIds(Long groupId, Collection userIds, ImGroupMemberDO updateObj) { return update(updateObj, new LambdaQueryWrapperX() .eq(ImGroupMemberDO::getGroupId, groupId) .in(ImGroupMemberDO::getUserId, userIds)); } default Long selectCountByGroupIdAndRoleAndStatus(Long groupId, Integer role, Integer status) { return selectCount(new LambdaQueryWrapperX() .eq(ImGroupMemberDO::getGroupId, groupId) .eq(ImGroupMemberDO::getRole, role) .eq(ImGroupMemberDO::getStatus, status)); } /** * 批量按 group_id 统计指定状态的成员数 */ default Map selectCountMapByGroupIdsAndStatus(Collection groupIds, Integer status) { if (CollUtil.isEmpty(groupIds)) { return Collections.emptyMap(); } List> rows = selectMaps(Wrappers.query() .select("group_id AS groupId", "COUNT(*) AS cnt") .in("group_id", groupIds) .eq("status", status) .groupBy("group_id")); // 转换成 Map Map result = new HashMap<>(rows.size()); rows.forEach(row -> result.put( ((Number) row.get("groupId")).longValue(), ((Number) row.get("cnt")).longValue())); return result; } @SuppressWarnings("UnusedReturnValue") default int updateMuteEndTimeNull(Long id) { return update(null, Wrappers.lambdaUpdate() .eq(ImGroupMemberDO::getId, id) .set(ImGroupMemberDO::getMuteEndTime, null)); } @SuppressWarnings("UnusedReturnValue") default int updateRejoinFields(Long id, Integer status, LocalDateTime joinTime, Integer role, Integer addSource, Long inviterUserId) { return update(null, Wrappers.lambdaUpdate() .eq(ImGroupMemberDO::getId, id) .set(ImGroupMemberDO::getStatus, status) .set(ImGroupMemberDO::getJoinTime, joinTime) .set(ImGroupMemberDO::getRole, role) .set(ImGroupMemberDO::getAddSource, addSource) .set(ImGroupMemberDO::getInviterUserId, inviterUserId) .set(ImGroupMemberDO::getQuitTime, null) .set(ImGroupMemberDO::getMuteEndTime, null) .set(ImGroupMemberDO::getUpdateTime, joinTime)); } }