package com.iamberry.wechat.face.reback;

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

import com.iamberry.wechat.core.entity.PaperBean;
import com.iamberry.wechat.core.entity.flow.TemplateFlowInfo;
import com.iamberry.wechat.core.entity.member.Member;
import com.iamberry.wechat.core.entity.order.Order;
import com.iamberry.wechat.core.entity.reback.RebackInfo;
import com.iamberry.wechat.core.entity.relationship.WdRelation;
import com.iamberry.wechat.core.entity.task.TaskModel;


/**
 * 返利的操作服务
 * @author 欧阳明
 * @date 2016-05-25
 * 
 */
public interface RebackServices {

	/**
	 * 插入返现记录
	 * @param reback
	 * @return
	 */
	public int insert(RebackInfo reback);
	
	/**
	 * 可支持分页的查询
	 * @param reback
	 * @return
	 */
	public List<RebackInfo>  selectAll(RebackInfo reback);
	
	/**
	 * 获取查询结果的总数
	 * @param reback
	 * @return
	 */
	public int  selectCount(RebackInfo reback);
	
	/**
	 * 修改返利的记录
	 * @param reback
	 * @return
	 */
	public int update(RebackInfo reback);
	
	/**
	 * 更新状态 是根据订单的状态进行更新的  同时更新更新修改时间 返利时间
	 * @param reback 更新状态一定要带orderId
	 * @return
	 */
	public int updateStatus(RebackInfo reback);
	
	/**
	 * 通过id获取对象
	 * @param id
	 * @return
	 */
	public RebackInfo selectOneById(int id);
	
	//==================================================================================
	
	/**
	 * 加载订单表的返现
	 * @param order
	 * @return
	 */
	public int loadSingleOrderReward(Order order);
	
	/**
	 * 分销商的返利
	 * @author 欧阳明
	 * 
	 */
	public int drpReback(Order order,Member member,Date data ,List<Map> productTypeMap);
	public int drpReback2(Order order,Member member,Date data ,List<Map> productTypeMap,int cengci);
	/**
	 * 分销商的返利
	 * @author 欧阳明
	 * 
	 */
	//public int wdReback(Order order,Member member,Date date ,int productNums );
	public int wdReback(Order order,Member member,Date date ,List<Map> productTypeMap,WdRelation wdRelation );
	/**
	 * 从集合中遍历出模板节点中对应的钱
	 * @return
	 */
	public int  getMoneyFromTemplate(List<TemplateFlowInfo> templateInfos,
			int level,int flowType, int roleId );

	/**
	 * 获取某一个微代理在规定的时间内,某一个产品类型销售达到X台的用户以及销售数量，已返利 
	 * @param bean
	 * @return
	 */
	public List<TaskModel> getByDate(int productType, Date startDate, Date endDate, int count);
}
