package com.sy.coinage.sys.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.sy.coinage.core.vo.CacheUserVO;
import com.sy.coinage.core.vo.OptVO;
import com.sy.coinage.sys.model.*;
import com.sy.coinage.sys.req.*;
import com.sy.coinage.sys.vo.*;

/**
 * 用户Service
 */
public interface IUserService extends IService<User> {

    /**
     * 根据查询条件查询分页集合
     *
     * @param req
     * @return {@link UserListVO}
     */
    IPage<UserListVO> queryPageList(UserListReq req, CacheUserVO user);

    /**
     * 根据用户id获取用户的角色id集合
     *
     * @param userId
     */
    List<Integer> listRoleIds(Integer userId);

    /**
     * 根据用户id查询菜单树
     *
     * @param id
     * @return
     */
    List<UserMenusVO> menusTree(Integer id);

    /**
     * 新增用户
     *
     * @param req
     * @param user
     */
    void add(UserReq req, CacheUserVO user);

    /**
     * 根据机构id和部门id获取人员下拉选项
     *
     * @param orgId 机构id
     * @param deptId 部门id
     */
    List<OptVO> opt(Integer orgId, Integer deptId, Integer tenantId);

    /**
     * 根据角色id获取按钮权限
     *
     * @param roleIds
     * @return
     * @author lug 2022年11月24日
     */
    List<String> getPermission(List<Integer> roleIds);

    /**
     * 根据角色id获取用户
     *
     * @param roleId
     * @return
     * @author lug 2022年11月24日
     */
    List<OptVO> byRoleId(Integer roleId);

    /**
     * 修改用户
     *
     * @param req
     * @param user
     */
    void update(UserReq req, CacheUserVO user);

    IPage<UserListVO> adminQueryPageList(AdminUserListReq req);

    void adminAdd(AdminUserReq req, CacheUserVO user);

    void validUsername(Integer id, String username);

}
