package com.vctgo.system.mapper;

import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vctgo.common.mybatisplus.mapper.BaseMapperX;
import com.vctgo.system.domain.SysReClassUser;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 班级配置人员信息Mapper接口
 *
 * @author wanglonghua
 * @date 2023-10-09
 */
@Repository
public interface SysReClassUserMapper extends BaseMapperX<SysReClassUser>
{

    /**
     * 查询班级配置人员信息列表-分页
     *
     * @param sysReClassUser 班级配置人员信息
     * @return 班级配置人员信息集合
     */
    IPage<SysReClassUser> selectSysReClassUserList(Page page,@Param("query") SysReClassUser sysReClassUser);

    /**
     * 查询班级配置人员信息列表
     *
     * @param sysReClassUser 班级配置人员信息
     * @return 班级配置人员信息集合
     */
    List<SysReClassUser> selectSysReClassUserList(@Param("query") SysReClassUser sysReClassUser);

    /**
     * 通过班级id统计绑定的用户数
     *
     * @param classId 班级Id
     * @return 结果
     */
    @InterceptorIgnore(tenantLine = "1")
    Long staticsBindUserCountByClassId(@Param("classId") Long classId,
                                       @Param("bindUserPosition") String bindUserPosition);

    /**
     * 逻辑删除班级配置人员信息
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int logicalDeleteSysReClassUserByIds(@Param("ids") Long[] ids,
                                         @Param("query") SysReClassUser sysReClassUser);

    /**
     * 逻辑删除班级配置人员信息
     *
     * @param classId 需要删除的数据主键集合
     * @return 结果
     */
    int logicalDeleteSysReClassUserByClassId(@Param("classId") Long classId,
                                             @Param("bindType") Integer bindType);

    /**
     * 批量删除班级配置人员信息
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteSysReClassUserByIds(Long[] ids);

    /**
     * 批量删除班级配置人员信息
     *
     * @param classId 需要删除的数据主键集合
     * @return 结果
     */
    int deleteSysReClassUserByClassId(@Param("classId") Long classId,
                                      @Param("bindType") Integer bindType);

    /**
     * 批量删除用户和班级关联
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    int deleteUserClass(@Param("ids") Long[] ids);

    /**
     * 批量删除用户和班级关联
     *
     * @param tenantIds 需要删除的数据ID
     * @return 结果
     */
    @InterceptorIgnore(tenantLine = "1")
    int deleteSysReClassUserByTenantId(@Param("tenantIds") Long[] tenantIds,
                                       @Param("bindType") Integer bindType);

}
