package com.blueland.bpm.identity;

import java.util.List;

import com.blueland.bpm.common.page.Page;
import com.blueland.bpm.identity.model.Org;

public interface OrgService {
	/**
	 * 根据组织机构ID来获取组织机构
	 * 
	 * @param orgId
	 *            组织机构ID
	 * @return 组织机构对象
	 */
	Org getOrgById(String orgId);

	/**
	 * 根据组织机构ID来获取其下属机构列表
	 * 
	 * @param orgId
	 *            组织机构ID
	 * @return 组织机构列表
	 */
	List<Org> findSubOrg(String orgId);

	/**
	 * 根据组织机构ID来获取其所有下属机构及子树列表(递归包含下属机构的子树)
	 * 
	 * @param orgId
	 *            组织机构ID
	 * @return 组织机构列表
	 */
	List<Org> findSubOrgTree(String orgId);

	/**
	 * 根据组织机构ID来获取其所有上级组织机构列表(递归包含所有的父组织机构树)
	 * 
	 * @param parentOrgId
	 * @return 组织机构列表
	 */
	List<Org> findParentOrgTree(String orgId);
	/**
	 * 根据组织机构对象来获取其所有上级组织机构列表(递归包含所有的父组织机构树)
	 * 
	 * @param parentOrgId
	 * @return 组织机构列表
	 */
	List<Org> findParentOrgTree(Org org) ;
	/**
	 * 根据组织机构ID来获取其所有上级组织机构列表(递归包含所有的父组织机构树)
	 * @param orgId
	 * @param isIncludeSelf		是否包含orgId参数的组织
	 * @return
	 */
	List<Org> findParentOrgTree(String orgId,boolean isIncludeSelf);
	
	/**
	 * 根据组织机构ID和组织级别来获取其所有上级组织机构列表(递归包含所有的父组织机构树)
	 * 
	 * @param parentOrgId
	 * @return 组织机构列表
	 */
	List<Org> findParentOrgTree(String orgId,Integer orgLevel) ;
	
	/**
	 * 根据组织机构对象做为查询条件来获取组织机构列表
	 * 
	 * @param paramEntity
	 * @return
	 */
	List<Org> findOrgByEntityCriteria(Org org);
	
	/**
	 * 根据组织机构ID集合做为查询条件来获取组织机构列表
	 * 
	 * @param orgIds
	 * @return
	 */
	List<Org> findOrgByOrgIds(List<String> orgIds);

	/**
	 * 根据组织机构ID来判断其是否包含了子组织机构
	 * 
	 * @param orgId
	 *            组织机构ID
	 * @return true:是,false:否
	 */
	boolean hasSubOrgs(String orgId);

	/**
	 * 判断父组织机构是否包含该子组织机构
	 * 
	 * @param parentOrgId
	 *            父组织机构ID
	 * @param subOrgId
	 *            子组织机构ID
	 * @return true:是,false:否
	 */
	boolean isInOrg(String parentOrgId, String subOrgId);

	/**
	 * 获取所有的公司,根据orgType=UNIT
	 * 
	 * @return
	 */
	List<Org> findAllCompany();

	/**
	 * 获取所有的部门,根据orgType=DEPT
	 * 
	 * @return
	 */
	List<Org> findAllDept();
	
	/**
	 * 获取组织全路径名称 （XX公司XX部门XX）
	 * @return
	 */
	String getFullPathName(String orgId,String pjStr);
	
	List<Org> listRootOrgNodes() ;
	
	Org queryProvincialOrgNode(String orgBizCode, String orgUnitId);
}
