package com.qmth.distributed.print.business.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qmth.distributed.print.business.bean.params.analyze.GradeBatchPaperParam;
import com.qmth.distributed.print.business.bean.result.DictionaryResult;
import com.qmth.distributed.print.business.bean.result.analyze.GradeBatchPaperResult;
import com.qmth.distributed.print.business.entity.GradeBatchPaper;
import com.qmth.teachcloud.common.entity.SysUser;

import java.util.List;

/**
 * <p>
 * 分析-批次试卷关联关系表 服务类
 * </p>
 *
 * @author wangliang
 * @since 2022-05-20
 */
public interface GradeBatchPaperService extends IService<GradeBatchPaper> {
    /**
     * 查询批次试卷分页数据
     *
     * @param batchId     批次id
     * @param examId      考试id
     * @param courseName  课程名称
     * @param pageNumber  分页页数
     * @param pageSize    分页容量
     * @param requestUser 请求用户
     * @return 分页结果
     */
    IPage<GradeBatchPaperResult> findGradeBatchPaperPage(Long batchId, Long examId, String courseName, int pageNumber, int pageSize, SysUser requestUser);

    /**
     * 查询可以作为分析样本的试卷
     *
     * @param batchId     批次id
     * @param examId      考试id
     * @param collegeId   学院id
     * @param courseCode  课程编号
     * @param teacherName 命题教师
     * @param requestUser 请求用户
     * @return 试卷结果
     */
    List<GradeBatchPaperResult> findAbleAnalyzePaperList(Long batchId, Long examId, Long collegeId, String courseCode, String teacherName, SysUser requestUser);

    /**
     * 保存分析批次试卷
     *
     * @param gradeBatchPaperParam 分析批次试卷参数
     * @param requestUser          请求用户
     */
    void saveGradeBatchPaper(GradeBatchPaperParam gradeBatchPaperParam, SysUser requestUser);

    /**
     * 删除分析批次试卷
     *
     * @param batchId 批次id
     * @param idList  要删除的分析批次试卷id集合
     */
    void deleteGradeBatchPaper(Long batchId, List<Long> idList);

    /**
     * 根据试卷编号和试卷类型判断分析课程是否有操作权限(批次分析试卷没有在计算中的才能操作)
     *
     * @param schoolId    学校id
     * @param examId      考试id
     * @param paperNumber 试卷编号
     * @param paperType   试卷类型
     */
    void checkOperateAuth(Long schoolId, Long examId, String paperNumber, String paperType);

    GradeBatchPaper findByThirdExamIdAndGradeCourseCode(Long schoolId, String thirdExamId, String gradeCourseCode);

    /**
     * 基础配置四个页签保存时判断并执行更新分析课程和分析批次状态的操作
     * <p>
     * 1.如果四个页签所涉及的表中都有数据了，则
     * 2.如果四个页签所涉及的表中并非都有数据，则
     * </p>
     *
     * @param schoolId    学校id
     * @param examId      考试id
     * @param paperNumber 试卷编号
     * @param paperType   试卷类型
     */
    void updatePaperAndBatchStatus(Long schoolId, Long examId, String paperNumber, String paperType);

    /**
     * 分析试卷数据准备状态(分析试卷 四个模块都准备好才算准备好)
     *
     * @param schoolId    学校id
     * @param examId      考试id
     * @param paperNumber 试卷编号
     * @param paperType   试卷类型
     * @return 分析数据准备完成？true 是|| false 否
     */
    boolean analyzeDataReady(Long schoolId, Long examId, String paperNumber, String paperType);

    /**
     * 根据考试id查询开课学院信息
     *
     * @param schoolId 学校id
     * @param examId   考试id
     * @return 结果
     */
    List<DictionaryResult> findTeachCollegeList(Long schoolId, Long examId);
}
