package com.hotent.uc.dao;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hotent.uc.model.Role;
import org.springframework.security.core.parameters.P;

/**
 * 
 * <pre> 
 * 描述：角色管理 DAO接口
 * 构建组：eip平台-bpmx-platform
 * 作者:ray
 * 邮箱:zhangyg@jee-soft.cn
 * 日期:2016-06-30 10:28:04
 * 版权：广州宏天软件有限公司
 * </pre>
 */
public interface RoleDao extends BaseMapper<Role>{

    /**
     * 更新角色，不使用mp的逻辑删除和自动填充来更新、恢复数据
     * @param role
     * @return
     */
    Integer updateRole(Role role);

	/**
	 *删除所有已逻辑删除的实体（物理删除）
	 * @param entityId 实体对象ID
	 */
	Integer removePhysical();
	
	/**
	 * 通过编码删除角色
	 * @param code
	 * @return
	 */
    Role getByCode(@Param("code") String code);

    /**
     * 通过编码获取所有创建角色（删除的也可以获取到）
     * @param code
     * @return
     */
    Role getAllByCode(@Param("code") String code);
    
    /**
     * 根据用户ID获取角色列表
     * @param userId
     * @return
     */
    List<Role> getListByUserId(@Param("userId") String userId, @Param("roleIds") Set<String> roleIds);
   
    /**
     * 根据用户账号获取角色列表
     * @param account
     * @return
     */
    List<Role> getListByAccount(@Param("account") String account);


    /**
     * 根据角色Id集合获取角色列表
     */
    List<Role> getByIds(@Param("ids") Collection<String> ids);

    List<Map<String, Object>> getRoleByIdsAndExtOrgId(@Param("ids") Collection<String> ids, @Param("orgPath") String orgPath);
    
    /**
     * 获取组织角色
     * @param map
     * @return
     */
    List<Role> getOrgRoleList(Map<String,Object> map);

    /**
     * 根据角色别名获取除这个角色之外的所有角色
     * @param code
     * @return
     */
    List<Role> getOrgRoleListNotCode(@Param("code") String code);

    /**
     * 根据code查询记录数量
     * @param code
     * @return
     */
    Integer getCountByCode(@Param("code") String code);

    IPage<Role> queryRoleByExtOrgPath(IPage<Role> convert2iPage, @Param(Constants.WRAPPER) Wrapper<Role> convert2Wrapper, @Param("path") String path);
}
