package com.dxhy.admin.sys.service;

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

import com.baomidou.mybatisplus.extension.service.IService;
import com.dxhy.admin.sys.entity.SysMenuEntity;
import com.dxhy.admin.sys.entity.SysUserEntity;
import com.dxhy.admin.sys.model.User;
import com.dxhy.common.utils.PageUtils;

/**
 * 系统用户
 *
 * @author jiaohongyang
 */
public interface SysUserService extends IService<SysUserEntity> {
    /**
     * 根据登录名和id获取用户信息
     *
     * @param loginname
     *            登录名
     * @param userId
     *            用户id
     * @return 用户信息
     */
    SysUserEntity queryUserName(String loginname, Long userId);

    /**
     * 分页查询用户信息
     *
     * @param params
     *            查询条件
     * @return 返回用户信息 分页
     */
    PageUtils queryPage(Map<String, Object> params);

    /**
     * 查询用户的所有菜单ID
     *
     * @param userId
     *            用户id
     * @return 菜单id
     */
    List<Long> queryAllMenuId(Long userId);

    /**
     * 保存用户
     *
     * @param user
     *            用户信息
     */
    void saveUser(SysUserEntity user);

    /**
     * 修改用户
     *
     * @param user
     *            用户信息
     */
    void update(SysUserEntity user);

    /**
     * 修改密码
     *
     * @param userId
     *            用户ID
     * @param password
     *            原密码
     * @param newPassword
     *            新密码
     * @return 是否成功
     */
    boolean updatePassword(Long userId, String password, String newPassword);

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

    /**
     * 获取用户信息生成token
     *
     * @param userEntity
     *            用户信息
     * @return 用户信息
     */
    User getUserInfo(SysUserEntity userEntity);

    /**
     * 根据用户id查询用户信息
     *
     * @param id
     *            用户id
     * @return 用户信息
     */
    SysUserEntity queryUserById(Long id);

    /**
     * 根据用户id 删除用户信息
     *
     * @param id
     *            用户滴
     */
    void deleteUser(Long id);

    /**
     * itax 删除用户信息
     *
     * @param id
     *            用户id
     */
    void deleteUserBigb(Long id);

    /**
     * 菜单id查询用户关联菜单信息
     *
     * @param menuId
     *            菜单id
     * @return 用户关联菜单信息
     */
    boolean queryUserMenu(Long menuId);

    /**
     * 角色id查询是否关联用户
     *
     * @param roleId
     *            角色id
     * @return 是否关联用户
     */
    boolean queryUserRole(Long roleId);

    /**
     * 业务单元编码查询是否关联用户
     *
     * @param businessId
     *            业务单元编码
     * @return 是否关联用户
     */
    boolean queryUserBussiness(Long businessId);

    /**
     * 刷新缓存
     * 
     * @param flg
     *            是否刷新显示列表缓存 true 是 false 否
     * @param loginName
     *            登录名
     * @return 是否成功
     */

    boolean refreshCache(boolean flg, String loginName);

    /**
     * 获取数据字典
     *
     * @return 返回数据字典信息
     */
    String getDict();

    /**
     * 获取菜单信息
     *
     * @param userId
     *            用户id
     * @return 返回菜单信息
     */
    String getMenu(long userId);

    /**
     * 菜单树状接口
     *
     * @param list
     *            菜单信息
     * @param parentId
     *            上级id
     * @return 返回
     */
    List<SysMenuEntity> getChildPerms(List<SysMenuEntity> list, int parentId);

    /**
     * 根据邮箱获取用户信息
     * 
     * @param principal
     *            邮箱地址
     * @return 用户信息
     */

    SysUserEntity queryUserByEmail(String principal);
}
