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

import com.ssj.bean.conch.conch.domain.ConchDerver;
import com.ssj.bean.conch.conch.domain.SmarttimePicture;
import com.ssj.bean.conch.conch.dto.HomeworkRecordDto;
import com.ssj.bean.conch.conch.dto.ProblemDetailDto;
import com.ssj.bean.sys.appinfo.bean.AppInfo;
import com.ssj.bean.sys.homework.domain.Homework;
import com.ssj.bean.sys.problem.domain.ProblemPicture;
import com.ssj.bean.weixin.libmy.domain.LibVip;
import com.ssj.framework.core.common.service.BaseService;
import com.ssj.framework.core.security.exception.ConchException;
import com.ssj.framework.core.util.ResponseEntity;
import com.ssj.service.conch.conch.request.*;
import com.ssj.service.conch.conch.vo.*;
import com.ssj.service.conch.parents.request.DeleteProblemRequest;

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


/** 
 * @author  ZhangCaibao 
 * @version 2018年4月11日 下午3:33:31 
 * 类说明  小塾数据业务访问
 */
public interface ConchDerverService extends BaseService<ConchDerver, String>{
	
    /**
     * 获取小塾的二维码。
    * @param derver
    * @return
    * 创建人：ZhangCaibao 
    * 2018年4月11日 下午3:45:22 
    * @Map<String,String>
     */
	ConchDerver getConchQrCode(String derver)throws Exception;
	ConchDerver getConchQrCode(String derver, int type)throws Exception;
	 /**
     * 查询设备号
    * @param derver
    * @return
    * 创建人：ZhangCaibao 
    * 2018年4月12日 上午10:38:06 
    * @ConchDerver
     */
	public ConchDerver findByDerver(String derver);
	
	/**
	 * 微信扫描进行绑定。
	 * 家长绑定小塾。
	* @param derver
	* @param userId
	* 创建人：ZhangCaibao 
	* 2018年4月26日 下午5:16:21 
	* @void
	 */
	public String bindingUserDevice(String derver, String userId, String vipId, String key);
	public String bindingUserDevice(String derver, String userId, String key);
	
	/**
	 * 用户自己点击贝壳绑定会员卡
	* @param vipId
	* @param derver
	* @param userId
	* @return
	* 创建人：ZhangCaibao 
	* 2018年4月27日 上午10:11:06 
	* @String
	 */
	Map<String,String> bindingVip(String vipId, String derver, String userId, String openId);
	
	/**
	 * 授权后，重新替换校长根据定位来
	* @param derver
	* @param userId
	* @param locationLat
	* @param locationLng
	* 创建人：ZhangCaibao 
	* 2018年4月27日 上午10:37:59 
	* @void
	 */
	 public void distributionSchool(String derver, String userId, String locationLat, String locationLng);
	 /**
		 * 家长解绑贝壳
		* @param derver
		* @param userId
		* 创建人：ZhangCaibao 
		* 2018年4月24日 下午4:07:50 
		* @void
		 */
	 ResponseEntity untyingParents(String derver, String userId);

	/**
	 * @param 设备号
	 * @return
	 * 方法说明:
	 * 创建时间:2019/6/21 13:49
	 * @author yangcan
	 */
	 ResponseEntity untyingParents(String derver);
	
	 public LibVip findByChildUserId(String childUserId);
	 
	 public ConchDerver findByVipId(String vipId);
	
	
	 public Map<String, Object> upload(String derver, String bizId, String fileKeys, String uploadType, String network, Integer mnc1,
                          Integer lac1, Integer cell1, Integer strength1, Integer mnc2, Integer lac2, Integer cell2,
                          Integer strength2, Integer mnc3, Integer lac3, Integer cell3, Integer strength3, Integer mnc4,
                          Integer lac4, Integer cell4, Integer strength4, String derverFileId, Long currentTime, String courseName) throws Exception;
	 
	 /**
	 * @param libVip 家长小孩信息
	 * @param bizId 业务id
	 * @param fileKeys 文件地址
	 * @param uploadType 作业(HOMEWORK),难题(PROBLEM),小时光(SMARTTIME)
	 * @param derverFileId 小塾需要图片唯一码
	 * @param currentTime 时间戳
	 * @return
	 * @throws Exception
	
	 * 方法说明:
	
	 * 创立日期:2018年8月20日 下午4:07:52
	 * 创建人:yangcan
	
	 */
	public Map<String, Object> upload(LibVip libVip, String bizId, String fileKeys, String uploadType, String derverFileId, Long currentTime, String courseName) throws Exception;
	 
	 /**
		* 查询小时光列表
		*/
	 List<SmarttimePicture> querySmarttimePictureList(String derver) throws ConchException, Exception;
	 
	 public Homework finishHomework(String derver, Long startTime, Long endTime, Long usedTime) throws Exception;


	/**
	 * 获取版本
	 * @param type
	 * @return
	 */
	 AppInfo getVersion(int type);
	
	 public void updateVersion(String derver, String version, String versionType, Long issueNum);
	
	 public ConchDerver findByUserId(String userId);
	 /**
	  * 查询贝壳绑定情况，>0绑定
	 * @param derver
	 * @param userId
	 * @return
	 * 创建人：ZhangCaibao 
	 * 2018年5月7日 下午9:35:24 
	 * @int
	  */
	 public String  findByDerverBinding(String derver, String userId);
	 
	/**
     * @param derver
     * @param energy

     * 方法说明:低电量提醒家长

     * 创立日期:2018年6月4日 下午5:21:11

     */
	public void lowBatteryRemind(String derver, Integer energy);
	
	/**
	 * @param derver
	
	 * 方法说明:小塾内存已满提醒家长
	
	 * 创立日期:2018年5月9日 下午2:15:49
	 * 创建人:yangcan
	
	 */
	public void dataFullRemind(String derver);
	
	public void pushSingleApp(String derver);
	
	public void pushAllApp();
	
	/**
	 * @param derver
	 * @return
	
	 * 方法说明:查询当天的作业记录汇总
	
	 * 创立日期:2018年5月16日 上午10:38:56
	 * 创建人:yangcan
	
	 */
	public Map<String,Object> homeworkRecord(String derver);
	
	/**
	 * @param derver
	 * @param courseName
	 * @return
	
	 * 方法说明:查询作业反馈详情
	
	 * 创立日期:2018年5月16日 下午3:04:06
	 * 创建人:yangcan
	
	 */
	public Map<String,Object> homeworkFeedbackDetails(String derver, String courseName);

	public List<ConchDerver> getConchInfoByDervers(List<String> dervers);
	
	public void bindDerverSimcard(String derver, String simcard);
	
	public List<Map<String,Object>> homeworkStatus(String derver);

	/**
	 * 小塾端开始计时
	 * @param derver
	 * @param courseName
	 * @param currentTime
	 * @return
	 */
	Map<String, Object> startHomework(String derver, String courseName, long currentTime);

	/**
	 * pad学生开始作业计时
	 * @param vip
	 * @param courseName
	 * @param currentTime
	 * @return
	 */
	Map<String, Object> startHomeworkByVipId (LibVip vip, String courseName, long currentTime);

	/**
	 * 老师端学生开始计时
	 * @param libVip
	 * @param courseName
	 * @param currentTime
	 * @param type 1 在馆老师端，2小塾端，3 pad端
	 * @return
	 */
	Map<String, Object> startHomeworkByVipIdAndType(LibVip libVip, String courseName, long currentTime, int type);

	public void endHomework(String derver, String homeworkId, Long endTime, Long usedTime);

	public Map<String, Object> newEndHomework(String derver, String courseName, long endTime, long usedTime);

	/**
	 * 学生结束计时
	 * @param libVip
	 * @param courseName
	 * @param endTime
	 * @param usedTime
	 */
	Map<String, Object> endHomeworkByVipId (LibVip libVip, String courseName, long endTime, long usedTime);

	public ConchDerver findByQrCode(String qrCode);
	
	public void deleteHomework(String homeworkId, Long usedTime);

    List<HomeworkVO> homeworkRecord2(String derver);

	HomeworkFeedbackVO homeworkFeedbackDetails2(String homeworkId);
	
	public Map<String, String> getGps(String derver, String network, Integer mnc1,
                                      Integer lac1, Integer cell1, Integer strength1, Integer mnc2, Integer lac2, Integer cell2,
                                      Integer strength2, Integer mnc3, Integer lac3, Integer cell3, Integer strength3, Integer mnc4,
                                      Integer lac4, Integer cell4, Integer strength4) throws Exception;

	ResponseEntity getGps(LocationReqNew entity) throws Exception;
	
	public ResponseEntity noNetworkUploadHomework(ConchUploadHomeworkRequest request) throws Exception;

	/**
	 * pad学生无网络上传作业图片
	 * @param libVip
	 * @param courseName
	 * @param derverFileId
	 * @param fileKeys
	 * @param startTime
	 * @param endTime
	 * @return
	 * @throws Exception
	 */
	ResponseEntity noNetworkUploadHomeworkByVipId (LibVip libVip, String courseName, String derverFileId, String fileKeys, long startTime, long endTime) throws Exception;

	/**
	 * 上传作业，区分类型
	 * @param libVip
	 * @param courseName
	 * @param derverFileId
	 * @param fileKeys
	 * @param derver
	 * @param type  1 老师端，2 小塾端，3 pad端
	 * @param startTime
	 * @param endTime
	 * @param questionRecommendRecordId
     * @return
	 * @throws Exception
	 */
	ResponseEntity noNetworkUploadHomeworkByVipIdAndType(LibVip libVip, String courseName, String derverFileId,
                                                         String fileKeys, String derver, int type,
                                                         long startTime, long endTime, String questionRecommendRecordId,String userId) throws Exception;


	public ResponseEntity swipeQrCode(String derver, String qrCode);
	
	/**
	 * @param vipId
	 * @param longitude
	 * @param latitude
	 * @param derver
	 * @param userId
	 * @return
	
	 * 方法说明:换绑贝壳(先解绑原贝壳，再重新绑定新贝壳)
	
	 * 创立日期:2019年1月9日 下午5:57:54
	 * 创建人:yangcan
	
	 */
	public ResponseEntity changeBindConch(String vipId, String longitude, String latitude, String derver, String userId);

	/**
	 * 查看会员各科绑定老师
	 * @param vipId
	 * @param subject
	 * @return
	 */
	ResponseEntity getOrgTeacherBindInfo(String vipId, String subject);

	/**
	 * 根据作业id查询反馈
	 */
    HomeworkFeedbackVO3 homeworkFeedbackDetails3(String homeworkId);
    
    /**
     * @param req
    
     * 方法说明:作业登记，除了小塾相机端，其他小塾学伴端可以用
    
     * 创立日期:2019年4月2日 下午2:47:09
     * 创建人:yangcan
    
     */
	ResponseEntity homeworkCheckIn(HomeworkCheckInReq req);

	/**
	 * 新作业登记 只用于小塾相机端，防止相同图片重复上传
	 * @param req
	 */
	ResponseEntity newHomeworkCheckIn(NewHomeworkCheckInReq req);

	/**
	 * 保存作业登记
	 * @param vipId
	 */
	ResponseEntity homeworkCheckInByVipId (String vipId, String checkInImg);

	/**
	 * 保存作业登记(上传多张)
	 * @param vipId
	 * @param checkInImgList
	 */
	ResponseEntity multipleHomeworkCheckInByVipId(String vipId, List<String> checkInImgList);

	/**
	 * 获取小塾绑定小孩的服务
	 * @param derver  设备号
	 * @return
	 */
	ResponseEntity getChildService(String derver);

	/**
	 * 作业吧和通讯服务权限控制
	 *
	 * @param derver  设备号
	 * @param message 提示信息
	 * @return
	 */
	ResponseEntity judgeZybAndCommuAuthority(String derver, String message);
	
	/**
	 * @param request
	 * @return 
	 * 方法说明: 小塾上传初始化信息
	 * 创建时间:2019/4/25 12:26
	 * @author yangcan
	 */
	public void uploadConchInitInfo(ConchInitInfoRequest request, int type);

	/**
	 * 单科批改详情
	 * @param homeworkId 作业id
	 * @param type 0 未知，1最后一张，2不是最后一张
	 */
    HomeworkFeedbackVO4 homeworkFeedbackDetails4(String homeworkId, int type);
    
    
    ConchDerver getConchDerverByImei(String imei);

    public Map<String, Object> getChildDerverService(String derver);

	/**
	 * 查询小孩的服务
	 * @param vipId
	 * @return
	 */
	Map<String, Object> getChildDerverServiceByVipId(String vipId);
    Map<String, Object> getChildDerverServiceByLibVip(String vipId,String libId);

	public void updateDerverQrCode();

	public void updateByDerver(String derver);

	public List<ConchDerver> findByImei(String imei);

	/**
	 * 单科批改详情
	 * @param homeworkId 作业id
	 * @param type 0 未知，1最后一张，2不是最后一张
	 */
    HomeworkFeedbackVO5 homeworkFeedbackDetails5(String homeworkId, int type);

	ResponseEntity importConchData(String workbook) throws Exception;

	/**
	 * 查询作业记录
	 * @param derver
	 * @return
	 */
	List<HomeworkRecordDto> findHomeworkRecord(String derver);

	/**
	 * 查询作业记录
	 * @param vip
	 * @return
	 */
	List<HomeworkRecordDto> findHomeworkRecordByVip(LibVip vip);

	/**
	 * 难题解答推送小塾
	 * @param problemPicture
	 * @param questionId
	 * @param showExerciseQuestion 是否高于最高的阀值
	 */
	ProblemDetailDto getProblemFeedbackData(ProblemPicture problemPicture, List<String> questionId, boolean showExerciseQuestion);

	/**
	 * 删除错题，软删除
	 * @param deleteProblemRequest
	 */
	void deleteProblemPicture (DeleteProblemRequest deleteProblemRequest);

	/**
	 * 查询今日作业记录
	 * @param vip
	 * @return
	 */
	List<HomeworkRecordDto> findTodayHomeworkRecord (LibVip vip, Date dateTime);

	/**
	 * 查询今日待完成作业列表
	 * @param vip
	 * @return
	 */
	List<HomeworkRecordDto> findTodayHandleHomeworkRecord (LibVip vip, Date dateTime);

	/**
	 * 查询作业历史记录
	 * @param vip
	 * @return
	 */
	List<HomeworkRecordDto> findHistoryHomeworkRecord (LibVip vip, Date beginTime, Date endTime);

	/**
	 * 查询某个作业记录
	 * @param homeworkId
	 * @return
	 */
	HomeworkRecordDto findOneHomeworkRecord (String homeworkId);
}
