package com.starry.admin.modules.system.mapper;

import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseMapper;
import com.starry.admin.modules.system.module.entity.SysUserEntity;
import com.starry.admin.modules.system.vo.RoleUserResultVo;
import com.starry.admin.modules.system.vo.SysUserQueryVo;
import com.starry.admin.modules.system.vo.UserQueryVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * <p>
 * 后台用户表 Mapper 接口
 * </p>
 *
 * @author admin
 * @since 2021-09-03
 */
@Mapper
public interface SysUserMapper extends MPJBaseMapper<SysUserEntity> {

    /**
     * 通过用户ID查询用户
     *
     * @param userId
     *            用户ID
     * @return 用户对象信息
     */
    SysUserEntity selectUserById(String userId);

    /**
     * 根据条件分页查询用户列表
     *
     * @param queryVo
     *            条件信息
     * @param page
     *            分页信息
     * @return 用户信息集合信息
     */
    IPage<SysUserEntity> selectUserList(IPage<SysUserEntity> page, @Param("user") UserQueryVo queryVo);

    /**
     * 通过用户名查询用户
     *
     * @param userName
     *            用户名
     * @return 用户对象信息
     */
    @InterceptorIgnore(tenantLine = "1")
    SysUserEntity selectUserByUserName(String userName);

    /**
     * 校验用户名称是否唯一
     *
     * @param userName
     *            用户名称
     * @return 结果
     */
    @InterceptorIgnore(tenantLine = "1")
    int checkUserNameUnique(String userName);

    /**
     * 批量删除用户信息-根据租户
     *
     * @param ids
     *            需要删除的租户ID
     * @return 结果
     */
    @InterceptorIgnore(tenantLine = "1")
    int deleteUserByTenantId(String[] ids);

    /**
     * 根据条件分页查询已配用户角色列表
     *
     * @param user
     *            用户信息
     * @return 用户信息集合信息
     */
    IPage<RoleUserResultVo> selectAllocatedList(Page<RoleUserResultVo> page, @Param("query") SysUserQueryVo user);

    /**
     * 根据条件分页查询未配用户角色列表
     *
     * @param user
     *            用户信息
     * @return 用户信息集合信息
     */
    IPage<RoleUserResultVo> selectUnallocatedList(Page<RoleUserResultVo> page, @Param("query") SysUserQueryVo user);

    @InterceptorIgnore(tenantLine = "1")
    SysUserEntity selectUserByUserNameAndTenantId(@Param("userName") String userName,
            @Param("tenantId") String tenantId);
}
