package com.ssj.mapper.libraryteacher;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ssj.bean.mybatis.HomeworkPictureMBDto;
import com.ssj.bean.mybatis.LibVipMBDto;
import com.ssj.bean.mybatis.ManagerMBDto;
import com.ssj.service.conch.teacher.library.dto.*;
import com.ssj.service.conch.teacher.v2.dto.ClassDto;
import com.ssj.service.conch.teacher.v2.dto.ClassStudentDto;
import com.ssj.service.conch.teacher.v2.dto.NewClassDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

/**
 * @author Mount Liu
 * @date 2019/10/29
 */
@Mapper
public interface LibraryTeacherMapper {
    /**
     * 查找会员列表
     *
     * @param params
     * @return
     */
    List<LibVipMBDto> findVipList(@Param("map") Map<String, Object> params);

    /**
     * 查找学生的作业列表
     *
     * @param vipId
     * @return
     */
    List<HomeworkPictureMBDto> findTodayHomeworkByVipId(@Param("vipId") String vipId,@Param("strdate") String strdate);

    /**
     * 查找学生的不好的作业（模糊、不全）
     *
     * @param vipId
     * @return
     */
    List<HomeworkPictureMBDto> findTodayBadHomeworkByVipId(@Param("vipId") String vipId);

    /**
     * 统计班级内学生作业情况，所有学生累计做题数，累计错题数
     * @param classId 班级id
     * @param subjectList 科目
     * @param beginDateTimeStr 开始时间
     * @param endDateTimeStr 结束时间
     */
    Map<String, Object> countHomeworkDataByClass(@Param("classId") String classId, @Param("subjectList") List<String> subjectList, @Param("beginDateTimeStr") String beginDateTimeStr, @Param("endDateTimeStr") String endDateTimeStr);

    /**
     * 查询班级昨天提交作业的学生数
     * @param classId 班级id
     * @param subjectList 科目
     * @param beginDateTimeStr 开始时间
     * @param endDateTimeStr 结束时间
     * @param corrected 是否已批改
     */
    int countSubmittedStudentNum(@Param("classId") String classId, @Param("subjectList") List<String> subjectList, @Param("beginDateTimeStr") String beginDateTimeStr, @Param("endDateTimeStr") String endDateTimeStr, @Param("corrected") boolean corrected);

    /**
     * 查询班级内学生作业的id（已批改）
     * @param classId 班级id
     * @param subjectList 科目
     * @param beginDateTimeStr 开始时间
     * @param endDateTimeStr 结束时间
     */
    List<String> findHomeworkIdYesterdayByClass(@Param("classId") String classId, @Param("subjectList") List<String> subjectList, @Param("beginDateTimeStr") String beginDateTimeStr, @Param("endDateTimeStr") String endDateTimeStr);

    /**
     * 根据作业id查询典型错题
     * @param homeworkIdList 作业id
     */
    List<TypicalWrongQuestionDTO> findTypicalWrongQuestionList(@Param("homeworkIdList") List<String> homeworkIdList);

    /**
     * 计算难度系数(全年级做对的人数/全年级参与人数)
     * @param questionId 题目id
     * @param grade 年级
     * @param beginDateTimeStr 开始时间
     * @param endDateTimeStr 结束时间
     */
    Map<String, Object> countHomeworkDataByGrade(@Param("questionId") String questionId, @Param("grade") String grade, @Param("beginDateTimeStr") String beginDateTimeStr, @Param("endDateTimeStr") String endDateTimeStr);

    /**
     * 根据题目id查询关联的知识点
     * @param questionId 题目id
     */
    List<KnowledgeDTO> findDependentKnowledge(@Param("questionId") String questionId);

    /**
     * 查询已提交作业的学生列表
     * @param classId 班级id
     * @param subjectList 科目
     * @param beginDateTimeStr 开始时间
     * @param endDateTimeStr 结束时间
     */
    List<StudentDTOV2> findSubmittedStudentList(@Param("classId") String classId,
                                                @Param("subjectList") List<String> subjectList,
                                                @Param("beginDateTimeStr") String beginDateTimeStr,
                                                @Param("endDateTimeStr") String endDateTimeStr);

    /**
     * 查询班级内做错了指定题目的学生列表
     * @param classId 班级id
     * @param questionId 题目id
     * @param beginDateTimeStr 开始时间
     * @param endDateTimeStr 结束时间
     */
    List<WrongQuestionDetailDTO> findWrongQuestionDetail(@Param("classId") String classId, @Param("questionId") String questionId, @Param("beginDateTimeStr") String beginDateTimeStr, @Param("endDateTimeStr") String endDateTimeStr);


    /**
     * 查询班级列表(废弃)
     */
    List<ClassDto> findClassList(@Param("teacherId") String teacherId);

    /**
     * 查询班级列表
     */
    List<NewClassDto> findNewClassList(@Param("teacherId") String teacherId);

    /**
     * 查询学生列表
     */
   List<ClassStudentDto> findStudentList(@Param("classId") String classId);

    /**
     * 统计班级内学生数量
     * @param classId 班级id
     * @return 学生数
     */
    int countAllByClassId(@Param("classId") String classId);

    /**
     * 查找班级老师列表
     * @param page
     * @param params
     * @return
     */
    List<ManagerMBDto> fingClassTeacherList(Page page, @Param("map") Map<String, Object> params);

    /**
     * 查询往期反馈报告记录
     * @param vipId 学生id
     * @param endDate 结束日期（不包含）
     * @return 反馈报告记录
     */
    List<FeedbackDTO> findFeedbackHistory(@Param("vipId") String vipId, @Param("endDate") String endDate,
                                          @Param("offset") int offset, @Param("pageSize") int pageSize);

    /**
     * 统计学生反馈报告总数
     * @param vipId 学生id
     * @param endDate 截止日期（不包含）
     * @return 反馈报告总数
     */
    int countFeedbackHistory(@Param("vipId") String vipId, @Param("endDate") String endDate);
}
