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.Permission;

/**
 * @Description:系统权限Mapper
 * @Author:JingJiang
 * @E-mail:254702920@qq.com
 * @Date:2017年6月6日 下午6:25:10
 */
@Mapper
public interface PermissionMapper {

    /**
     * 新增权限信息
     * 
     * @param permission 权限信息
     * @return
     */
    Integer add(Permission permission);

    /**
     * 修改权限信息
     * 
     * @param permission 权限信息
     * @return
     */
    Integer update(Permission permission);

    /**
     * 根据权限ID删除权限信息
     * 
     * @param id 权限ID
     * @return
     */
    Integer delete(Long id);

    /**
     * 根据权限ID获取权限详细信息
     * 
     * @param id 权限ID
     * @return
     */
    Permission get(Long id);

    /**
     * 查询树的根和节点
     * 
     * @param parentId 权限父级ID
     * @return
     */
    List<Permission> findByParentId(@Param("parentId") Long parentId);

    /**
     * 获取所有权限信息
     * 
     * @return
     */
    List<Permission> findAll();

    /**
     * 获取权限信息
     * 
     * @param ename 英文名称
     * @return
     */
    Permission getByEname(String ename);

    /**
     * 查询当前角色的权限下是否有子权限
     * 
     * @param parentId
     * @param roleId
     * @return
     */
    List<Long> findNodesByRoleIdPermissionId(@Param("parentId") Long parentId, @Param("roleId") Long roleId);

    /**
     * 删除角色与权限的关系
     * 
     * @param permissionId 权限ID
     * @param roleId 角色ID
     * @return
     */
    int deleteRolePermissionRel(@Param("permissionId") Long permissionId, @Param("roleId") Long roleId);

    /**
     * 根据用户ID查询用户拥有的权限ID列表
     * 
     * @param id
     * @return
     */
    List<Long> getPermissionIdByUserId(Long id);

    /**
     * 根据角色ID，查询该角色下对应的权限ID的列表
     *
     * @param roleId 角色ID
     * @return List<Long> 返回权限ID的List集合
     */
    List<Long> getPermissionIdByRoleId(@Param("roleId") Long roleId);

    /**
     * 根据用户ID，获取用户的所有的权限菜单
     *
     * @param userId 用户ID
     * @return List<Permission> 返回菜单集合
     */
    List<Permission> findAllByUserId(@Param("userId") Long userId);
}
