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();
	/**
	 * 分页显示用户信息
	 * @return
	 */
	List<Member> getMemberByPage(Page page);
	
	/**
	 * 根据 userid 修改会员信息
	 * 2016年4月21日
	 * @author 穆再兴
	 * @return
	 */
	public Integer updateMemberByUserId(Member member);

	/**
	 * 修改用户积分
	 * @param member
	 * @return
	 */
	public Integer updateUserIntegral(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日
	 * @return
	 */
	public List<Integer> selectDownCountByUserId(Integer userId);
	
	/**
	 * 绑定用户关系
	 * @param shareOpenid	分享人openid
	 * @param member		当前用户信息
	 * @param userType 		userType = 1 ： 属于微代理	type=2:属于代理商
	 * @return
	 */
	public boolean buildChildUser(String shareOpenid,Member member,int userType);
	
	/**
	 * 根据用户userid获取用户下线信息和总数，以及总购买人数
	 * @param page
	 * @return
	 */
	public Map<String, Object> getDownInfoAndBuyedCount(Page page);

	/**
	 * 修改
	 * @param member
	 * @return
	 */
	Integer nowUpdateUserByOpenId(Member member);

	/**
	 * 成为会员
	 * @return
	 */
	public Integer becomeVipByOpenId(Member member);

	/**
	 * 获取今天生日的用户
	 * @return
	 */
	List<Member> getNowBirthDate();

	/**
	 * 获取关注一个月但未注册的用户-用于推送-定时任务
	 * @return
	 */
	List<Member> getNoRegister(Member member);
}
