package com.ssj.service.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ssj.bean.sys.homework.domain.KnowledgeProficiency;
import com.ssj.bean.sys.homework.domain.StudentWeeklyReport;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * @author yrf
 * @description
 * @time 2019/12/26 14:08
 */
@Mapper
public interface LearningGrowthReportMapper {

    /**
     * 查询成长报告周报，用以更新知识点占比和掌握程度情况
     * @return 周报列表
     */
    List<StudentWeeklyReport> findWeeklyReport4UpdateKnowledgeSituation(IPage<Object> page);

    /**
     * 查询周报
     * @param vipId 学生id
     * @param subject 科目
     * @param beginDate 开始日期
     * @return 周报
     */
    StudentWeeklyReport findWeeklyReportByVipIdAndSubjectAndBeginDate(@Param("vipId") String vipId,
                                                                      @Param("subject") String subject,
                                                                      @Param("beginDate") String beginDate);

    /**
     * 根据学生id和开始日期查询周报
     * @param vipId 学生id
     * @param beginDate 开始日期
     * @return 周报列表
     */
    List<StudentWeeklyReport> findWeeklyReportByVipIdAndBeginDate(@Param("vipId") String vipId,
                                                                  @Param("beginDate") String beginDate);

    /**
     * 查询学期回顾知识点掌握熟练度
     * @param vipId 学生id
     * @param subject 科目
     * @param grade 年级
     * @param semester 学期
     * @param knowledgeVersion 知识点版本
     * @return 学期回顾知识点掌握熟练度
     */
    @Select("select * from scon_knowledge_proficiency where vip_id = #{vipId} and subject = #{subject} " +
            "and grade = #{grade} and semester = #{semester} and knowledge_version = #{knowledgeVersion}")
    KnowledgeProficiency findSemesterReview(@Param("vipId") String vipId, @Param("subject") String subject,
                                            @Param("grade") String grade, @Param("semester") Integer semester,
                                            @Param("knowledgeVersion") int knowledgeVersion);

    /**
     * 查询学期回顾知识点掌握熟练度记录的id、vipId、subject、grade
     *
     * @return 学期回顾知识点掌握熟练度记录list
     */
    @Select("select id, vip_id, subject, grade from scon_knowledge_proficiency where knowledge_version = 2")
    List<KnowledgeProficiency> findAll2UpdateKnowledgeVersion(IPage<Object> page);

    /**
     * 更新学期回顾知识点掌握熟练度记录知识点版本
     * @param id 学期回顾知识点掌握熟练度记录的id
     * @param knowledgeVersion 新版本
     * @return 更新记录数
     */
    @Update("update scon_knowledge_proficiency set knowledge_version = #{knowledgeVersion} where id = #{id}")
    void updateKnowledgeVersion(@Param("id") String id, @Param("knowledgeVersion") int knowledgeVersion);
}
