package com.ssj.service.sys.situation.service;

import com.ssj.bean.sys.homework.domain.KnowledgeProficiency;

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

public interface LearningConditionService {
	
	public void initDataService();
	
	public void dailyUpdateService(int dateOffset);
	
	public Integer saveLearningCondition(List<Map<String, Object>> dimesionCountList, String vipId, String courseName, String grade);

	public Integer statisticsDimension();
	
	public List<String> getDimensionList(Integer grade, Integer semester, String courseName, Integer banben);

	/**
	 * 统计每个学生的作业数据（总题数、错题数、正确率）
	 * @param offset 时间偏移量，-1表示前一天，null则统计所有日期
	 */
    int countDailyHomeworkData(Integer offset);

	/**
	 * 统计每个学生的作业数据（总题数、错题数、正确率）
	 * @param offset 时间偏移量，-1表示前一月，null则统计所有月份
	 * @param calculateScore
	 * @param notify
	 * @return
	 */
    int countMonthlyHomeworkData(Integer offset, Boolean calculateScore, Boolean notify);

	/**
	 * 推送上周成长报告通知
     * @return
     */
	int pushWeeklyGrowthReportNotify();

	/**
	 * 生成周报数据
	 * @param beginDate 开始日期，格式：2019-11-26
	 * @param endDate 结束日期，格式：2019-11-26
	 * @param calculateScore
	 * @return 生成的记录数
	 */
    int generateWeeklyReport(String beginDate, String endDate, Boolean calculateScore);

	/**
	 * 准备生成周报数据
	 * @param offset 偏移量，需小于0，如-1表示上一周
	 * @param calculateScore
     * @return 生成的记录数
	 */
	int prepareGenerateWeeklyReport(Integer offset, Boolean calculateScore);

	/**
	 * 更新周报知识点占比和掌握程度情况
	 * @return 更新数量
	 */
    int updateStudentWeeklyReportKnowledgeSituation();

	/**
	 * 更新月报知识点掌握程度情况
	 * @return 更新数量
	 */
    int updateMonthlyReportKnowledgeSituation();

	/**
	 * 获取知识点熟练度列表
	 * @param vipId 学生id
	 * @param yesterdaySemester 昨日学期
	 * @param homeworkDate 昨日日期
	 * @return 知识点熟练度列表
	 */
	List<KnowledgeProficiency> getKnowledgeProficiencyList(String vipId, int yesterdaySemester, String homeworkDate);

	/**
	 * 更新？月的数据
	 * @param targetMonthStr 月份（如：2019-12）
	 * @return
	 */
    int updateTranscendedStudentProportion(String targetMonthStr);

    /**
	 * 推送月报提醒推送
	 * @param month 月份（如：2019-12）
	 * @return 推送人数
	 */
	int pushMonthlyGrowthReportNotify(String month);

	/**
	 * 生成错题知识点记录，统计该知识点错题相关信息
	 * @return 生成记录数
     * @param homeworkId
	 */
	int generateWrongQuestionKnowledge(String homeworkId);

	/**
	 * 更新错题知识点统计数据的题目状态字段
	 */
    int updateWrongQuestionKnowledgeQuestionStatus();

	/**
	 * 根据系统内所有昨天作业数据更新学期知识点掌握程度表数据
	 * @return 共更新？条数据
	 */
    int updateMasteryOfSemesterKnowledge();

	/**
	 * 更新知识点版本数据题目状态
	 */
	void updateKnowHowDetailsSortQuestionStatus();

	/**
	 * 查询知识点id、名称、维度
	 * @param subject 科目
	 * @param grade 年级
	 * @param yesterdaySemester 昨日学期（1上2下）
	 * @param version 知识点版本
	 * @return 知识点id、名称、维度列表
	 */
    List<Map<String,Object>> findKnowledgeIdAndNameAndModule(String subject, String grade, int yesterdaySemester,
															 int version);

	/**
	 * 刷新每日作业批改数据统计
	 *
	 * @param homeworkId 作业id
	 */
	void refreshHomeworkCount(String homeworkId);

	/**
	 * 重新生成提分训练
	 *
	 * @return 生成数量
	 * @param studentWeeklyReportId
	 */
    int regenerateTrainingRecommendQuestion(String studentWeeklyReportId);
}
