package com.ssj.service.weixin.user.service;

import com.ssj.bean.weixin.user.domain.User;
import com.ssj.framework.core.common.service.BaseService;
import com.ssj.framework.core.util.ResponseEntity;
import com.ssj.framework.weixin.util.UserInfo;
import com.ssj.service.weixin.user.dto.AppWxUserInfo;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

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

public interface UserService extends BaseService<User, String> {

	 /**
     * 分页查询
     * @param params
     * @param sp
     * @return
     */
    public  Page<User>  findByPage(Map<String, Object> params, Pageable sp) throws Exception;
    
    
    /**
     * 运营后台获取微信用户基本信息
     * @param searchParams
     * @param pageable
     * @return
     */
    public Page<Map<String, Object>> getWXUser(Map<String, Object> searchParams, Pageable pageable);
    public Page<Map<String, Object>> getTSGUser(Map<String, Object> searchParams, Pageable pageable);
    
    /**
     * 更新用户的基本信息
    * @param id
    * @return
    * 创建人：ZhangCaibao 
    * 2017年5月4日 下午5:56:11 
    * @User
     */
    public User uploadUser(String id);
    
    public void uploadUserAll();
    
    /**
     * 修改关注状态
     * @param openId
     */
    public void updateSubscribe(String openId, Integer subscribe);
    /**
     * 获取用户是否关注
     * @param userId
     * @return
     */
    public String getSubscribe(String userId);
    /**
     * 通过微信 用户的标识   openId 查询该用户是否存在 （唯一性）
     * @param account
     * @return
     */
    public User findByAccount(String account);
    /**
     * 根据account 查询用户ID
     * @param wx_account
     * @return
     */
    public String findUserById(String wx_account);
    
    public User insertUser(User user);
    
     /**
      * 关注公众号，触发事件，判断用户是否存在，如果不存在，那么就新增一条，存在，就更改关注状态。
      * 返回 Map  
      */
     public Map<String, String> findUserExist(String openId);
	    /**
	     * 根据ID 查询account
	     * @param id
	     * @return
	     */
	public String getAccount(String id);

	    
	   /**
	    * 判断unionid对应的公众号openid是否存在，如果不存在，先插入一条记录
	    * 存在就挂载对应公众号下面
	    * @param openId
	    */
    public String insertXCXuser(String openid, String unionid, String appid, Integer type) throws Exception;
    public String newInsertXCXuser(String openid, String unionid, String appid, Integer type, UserInfo userInfo);
	    /**
	     * 更新保存微信用户的基本信息
	     * @param userId
	     * @param userinfo
	     */
	public void saveXCXUser(User user, UserInfo userinfo);
	
	   /**
	    * 更新保存微信授权APP用户的基本信息
	    * @param userId
	    * @param userinfo
	    */
   public void saveAppUser(String accessToken, AppWxUserInfo appWxUserInfo);



	
	public User getUserByUnionid(String unionid);
	
	/**
     * @param ids
     * @return
    
     * 方法说明:根据主键集合查询用户信息集合
    
     * 创立日期:2018年4月20日 下午2:47:34
     * 创建人:yangcan
    
     */
    public List<User> searchUserByIds(List<String> ids);
    
    

    
    public List<User> findByIdIn(List<String> ids);
    


    public User findByEasemobName(String easemobName);
    
    public void generateQrcode(String userId);
    
    /**
     * @return
    
     * 方法说明:生成一个唯一的环信id, 时间戳+1 是正式环境， 时间戳+0 是测试环境
    
     * 创立日期:2018年9月14日 下午1:53:25
     * 创建人:yangcan
    
     */
    public String createUniqueEasemobName();
    
    public User findByMobile(String mobile);
    
    public User findByUserName(String userName);

    public List<User> findByEasemobNameIsNotNull();
    
    /**
     * @return
    
     * 方法说明:查找废弃的环信账号信息
    
     * 创立日期:2019年5月14日 下午4:24:45
     * 创建人:yangcan
    
     */
    public List<User> findNoUserEasemobName();
    
	public User getUserByPassword(String mobile,String password);
	
	public User updateByResetPassword(String userId,String password);
	
	public User updateByPassword(String userId, String oldPassword,String newPassword);
	
	public User updateBindPhone(String userId,String password, String newphone);

	public User updatePasswordBindPhone(String userId,String password, String phone);


    boolean verificationPassword(String userId, String oldPassword);

    ResponseEntity bindWeixin(String accessToken, AppWxUserInfo unionid);

    void towInOneUser(String accessToken, User user,String phone);

    /**
     * 根据手机号查询用户, 没有用户则新建用户, 有用户替换用户名称
     * @param phone
     * @return
     */
    User getUserIdByMobilePhone (String phone, String userName);

    void updateById(String id);
}
