package com.ylcm.sys.service;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ylcm.sys.domain.Permission;
import com.ylcm.sys.domain.User;
import com.ylcm.sys.excel.model.UserImportDTO;

@SuppressWarnings("rawtypes")
public interface UserService {

	/**
	 * 新增用户
	 * 
	 * @param user
	 *            用户信息
	 */
	int addUser(User user, Integer roleId);

	/**
	 * 修改用户
	 * 
	 * @param user
	 *            用户信息
	 */
	void updUser(User user);

	/**
	 * 删除用户
	 * 
	 * @param userId
	 *            用户标识
	 */
	void delUser(int userId);

	/**
	 * 根据条件统计用户总数
	 * 
	 * @param loginName
	 *            登录名
	 * @param nickName
	 *            昵称
	 * @param userType
	 *            用户类型
	 * @param status
	 *            状态
	 * @param pageIndex
	 * @param pageSize
	 * @return
	 */
	int getRowCount(Map map);

	/**
	 * 分页获取用户信息列表
	 * 
	 * @param loginName
	 *            登录名
	 * @param nickName
	 *            昵称
	 * @param userType
	 *            用户类型
	 * @param status
	 *            状态
	 * @param pageIndex
	 * @param pageSize
	 * @return
	 */
	List<User> getUserList(Map map);

	/**
	 * 根据用户标识获取用户信息
	 * 
	 * @param userId
	 *            用户标识
	 * @return 用户信息
	 */
	User getUserById(int userId);

	/**
	 * 删除用户信息(只删除未关联角色的用户)
	 * 
	 * @param ids
	 *            用户标识集合
	 */
	void delUsersByIds(String[] ids);

	/**
	 * 修改密码
	 * 
	 * @param userId
	 *            用户id
	 * @param pwd
	 *            密码
	 */
	void updatePwd(int userId, String pwd);

	/**
	 * 用户唯一性判断
	 * 
	 * @param loginName
	 *            登录名
	 * @return 数量
	 */
	int getCheckUser(String loginName);

	/**
	 * 根据登录名和用户标识查找登录名是否已存在
	 * 
	 * @param uid
	 *            用户标识
	 * @param loginName
	 *            登录名
	 * @return
	 */
	int getUserByLoginNameNeId(int uid, String loginName);

	/**
	 * 根据登录名获取用户信息
	 * 
	 * @param loginName
	 * @return 用户信息
	 */
	User getUserByLoginName(String loginName);

	/**
	 * 修改状态
	 * 
	 * @param userId
	 *            用户id
	 * @param status
	 *            用户状态
	 */
	void updUserStatus(int uid, int status);

	/**
	 * 根据openid判断用户是否存在，存在返回true
	 * 
	 * @param openid
	 * @return
	 */
	Boolean getCheckUserByOpenId(String openid);

	/**
	 * 根据openid获取用户
	 * 
	 * @author liushiming
	 * @param openid
	 * @return
	 */
	User getUserByOpenId(String openid);
	
	List<Permission> getPermissoins(List<Permission> list);

	void exportExcel(HttpServletRequest request,HttpServletResponse response) throws IOException ;
	
	// 批量导入用户
	String importUserBatch(List<UserImportDTO> importDTOs) throws Exception;
	
}