package com.iamberry.wechat.face.member;

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

import com.iamberry.wechat.core.entity.Page;
import com.iamberry.wechat.core.entity.member.Member;

/**
 * 会员信息 service
 * 2016年4月21日
 * @author Administrator
 *
 */
public interface MemberService{
	/**
	 * 根据id获取会员信息
	 * @param userId
	 * @return
	 */
	Member getMemberByUserId(Integer userId);
	
	/**
	 * 根据 openid 查询一个member
	 * 2016年4月28日
	 * @author 穆再兴
	 * @return
	 */
	public Member getMemberByUserOpenId(String openid);
	/**
	 * 获取所有会员数量
	 * @return
	 */
	Integer getCount();
	/**
	 * 分页显示用户信息
	 * @param pageSize
	 * @param PageNo
	 * @return
	 */
	List<Member> getMemberByPage(Page page);
	
	/**
	 * 根据 userid 修改会员信息
	 * 2016年4月21日
	 * @author 穆再兴
	 * @param userId
	 * @return
	 */
	public Integer updateMemberByUserId(Member member);
	
	/**
	 * 修改用户已用积分
	 * @param member
	 * @return
	 */
	public Integer updateUserUseIntegral(Member member);

	/**
	 * 分页查询微代理下线信息
	 * @param page
	 * @return
	 */
	public List<Member> selectUserIntegralByWechatProxyId(Page page);

	/**
	 * 根据用户ID，获取用户身份、用户二维码信息
	 * @param openid
	 * @return
	 */
	public Member selectUserIdentityAndQrcodeByOpenId(String openid);

	/**
	 * 根据用户openid，获取用户来源、用户身份
	 * @param openid
	 * @return
	 */
	public Member selectUserResAndIdSByOpenId(String openid);
	
	/**
	 * 根据 openid 修改用户可用金额
	 * 2016年5月4日
	 * @param member
	 * @return
	 */
	public Integer updateUserIncomeByOpenId(Member member);

	
	/**
	 * 根据用户openid，修改用户绑定状态
	 * @param openId
	 * @return
	 */
	public boolean updateUserFlagByOpenId(String openId);
	
	/**
	 * 根据userid获取当前用户的“下线人数”和“已购买人数”
	 * 2016年5月11日
	 * @param openId
	 * @return
	 */
	public List<Integer> selectDownCountByUserId(Integer userId);
	
	/**
	 * 绑定用户关系
	 * @param shareOpenid	分享人openid
	 * @param member		当前用户信息
	 * @param userType 		userType = 1 ： 属于微代理	type=2:属于代理商
	 * @param orderType	  订单类型，1：购买，2：租赁
	 * @return
	 */
	public boolean buildChildUser(String shareOpenid,Member member,int userType,int orderType);
	
	/**
	 * 根据用户userid获取用户下线信息和总数，以及总购买人数
	 * @param page
	 * @return
	 */
	public Map<String, Object> getDownInfoAndBuyedCount(Page page);
	
	/**
	 * 根据openid 修改用户的是否购买状态
	 * 若当前状态已经是要修改的状态 则不修改
	 * 2016年11月2日
	 * mzx
	 * @return
	 */
	public boolean updateIsBaughtByOpenid(String openid, int userIsBaught);

	/**
	 * 获取个人分销员的下线列表数
	 */
	int getOrdinaryNumber(Member member);

	/**
	 *后台-Drp分销管理主界面 --> 获取公司分销员的下线列表
	 */
	List<Member> getOrdinary(Member member);

	/**
	 * 获取我的会员信息
	 * @return
	 */
	Member getMyMemberInfo(String openId);

	/**
	 * 修改个人信息
	 * @param member
	 * @return
	 */
	Integer updateMyMember(Member member);

	/**
	 * 根据 openid 修改用户待入账积分
	 * 2018年1月10日17:18:39
	 * @param member
	 * @return
	 */
	public Integer updateUserStayIntegralByOpenId(Member member);

	/**
	 * 获取所有的注册人数
	 * @return
	 */
	Integer getRegisteredNumber();

	/**
	 * 获取用户当前等级
	 * 有等级返回等级id，没有等等级返回null
	 * @return
	 */
	Integer getUserGrad(Integer userId);

	/**
	 * 获取当天生日的人。送生日福利
	 * @param member
	 * @return
	 */
	List<Member> getBirthday(Member member);

	/**
	 * 增加积分或者减少积分接口
	 * @param type  1:增加积分  2：减少积分
	 * @param integral
	 * @return
	 */
	Integer updaterIntegral(Integer userId,Integer type,Integer configId, Integer integral,String remake);
}
