package com.sunxung.factoring.mapper.sys;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.sunxung.factoring.entity.sys.Role;
import com.sunxung.factoring.entity.sys.RolePermissionRel;
import com.sunxung.factoring.entity.sys.UserRoleRel;
import com.sunxung.factoring.entity.sys.vo.SearchRoleanization;

/**
 * @className:RoleMapper
 * @description:角色mapper
 * @author:杜小姣
 * @e-mail:1261237207@qq.com
 * @date:2018年1月18日 上午11:03:22
 */
@Mapper
public interface RoleMapper {

    /**
     * 新增角色
     *
     * @param role 角色信息
     * @return
     */
    Integer add(Role role);

    /**
     * 新增角色与权限的关系
     *
     * @param rolePermissionRel 角色与权限的关系
     * @return
     */
    Integer addRolePermissionRel(RolePermissionRel rolePermissionRel);

    /**
     * 修改角色
     *
     * @param role 角色信息
     * @return
     */
    Integer update(Role role);

    /**
     * 删除角色
     *
     * @param id 角色ID
     * @return
     */
    Integer delete(Long id);

    /**
     * 获取角色信息
     *
     * @param id 角色ID
     * @return
     */
    Role get(Long id);

    /**
     * 获取全部角色信息
     *
     * @return
     */
    List<Role> findAll();

    /**
     * 按条件查询角色信息
     *
     * @param search 查询条件
     * @return
     */
    List<Role> findBySearch(SearchRoleanization search);

    /**
     * 按条件统计角色个数
     *
     * @param search 查询条件
     * @return
     */
    Integer countBySearch(SearchRoleanization roleanization);

    /**
     * 验证角色有没有重名
     *
     * @param name
     * @return
     */
    Role getByRoleName(String name);

    /**
     * 查询角色对应的权限ID列表
     *
     * @param roleId 角色ID
     * @return
     */
    List<Long> findPermissionIdByRoleId(Long roleId);

    /**
     * 删除角色的所有权限
     *
     * @param roleId 角色ID
     * @return
     */
    Integer deleteByRoleId(Long roleId);

    /**
     * 根据角色ID获取角色的用户ID列表
     *
     * @param roleId 角色ID
     * @return 用户ID列表
     */
    List<Long> getUserIdByRoleId(Long roleId);

    /**
     * 根据组织机构ID获取角色集合
     *
     * @param orgId 组机构ID
     * @return
     */
    List<Role> findByOrgId(Long orgId);

    /**
     * 获取所有权限ID列表
     *
     * @return
     */
    List<Long> getAllPermissionId();

    /**
     * 根据角色ID获取根权限ID列表
     *
     * @param roleId 角色ID
     * @return
     */
    List<Long> getRootIdByRoleId(Long roleId);

    /**
     * 根据角色ID获取权限节点ID列表
     *
     * @param roleId 角色ID
     * @return
     */
    List<Long> getNodeIdByRoleId(Long roleId);

    /**
     * 判断权限是否选中
     *
     * @param roleId 角色ID
     * @param permissionId 权限ID
     * @return
     */
    Long isChecked(@Param("roleId") Long roleId, @Param("permissionId") Long permissionId);

    /**
     * 获取角色对应管理员用户ID
     *
     * @param roleId
     * @return
     */
    Long getAdminUserId(@Param("roleId") Long roleId, @Param("admin") boolean admin);

    /**
     * 根据用户ID，获取所有对应的角色
     */
    List<UserRoleRel> getUserRoleByUserId(@Param("userId") Long userId);

    /**
     * 查询所有的角色组
     *
     * @return List<Role> 返回角色组列表
     */
    List<Role> findGroupRole();

    /**
     * 根据角色组（父角色）ID、查找父角色下面的所有角色信息
     *
     * @param parentRoleId 父角色ID、角色组的ID
     * @return List<Role> 角色信息的List
     */
    List<Role> findByParentRoleId(Long parentRoleId);

    /**
     * 在某一个角色下移除用户
     *
     * @param userId 用户ID
     * @param roleId 角色ID
     * @return int
     */
    int deleteUserRole(@Param("userId") Long userId, @Param("roleId") Long roleId);

    /**
     * 根据用户ID和角色ID查找
     *
     * @param userId 用户ID
     * @param roleId 角色ID
     * @return UserRoleRel
     */
    UserRoleRel getByUserRole(@Param("userId") Long userId, @Param("roleId") Long roleId);

    /**
     * 调整部门顺序
     *
     * @param roleId 角色ID
     * @param gradation 顺序
     * @param userId 用户id
     * @return int
     */
    int adjustOrder(@Param("roleId") Long roleId, @Param("gradation") int gradation,@Param("userId") Long userId);

    /**
     * 根据用户ID查询角色列表
     *
     * @param userId
     * @return
     */
    List<Role> getRoleListByUseId(@Param("userId") Long userId);
}
