package com.qmth.teachcloud.common.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.qmth.teachcloud.common.bean.dto.OrgDto;
import com.qmth.teachcloud.common.entity.SysOrg;
import com.qmth.teachcloud.common.entity.SysUser;
import com.qmth.teachcloud.common.enums.OrgTypeEnum;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 学校组织架构 服务类
 * </p>
 *
 * @author xf
 * @since 2021-03-23
 */
public interface SysOrgService extends IService<SysOrg> {

    List<OrgDto> listOrgTree();

    /**
     * 获取所有机构
     *
     * @param schoolId
     * @return
     */
    List<OrgDto> listOrgAll(Long schoolId);

    boolean saveOrg(SysOrg org);

    /**
     * 根据外键查找学院信息
     *
     * @param schoolId    学校id
     * @param collegeCode 学院编号
     * @param collegeName 学院名称
     * @return 学院数据
     */
    SysOrg findByForeignKey(Long schoolId, String collegeCode, String collegeName);

    /**
     * 查询机构ids
     *
     * @param orgId
     * @return
     */
    List<Long> findCollegeIds(Long orgId);

    /**
     * 查询或新建学院
     * 根据学院名称查询数据库是否有该开课学院，有则查询id，没有则新增并取出id
     *
     * @param schoolId    学校id
     * @param collegeName 学院名称
     * @return 查询或新增的开课学院id
     */
    Long searchOrInsert(Long schoolId, String collegeName);

    /**
     * 根据机构类型查找用户
     *
     * @param schoolId
     * @param orgId
     * @param orgTypeEnum
     * @return
     */
    List<SysUser> findUserByOrgType(Long schoolId, Long orgId, OrgTypeEnum orgTypeEnum);

    /**
     * 递归树查询(同级及以上)
     *
     * @param orgId
     * @param school
     * @return
     */
    List<SysOrg> findByConnectByParentId(Long orgId, Boolean school);

    /**
     * 递归树查询(同级及以下)
     *
     * @param orgId
     * @return
     */
    List<SysOrg> findByConnectByRootOrgId(Long orgId);

    /**
     * 根据机构类型和机构id查询它和它下级所有符合条件的机构
     *
     * @param orgTypeEnum 机构类型
     * @return 机构集合
     */
    List<SysOrg> findDeepByOrgIdAndType(OrgTypeEnum orgTypeEnum);
}
