package com.palmnest.service;

import com.palmnest.application.bean.Page;
import com.palmnest.application.bean.Pagenation;
import com.palmnest.application.dto.output.app.OrganizationDto;
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 org.hibernate.criterion.Criterion;

import java.util.List;

/**
 * 物业组织管理业务层接口
 *
 * @author yubing
 * @since 2014-09-11
 */
public interface OrganizationManager extends GenericManager<Object, Integer> {

	/**
	 * 公司列表分页查询
	 *
	 * @param pageNo     当前页数
	 * @param filterList 过滤集合
	 * @return
	 */
	public Pagenation<TbCompany> queryCompanyList(int pageNo, List<Criterion> filterList);

	/**
	 * 公司列表分页查询
	 *
	 * @param pageNo 当前页数
	 * @param strHql 过滤SQL
	 */
	public Page queryCompanyList(int pageNo, String strHql);

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

	/**
	 * 查询公司列表
	 *
	 * @param isenabled 空-查询所有，1-查询可用 0-查询不可用
	 */
	public List<TbCompany> getCompanyList(String isenabled);

	/**
	 * @param id
	 * @return
	 */
	public TbCompany getCompanyById(int id);

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

	/**
	 * 保存公司信息
	 * @param company  公司信息
	 * @param buildIds 楼栋ID集合
	 * @return
	 */
//	public String saveOrUpdateCompany(TbCompany company, String[] buildIds);

	/**
	 * 保存公司信息
	 *
	 * @param company 公司信息
	 * @return
	 */
	public String saveOrUpdateCompany(TbCompany company);

	/**
	 * 公司列表分页查询
	 *
	 * @param pageNo 当前页数
	 * @param strHql 过滤SQL
	 */
	public Page queryDeptList(int pageNo, String strHql);

	/**
	 * 保存部门新
	 *
	 * @param company  部门信息
	 * @param buildIds 楼栋ID集合
	 * @return
	 */
	public String saveOrUpdateDept(TbDept dept, String[] buildIds);

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

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

	/**
	 * 查询部门
	 *
	 * @param treeCode   当前节点code
	 * @param parentCode 父节点code
	 * @return
	 */
	public TbDept getDept(String treeCode, String parentCode);

	/**
	 * 删除部门
	 *
	 * @param treeCode   当前节点code
	 * @param parentCode 父节点code
	 */
	public void deleteDept(String treeCode, String parentCode);

	/**
	 * 根据ID查询TbDept
	 *
	 * @param id 主键
	 * @return TbDept
	 */
	public TbDept getDept(int id);

	/**
	 * 根据ID查询floor
	 *
	 * @param id 主键
	 * @return TbDept
	 */
	public FloorInfo getFloor(int id);

	/**
	 * 获取系统用户的物业组织集合信息
	 *
	 * @param userid 用户的ID
	 * @return List<TbCompany>
	 */
	public List<TbCompany> getAppUserRelationCompany(int userid);

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

	/**
	 * 获取当前用户的项目权限集合
	 *
	 * @param userid
	 * @return
	 */
	List<TbOrganization> getUserRelationOrganizationList(Long userid);

	/**
	 * 查询所有项目，供个性化配置时使用
	 *
	 * @return
	 */
	public List<OrganizationDto> findAll();

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

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

	public String saveOrUpdateTbOrgConfig(TbOrganizationConfig config);

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

	public TbOrganization getOrganizationInfoByName(String name) throws Exception;

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