package cn.iocoder.yudao.module.base.mapper;

import cn.iocoder.yudao.module.base.entity.DlDriveSchoolStudent;
import cn.iocoder.yudao.module.base.vo.DlDriveSchoolStaffVO;
import cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO;
import cn.iocoder.yudao.module.base.vo.DriveSchoolStudentExportVo;
import cn.iocoder.yudao.module.base.vo.StudentCountVO;
import cn.iocoder.yudao.module.inspection.query.InspectionStaffQuery;
import cn.iocoder.yudao.module.inspection.vo.InspectionStaffExportVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 驾校学员 Mapper
 *
 * @author pqz
 */
@Mapper
public interface DlDriveSchoolStudentMapper extends BaseMapper<DlDriveSchoolStudent> {

    /**
     * 分页查询学生
     *
     * @param entity DlDriveSchoolStudentVO
     * @param page   分页参数
     * @return com.baomidou.mybatisplus.core.metadata.IPage<cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO>
     * @author PQZ
     * @date 10:44 2025/1/18
     **/
    IPage<DlDriveSchoolStudentVO> queryListPage(@Param("entity") DlDriveSchoolStudentVO entity, Page<DlDriveSchoolStudentVO> page);

    /**
     * 获取可以考试的学员列表
     *
     * @author vinjor-M
     * @date 23:19 2025/1/20
     **/
    List<DlDriveSchoolStudent> selectCanExamStudentList(@Param("courseId") String courseId, @Param("coachId") Long coachId
            , @Param("subject") Integer subject, @Param("userName") String userName);

    /**
     * 手机端人员管理查询学员信息
     *
     * @param staffVO {@link DlDriveSchoolStaffVO}
     * @param page    分页参数
     * @return com.baomidou.mybatisplus.core.metadata.IPage<cn.iocoder.yudao.module.base.vo.DlDriveSchoolStaffVO>
    **/
    IPage<DlDriveSchoolStaffVO> pageStaffStudent(@Param("entity") DlDriveSchoolStaffVO staffVO, Page<DlDriveSchoolStaffVO> page);
    /**
     * 查所有学生列表
     * @author vinjor-M
     * @date 16:11 2025/2/25
     * @return java.util.List<cn.iocoder.yudao.module.base.vo.DlDriveSchoolStaffVO>
    **/
    List<DlDriveSchoolStaffVO> selectStudentListCount();

    /**
     * 教练查询自己的学生
     *
     * @param pageReqVO TODO
     * @param page      TODO
     * @return com.baomidou.mybatisplus.core.metadata.IPage<cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO>
     * @author vinjor-M
     * @date 17:23 2025/2/12
     **/
    IPage<DlDriveSchoolStudentVO> selectByCoachId(@Param("entity") DlDriveSchoolStudentVO pageReqVO, Page<DlDriveSchoolStudentVO> page);
    IPage<DlDriveSchoolStudentVO> selectByBusinessId(@Param("entity") DlDriveSchoolStudentVO pageReqVO, Page<DlDriveSchoolStudentVO> page);

    /**
     * 查学生列表---驾校层面查询
     *
     * @param coachId   教练ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return java.util.List<cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO>
     * @author vinjor-M
     * @date 15:13 2025/2/14
     **/
    List<DlDriveSchoolStudentVO> selectStudentList(@Param("coachId") Long coachId, @Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 查学生列表---驾校层面查询
     *
     * @param coachId   教练ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return java.util.List<cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO>
     * @author vinjor-M
     * @date 15:13 2025/2/14
     **/
    List<DlDriveSchoolStudentVO> selectStudentListByOrder(@Param("coachId") Long coachId, @Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 教练层面查询自己的学生列表
     *
     * @author vinjor-M
     * @date 15:24 2025/2/17
     **/
    List<DlDriveSchoolStudentVO> selectStudentListCoach(@Param("coachId") Long coachId, @Param("startTime") String startTime, @Param("endTime") String endTime);
    List<DlDriveSchoolStudentVO> selectStudentListBusiness(@Param("coachId") Long coachId, @Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * app首页查询训练学员---指定条件下
     *
     * @param coachId   教练ID
     * @param startTime 开始时间
     * @param endTime   截止时间
     * @return java.util.List<cn.iocoder.yudao.module.base.vo.DlDriveSchoolStudentVO>
    **/
    IPage<DlDriveSchoolStudentVO> selectTrainStudent(@Param("coachId")Long coachId,
                                                     @Param("startTime") String startTime,
                                                     @Param("endTime")String endTime,
                                                     @Param("searchValue")String searchValue,
                                                     @Param("courseType")String courseType,
                                                     @Param("subject")Integer subject,
                                                     @Param("sort")String sort,
                                                     Page<DlDriveSchoolStudent> page);

    /**
     * @param type      时间查询类型（01驾校统招，02教练自招，03自来客户）
     * @param coachId   教练id
     * @param startTime 查询时间范围--开始
     * @param endTime   查询时间范围--结束
     * @return java.util.List<cn.iocoder.yudao.module.base.vo.StudentCountVO>
     * @author PQZ
     * @date 17:08 2025/2/19
     **/
    List<StudentCountVO> indexGetTrainList(@Param("type") String type, @Param("coachId") Long coachId, @Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 查自来客户
     * @param startTime 查询时间范围--开始
     * @param endTime   查询时间范围--结束
     * @return java.util.List<cn.iocoder.yudao.module.base.vo.DlDriveSchoolStaffVO>
     * @author PQZ
     * @date 11:54 2025/2/20
     **/
    List<DlDriveSchoolStaffVO> indexGetFormList( @Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 首页查询自来的学生
     * @author vinjor-M
     * @date 15:55 2025/2/26
     * @param startTime TODO
    * @param endTime TODO
     * @return java.util.List<cn.iocoder.yudao.module.base.vo.StudentCountVO>
    **/
    List<StudentCountVO> indexCusStudentList(String startTime, String endTime);

    List<DriveSchoolStudentExportVo> getAll(@Param("entity") DlDriveSchoolStudent query);
}
