package com.xhkjedu.sexam.mapper.paperstudent;

import com.xhkjedu.base.TkMapper;
import com.xhkjedu.sexam.model.paper.EPaperQtype;
import com.xhkjedu.sexam.model.paperstudent.EPaperStudent;
import com.xhkjedu.sexam.model.paperstudent.EPaperStudentQuestion;
import com.xhkjedu.sexam.model.reportstu.ERstudent;
import com.xhkjedu.sexam.vo.paperstudent.EPaperStudentVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @author ywx
 * @classname EPaperStudentMapper
 * @description 试卷学生
 * @date 2022/7/25 15:34
 **/
@Repository
public interface EPaperStudentMapper extends TkMapper<EPaperStudent> {

    //学生进行中考试列表
    List<Map> listExamPapersForStudent(@Param("studentid")Integer studentid,@Param("nowtime")String nowtime);

    //学生已结束考试列表
    List<Map> listExamsEndForStudent(@Param("studentid")Integer studentid);

    //获取考试科目时间信息
    Map getExamSubjectPaperByEpsid(@Param("epsid")Integer epsid);

    //考试试卷基本信息
    EPaperStudentVo getExamSubjectByEpsid(@Param("epsid")Integer epsid);

    //学生试卷题库（android）
    List<Map> listStuPaperQuestionsForAndroid(@Param("epsid")Integer epsid);

    //学生试卷附件（android）
    List<Map> listStuPaperFjQuestionsForAndroid(@Param("epsid")Integer epsid);

    //学生试卷题库(web)
    List<EPaperQtype> listStuPaperQuestionsForWeb(@Param("epsid")Integer epsid);

    //学生试卷附件(web)
    List<EPaperQtype> listStuPaperFjQuestionsForWeb(@Param("epsid")Integer epsid);

    //学生提交试卷
    int updateStudentPaper(@Param("ps") EPaperStudent ps);

    //更新缺考字段
    void updateStudentPaperState(@Param("ps") EPaperStudent ps);

    //根据试卷id批量修改该试卷学生得分
    void updateBathStudentPaperScoreByEpsid(@Param("epid") Integer epid,@Param("epsids") List<Integer> epsids);

    //根据试卷id和学生id获取学生试卷信息
    EPaperStudent getPaperStudentByStuidAndEpid(@Param("epid") Integer epid, @Param("studentid") Integer studentid);

    List<ERstudent> listByExamId(@Param("examid") Integer examid, @Param("epids") List<Integer> epids);

    //更改单个学生试卷分值
    void updateStuPaperscoreEpsid(@Param("epsid") Integer epsid);

    //获取学生试卷基础信息和得分
    Map getStudentPaperScore(@Param("epsid") Integer epsid);

    //搜索考试学生获取学生试卷id
    List<Map> getStuSubjectPaperByname(@Param("ps") EPaperStudent ps);

    //修改学生试卷状态
    void updateSstate(@Param("epsid") Integer epsid, @Param("sstate") Integer sstate);

    //学生试卷（扫描）
    List<EPaperStudentQuestion> listStuPaperQuestionsForSca(Integer epsid);

    //更新学生试卷扫描信息
    void updateScaStudentPaper(@Param("ps") EPaperStudent paperStudent);

    //批量更新试卷学生状态
    void batchUpdateSstate(@Param("sstate") Integer sstate, @Param("epsids") List<Integer> epsids);

    //批量更新试卷学生试卷状态
    void batchUpdatePStuState(@Param("list") List<EPaperStudent> list);

    //考试试卷学生
    List<ERstudent> listByExamAndSubjectId(@Param("examid") Integer examid, @Param("subjectid") String subjectid);

    void updateStuStartime(@Param("epsid") Integer epsid, @Param("starttime") Integer starttime);

    //根据试卷学生id获取考试状态
    Integer getExamStateByEpsId(@Param("epsid") Integer epsid);

    //学生试卷题库(报告)
    List<Map> listStuPaperQuestionsForBg(@Param("epsid") Integer epsid);

    //学生试卷附件(报告)
    List<Map> listStuPaperFjQuestionsForBg(@Param("epsid") Integer epsid);

    //更新未已提交未批阅完成学生得分
    void updateStuscoreByExamId(@Param("examid") Integer examid);

    //根据试卷学生id获取考试状态和考试科目状态和时间
    Map getExamStateSubjectStateByEpsid(@Param("epsid") Integer epsid);

    //缺考详情
    List<Map> listQkDetail(@Param("epid") Integer epid,@Param("schoolid") Integer schoolid);

    //当天进行中考试列表
    List<Map> listExam(@Param("strtime") String strtime);

    //更新当天进行中考试已提交的学生状态为已进场
    Integer updateSstateByEsIds(@Param("esids") String esids);

    //获取学生考试结束时间戳
    EPaperStudent getEndTime(@Param("esid") Integer esid,@Param("studentid") Integer studentid);

    //根据试卷学生id获取考试科目状态
    Integer getSubjectStateByEpsid(@Param("epsid") Integer epsid);
    //根据试卷学生id获取考试科目状态和学生试卷状态
    Map getSubjectStateAndSstageByEpsid(@Param("epsid") Integer epsid);

    //更改单个学生试卷分值和状态
    void updateStuScoreAndStateEpsid(@Param("epsid") Integer epsid);
}