package com.ruoyi.education.mapper;

import java.util.List;
import com.ruoyi.education.domain.EduCourseClass;

/**
 * 开课计划Mapper接口
 * 
 * @author ruoyi
 * @date 2024-09-26
 */
public interface EduCourseClassMapper 
{
    /**
     * 查询开课计划
     * 
     * @param classId 开课计划主键
     * @return 开课计划
     */
    public EduCourseClass selectEduCourseClassByClassId(Long classId);

    /**
     * 查询开课计划列表
     * 
     * @param eduCourseClass 开课计划
     * @return 开课计划集合
     */
    public List<EduCourseClass> selectEduCourseClassList(EduCourseClass eduCourseClass);

    /**
     * 新增开课计划
     * 
     * @param eduCourseClass 开课计划
     * @return 结果
     */
    public int insertEduCourseClass(EduCourseClass eduCourseClass);

    /**
     * 修改开课计划
     * 
     * @param eduCourseClass 开课计划
     * @return 结果
     */
    public int updateEduCourseClass(EduCourseClass eduCourseClass);

    /**
     * 删除开课计划
     * 
     * @param classId 开课计划主键
     * @return 结果
     */
    public int deleteEduCourseClassByClassId(Long classId);

    /**
     * 批量删除开课计划
     * 
     * @param classIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteEduCourseClassByClassIds(Long[] classIds);

    /**
     * 根据班级编号查询开课计划
     * 
     * @param classCode 班级编号
     * @return 开课计划
     */
    public EduCourseClass selectEduCourseClassByClassCode(String classCode);

    /**
     * 查询指定学期的开课计划
     * 
     * @param semesterId 学期ID
     * @return 开课计划集合
     */
    public List<EduCourseClass> selectCourseClassBySemester(Long semesterId);

    /**
     * 查询指定教师的开课计划
     * 
     * @param teacherId 教师ID
     * @return 开课计划集合
     */
    public List<EduCourseClass> selectCourseClassByTeacher(Long teacherId);

    /**
     * 查询可选课的开课计划
     * 
     * @return 开课计划集合
     */
    public List<EduCourseClass> selectEnrollableCourseClasses();

    /**
     * 查询教室在指定时间的课程安排冲突
     * 
     * @param classroomId 教室ID
     * @param weekday 星期几
     * @param timeSlot 时间段
     * @param semesterId 学期ID
     * @param excludeClassId 排除的课程班级ID
     * @return 冲突的课程数量
     */
    public int checkClassroomConflict(Long classroomId, String weekday, String timeSlot, Long semesterId, Long excludeClassId);

    /**
     * 查询教师在指定时间的课程安排冲突
     * 
     * @param teacherId 教师ID
     * @param weekday 星期几
     * @param timeSlot 时间段
     * @param semesterId 学期ID
     * @param excludeClassId 排除的课程班级ID
     * @return 冲突的课程数量
     */
    public int checkTeacherConflict(Long teacherId, String weekday, String timeSlot, Long semesterId, Long excludeClassId);

    /**
     * 更新已选课人数
     * 
     * @param classId 班级ID
     * @param enrolledCount 已选人数
     * @return 结果
     */
    public int updateEnrolledCount(Long classId, Integer enrolledCount);

    /**
     * 批量更新开课计划状态
     * 
     * @param classIds 班级ID数组
     * @param status 状态
     * @return 结果
     */
    public int batchUpdateStatus(Long[] classIds, String status);

    /**
     * 获取课程列表用于下拉选择
     * 
     * @return 课程选项集合
     */
    public List<Object> getCourseOptions();

    /**
     * 获取教师列表用于下拉选择
     * 
     * @return 教师选项集合
     */
    public List<Object> getTeacherOptions();

    /**
     * 获取教室列表用于下拉选择
     * 
     * @return 教室选项集合
     */
    public List<Object> getClassroomOptions();
}