package com.cool.store.mapper;

import com.cool.store.dto.UserRoleDTO;
import com.cool.store.entity.EnterpriseUserRole;
import com.cool.store.entity.SysRoleDO;
import com.cool.store.vo.SysRoleVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 角色
 */
@Mapper
public interface SysRoleMapper {

    List<SysRoleVO> getRoleUserByRoleEnum(@Param("roleEnum") String roleEnum,
                                          @Param("positionType") String positionType);

    List<SysRoleVO> getRoleUserByRoleAuth(@Param("roleAuth") String roleAuth,
                                          @Param("positionType") String positionType);

    /**
     * 根据用户角色查询角色下的用户人数
     *
     * @param roleId
     *
     * @return
     */
    Integer getPersonNumsByRoles( @Param("roleId") Long roleId);

    List<UserRoleDTO> userAndRolesByUserId(@Param("userIdList") List<String> userIdList);

    /**
     * 通过id查询所有用户和角色的关联关系
     * @param userId
     * @return
     */
    List<String> selectRolesByuserId(@Param("userId") String userId);

    String getHighestPriorityRoleIdByUserId(@Param("userId") String userId);

    /**
     * 根据角色名称查询是否存在
     * @param roleName
     * @return
     */
    List<SysRoleDO> getRolesByName(@Param("roleName") String roleName);

    SysRoleDO getRolesByNameAndSource(@Param("roleName") String roleName, @Param("source") String source);

    /**
     * 查询角色详情
     * @param roleId
     * @return
     */
    SysRoleDO getRole( @Param("roleId") Long roleId);

    /**
     * roleEnum 不能为空
     *
     * @param roleEnum
     * @return
     */
    SysRoleDO getRoleByRoleEnum( @Param("roleEnum") String roleEnum);

    /**
     * 批量查询角色详情
     *
     * @param roleIdList
     * @return
     */
    List<SysRoleDO> getRoleList( @Param("roleIdList") List<Long> roleIdList);

    /**
     * 批量查询角色详情（包括钉钉角色）
     * @param roleIdList
     * @return
     */
    List<SysRoleDO> getRoleByRoleIds( @Param("roleIdList") List<Long> roleIdList);
    /**
     * 批量查询角色名称列表
     *
     * @param roleIdList
     * @return
     */
    List<String> getRoleNameList( @Param("roleIdList") List<Long> roleIdList);

    /**
     *  查优先级最高的角色
     *
     * @param userId
     * @return
     */
    SysRoleDO getHighestPrioritySysRoleDoByUserId(@Param("userId") String userId);
    /**
     * 根据用户id查询角色,包括钉钉同步角色
     */
    List<SysRoleDO> getSysRoleByUserId(@Param("userId") String userId);

    List<SysRoleDO> listRoleByUserId(@Param("userId") String userId);
    /**
     * 查询钉钉角色中的人员Id
     * @param roleId
     * @return
     */
   List<String> selectUserByDingRole(@Param("roleId") Long roleId);
    /**
     * 根据职位id获取人员列表

     * @param positionIds
     * @return
     */
   List<String> getPositionUserIds( @Param("positionIds") List<String> positionIds);

   List<EnterpriseUserRole> selectUserRoleBySourceAndUserId(@Param("source") String source ,
                                                            @Param("userIdList") List<String> userIdList);

   List<EnterpriseUserRole> getUserIdListByRoleIdList(@Param("roleIdList") List<Long> roleIdList);
    /**
     * 获取用户岗位信息
     * @param userIdList
     * @return
     */
    List<UserRoleDTO> getUserRoleNameByUserIdList( @Param("userIdList") List<String> userIdList);

    /**
     * 根据岗位来源和角色名称获取角色
      企业id
     * @param synDingRoleId 角色名称
     * @param source 岗位来源
     * @return: java.util.List<com.coolcollege.intelligent.model.system.SysRoleDO>
     * @Author: xugangkun
     * @Date: 2021/3/22 16:11
     */
    List<SysRoleDO> selectBySynDingRoleIdAndSource( @Param("source") String source, @Param("synDingRoleId") Long synDingRoleId);

    List<SysRoleDO> getRolesByNamesAndSource(@Param("roleNames") List<String> roleNames, @Param("source") String source);

    List<SysRoleDO> getXFStoreManager(@Param("roleNames") List<String> roleNames);
}
