package com.xinelu.manage.mapper.agency;

import com.xinelu.manage.domain.agency.Agency;
import com.xinelu.manage.domain.agencycategory.AgencyCategory;
import com.xinelu.manage.dto.agency.AgencyDTO;
import com.xinelu.manage.dto.agency.AgencyTreeDto;
import com.xinelu.manage.vo.agency.AgencyVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * 机构信息Mapper接口
 *
 * @author xinelu
 * @date 2024-02-26
 */
public interface AgencyMapper {
    /**
     * 查询机构信息
     *
     * @param id 机构信息主键
     * @return 机构信息
     */
    Agency selectAgencyById(Long id);

    /**
     * 查询下级机构信息
     *
     * @param id 机构信息主键
     * @return 机构信息
     */
    List<Agency> selectSubordinateAgencyById(Long[] id);

    /**
     * 查询机构信息
     *
     * @param id 机构信息主键
     * @return 机构信息
     */
    AgencyVO selectAgencyVOById(Long id);

    /**
     * 查询机构信息列表
     *
     * @param agency 机构信息
     * @return 机构信息集合
     */
    List<Agency> selectAgencyList(Agency agency);

    /**
     * 查询机构信息列表
     *
     * @param agency 机构信息
     * @return 机构信息集合
     */
    List<AgencyVO> selectAgencyVOList(AgencyTreeDto agency);

    /**
     * 新增机构信息
     *
     * @param agency 机构信息
     * @return 结果
     */
    int insertAgency(Agency agency);

    /**
     * 修改机构信息
     *
     * @param agency 机构信息
     * @return 结果
     */
    int updateAgency(Agency agency);

    /**
     * 修改机构信息
     *
     * @param agency 机构信息
     * @return 结果
     */
    int updateAgencyById(Agency agency);

    /**
     * 删除机构信息
     *
     * @param id 机构信息主键
     * @return 结果
     */
    int deleteAgencyById(Long id);

    /**
     * 批量删除机构信息
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteAgencyByIds(Long[] ids);

    /**
     * 查询所有的机构信息
     *
     * @param agencyNames 机构信息集合
     * @return 列表集合信息
     */
    List<AgencyDTO> getAllAgencyInfo(@Param("agencyNames") List<String> agencyNames);

    /**
     * 机构信息导入
     *
     * @param agencyList 机构信息
     * @return int
     **/
    int insertAgencyImportList(List<Agency> agencyList);


    int selectAgencyNameByAgencyNameInt(String agencyName);

    /**
     * 通过机构编号查询机构id
     *
     * @param parentAgencyCodeList 机构编号
     * @return AgencyDTO
     */
    List<AgencyDTO> selectAgencyId(@Param("parentAgencyCodeList") List<String> parentAgencyCodeList);

    List<AgencyCategory> selectAgencyCategoryId(@Param("categoryCode") List<String> categoryCode);
}
