package com.ssj.service.conch.conch.service;

import com.ssj.bean.conch.conch.domain.HomeworkRanking;
import com.ssj.framework.core.common.service.BaseService;
import com.ssj.framework.core.util.ResponseEntity;
import com.ssj.service.conch.conch.dto.RankDTO;

import java.util.List;


public interface HomeworkRankingService extends BaseService<HomeworkRanking, String>{

	/**
	 * 计算小塾排行榜积分，每科作业只有第一张上传的作业图片才会计算
	 *
	 * 作业时大于等于50分钟不加分
	 * 作业时长大于等于30分钟小于50分钟的加1分
	 * 作业时长大于等于20分钟小于30分钟的加2分
	 * 作业时长大于等于5分钟小于20分钟的加3分
	 * 作业时小于5分钟或者未计时的不加分
	 * @param vipId 学生id
	 * @param homeworkId 作业id
	 * @param usedTime 作业用时（分钟）
	 * @param subject 科目
	 * @return 增加的积分数
	 */
	int computeAndSaveIntegralByHomeworkUseTime(String vipId, String homeworkId, Long usedTime,String subject);

	/**
	 * 计算小塾排行榜积分
	 *
	 * 正确率<50%不加分
	 * 正确率50%～69%加1分
	 * 正确率70%～79%加2分
	 * 正确率80%～89%加3分
	 * 正确率90%～100%加5分
	 *
	 * @param vipId 学生id
	 * @param homeworkCorrectRate 本次作业所涉及的所有知识点平均正确率
	 * @param subject 科目
	 */
	void computeAndSaveIntegralByHomeworkCorrectRate(String vipId, double homeworkCorrectRate, String subject);

	/**
	 * 根据小塾设备号查询学生排名信息
	 * @param derver 小塾号
	 */
	RankDTO findByDerver(String derver);

	/**
	 * 查询排行榜前50名
	 */
	List<RankDTO> findPrevious50();

	/**
	 * 计算昨天的作业批改后各学生获得的小塾积分
     */
    int computeCorrectionIntegral();

	/**
	 * 根据学生id查询作业积分排行
	 * @param vipId 学生id
	 */
	RankDTO findByVipId(String vipId);

	/**
	 * 查询作业积分排行榜
	 * @param vipId 学生id
	 * @return 响应实体
	 */
    ResponseEntity findHomeworkRankingByVipId(String vipId);

	/**
	 * 查询作业积分排行榜
	 * @param derver 小塾设备号
	 * @return 响应实体
	 */
	ResponseEntity findHomeworkRankingByDerver(String derver);

	/**
	 * 保存积分记录
	 * @param vipId 会员id
	 * @param integral 积分值
	 * @param operType 操作类型 保存明细需要用到
	 * @param details 保存明细需要用到
	 * @return  增加的积分数 可能存在有传入值，但是实际上并没有增加积分
	 */
	int saveRankIntegral(String vipId, int integral,int operType,String details);

	/**
	 * 通过vipid查询会员现有积分值
	 * @param vipId
	 * @return
	 */
	int searchIntegralByVipId(String vipId);
}
