package com.palmnest.dao;

import com.palmnest.application.bean.Page;
import com.palmnest.model.FloorInfo;
import com.palmnest.model.TbCompany;
import com.palmnest.model.TbDept;
import com.palmnest.model.User;
import com.palmnest.model.property.TbOrganization;
import com.palmnest.model.property.TbOrganizationConfig;

import java.util.List;
import java.util.Map;

/**
 * 组织管理（公司机构、部门、在管项目）
 *
 * @author yubing
 * @since 2014-09-15
 */
public interface OrganizationDao extends GenericDao<Object, Integer> {
	/**
	 * @param id
	 * @return
	 */
	public TbCompany getCompanyById(int id);

	/**
	 * @param id
	 * @return
	 */
	public TbOrganization getOrganizationById(int id);

	public List<TbCompany> getCompanyList(String isenabled);

	/**
	 * 根据项目名称查询
	 *
	 * @param compName
	 * @return
	 */
	public TbCompany getCompanyByName(String compName);

	/**
	 * 分页查询公司
	 *
	 * @param pageNo
	 * @param pageSize
	 * @param whereHql
	 * @return
	 */
	public Page queryCompanyList(int pageNo, int pageSize, String whereHql);

	/**
	 * 分页查询部门信息
	 *
	 * @param pageNo
	 * @param pageSize
	 * @param whereHql
	 * @return
	 */
	public Page queryDeptList(int pageNo, int pageSize, String whereHql);

	/**
	 * 查询所有部门
	 *
	 * @return
	 */
	public List<TbDept> getAllDept();

	/**
	 * 查询所有有效项目
	 *
	 * @return
	 */
	public List<TbOrganization> getAllOrganization();

	/**
	 * 获取当前部门的最大id
	 *
	 * @return
	 */
	public int getMaxDeptid();

	/**
	 * 根据当前节点、父节点获取部门
	 *
	 * @param treeCode
	 * @param parentCode
	 * @return
	 */
	public TbDept getDept(String treeCode, String parentCode);

	/**
	 * 根据部门id获取部门
	 *
	 * @param id
	 * @return
	 */
	public TbDept getDept(int id);

	/**
	 * 根据部门id获取部门
	 *
	 * @param id
	 * @return
	 */
	public FloorInfo getFloor(int id);

	public TbDept getDept(TbCompany company, String deptName);

	/**
	 * 删除部门
	 *
	 * @param treeCode
	 * @param parentCode
	 */
	public void deleteDept(String treeCode, String parentCode);

	/**
	 * 根据项目，获取该项目下不同职位的员工(都是在职的)
	 *
	 * @param projectcode 项目编号
	 * @param position    职位
	 * @return
	 */
	public List<User> getUserList(String projectcode, String position);

	/**
	 * 根据用户与部门的关联-查询用户的公司权限
	 * @return 公司ID集合
	 */
//	public List<Map<String, Object>> getAppUserCompIds(int userId);

	/**
	 * 根据楼栋名称查询相应的楼栋
	 *
	 * @param name
	 * @return
	 * @throws Exception
	 */
	public TbOrganization getOrganizationInfoByName(String name) throws Exception;

	/**
	 * 根据id获取项目配置对象
	 *
	 * @param id
	 * @return
	 */
	public TbOrganizationConfig getObj(String id);

	/**
	 * 根据项目id获取项目配置对象
	 *
	 * @param orgId
	 * @return
	 */
	public TbOrganizationConfig getDiscoverConfigByOrgId(String orgId);

	/**
	 * 根据客户端编码查找项目信息
	 *
	 * @param mettingClient
	 * @return
	 */
	public TbOrganization getByMettingClient(String mettingClient);

	/**
	 * 获取所有有效的项目，根据城市划分
	 *
	 * @return
	 */
	List<Map<String, Object>> getOrgOrderbyCity(String orgIds, String city);

	List<TbOrganization> enableOrgList(Integer enable);
	
	List<TbOrganization> passTypeOrgList(Integer passType);
}
