package com.iamberry.wechat.service.mapper;

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

import org.apache.ibatis.annotations.Param;

import com.iamberry.wechat.core.entity.PaperBean;
import com.iamberry.wechat.core.entity.order.ProbationOrderDto;
import com.iamberry.wechat.core.entity.statictics.GoldMemberStatisticsDto;
import com.iamberry.wechat.core.entity.statictics.SalesmanDto;
import com.iamberry.wechat.core.entity.statictics.SalesmanInfo;
import com.iamberry.wechat.core.entity.statictics.StatisticManagerDto;
import com.iamberry.wechat.core.entity.statictics.StatisticOrderByMonthDto;
import com.iamberry.wechat.core.entity.statictics.StatisticsAdministratorDTO;
import com.iamberry.wechat.core.entity.statictics.StatisticsOrderDTO;
import com.iamberry.wechat.core.entity.statictics.StatisticsOrderDetailsDTO;
import com.iamberry.wechat.core.entity.statictics.StoresStatisticsDto;
import com.iamberry.wechat.core.entity.statictics.VipOfflineDto;

/**
 * 统计Mapper
 * @company	深圳爱贝源科技有限公司
 * @website www.iamberry.com
 * @author 	献
 * @tel		18271840547
 * @date	2016年12月21日
 */
public interface StatisticsRelationMapper {

	/**
	 * 根据openid，获取对应的业余员ID，如果为，那么表示非业务员
	 * @param openID
	 * @return
	 * @author 献
	 * @Time   2016年12月21日
	 */
	public SalesmanInfo getRelationByOpenID(String openID);
	
	/**
	 * 根据业务员id，查询订单销量
	 * @param raiationID
	 * @return
	 * @author 献
	 * @Time   2016年12月21日
	 */
	public List<StatisticsOrderDTO> getStatisticsOrderByOpenID(
				@Param("startDate") Date startDate, @Param("endDate") Date endDate, 
				@Param("otherInt") int otherInt, @Param("minNum") int minNum, 
				@Param("maxNum") int maxNum);
	
	/**
	 * 根据用户关系、订单ID，查询订单详情
	 * @param dealer
	 * @param orderId
	 * @return
	 * @author 献
	 * @Time   2016年12月21日
	 */
	public StatisticsOrderDetailsDTO getOrderDetails(@Param("dealer") Integer dealer, @Param("orderId") String orderId);
	
	/**
	 * 根据时间区间查询区间内销售总量
	 * @param startDate
	 * @param endDate
	 * @param salesmanId
	 * @return
	 * @author 献
	 * @Time   2016年12月22日
	 */
	public int getTotalByMonth(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("salesmanId") int salesmanId);
	
	/**
	 * 统计试用订单销量
	 * @param salesmanDto
	 * @return
	 */
	public List<ProbationOrderDto> selectProbationStatictics(SalesmanDto salesmanDto);
	
	/**
	 * 统计试用订单销量分页总数
	 * @param salesmanDto
	 * @return
	 */
	public Integer selectProbationStaticticsCount(SalesmanDto salesmanDto);

	/**
	 * 查询试用订单详情
	 * @param probationOrderDto
	 * @return
	 */
	public ProbationOrderDto selectProbationInfo(ProbationOrderDto probationOrderDto);
	
	/**
	 * 统计门店下线vip会员数量与销售总数
	 * @param salesmanDto
	 * @return
	 */
	public List<StoresStatisticsDto> selectStoresStatistics(StoresStatisticsDto storesStatisticsDto);
	
	/**
	 * 统计门店下线vip会员数量与销售总数记录总条数
	 * @param salesmanDto
	 * @return
	 */
	public Integer selectStoresStatisticsCount(StoresStatisticsDto storesStatisticsDto);
	
	/**
	 * 统计vip下线vip会员数量与销售总数
	 * @param salesmanDto
	 * @return
	 */
	public List<VipOfflineDto> selectVipOffline(VipOfflineDto vipOfflineDto);
	
	/**
	 * 统计vip下线vip会员数量与销售总数记录总条数
	 * @param salesmanDto
	 * @return
	 */
	public Integer selectVipOfflineCount(VipOfflineDto vipOfflineDto);
	
	/**
	 * 统计门店下线vip会员数量与销售总数（管理员）
	 * @param salesmanDto
	 * @return
	 */
	public List<StoresStatisticsDto> selectAdministratorStatistics(StoresStatisticsDto storesStatisticsDto);
	
	/**
	 * 统计门店下线vip会员数量与销售总数记录总条数（管理员）
	 * @param salesmanDto
	 * @return
	 */
	public Integer selectAdministratorStatisticsCount(StoresStatisticsDto storesStatisticsDto);
	
	/**
	 * 1.根据业务员 openid 查询今日、本月的试用订单和销售订单总数
	 * 2016年12月21日
	 * @author mzx
	 * @param page
	 * @return
	 */
	public StatisticManagerDto selectSalesCount(PaperBean page);
	
	/**
	 * 查询业务员对应的门店下未完结的试用订单列表
	 * 2016年12月21日
	 * @author mzx
	 * @param page
	 * @return
	 */
	public List<StatisticsOrderDTO> selectProbationOrderBySalesManOpenid(PaperBean page);
	
	/**
	 * 查询业务员对应的门店下未完结的试用订单 总数
	 * 2016年12月21日
	 * @author mzx
	 * @param page
	 * @return
	 */
	public Integer selectProbationOrderCountNumBySalesManOpenid(PaperBean page);
	
	/**
	 * 查询业务员对应的门店下未完结的销售订单列表
	 * 2016年12月21日
	 * @author mzx
	 * @param page
	 * @return
	 */
	public List<StatisticsOrderDTO> selectOrderBySalesManOpenid(PaperBean page);
	
	/**
	 * 查询业务员对应的门店下未完结的销售订单总数
	 * 2016年12月21日
	 * @author mzx
	 * @param page
	 * @return
	 */
	public Integer selectOrderCountNumBySalesManOpenid(PaperBean page);
	
	/**
	 * 按月统计业务员试用订单台数
	 * 2016年12月22日
	 * @author mzx
	 * @param openid
	 * @return
	 */
	public List<StatisticOrderByMonthDto> selectProbationCountNumByMonth(PaperBean page);
	
	/**
	 * 按月统计业务员销售订单台数 
	 * @param openid
	 * @return
	 */
	public List<StatisticOrderByMonthDto> selectOrderCountNumByMonth(PaperBean page);
	
	/**
	 * 查询今日试用订单，今日销售订单，本月试用订单，本月销售订单
	 * @return
	 */
	public List<StatisticsAdministratorDTO> selectSalesInfo();
	
	/**
	 * 查询销售订单总额，试用订单已付，试用订单待付
	 * @return
	 */
	public List<StatisticsAdministratorDTO> selectOrderMoney();
	
	/**
	 * 查询已激活合伙人，已激活门店，已激活VIP会员，金牌会员
	 */
	public StatisticsAdministratorDTO selectRoleInfo();
	
	/**
	 * 查询商城用户数，购买过商品的用户数
	 * @return
	 */
	public StatisticsAdministratorDTO selectUserNum();
	
	/**
	 * 查询金牌会员下线个数
	 * @return
	 */
	public Integer selectUserSubordinateInfo();
	
	/**
	 * 查询管理员信息
	 * @param openId
	 * @return
	 */
	public SalesmanDto selectAdminInfo(String openId);
	
	/**
	 * 按月查询销售订单售出水机总数
	 * @param statisticOrderByMonthDto
	 * @return
	 */
	public List<StatisticOrderByMonthDto> selectOrderByMonth(StatisticOrderByMonthDto statisticOrderByMonthDto);
	
	/**
	 * 按月查询试用订单总数
	 * @param statisticOrderByMonthDto
	 * @return
	 */
	public List<StatisticOrderByMonthDto> selectProbationByMonth(StatisticOrderByMonthDto statisticOrderByMonthDto);
	
	/**
	 * 查询所有金牌会员名称，对应的下线总销量，发展的用户
	 * 2016年12月26日
	 * @author mzx
	 * @param goldMemberDto
	 * @return
	 */
	public List<GoldMemberStatisticsDto> selectAllGoldMemberStatistics(GoldMemberStatisticsDto goldMemberDto);
	/**
	 * 查询所有金牌会员名称，对应的下线总销量，发展的用户 	记录条数
	 * 2016年12月26日
	 * @author mzx
	 * @param goldMemberDto
	 * @return
	 */
	public Integer selectAllGoldMemberStatisticsCountNum(String placeName);
	
	/**
	 * 查询单个金牌会员下线会员信息及购买数量
	 * 2016年12月26日
	 * @author mzx
	 * @param goldMemberDto
	 * @return
	 */
	public List<GoldMemberStatisticsDto> selectGoldUnderUserAndBoughtCount(GoldMemberStatisticsDto goldMemberDto);
	/**
	 * 查询单个金牌会员下线会员信息及购买数量		记录条数
	 * 2016年12月26日
	 * @author mzx
	 * @param goldMemberDto
	 * @return
	 */
	public Integer selectGoldUnderUserAndBoughtCountNum(GoldMemberStatisticsDto goldMemberDto);
	
	/**
	 * 统计门店,vip会员与销售总数
	 * @param salesmanDto
	 * @return
	 */
	public List<StatisticOrderByMonthDto> selectSalesNumbers(StatisticOrderByMonthDto statisticOrderByMonthDto);
	
	/**
	 * 统计门店,vip会员与销售总数记录总条数
	 * @param salesmanDto
	 * @return
	 */
	public Integer selectSalesNumbersCount(StatisticOrderByMonthDto statisticOrderByMonthDto);
	
	/**
	 * 按月查询试用订单数
	 * @param statisticOrderByMonthDto
	 * @return
	 */
	public List<StatisticOrderByMonthDto> selectProbationSumByMonth(StatisticOrderByMonthDto statisticOrderByMonthDto);
}
