package com.xhkjedu.sstudy.mapper.paper;

import com.xhkjedu.base.TkMapper;
import com.xhkjedu.sstudy.model.paper.TPaper;
import com.xhkjedu.sstudy.model.paper.TPaperFile;
import com.xhkjedu.sstudy.vo.paper.*;
import com.xhkjedu.sstudy.vo.paperstudent.PaperGroupParam;
import com.xhkjedu.sstudy.vo.paperstudent.PaperSearchVo;
import com.xhkjedu.sstudy.vo.question.QuestionVo;
import com.xhkjedu.vo.paper.PaperListVo;
import com.xhkjedu.vo.system.UserVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

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

/**
 * @ClassName PaperMapper
 * Description 作业
 * Author WN
 * Date 2020/6/8 16:10
 **/
@Repository
public interface PaperMapper extends TkMapper<TPaper> {

    /**
     *功能描述 修改作业状态
     * @author WN
     * @date 2020/6/11
     * @param  * @param paperstate
     * @param paperid
     * @param hashb
     * @return void
     */
    void updatePaperState(@Param("pg") PaperGroupParam pg, @Param("ctypecount") Integer ctypecount);

    /**
     *功能描述 修改
     * @author WN
     * @date 2020/6/11
     * @param  * @param paper
     * @return void
     */
    void updatePaper(@Param("paper") TPaper paper);

    /**
     * 获取作业题型列表
     * @Param [paperid]
     * @Author ywx
     * @Date 2020/6/10 14:31
     * @return java.util.List<com.xhkjedu.vo.paper.PaperQtypeVo>
     **/
    List<PaperQtypeVo> listPaperType(@Param("paperid") Integer paperid);

    /**
     * 详情
     * @Param [paperid]
     * @Author ywx
     * @Date 2020/6/10 16:50
     * @return com.xhkjedu.vo.paper.PaperVo
     **/
    Map findById(@Param("paperid") Integer paperid);

    /**
     * 作业列表
     * @Param [paper]
     * @Author ywx
     * @Date 2020/6/11 16:06
     * @return java.util.List<com.xhkjedu.vo.paper.PaperListVo>
     **/
    List<PaperListVo> listAll(@Param("paper") PaperSearchVo paper, @Param("userVo") UserVo userVo);

    //作业列表--我的
    List<PaperListVo> listAllMy(@Param("paper") PaperSearchVo paper);

    //作业列表--未发布
    List<PaperListVo> listWfbPapers(@Param("paper") PaperSearchVo paper,@Param("userVo") UserVo userVo);

    /**
     * 设置批改方式
     * @Param [paperid, checktype]
     * @Author ywx
     * @Date 2020/6/12 9:15
     * @return java.lang.Integer
     **/
    Integer updateCheckType(@Param("paperid") Integer paperid, @Param("checktype") Integer checktype);

    /**
     * 获取批改学生列表
     * @Param [paperid, checkid, classid]
     * @Author ywx
     * @Date 2020/6/12 11:02
     * @return com.xhkjedu.vo.paper.CheckClassVo
     **/
    CheckClassVo listStudentsByPaperIdCheckId(@Param("paperid") Integer paperid, @Param("checkid") Integer checkid, @Param("classid") Integer classid);

    /**
     * 教师批阅列表
     * @Param [checkid]
     * @Author ywx
     * @Date 2020/6/18 14:54
     * @return java.util.List<com.xhkjedu.vo.paper.PaperListVo>
     **/
    List<PaperListVo> correctList(@Param("checkid") Integer checkid, Integer schoolid);

    /**
     * 作业附件列表
     * @Param [paperid, fileclass]
     * @Author ywx
     * @Date 2020/6/29 17:57
     * @return java.util.List<com.xhkjedu.model.paper.TPaperFile>
     **/
    List<TPaperFile> listPaperFile(@Param("paperid") Integer paperid, @Param("fileclass") Integer fileclass);

    /**
     * 获取年级下教师发布作业列表
     * @Param [paper]
     * @Author ywx
     * @Date 2020/9/28 15:23
     * @return java.util.List<com.xhkjedu.vo.paper.PaperListVo>
     **/
    List<PaperListVo> listPaper(@Param("paper") AnalyzeSearchVo paper);

    /**
     * 删除作业
     * @Param [paperid]
     * @Author ywx
     * @Date 2020/10/30 16:52
     * @return java.lang.Integer
     **/
    Integer delPaper(Integer paperid);

    //修改作业删除状态
    Integer updatePaperDeleted(@Param("paperid")Integer paperid,@Param("deleted")Integer deleted);

    //获取作业原文件保存地址列表
    List<String> listSourcePath(Integer paperid);

    //获取今天布置作业数量
    Integer getPaperNum(@Param("subjectid") String subjectid, @Param("createid") Integer createid, @Param("createtime") Integer createtime);

    //获取作业状态
    Integer getPaperState(Integer paperid);

    //获取批阅班级
    List<Map> listPaperClass(@Param("paperid") Integer paperid,@Param("checkid") Integer checkid,@Param("schoolid") Integer schoolid);

    //根据作业id获取作业分类
    Integer getPaperTypeById(@Param("paperid") Integer paperid);

    //作业母题列表
    List<QuestionVo> listQuestionByQuestionIds(@Param("questionids") List<String> questionids);

    //试题知识点列表
    List<Map> listQuestionPoints(@Param("questionids") List<String> questionids);

    //根据试卷id获取科目id
    String getSubjectIdByPid(@Param("paperid") Long paperid);

    //获取所有试卷用于重新生成分析
    List<TPaper> listPapersForAnalyze(@Param("paperid") Integer paperid);
    //获取未生成知识点靶向试卷用于重新生成分析
    List<TPaper> listPapersForAnalyze2(@Param("paperid") Integer paperid);

    //获取作业听力文件
    String getHearfileByPaperid(@Param("paperid") Integer paperid);

    //批阅设置-作业发布班级和学校
    List<Map> listSchoolClassByPaperid(@Param("paperid") Integer paperid,@Param("schoolid") Integer schoolid);

    //批阅设置-作业发布班级对应科目下所有教师和教师任教班级
    List<Map> listTeacherClassByPaperid(@Param("param")PaperParam param);

    //批阅设置-作业发布学生
    List<Map> listPaperStudentsByPaperid(@Param("paperid") Integer paperid,@Param("schoolid") Integer schoolid);

    //获取所有作业，处理学生试题关联关系
    List<TPaper> listPapersForAllFb();

    //修改补交状态
    void updateAfterCommit(@Param("paper") TPaper paper);

    //获取已过截止时间作业班级数量
    int countEndPaperClassById(@Param("paperid") Integer paperid,@Param("stoptime") int stoptime);

    //获取批阅班级数量
    Integer getCheckClassNum(@Param("paperid") Integer paperid,@Param("checkid") Integer checkid);
}
