package com.ssj.service.weixin.zuoyb.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.ssj.bean.sys.homework.domain.HomeworkPicture;
import com.ssj.bean.weixin.zyb.domain.ZuoybKnowHow;
import com.ssj.bean.weixin.zyb.domain.ZuoybKnowModule;
import com.ssj.bean.weixin.zyb.domain.ZuoybStudentWorkHow;
import com.ssj.framework.core.common.service.BaseService;
import com.ssj.service.kmt.dto.KnowHowDTO;
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年9月26日 下午2:00:26 
 * 类说明 
 */
public interface ZuoybKnowHowService extends BaseService<ZuoybKnowHow, String>{

	public  Page<ZuoybKnowHow>  findByPage(Map<String, Object> params, Pageable sp);
	public Page<Map<String, Object>> getZuoybKnowHow(Map<String, Object> searchParams, Pageable pageable);
	/**
	 * 
	* @param libId 默认SSJ
	* @param courseName 科目
	* @param grade  //年级
	* @param banben //版本 1北师大，2人教
	* @param semester //1上学期，2 下学期
	* @return
	 */
	public List<ZuoybKnowHow> findlatestHow(String libId,String courseName,String grade,Integer banben,Integer semester);
	/**
	 * 
	* @param libId 默认SSJ
	* @param courseName 科目
	* @param grade  //年级
	* @param banben //版本 1北师大，2人教
	* @param semester //1上学期，2 下学期
	* @param howName //单元内容
	* @return
	 */
	public List<ZuoybKnowHow> findlatestHow(String libId,String courseName,String grade,Integer banben,Integer semester,String howName);
	/**
	 * 
	* @param libId 默认SSJ
	* @param courseName 科目
	* @param grade  //年级
	* @param banben //版本 1北师大，2人教
	* @param semester //1上学期，2 下学期
	* @param howName //单元内容
	* @param howDetailsName //知识点内容
	* @return
	 */
	public List<ZuoybKnowHow> findlatestHow(String libId,String courseName,String grade,Integer banben,Integer semester,String howName,String howDetailsName);
	
	/**
	 *  图书馆
	* @param libId
	* @param courseName  科目
	* @param grade  年级 
	* @param orderBy  
	* 广州人教版 2
		深圳北师大 1
	* @param date  时间
	* @return
	* 创建人：ZhangCaibao 
	* 2017年9月26日 下午2:27:35 
	* @List<ZuoybKnowHow>
	 */
	public  List<ZuoybKnowHow> findByCourseNameByGrade(String libId,String courseName,String grade,String date,
			String banben, List<ZuoybStudentWorkHow>  workHowList)throws Exception;
	/**
	 *  获取全部年级的教学内容
	* @param libId
	* @param courseName
	* @param grade
	* * @param orderBy  按照人教版还是按照北师大排序
	* @return
	* 创建人：ZhangCaibao 
	* 2017年10月24日 上午10:08:59 
	* @List<ZuoybKnowHow>
	 */
	public  List<ZuoybKnowHow> findByCourseNameByGrade(String libId,String courseName,String grade,String banben
			, List<ZuoybStudentWorkHow>  workHowList);
	
	public  List<ZuoybKnowHow> findByCourseNameByGrade1(String libId,String courseName,String grade,String banben, String semester);

	/**
	 *
	 * @param libId
	 * @param courseName
	 * @param grade
	 * @param banben
	 * @return
	 */
	public List<ZuoybKnowHow> findByCourseNameByGrade(String libId, String courseName, String grade,String banben);

	/**
	 * 查询关联的知识点
	 * @param vipId
	 * @param subject
	 * @return
	 */
	public Map<String, Object> findRelateKnowledge (String vipId, String subject);

	/**
	 * 查询全部的知识点
	 * @param vipId
	 * @param subject
	 * @return
	 */
	public Map<String, Object>  findAllKnowledge (String vipId, String subject);

	 /**
	   * 修改排序
	  * @param id
	  * @param num
	  * 创建人：ZhangCaibao 
	  * 2017年9月12日 上午10:15:43 
	  * @void
	   */
	  public void  updateKnowHowNum(String id,Integer num);
	  
	  /**
	   *  修改馆的时候插入打分基础数据
	  * @param libId
	  * 创建人：ZhangCaibao 
	  * 2017年9月27日 下午5:00:06 
	  * @void
	   */
	  public void insertKonwHow(String libId);
	  /**
	   * 根据子节点获取父节点的
	  * @param howDetialsId
	  * @return
	  * 创建人：ZhangCaibao 
	  * 2017年11月8日 下午3:17:38 
	  * @List<ZuoybKnowHow>
	   */
	  public  List<ZuoybKnowHow> getChindIdParentName(String howDetialsId);
	  /**
	   * 获取当月所有模块。
	  * @param libId
	  * @param courseName
	  * @param grade
	  * @param weekNum 几周（开学时间，和当前时间相差几周）
	  * @param semester 1上学期2下学期
	  * @return
	  * 创建人：ZhangCaibao 
	  * 2018年1月15日 上午9:38:51 
	  * @List<ZuoybKnowHow>
	   */
	  public List<ZuoybKnowHow> getTheMonthKnowHowAndModule(String libId,String courseName,String grade,int weekNum,String semester,String type);
	  /**
	   * 新版获取当月所有的模块（知识点关联模块）
	  * @param libId
	  * @param courseName
	  * @param grade
	  * @param weekNum
	  * @param semester
	  * @param type
	  * @return
	  * 创建人：ZhangCaibao 
	  * 2018年3月13日 上午11:13:48 
	  * @List<ZuoybKnowHow>
	   */
	  public List<ZuoybKnowModule> getTheMonthModule(String libId,String courseName,String grade,int weekNum,String semester,String type);
	  /**
	   * 根据年级，图书馆，内容，课程名称
	  * @param name
	  * @param libId
	  * @param courseName
	  * @param grade
	  * @return
	  * 创建人：ZhangCaibao 
	  * 2018年1月22日 下午5:08:28 
	  * @String
	   */
	  public ZuoybKnowHow findByNameAndLibIdAndCourseName(String name,String libId,String courseName,Integer num);
	  public ZuoybKnowHow findByNameAndLibIdAndCourseName(String name,String libId,String courseName);
	  
	  
	  public List<Map<String,Object>> findMasterByVip(String vipId);
	  
	  public List<ZuoybKnowHow> getZybKnowHowByHowDetailsId(String howDetailsIds);

	/**
	 * 查询知识点单元
	 * @param howDetailIds
	 * @return
	 */
	List<ZuoybKnowHow> getZybKnowHowByHowDetailsIdIn(List<String> howDetailIds);


	/**
	 * 保存单元和知识点信息
	 * @param data
	 * @param homeworkPicture
	 * @return
	 */
	public void saveCorrectResult (String data, HomeworkPicture homeworkPicture) throws JsonProcessingException;

	/**
	 * 保存作业关联的知识点
	 * @param data
	 * @param zybworkId
	 */
	public void saveWorkRelateKnowHow(String data, String zybworkId);

	/**
	 * 保存关联的知识点信息
	 * @param ids
	 */
	public void saveWorkHow(List<String> ids, String zybWorkId, int type);


	/**
	 * 保存workHowDetailId, 并把id去重返回
	 * @param detailIds
	 * @param zybWorkId
	 * @return
	 */
	public List<String> saveHowDetail4StudentWork (List<String> detailIds,  List<String> howList, String zybWorkId, int type);

	/**
	 * 保存关联的知识点信息
	 * @param ids
	 */
	public void saveHomeworkKnowledgeRelate(List<String> ids, String zybWorkId);

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

	/**
	 * 根据年级、科目、版本、学期、单元名查询单元
	 */
    ZuoybKnowHow findOneByCondition(String gradeNum, String subject, String version, String semester, String knowHowName);
    
	public List<Object> findByCourseNameByGradeNew(String string, String courseName, String grade,
			Integer banben, String semester);
}
