package com.sptg.permissions.biz.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.sptg.common.core.beans.ResultBean;
import com.sptg.permissions.api.dto.AreaDto;
import com.sptg.permissions.api.entity.AppArea;
import com.sptg.permissions.api.entity.Area;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * title: AreaServiceInterface
 * package: com.sptg.permissions.biz.security
 * description: 全国省市区街道-服务层接口
 *
 *                  
 *                
 */
public interface AreaServiceInterface {

    /**
     * 区域缓存名称
     */
    String AREA_CACHE_NAME = "sptg:permissions:area";

    /**
     * 子区域缓存名称
     */
    String SUB_AREA_CACHE_NAME = "sptg:permissions:area:sub";


    /**
     * 功能描述: 根据父级编号获取子节点列表
     * @param parentCode 父级编号
     * @return List<Area>
     *                  
     *                      
     */
    List<Area> getSubList(Serializable parentCode);

    /**
     * 功能描述: 根据Id查询
     * @param code 区域编号
     * @return Area
     *                  
     *                      
     */
    Area selectByCode(Serializable code);

    /**
     * 功能描述:根据名称和层级查找区域
     * @param dto
     * @return Map<String ,Object>
     *             
     *                     
     */
    Map<String ,Object> selectByNameAndLayer(AreaDto dto);

    /**
     * 根据名称查询城市和省份
     * @param name 城市名称或省份名称
     * @return 当参数为城市名称时,集合大小为2,[ 城市,省份 ];当参数为省份名称时,集合大小为1,[ 省份 ];若不存在,则返回空!
     */
    List<Area> selectCityAndProvinceByName(String name);
    List<AppArea> selectAll();
    ResultBean<Page<Area>> pagingQuery(AreaDto areaDto);
    ResultBean<Boolean> addArea(AreaDto areaDto);
    Area getById(Serializable id);
    ResultBean<Boolean> delete(Area area);
}
