package com.qmth.teachcloud.common.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qmth.teachcloud.common.bean.dto.BlurryUserDto;
import com.qmth.teachcloud.common.bean.dto.UserDto;
import com.qmth.teachcloud.common.bean.dto.VerifyCodeCheckDto;
import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
import com.qmth.teachcloud.common.bean.result.SysUserResult;
import com.qmth.teachcloud.common.bean.result.UserRoleNameResult;
import com.qmth.teachcloud.common.entity.SysUser;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @author xf
 * @since 2021-03-23
 */
public interface SysUserMapper extends BaseMapper<SysUser> {

    IPage<UserDto> listPage(Page<UserDto> page, @Param("schoolId") Long schoolId, @Param("loginName") String loginName, @Param("roleId") String roleId, @Param("enable") Boolean enable, @Param("realName") String realName);

    List<BlurryUserDto> listUser(@Param("schoolId") Long schoolId, @Param("type") String type, @Param("courseCode") String courseCode, @Param("param") String param, @Param("orgIds") Set<Long> orgIds);

    IPage<UserDto> listCustomerPage(Page<UserDto> page, @Param("realName") String realName, @Param("enable") Boolean enable);

    /**
     * 过滤拥有审核权限的人
     *
     * @param schoolId
     * @param orgIds
     * @param filter
     * @param approveName
     * @param realName
     * @return
     */
    List<ApproveUserResult> filterFlowPrivilege(@Param("schoolId") Long schoolId, @Param("orgIds") Set<Long> orgIds, @Param("filter") Boolean filter, @Param("approveName") String approveName, @Param("realName") String realName);

    /**
     * 根据id获取
     *
     * @param id
     * @return
     */
    public List<ApproveUserResult> findById(@Param("id") Long id);

    /**
     * 根据id集合获取
     *
     * @param ids
     * @return
     */
    public ApproveUserResult findByIds(@Param("ids") List<Long> ids);

    /**
     * 根据用户（id和手机号）查询验证码发送几率
     *
     * @param userId       用户id
     * @param mobileNumber 用户手机号
     * @return 验证码记录结果
     */
    List<VerifyCodeCheckDto> findVerifyCodeByUser(@Param("userId") Long userId, @Param("mobileNumber") String mobileNumber);

    /**
     * 根据用户（id和手机号）查询验证码发送几率
     *
     * @param userId       用户id
     * @param mobileNumber 用户手机号
     * @return 更新条数
     */
    int updateVerifyCodeExpiredTime(@Param("userId") Long userId, @Param("mobileNumber") String mobileNumber);

    /**
     * 根据机构id获取
     *
     * @param orgIdSet
     * @return
     */
    List<ApproveUserResult> findByOrgIds(@Param("orgIdSet") Set<Long> orgIdSet);

    /**
     * 查找用户角色名
     *
     * @param userIds
     * @return
     */
    List<UserRoleNameResult> selectRoleNames(@Param("userIds") List<Long> userIds);

    /**
     * 根据角色ids查找用户
     *
     * @param roleIds
     * @return
     */
    List<SysUser> findByRoleIds(@Param("roleIds") List<Long> roleIds);

    /**
     * 根据角色ids查找用户
     *
     * @param roleIds
     * @return
     */
    List<ApproveUserResult> findByRoleIdsForResult(@Param("roleIds") List<Long> roleIds);

    /**
     * 根据id集合获取
     *
     * @param ids
     * @return
     */
    List<ApproveUserResult> findByIdsForResult(@Param("ids") List<Long> ids);

    /**
     * 根据学校id查找用户
     *
     * @param schoolId 学校id
     * @return 用户集合
     */
    @Deprecated
    List<SysUserResult> findSysUserResultBySchoolId(@Param("schoolId") Long schoolId);

    /**
     * 根据roleId和成员姓名获取
     *
     * @param roleId
     * @param name
     * @return
     */
    List<ApproveUserResult> findByRoldIdAndMemberName(@Param("roleId") Long roleId, @Param("name") String name);
}
