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

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.starry.admin.modules.personnel.module.vo.PlayPersonnelUserInfoQueryVo;
import com.starry.admin.modules.personnel.module.vo.PlayPersonnelUserInfoReturnVo;
import com.starry.admin.modules.system.module.entity.SysUserEntity;
import com.starry.admin.modules.system.vo.*;
import java.util.List;

/**
 * <p>
 * 后台用户表 服务类
 * </p>
 *
 * @author admin
 * @since 2021-09-03
 */
public interface SysUserService extends IService<SysUserEntity> {

    /**
     * 注册功能
     *
     * @param user
     * @return SysUserEntity
     */
    SysUserEntity register(SysUserEntity user);

    /**
     * 查询用户
     *
     * @param userCode
     * @return SysUserEntity
     */
    SysUserEntity getUserByCode(String userCode);

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

    SysUserEntity selectUserByUserNameAndTenantId(String userName, String tenantId);

    /**
     * 查询所有账户
     *
     * @return 查询所有账户
     */
    List<SysUserEntity> selectAll();

    /**
     * 分页查询用户
     *
     * @param vo
     *            查询参数
     * @return page
     */
    IPage<PlayPersonnelUserInfoReturnVo> selectByPage(PlayPersonnelUserInfoQueryVo vo);

    /**
     * 获取列表。分页
     *
     * @param queryVo
     *            查询参数
     * @return page
     */
    IPage<SysUserEntity> listMemberPage(UserQueryVo queryVo);

    /**
     * 校验用户名称是否唯一
     *
     * @param userName
     *            用户名称
     * @return 结果
     */
    String checkUserNameUnique(String userName);

    /**
     * 添加用户
     *
     * @param user
     * @return boolean
     **/
    boolean create(SysUserEntity user);

    /**
     * 修改用户
     *
     * @param user
     * @return boolean
     **/
    boolean update(SysUserEntity user);

    /**
     * 批量删除用户
     *
     * @param ids
     * @return boolean
     **/
    boolean delete(List<String> ids);

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

    /**
     * 根据用户ID查询用户所属角色组
     *
     * @param userId
     *            用户id
     * @return 结果
     */
    String selectUserRoleGroup(String userId);

    /**
     * 修改用户头像
     *
     * @param userId
     *            用户id
     * @param avatar
     *            头像地址
     * @return 结果
     */
    boolean updateUserAvatar(String userId, String avatar);

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

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

    boolean addV1(UserAddParam param);

    List<SysUserEntityListVo> generatePageData(List<SysUserEntity> records);

    void updatePassword(UpdateUserPasswordParam param);

    void updateMobile(UpdateUserMobileParam param);

    void logoutUser(String uid);

    void updatePasswordV2(UpdateUserPasswordParamV2 param);
}
