package com.ssj.service.weixin.sales.service;

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

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import com.ssj.bean.weixin.sales.domain.LibOrderDetails;
import com.ssj.framework.core.common.service.BaseService;


/** 
 * @author  ZhangCaibao 
 * @version 2017年4月28日 下午3:06:51 
 * 类说明 
 */
public interface LibOrderDetailsService extends BaseService<LibOrderDetails, String>{

	public List<LibOrderDetails> getByUserId(String account);
	
	List<Map<String, Object>> getOrderDetailByAccount(String account);
	/**
	 * 回复关键字 查询销售的总金额
	* @param account
	* @return
	* 创建人：ZhangCaibao 
	* 2017年5月5日 下午4:09:23 
	* @Integer
	 */
	public Integer getSalesPrice(String account);
	/**
	 * 根据account 获取vipId
	* @param account
	* @return
	* 创建人：ZhangCaibao 
	* 2017年5月11日 下午8:27:23 
	* @String
	 */
	public List<String> getLibVipId(String account);
	/**
	 * 用户发起，发送给销售模板
	* @param id
	* @param openId
	* @param childName 学生姓名
	* 创建人：ZhangCaibao 
	* 2017年5月3日 下午4:50:09 
	* @void
	 */
	public void sendReviewTemplate(String id,String openId,String childName,String details,BigDecimal price);
	/**
	 * 销售拒绝后发起，推送给用户消息模板
	* @param id
	* @param openId
	* 创建人：ZhangCaibao 
	* 2017年5月3日 下午5:09:26 
	* @void
	 */
	public void sendRefuseTemplate(String id,String openId,String reason);
	/**
	 *  推送消息给上一级
	* @param libId
	* @param type
	* 创建人：ZhangCaibao 
	* 2017年5月3日 下午4:55:24 
	* @void
	 */
	public void sendSuperiorTemplate(String url,String libId,String type,String id,String childName,BigDecimal price);
	/**
	 * 拒绝后发送给上一级，
	* 创建人：ZhangCaibao 
	* 2017年5月3日 下午5:22:20 
	* @void
	 */
	public void sendSubordinateTemplate(String initiateOpenId,String libId,String orderDetailsId,String id ,String reason);
	/**
	 *财务同意后，发起消息给申请人，
	* @param id
	* @param openId
	* 创建人：ZhangCaibao 
	* 2017年5月3日 下午5:37:31 
	* @void
	 */
	public void sendAgreeTemplate(String id,String openId);
	
	
	 Page<Map<String, Object>> findForPageList(Map<String, Object> searchParams, Pageable pageable);
	 /**
	  * 获取该会员卡是否购买过记录
	 * @param vipId
	 * @param salesPriceId  销售卡的明细
	 * @param species  卡的大类型会员卡和尊享卡
	 * @return
	 * 创建人：ZhangCaibao 
	 * 2017年5月8日 上午11:28:13 
	 * @Integer
	  */
	public Integer getUserHistory(String salesPriceId,String vipId,String libId,String species); 

	/**
	 * 
	* 创建人:zhanglin
	* @param @param vipId
	* @param @param libId
	* @param @return       
	* 方法说明：计算服务过期天数
	 * @date 2017年11月23日 下午5:08:04
	 */
	public Integer getLibVipService(String vipId,String libId);
	
	/**
	 * 
	* 创建人:zhanglin
	* @param @param vipId
	* @param @param libId
	* @param @return       
	* 方法说明：判断服务有没有过期
	 * @date 2017年11月23日 下午5:09:02
	 */
	public Integer getLibVipServiceNumber(String vipId,String libId);
	
	
	
	/**
	 * 根据当前人orgcode查询订单明细订单
	* @param orgCode
	* @return
	* 创建人：ZhangCaibao 
	* 2017年5月10日 上午10:24:13 
	* @List<Map<String,Object>>
	 */
	List<Map<String, Object>> getOrderDetailByOrgCode(Map<String, Object> searchParams);
	/**
	 *  查询财务月报表
	* @param orgCode
	* @return
	* 创建人：ZhangCaibao 
	* 2017年5月10日 下午4:54:47 
	* @List<Map<String,Object>>
	 */
	List<Map<String, Object>> getOrderDetailMonthByOrgCode(Map<String, Object> searchParams);
	/**
	 *  查询财务月报表 a,b模式
	* @param orgCode
	* @return
	* 创建人：ZhangCaibao 
	* 2017年5月10日 下午4:54:47 
	* @List<Map<String,Object>>
	 */
	List<Map<String, Object>> getOrderDetailMonthA(Map<String, Object> searchParams);
	/**
	 * 总部认证组绩效报表（管理员查询）
	* @return
	* 创建人：ZhangCaibao 
	* 2017年5月12日 下午2:10:52 
	* @List<Map<String,Object>>
	 */
	List<Map<String, Object>> getOrderDetailZongBuRenZheng(Map<String, Object> searchParams);
	/**
	 * 渠道统计明细（管理员、CD）
	 * @return
	 * 创建人：ZhangCaibao 
	 * 2017年5月12日 下午2:10:52 
	 * @List<Map<String,Object>>
	 */
	List<Map<String, Object>> getOrderDetailQuDao(Map<String, Object> searchParams);
	/**
	 * 推送给销售客服消息
	* @param details 卡片明细
	* @param salesUserId  销售ID
	* @param childName  购卡人姓名
	* @param count  0 新签 ，1 续签
	* 创建人：ZhangCaibao 
	* 2017年5月17日 下午3:26:46 
	* @void
	 */
	public void sendSales(String details,String salesUserId,String parentName,String childName,BigDecimal price,Integer count,String libId); 
	/**
	 * 团购推送给销售客服消息
	* @param details 卡片明细
	* @param salesUserId  销售ID
	* @param childName  购卡人姓名
	* 创建人：ZhangCaibao 
	* 2017年5月17日 下午3:26:46 
	* @void
	 */
	public void sendGroupSales(String details,String salesUserId,Integer startVip,Integer endVip,BigDecimal price,Integer vipCount,String libId); 
	/**
	 * 购卡后推送消息给CD
	* @param details
	* @param salesUserId
	* @param parentName
	* @param childName
	* @param price
	* 创建人：ZhangCaibao 
	* 2017年6月26日 下午2:28:38 
	* @void
	 */
	public void sendCD(String details,String libId,String parentName,String childName,BigDecimal price,String salesUserId,Integer count);
	/**
	 * 批量购卡推送消息给CD
	* @param details
	* @param libId
	* @param parentName
	* @param childName
	* @param price
	* @param salesUserId
	* 创建人：ZhangCaibao 
	* 2017年9月8日 上午11:22:39 
	* @void
	 */
	public void sendGroupCD(String details,String libId,String parentName,String childName,BigDecimal price,String salesUserId);
	
	public void updateOrderStatus(String orderId);
	
	
	int getExpiredTemplate();
	/**
	 * 获取当前用户是否有购卡的记录
	* @param userId
	* @return
	* 创建人：ZhangCaibao 
	* 2017年6月23日 下午5:26:24 
	* @String
	 */
	public List<String> findByUserIdAndVipIsNull(String userId);
	
	public void updateVipId(List<String> list,String vipId);
	
	Page<Map<String, Object>> findForsellPageList(Map<String, Object> searchParams, Pageable pageable);
	/**
	 * 消息的推送和订单服务插入，（代购，续费。。自己购买）只能购买一张。
	* @param libOrderDetails
	* 创建人：ZhangCaibao 
	* 2017年12月1日 下午3:37:37 
	* @void
	 */
	public void saveOrderDetails(LibOrderDetails  libOrderDetails);
	public void saveOrderDetailsOneTwoOne(LibOrderDetails  libOrderDetails);
	/**
	 * 保存特色课(代付)
	* @param libOrderDetails
	* 创建人：ZhangCaibao 
	* 2017年12月6日 下午2:50:55 
	* @void
	 */
	public void saveProxyCourseVipService(LibOrderDetails  libOrderDetails);
	
	public void saveProxyCourseOrderDetails(LibOrderDetails libOrderDetails);
	
	/**
	 *  保存特色课 --自己付款
	* @param libOrderDetails
	* 创建人：ZhangCaibao 
	* 2017年12月6日 下午2:59:46 
	* @void
	 */
	public void saveCourseOrderDetails(LibOrderDetails  libOrderDetails,String activateUserId);
	/**
	 * 
	* @param orderNo
	* @return
	* 创建人：ZhangCaibao 
	* 2017年12月1日 下午3:53:38 
	* @LibOrderDetails
	 */
	public  LibOrderDetails  getByOrderNo(String orderNo);
	
	
	public void sendBindingUser(String details,String orderNo,String vipId,String userId);
	
	
	public void sendBinding(String details, String price,String joinname,String name,String telephone,String userId,Date createTime);
	/**
	 * 保存体验券，扫描激活后添加服务
	* @param libId 图书馆
	* @param openId 添加的会员
	* @param stat   1阅读，2作业吧
	* @param userId   当前 操作人的userid
	* 创建人：ZhangCaibao 
	* 2017年12月18日 下午5:58:47 
	* @void
	 */
	public void saveTiYanVipService(String libId,String openId,String stat,String userId);


	/**
	 * 查询当月作业吧消费金额
	 * @param vipId
	 * @param beginTime
	 * @param endTime
	 * @return
	 */
	public float findPriceByVipIdAndCurrentMonth (String vipId, String beginTime, String endTime);

	/**
	 * 查询最近的一条消费记录
	 * @param vipId
	 * @return
	 */
	public LibOrderDetails findLastOrderDetail (String vipId);

	/**
	 * 查询学生作业吧的所有订单记录， 写死了S003
	 * @param vipId
	 * @return
	 */
	List<LibOrderDetails> findOrderDetailByVipId(String vipId);

	/**
	 * 保存通讯服务订单信息
	 *
	 * @param libOrderDetails
	 */
	void saveCommuOrderDetails(LibOrderDetails libOrderDetails);

	/**
	 * 保存作业吧服务订单信息
	 *
	 * @param libOrderDetails
	 */
	void saveZybOrderDetails(LibOrderDetails libOrderDetails);
	
	/**
	 * 保存作业吧服务订单信息
	 *
	 * @param libOrderDetails
	 */
	public void saveBatchZybOrderDetails(LibOrderDetails libOrderDetails);
	/**
	 * 查看指定会员的服务购买记录(已支付)
	 * @param vipId
	 * @param priceSpecies
	 * @return
	 */
	List<LibOrderDetails> findByVipIdAndPriceSpecies(String vipId, String priceSpecies);

	/**
	 * 查看指定会员的服务购买记录(已支付)
	 * @param vipId
	 * @param priceSpecies
	 * @return
	 */
	List<LibOrderDetails> findOrderDetailList(String vipId, String priceSpecies, int appType);


}
