/**
 * Copyright &copy; 2021-2026 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
 */
package com.jeeplus.sys.mapper;

import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.jeeplus.core.domain.TreeMapper;
import com.jeeplus.sys.domain.Office;
import com.jeeplus.sys.domain.SysParameterValue;
import com.jeeplus.sys.service.dto.OfficeDTO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 机构MAPPER接口
 *
 * @author jeeplus
 * @version 2021-05-16
 */
public interface OfficeMapper extends TreeMapper <Office> {

    /**
     * 获取二级节点数据信息
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    List<OfficeDTO> getSecondLevelData();

    /**
     * 根据id查询office信息
     * @param id
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    OfficeDTO getOfficeById(String id);

    @InterceptorIgnore(tenantLine = "true")
    List<String> getOfficeNameByIds(@Param("idList")List<String> idList);

    /**
     * 机构列表
     *
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    public List <OfficeDTO> findList(@Param(Constants.WRAPPER) QueryWrapper queryWrapper);
    /**
     * 根据签字注师2获取列表
     *
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    public List <OfficeDTO> findAccessList(@Param(Constants.WRAPPER) QueryWrapper queryWrapper);

    SysParameterValue findValueByParameter(@Param("parameter")String parameter, @Param("branchOffice")String branchOffice);

    /**
     * 根据部门名称 查询部门及所有子部门信息
     * @param officeName
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    List<OfficeDTO> getOfficeAllByOfficeName(@Param("officeName") String officeName);

    /**
     * 根据部门名称 查询部门及所有子部门信息
     * @param officeName
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    List<OfficeDTO> getOfficeAllByFinanceOfficeName(@Param("officeName") String officeName);

    /**
     * 根据父级id查询组织信息
     * @param parentId
     * @return
     */
    List<Office> selectListByParentId(@Param("parentId")String parentId);

    /**
     * 根据是否私有公有 查询组织信息
     * @param isPublic
     * @return
     */
    List<Office> selectListByIsPublic(@Param("isPublic")String isPublic);

    /**
     * 获取到所有parent_id为‘0’的部门数据
     * @param rootId
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    List<Office> getChildren(@Param("rootId")String rootId,@Param("companyId")String companyId);

    /**
     * 获取到所有parent_id为‘0’的评估部门数据
     * @param rootId
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    List<Office> getAccessChildren(@Param("rootId")String rootId);
    /**
     * 获取到所有parent_id为‘0’的会计部门数据
     * @param rootId
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    List<Office> getFinanceChildren(@Param("rootId")String rootId);

    /**
     * 根据父节点id获取子id
     * @param id
     * @return
     */
    List<String> getIds(String id);

    @InterceptorIgnore(tenantLine = "true")
    List<Office> getChild(@Param("rootId")String rootId);

    /**
     * 根据id查询父级office信息
     * @param id
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    OfficeDTO getParentOfficeById(String id);
}
