package com.ssj.dao.weixin.zuoyb.dao;


import com.ssj.bean.weixin.libmy.domain.TbLibJoin;
import com.ssj.bean.weixin.zyb.domain.ZuoybKnowHow;
import com.ssj.bean.weixin.zyb.domain.ZuoybKnowHowDetails;
import com.ssj.bean.weixin.zyb.domain.ZuoybWeek;
import com.ssj.service.kmt.dto.KnowHowDTO;
import com.ssj.service.kmt.dto.KnowHowDetailsDTO;
import com.ssj.service.kmt.dto.TestPointDTO;
import com.ssj.service.kmt.request.KnowledgeRequest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

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

/** 
 * @author  ZhangCaibao 
 * @version 2017年7月4日 下午1:14:46 
 * 类说明 
 */
public interface ZuoybQueryDao {

	 /**
	  * 获取作业吧课程列表
	 * @param searchParams
	 * @param pageable
	 * @return
	 * 创建人：ZhangCaibao 
	 * 2017年7月4日 下午1:16:51 
	 * @Page<Map<String,Object>>
	  */
	 public Page<Map<String, Object>> getZuoybCourseist(Map<String, Object> searchParams, Pageable pageable);
	 /**
	  * 获取所有的单元
	 * @param searchParams
	 * @param pageable
	 * @return
	 * 创建人：ZhangCaibao 
	 * 2018年6月25日 下午1:53:24 
	 * @Page<Map<String,Object>>
	  */
	 public Page<Map<String, Object>> getZuoybKnowHow(Map<String, Object> searchParams, Pageable pageable);

	/**
	 * 分页查询单元列表
	 * @param searchParams
	 * @param pageable
	 * @return
	 */
	 Page<Map<String, Object>> findKnowHowByPage(Map<String, Object> searchParams, Pageable pageable);

	/**
	 * 分页查询知识点列表
	 * @param searchParams
	 * @param pageable
	 * @return
	 */
	Page<Map<String, Object>> findKnowHowDetailByPage(Map<String, Object> searchParams, Pageable pageable);
	 public Page<Map<String, Object>> getZuoybKnowHowDetails(Map<String, Object> searchParams, Pageable pageable);
	 public Page<Map<String, Object>> getZuoybKnowSort(Map<String, Object> searchParams, Pageable pageable);
	 public Page<Map<String, Object>> getZuoybKnowKdSort(Map<String, Object> searchParams, Pageable pageable);
	 public void insertZuoybWeekList(List<ZuoybWeek> list);
	 
	  public Page<Map<String, Object>> getZybList(Map<String, Object> searchParams, Pageable pageable);
	  /**
	   * 获取老师上课的时段
	  * @param teacherId
	  * @return
	  * 创建人：ZhangCaibao 
	  * 2017年7月6日 下午4:57:39 
	  * @List<Map<String,Object>>
	   */
	  List<Map<String,Object>> getTeacherIdList(String teacherId,Integer day);	 
	  /**
	   * 获取全部时段
	  * @param teacherId
	  * @return
	  * 创建人：ZhangCaibao 
	  * 2017年7月7日 下午2:56:54 
	  * @List<Map<String,Object>>
	   */
	  List<Map<String,Object>> getLibIdAndVipIdList(String libId,String vipId);	 
	  
	  public Page<Map<String, Object>> findTeacherIdForPage(Map<String, Object> searchParams, Pageable pageable);
	  
	  
	  List<Map<String,Object>> getWorkList(String libId,String vipId ,String date,String courseHour);
	  /**
	   * 作业反馈百分比
	  * @param libId
	  * @param vipId
	  * @param date
	  * @param courseHour
	  * @return
	  * 创建人：ZhangCaibao 
	  * 2017年10月13日 下午2:52:15 
	  * @List<Map<String,Object>>
	   */
	  List<Map<String,Object>> workPercentage(String libId,String vipId ,String date,String courseHour);
	  
	  List<Map<String,Object>> getWorkList(String libId,String vipId ,String date);
	  
	  /**
	   * 总部SR外派人员
	  * @param searchParams
	  * @param pageable
	  * @return
	  * 创建人：ZhangCaibao 
	  * 2017年9月6日 下午2:07:08 
	  * @Page<Map<String,Object>>
	   */
	  public Page<Map<String, Object>> zuoybSRList(Map<String, Object> searchParams, Pageable pageable);
	  
	  /**
	   * 获取作业吧的管理员，有总部SR人员操作，并获取已选中的
	  * @param searchParams
	  * @param pageable
	  * @return
	  * 创建人：ZhangCaibao 
	  * 2017年9月6日 下午3:29:09 
	  * @Page<Map<String,Object>>
	   */
	  public Page<Map<String, Object>> selectZybSRList(Map<String, Object> searchParams, Pageable pageable);
	  /**
		 * 老师管理学生端
		* @param searchParams
		* @param pageable
		* @return
		* 创建人：ZhangCaibao 
		* 2017年9月16日 上午7:50:56 
		* @Page<Map<String,Object>>
		 */
		 public Page<Map<String, Object>> zuoybStudentPushList(Map<String, Object> searchParams, Pageable pageable);
		 /**
		  * 获取最近三十天 错题总数，答题总数，正确百分比
		 * @param vipId
		 * @return
		 * 创建人：ZhangCaibao 
		 * 2017年10月31日 下午3:41:20 
		 * @Map<String,Object>
		  */
	 public Map<String,Object> getXqTopicCount(String vipId);	
	 
	 /**
	  * 获取最近7天作业报告情况
	 * @param vipId
	 * @return	
	 * 创建人：ZhangCaibao 
	 * 2017年10月31日 下午4:37:22 
	 * @List<Map<String,Object>>
	  */
	 public List<Map<String,Object>> getXqWeekReport(String vipId,String startTime, String endTime);	
	 
	 
	 /**
	  * 根据当天的报告，查询错题点，和总题点，学习建议
	 * @param pushId
	 * @return
	 * 创建人：ZhangCaibao 
	 * 2017年11月6日 下午6:04:15 
	 * @Map<String,Object>
	  */
	 public List<Map<String,Object>> getStudentWork(String pushId);
	 
	 public Page<Map<String, Object>> getZuoybStudentPushList(Map<String, Object> searchParams, Pageable pageable);
	 
	 /**
	  * 取当天打分的老师，只取一条，获取老师的名称，和头像。
	 * @param vipId
	 * @return
	 * 创建人：ZhangCaibao 
	 * 2017年11月7日 上午10:20:53 
	 * @Map<String,Object>
	  */
	 public Map<String,Object> getTeacherAndPhoto(String vipId);

	public List<Map<String, Object>> getKonwDetail(Map<String, Object> params);
	 public Page<Map<String, Object>> getKonwTBDetail(Map<String, Object> params, Pageable sp);
	
	public List<Map<String,Object>> getRecentWorkBg(String vipId);
	 /**
	  * 最近7天
	 * @param vipId
	 * @param derver
	 * @return
	 * 创建人：ZhangCaibao 
	 * 2018年4月28日 下午1:40:51 
	 * @List<Map<String,Object>>
	  */
	public List<Map<String,Object>> Last7days(String vipId); 
	 public List<Map<String,Object>> Lastproblem7days(String vipId);
	 
	/**
	 * @param teacherId
	 * @return
	
	 * 方法说明:获取老师好评度
	
	 * 创立日期:2018年5月9日 下午8:43:47
	 * 创建人:yangcan
	
	 */
	public Map<String,Object> getTeacherPraise(String teacherId);

	public Page<Map<String, Object>> getVipIdByLibId4Page(String libId,String teacherId, Pageable pageable);
	
	public Page<Map<String, Object>> searchStudentList(String libId,String masterId,String keyword, Pageable pageable);
	
	public List<Map<String, Object>> getKonwKdDetail(Map<String, Object> params);

	/**
	 * 查询小塾反馈详情
	 * @param objectIds
	 * @return
	 */
	public List<Map<String, Object>> getFeedbackDetailForConch (String[] objectIds);
	

	/**
	 * 查询一段时间内学生的作业知识维度数据
	 * @param vipId
	 * @param subject
	 * @param beginTime
	 * @param endTime
	 * @param type
	 * @return
	 */
	List<Map<String, Object>> getHomeworkKnowModuleData (String vipId, String subject, String beginTime, String endTime, int type);

	/**
	 * 查询一段时间内学生的作业知识维度数据
	 * @param vipId
	 * @param subject
	 * @param beginTime
	 * @param endTime
	 * @param type
	 * @return
	 */
	List<Map<String, Object>> getHomeworkKnowModuleDataV1 (String vipId, String subject, String beginTime, String endTime, int type);

	/**
	 * 查询一段时间内学生的作业知识维度数据
	 * @param vipId
	 * @param subject
	 * @param beginTime
	 * @param endTime
	 * @param type
	 * @return
	 */
	List<Map<String, Object>> getHomeworkKnowModuleDataWrongV1 (String vipId, String subject, String beginTime, String endTime, int type);


	/**
	 * 查询知识点掌握情况
	 * @param vipId
	 * @param subject
	 * @param beginTime
	 * @param endTime
	 * @param type
	 * @return
	 */
	List<Map<String, Object>> getKnowPointGrasp (String vipId, String subject, String beginTime, String endTime, int type);


	/**
	 * 查错题知识点掌握情况
	 * @param vipId
	 * @param subject
	 * @param beginTime
	 * @param endTime
	 * @param type
	 * @return
	 */
	List<Map<String, Object>> getWrongKnowPointGrasp (String vipId, String subject, String beginTime, String endTime, int type);

	/**
	 * 查询有错题的日期
	 * @param vipId 学生
	 * @param subject 科目
	 * @param isCorrect 订正否
	 * @param pageable 分页实体
	 * @return
	 */
	Page<Map<String, Object>> findWrongTopicDate (String vipId, String subject, boolean isCorrect, Pageable pageable);
	
	public Page<Map<String, Object>> getZuoybKnowHowDetailsKd(Map<String, Object> searchParams, Pageable pageable);
	
	public List<ZuoybKnowHow> findlatestHow(String libId,String courseName,String grade,Integer banben,Integer semester,String howName);
	public List<ZuoybKnowHow> findlatestHowIds(String libId,String courseName,String grade,Integer banben,Integer semester,String howName,List<String> ids);
	 public List<ZuoybKnowHowDetails> findlatestHowDetails(String libId,String howId,String courseName,String grade,Integer banben,Integer semester,String howDetailsName);
	 
	 public List<Map<String, Object>> getKonwVersion(String libId,String courseName,String grade,Integer banben,Integer semester,String howName);
	  public List<Map<String, Object>> getKonwDetailVersion(String libId,String courseName,String grade,Integer banben,Integer semester,String howDetailsName);
	  public List<Map<String, Object>> getKonwDetailKdVersion(String libId,String courseName,String grade,Integer banben,Integer semester,String howDetailsKdName);

	/**
	 * 根据条件查询知识点
	 */
   List<KnowHowDTO> findHowListWithDetailsByCondition(KnowledgeRequest request);

	/**
	 * 根据知识点id查询考点
	 */
   List<KnowHowDetailsDTO> findDetailsListWithKd(List<String> detailIdList, Integer versionType);

	/**
	 * 根据知识点id查询考点
	 * @param detailIdList 知识点id列表
	 * @param versionType 版本号
	 * @param grade 年级
	 * @param subject 科目
	 * @param semester 上下册
	 * @return
	 */
	List<KnowHowDetailsDTO> findDetailsListWithKd(List<String> detailIdList, int versionType, String grade, String subject, int semester);

	/**
	 * 查询版本知识点的考点
	 * @param detailId
	 * @param versionType
	 * @return
	 */
   List<TestPointDTO> findPointsByDetailId (String detailId, int versionType, String grade, int semester);

	/**
	 *
	 */
	Page<Map<String,Object>> findByVipID(String vipId, Pageable pageable);

	List<Map<String,Object>> findAllLib(Map map);

	List<TbLibJoin> findAllCity(Map map);

}
