package com.xhkjedu.sstudy.mapper.paperstudent;

import com.xhkjedu.base.TkMapper;
import com.xhkjedu.sstudy.model.paperstudent.TPaperStudent;
import com.xhkjedu.sstudy.model.paperstudent.TPaperStudentQuestion;
import com.xhkjedu.sstudy.vo.paper.PaperCheckParam;
import com.xhkjedu.sstudy.vo.paperreport.PaperRStuVo;
import com.xhkjedu.sstudy.vo.paperstudent.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

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

/**
 * @ClassName PaperStudentMapper
 * Description 作业学生
 * Author WN
 * Date 2020/6/9 10:20
 **/
@Repository
public interface PaperStudentMapper extends TkMapper<TPaperStudent> {
    void saveBatchPaperStudent(List<TPaperStudent> list);

    /**
     * 作业列表
     * @Param [paperStudent]
     * @Author ywx
     * @Date 2020/6/10 10:54
     * @return java.util.List<com.xhkjedu.vo.paperstudent.PaperStudentVo>
     **/
    List<PaperStudentVo> findAll(@Param("ps") PaperSearchVo paperSearch);

    /**
     * 更新学生作业提交、批改状态
     * @Param [psstate, pschecked, psid, operate]
     * @Author ywx
     * @Date 2020/6/10 15:54
     * @return java.lang.Integer
     **/
    Integer updateState(@Param("psstate") Integer psstate, @Param("pschecked") Integer pschecked, @Param("psid") Integer psid, @Param("operate") Integer operate,@Param("starttime") Integer starttime);

    /**
     * 批改完修改学生总得分和批改状态 (结构性试题)
     * @Param [psid]
     * @Author ywx
     * @Date 2020/6/10 16:28
     * @return java.lang.Integer
     **/
    Integer updateStuScore(@Param("psid") Integer psid, @Param("checkid") Integer checkid);

    /**
     * 批改完修改学生总得分和批改状态 (答题卡试题)
     * @author WN
     * @date 2020/6/12
     * @param psid
     * @param checkid
     * @return java.lang.Integer
     */
    Integer updateScantronStuScore(@Param("psid") Integer psid, Integer checkid);

    /**
     * 详情
     * @Param [psid]
     * @Author ywx
     * @Date 2020/6/11 10:14
     * @return com.xhkjedu.model.paperstudent.TPaperStudent
     **/
    TPaperStudent findById(@Param("psid") Integer psid);
    //详情退回学生作业使用
    TPaperStudent findById2(@Param("psid") Integer psid);

    /**
     * 批量更新试题批改信息
     * @Param [psqs]
     * @Author ywx
     * @Date 2020/6/11 11:10
     * @return java.lang.Integer
     **/
    Integer updatePsQuestionBatch(@Param("list") List<TPaperStudentQuestion> psqs);

    /**
     * 判断该作业该班级是否存在未批改学生
     * @Param [paperid, groupid]
     * @Author ywx
     * @Date 2020/6/11 11:16
     * @return java.lang.Integer
     **/
    Integer getNotCorrect(@Param("paperid") Integer paperid, @Param("classid") Integer classid);

    /**
     * 设置批改人
     * @Param [list]
     * @Author ywx
     * @Date 2020/6/12 8:48
     * @return java.lang.Integer
     **/
    Integer batchUpdateCheckId(@Param("list") List<TPaperStudent> list);

    /**
     * 批阅列表
     * @Param [ps]
     * @Author ywx
     * @Date 2020/6/18 14:35
     * @return java.util.List<com.xhkjedu.vo.paperstudent.PaperStudentVo>
     **/
    List<Map> correctList(@Param("ps") TPaperStudent ps);

    /**
     * 作业说明
     * @Param [psid]
     * @Author ywx
     * @Date 2020/6/18 17:10
     * @return com.xhkjedu.vo.paperstudent.PaperCommVo
     **/
    PaperCommVo getPaperComm(@Param("psid") Integer psid);

    /**
     * 设置批改人
     * @Param [paperid, checkid]
     * @Author ywx
     * @Date 2020/6/30 12:30
     * @return java.lang.Integer
     **/
    Integer updateCheckId(Integer paperid, Integer checkid);

    //设置批改人
    Integer updateCheckId2(Integer paperid, @Param("params") List<PaperCheckParam> params);

    /**
     * 获取作业学生id集合
     *
     * @return java.util.List<java.lang.Integer>
     * @Param [paperid, classid]
     * @Author ywx
     * @Date 2020/6/30 12:38
     **/
    List<PaperCheckParam> listStudentIdByPaperIdClassId(Integer paperid, @Param("params") List<PaperCheckParam> params);

    /**
     *功能描述  修改作业答案是否显示
     * @author WN
     * @date 2020/10/13
     * @param  * @param
     * @param stoptime
     * @return void
     */
    void updateShowanswer(@Param("stoptime") int stoptime);

    /**
     * @Description 作业自动收卷
     * @Date 2024/4/1 14:38
     * @Author YWX
     * @Param [stoptime]
     * @Return void
     **/
    void updatePaperRollUp(@Param("list") List<Map> list);

    //题库作业自动收卷-自动批改学生未做试题
    void updateStuQuestion(@Param("list") List<Map> list, @Param("stoptime") int stoptime);

    //题库作业自动收卷
    void updatePaperStu(@Param("list") List<Map> list, @Param("stoptime") int stoptime);

    //附件作业自动收卷-自动批改学生未做试题
    void updateStuScantron(@Param("list") List<Map> list, @Param("stoptime") int stoptime);

    //附件作业自动收卷
    void updatePaperScan(@Param("list") List<Map> list, @Param("stoptime") int stoptime);

    /**
     * @Description 要自动收卷的作业班级列表
     * @Date 2024/4/2 14:41
     * @Author YWX
     * @Param [stoptime]
     * @Return java.util.List<java.util.Map>
     **/
    List<Map> listRollUpPaper(@Param("stoptime") int stoptime);


    //////////////////////////////////////////////学生WEB端//////////////////////////////////////////////
    //获取作业列表
    List<PaperStudentVo> listWeb(@Param("ps") PaperSearchVo paperSearch);

    /**
     * 提交作业
     * @Param [ps]
     * @Author ywx
     * @Date 2020/9/3 15:05
     * @return java.lang.Integer
     **/
    Integer submitPaper(@Param("ps") TPaperStudent ps);

    /**
     * 批量修改题库作业学生作答信息
     * @Param [list]
     * @Author ywx
     * @Date 2020/9/3 15:05
     * @return java.lang.Integer
     **/
    Integer batchUpdateQuestion(@Param("list") List<TPaperStudentQuestion> list);

    /**
     * 附件作业提交更新操作
     * @Param [ps]
     * @Author ywx
     * @Date 2020/11/7 9:56
     * @return java.lang.Integer
     **/
    Integer updateSPaper(@Param("ps") TPaperStudent ps);

    /**
     * 题库作业提交更新操作
     *
     * @return java.lang.Integer
     * @Param [ps]
     * @Author ywx
     * @Date 2020/11/7 10:05
     **/
    Integer updatePaper(@Param("ps") TPaperStudent ps);

    //作业学生列表
    List<Map> listStudent(@Param("paperid") Integer paperid);

    //作业关联所有学生
    List<PaperRStuVo> listPaperAllStu(@Param("paperid") Integer paperid);

    //处理作业学生试题——附件作业未关联试题学生
    List<TPaperStudent> listPaperStuForScanQues(@Param("paperid") Integer paperid);

    //处理作业学生试题——题库作业未关联试题学生
    List<TPaperStudent> listPaperStuForQueQues(@Param("paperid") Integer paperid);

    //获取学生作业状态
    Map getPaperState(@Param("psid") Integer psid);

    //根据psid获取作业类型
    Map listPapersByPsid(@Param("psid") Integer psid);

    //班级作业学生列表
    List<StudentVo> listStu(@Param("paperid") Integer paperid,@Param("classid") Integer classid);

    //学生作业基本信息
    StudentPaperVo getStudentPaper(@Param("psid") Integer psid);

    //学生作业类型和试题ids
    StudentPaperVo getStudentPaperTypeAndQuestionIds(@Param("psid") Integer psid);

    //是否是批阅人
    Integer isChecker(@Param("psq") PaperStudentQuestionVo psq);

    //获取可批阅人数
    Integer getCheckNum(@Param("paperid") Integer paperid,@Param("checkid") Integer checkid);

    //批阅学生列表
    List<Map> listCorrectStu(@Param("ps") TPaperStudent ps);

    //根据学生作业id获取提交状态
    Integer getPsStateByPsId(@Param("psid") Integer psid);
}
