
package com.tmerclub.cloud.delivery.service;

import com.tmerclub.cloud.common.order.vo.AreaVO;
import com.tmerclub.cloud.common.order.dto.AreaDTO;
import com.tmerclub.cloud.delivery.model.Area;

import java.util.List;

/**
 * 省市区地区信息
 *
 * @author YXF
 * @date 2020-11-25 14:48:52
 */
public interface AreaService {

    /**
     * 获取地址列表
     * @param areaDTO
     * @return
     */
    List<AreaVO> list(AreaDTO areaDTO);

    /**
     * 根据省市区地区信息id获取省市区地区信息
     *
     * @param areaId 省市区地区信息id
     * @return 省市区地区信息
     */
    AreaVO getByAreaId(Long areaId);

    /**
     * 保存省市区地区信息
     *
     * @param area 省市区地区信息
     */
    void save(Area area);

    /**
     * 更新省市区地区信息
     *
     * @param area 省市区地区信息
     */
    void update(Area area);

    /**
     * 根据省市区地区信息id删除省市区地区信息
     *
     * @param areaId
     */
    void deleteById(Long areaId);

    /**
     * 根据上级地址id，获取地址列表
     *
     * @param pid
     * @return
     */
    List<AreaVO> listByPid(Long pid);

    /**
     * 清除地址的所有缓存数据
     *
     * @param pid
     */
    void removeAllCache(Long pid);

    /**
     * 根据上级分类id，清除缓存
     *
     * @param pid
     */
    void removeAreaCacheByParentId(Long pid);

    /**
     * 获取省市区三级结构完整的集合
     *
     * @return 省市区三级结构完整的集合
     */
    List<AreaVO> getAreaListInfo();

    /**
     * 获取可用的省市区列表
     *
     * @return
     */
    List<AreaVO> listAreaOfEnable();

    /**
     * 查询相同上级的当前地区名称数量
     *
     * @param areaName 地区名称
     * @param level
     * @param parentId 父级地区id
     * @param areaId   地区id
     * @return 数量
     */
    Integer countByNameAndParentId(String areaName, Integer level, Long parentId, Long areaId);

    /**
     * 根据id获取列表
     * @param areaIds
     * @return
     */
    List<AreaVO> listByAreaIdList(List<Long> areIdList);
}
