package com.ssj.service.weixin.library.service;

import com.ssj.bean.weixin.libmy.domain.BookDetail;
import com.ssj.bean.weixin.libmy.domain.LibReadVip;
import com.ssj.bean.weixin.sales.domain.LibVipService;
import com.ssj.bean.weixin.user.domain.User;
import com.ssj.framework.core.common.service.BaseService;
import com.ssj.framework.core.util.ResponseEntity;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;


public interface IBookDetailService extends BaseService<BookDetail, String> {

	public Map<String, Object> searchBookInfo(String id);

	public BookDetail findById(String id);

	public List<Map<String, Object>> findBookList(String userId,String vipId);

	public void saveOrderDetail(String id, String money, String userId, String userId2, LibVipService vservice);

	public void backBook(String id, String userId);
	
	List<BookDetail>  bookDetailByInfoId(String infoId);
	/**
	 * 书本ID,
	 * @param infoId
	 * @param library 图书馆
	 * @param bookName
	 */
	public void bookenCode(String infoId,String library,String bookName)throws Exception;
	
	public List<String> weChatBookEnCode(List<BookDetail> list ,String libId ,String bookName)throws Exception;

	public List<Map<String, Object>> backBookList(String id, String userId);


	public List<Map<String, Object>> getOrderList(String id, String userId);

	public void saveContinueOrder(String ids, String money, String userId);

	public void saveOverdueOrder(String ids, BigDecimal yqDay, String userId);

	public List<Map<String, Object>> jsBookList(String id, String userId, LibReadVip vip);

	public Map<String, Object> getOrderDetail(String id, String userId);

	public List<Map<String, Object>> getManagerList(String string);

	/**
	 * 获取图书馆管理员列表
	 * @param id
	 * @return
	 */
	public List<Map<String, Object>> libManageList(String id);
	
	/**
	 * 根据图书馆id查询这个图书馆的借书还书情况
	 * @param libId
	 * @param stat 
	 * @return
	 */
	public Map<String, Object> getLibBookCounts(String libId, String stat);

	public List<Map<String, Object>> getBookInfoList(String libId);
	
	/**
	 * 查询书是否存在漂流情况
	 * @param id
	 * @return
	 */
	public List<Map<String, Object>> getBookDriftList(String id,String userId);

	public Map<String, Object> getDirftDetail(String oldUserId, String detailId, String userId);

	public Map<String, Object> getBookInfo(String id);

	public void sendBookOverMsg();



	public List<Map<String, Object>> getDetailQrList(String libId);

	public void BatchBookQrCode(List<Map<String, Object>> detailList, String libName, String dataStr) throws Exception;

	public void updateMoney(String userId, BigDecimal bigDecimal, BigDecimal subtract);

	/**
	 * @param vipId 
	 * 
	 * @Title: findServiceList
	 * @Description: 查找用户vip服务列表
	 * @param @param userId
	 * @param @return    设定文件
	 * @return List<Map<String,Object>>    返回类型
	 * @author shenhao
	 * @date 2017年6月29日 下午4:43:51
	 * @throws
	 */
	public List<Map<String, Object>> findServiceList(String userId, String vipId);

	public Map<String, Object> findVipServiceByVip(String vipid);

	/**
	 * 
	 * @Title: getLibBkDetailCount
	 * @Description: 查找图书馆生成书籍二维码数据量
	 * @param @param libId
	 * @param @return    设定文件
	 * @return Integer    返回类型
	 * @author shenhao
	 * @date 2017年9月7日 上午11:22:13
	 * @throws
	 */
	public Integer getLibBkDetailCount(String libId);

	/**
	 * 
	 * @Title: getLibBkInCount
	 * @Description: 查询在馆书籍
	 * @param @param libId
	 * @param @return    设定文件
	 * @return Integer    返回类型
	 * @author shenhao
	 * @date 2017年9月7日 上午11:31:16
	 * @throws
	 */
	public Integer getLibBkInCount(String libId);

	/**
	 * 
	 * @Title: getLIbBkTagDetail
	 * @Description: 查询图书馆书籍分类
	 * @param @param libId
	 * @param @return    设定文件
	 * @return Map<String,Object>    返回类型
	 * @author shenhao
	 * @date 2017年9月7日 上午11:50:11
	 * @throws
	 */
	public List<Map<String, Object>> getLIbBkTagDetail(String libId);

	/**
	 * 
	 * @Title: libBookList
	 * @Description: 按类型查找书籍分类
	 * @param @param params
	 * @param @param pageable
	 * @param @return    设定文件
	 * @return Page<Map<String,Object>>    返回类型
	 * @author shenhao
	 * @date 2017年9月7日 下午6:01:48
	 * @throws
	 */
	public Page<Map<String, Object>> libBookList(Map<String, Object> params, Pageable pageable);

	public Map<String, Object> findMyMap(String libId, String type);

	public Page<Map<String, Object>> BookWeekList(Map<String, Object> params, Pageable pageable);

	public List<Map<String, Object>> getUserBookDetail(String vipId, String rq, String rq2, String type);

	public List<Map<String, Object>> getDateBorrowList(String libId, String sdate,String type);

	public List<Map<String, Object>> adminCallBack(Map<String, Object> params);

	public Map<String, Object> borrowInfoWeek(String vipId, String id, String stat);

	public Map<String, Object> getRankCheck(LibReadVip vip, String userId, String libId);

	public Map<String, Object> getLibRank(String libId);

	public List<Map<String, Object>> getOrderUserList(String id);

	public List<Map<String, Object>> findBorrowList(String infoId);
	/**
	 * 已借阅
	* @param vipId
	* @param libId
	* @return
	* 创建人：ZhangCaibao 
	* 2018年8月15日 下午6:27:36 
	* @List<Map<String,Object>>
	 */
	public List<Map<String, Object>> haveToBorrow(String vipId,String libId);
	/**
	 *  获取5条最近录入的书籍
	* @param libId
	* @return
	* 创建人：ZhangCaibao 
	* 2018年8月14日 下午10:16:03 
	* @List<Map<String,Object>>
	 */
	public List<Map<String, Object>> getByLibIdList(String libId);
	/**
	 *  查询已借阅的次数
	* @param vipId
	* @param libId
	* @return
	* 创建人：ZhangCaibao 
	* 2018年8月15日 下午6:00:29 
	* @Integer
	 */
	public Integer borrowedByVipId(String vipId,String libId);

	public void saveBorrowBooks(List<String> bookDetailsId, String borrowUserId, String vipId);

	public List<Map<String, Object>> findBorrowedList(List<String> bookDetailsId);
	/**
	 * 在馆共有多少书籍
	* @param libId
	* @return
	* 创建人：ZhangCaibao 
	* 2018年11月12日 上午10:44:43 
	* @Integer
	 */
	public Integer getbooksByLibId(String libId);
	/**
	 * 在馆借阅出去多少书籍
	* @param libId
	* @return
	* 创建人：ZhangCaibao 
	* 2018年11月12日 上午10:44:53 
	* @Integer
	 */
	public Integer getbooksBorrowingByLibId(String libId);
	/**
	 * 找好书，可调动的书
	* @param params
	* @param pageable
	* @return
	* 创建人：ZhangCaibao 
	* 2018年11月12日 上午10:59:19 
	* @Page<Map<String,Object>>
	 */
	public Page<Map<String, Object>> getbooksList(Map<String, Object> params, Pageable pageable);
	/**
	 * 主题系列书籍
	* @param params
	* @param pageable
	* @return
	* 创建人：ZhangCaibao 
	* 2018年11月15日 上午11:37:48 
	* @Page<Map<String,Object>>
	 */
	public Page<Map<String, Object>> getGoodBooksToRead(Map<String, Object> params, Pageable pageable);
	public Page<Map<String, Object>> getBooksAndLibIdAndchildTheme(Pageable pageable,Map<String, Object> params);
	public Page<Map<String, Object>> getCallOutOrInList(String libId,int type, Pageable pageable);

	public List<BookDetail> findInList(String libId);

	public void updateStep2(String libId,int type);

	public void updateStep(String libId, int i);

	ResponseEntity saveBorrow(Map<String, String> param, LibReadVip vip, User user);

	ResponseEntity backBorrwBook(String id,String vipId);

	ResponseEntity saveBorrowBooksNew(List<String> bookDetails, String borrowUserId, String vipId) throws Exception;

    void pushSaveBorrow(List<String> bookDetailsId, LibReadVip vip, String borrowUserId, String libId);
}
