package com.ruoyi.project.business.mapper;

import com.ruoyi.project.business.domain.TbArea;
import com.ruoyi.project.business.domain.vo.country.AreaWithCountriesVo;
import com.ruoyi.project.business.domain.vo.selectParam.AreaParam;
import java.util.List;
import org.apache.ibatis.annotations.Param;

/**
 * 区域Mapper接口
 * 
 * @author ruoyi
 * @date 2024-04-15
 */
public interface TbAreaMapper 
{
    /**
     * 查询区域
     * 
     * @param areaId 区域主键
     * @return 区域
     */
    public TbArea selectTbAreaByAreaId(Long areaId);

    /**
     * 查询区域列表
     * 
     * @param tbArea 区域
     * @return 区域集合
     */
    public List<TbArea> selectTbAreaList(AreaParam tbArea);

    /**
     * 查询区域列表（导出用）
     *
     * @param tbArea 区域
     * @return 区域集合
     */
    public List<TbArea> selectTbAreaListExport(AreaParam tbArea);

    /**
     * 新增区域
     * 
     * @param tbArea 区域
     * @return 结果
     */
    public int insertTbArea(TbArea tbArea);

    /**
     * 修改区域
     * 
     * @param tbArea 区域
     * @return 结果
     */
    public int updateTbArea(TbArea tbArea);

    /**
     * 删除区域
     * 
     * @param areaId 区域主键
     * @return 结果
     */
    public int deleteTbAreaByAreaId(Long areaId);

    /**
     * 批量删除区域
     * 
     * @param areaIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteTbAreaByAreaIds(Long[] areaIds);

    /**
     * 获取所有区域列表
     * @return 结果
     */
    List<TbArea> getAllAreaList();

    /**
     * 根据区域等级获取区域列表
     * @return 结果
     */
    List<TbArea> getAreaListByLevel(String level);

    List<TbArea> getAreaListByCountryId(Long countryId);

    List<TbArea> selectAreaListByIds(@Param("areaIds") List<Long> areaIds);

    /**
     * 根据区域名称获取区域数量
     * @param areaName 区域名称
     * @param areaId 区域id
     * @return
     */
    int selectTbAreaByAreaName(String areaName, Long areaId);

    /**
     * 根据父级区域ids获取区域数量
     * @param areaIds 区域id
     * @return
     */
    int selectTbAreaByParentAreas(Long[] areaIds);

    List<AreaWithCountriesVo> selectTbAreaWithCountriesList(TbArea tbArea);

    List<TbArea> selectChildAreaList(String permission);

    List<TbArea> selectChildAreaByAreaIds(List<Long> areaIds);

    List<Long> selectChildAreaIdsByAreaIds(List<Long> areaIds);

    List<Long> selectDeepOneAreaList(List<Long> areaIds);

    List<TbArea> selectListByIdsAndAncestorId(@Param("areaIdList") List<Long> areaIdList,
        @Param("ancestorId") Long ancestorId);

    List<TbArea> listByAreaName(@Param("areaList") List<String> areaList);
}
