package com.cool.store.mapper;

import com.cool.store.entity.HyOpenAreaInfoDO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author zhangchenbiao
 * @date 2023-05-29 03:51
 */
public interface HyOpenAreaInfoMapper {
    /**
     *
     * 默认插入方法，只会给有值的字段赋值
     * 会对传进来的字段做判空处理，如果字段为空，则使用数据库默认字段或者null
     * dateTime:2023-05-29 03:51
     */
    int insertSelective(@Param("record") HyOpenAreaInfoDO record);

    /**
     *
     * 默认更新方法，根据主键更新，不会把null值更新到数据库，避免覆盖之前有值的
     * dateTime:2023-05-29 03:51
     */
    int updateByPrimaryKeySelective(@Param("record") HyOpenAreaInfoDO record);

    /**
     * 查询重点城市
     * @return
     */
    List<HyOpenAreaInfoDO> queryKeyOpenArea(@Param("keyword") String keyword,@Param("keyOpenStatus") Integer keyOpenStatus);


    /**
     * 查询所有
     * @return
     */
    List<HyOpenAreaInfoDO> queryByKeyword(@Param("keyword") String keyword,
                                          @Param("applyFlag") Boolean applyFlag,
                                          @Param("areaStatus") String areaStatus,
                                          @Param("filterData") Boolean filterData);

    /**
     * 查询所有一级城市 (所有省份+直辖市)
     * @return
     */
    List<HyOpenAreaInfoDO> queryFirstLevel();


    /**
     * 查询所有一级城市 (所有省份+直辖市)
     * @return
     */
    List<HyOpenAreaInfoDO> queryByIdsExcludeFirstLevel(@Param("ids") List<Long> ids);


    /**
     * 查询子列表
     * @return
     */
    List<HyOpenAreaInfoDO> getChildrenList(@Param("parentId") Long parentId);

    Integer getChildrenCount(@Param("type") String type ,
                             @Param("parentId") Long parentId);


    /**
     * 更新城市昨天
     * @param backgroundBanner
     * @param detailBanner
     * @param areaStatus
     * @param updateUserId
     * @param ids
     * @return
     */
    int batchUpdateById(@Param("backgroundBanner") String backgroundBanner,
                        @Param("detailBanner") String detailBanner,
                        @Param("areaStatus") String areaStatus,
                        @Param("updateUserId") String updateUserId,
                        @Param("ids") List<Long> ids);

    int batchUpdateByParentId(@Param("backgroundBanner") String backgroundBanner,
                              @Param("detailBanner") String detailBanner,
                              @Param("areaStatus") String areaStatus,
                              @Param("updateUserId") String updateUserId,
                              @Param("parentIdList") List<Long> parentIdList);

    /**
     * 根据idList查询数据
     * @param idList
     * @return
     */
    List<HyOpenAreaInfoDO> selectByIds(@Param("idList") List<Long> idList);

    HyOpenAreaInfoDO selectById(@Param("id") Long id);

    /**
     * 获取所有的区域
     * @return
     */
    List<HyOpenAreaInfoDO> getAllOpenArea();

    /**
     * 过滤叶子节点
     * @param openAreaIds
     * @return
     */
    List<Long> filterLeafNode(@Param("openAreaIds") List<Long> openAreaIds);

    List<HyOpenAreaInfoDO> getSonArea(@Param("id") String id);

    List<HyOpenAreaInfoDO> getProvinceAllCode(@Param("id") String id);

    HyOpenAreaInfoDO selectByAreaPath(@Param("areaPath") String areaPath);

    List<HyOpenAreaInfoDO> selectAllCity();
}