package com.xunmei.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xunmei.common.core.web.page.TableDataInfo;
import com.xunmei.system.api.domain.SysOrg;

import java.util.List;

/**
 * 【机构管理】Service接口
 *
 * @author xunmei
 * @date 2023-08-10
 */
public interface ISysOrgService extends IService<SysOrg> {
    /**
     * 查询【机构管理】
     *
     * @param id 【机构管理】主键
     * @return 【机构管理】
     */
    SysOrg selectSysOrgById(Long id);

    List<Long> selectCheckSubOrgIdList(Long orgId);

    List<Long> findListByOrgType(Integer execOrgType);

    List<SysOrg> listByTypes(Long topId, List<String> types);

    /**
     * 查询【机构管理】列表
     *
     * @param sysOrg 【机构管理】
     * @return 【机构管理】集合
     */
    List<SysOrg> selectSysOrgList(SysOrg sysOrg);

    void  batchSaveOrUpdate(List<SysOrg> orgList);

    /**
     * 新增【机构管理】
     *
     * @param sysOrg 【机构管理】
     * @return 结果
     */
    int insertSysOrg(SysOrg sysOrg);

    /**
     * 修改【机构管理】
     *
     * @param sysOrg 【机构管理】
     * @return 结果
     */
    int updateSysOrg(SysOrg sysOrg);

    /**
     * 批量删除【机构管理】
     *
     * @param ids 需要删除的【机构管理】主键集合
     * @return 结果
     */
    int deleteSysOrgByIds(Long[] ids);

    /**
     * 删除【机构管理】信息
     *
     * @param id 【机构管理】主键
     * @return 结果
     */
    int deleteSysOrgById(Long id);

    /**
     * 查询【机构管理】分页数据
     *
     * @param sysOrg 查询条件对象
     * @return Page
     */
    TableDataInfo<SysOrg> selectPage(SysOrg sysOrg);

    String selectPathById(Long orgId);

    SysOrg selectByParentId(Long orgId);

    List<SysOrg> selectByOrgType(Integer orgType);

    SysOrg getSysOrgByUserId(Long userId);


    /**
     * 查询部门树结构信息
     *
     * @param dept 部门信息
     * @return 部门树信息集合
     */
    List<SysOrg> selectDeptTreeList(SysOrg dept);

    /**
     * 缓存机构数据
      */
    void loadingOrgCache();

    /**
     * 清楚机构缓存
     */
    void clearOrgCache();

    /**
     * 保存或者更新机构
     * @param org
     * @return
     */
    boolean saveOrUpdateOrg(SysOrg org);

    /**
     * 删除机构
     * @param orgId
     * @return
     */
    boolean removeOrg(Long orgId);

}
