package com.tourism.webadmin.back.dao;

import com.tourism.common.core.base.dao.BaseDaoMapper;
import com.tourism.webadmin.back.model.TourHouseAdvisorInfo;
import com.tourism.webadmin.back.model.TourHouseAdvisorRelation;
import org.apache.ibatis.annotations.Param;

import java.util.*;

/**
 * 房屋顾问信息管理数据操作访问接口。
 *
 * @author 吃饭睡觉
 * @date 2024-09-06
 */
public interface TourHouseAdvisorInfoMapper extends BaseDaoMapper<TourHouseAdvisorInfo> {

    /**
     * 批量插入对象列表。
     *
     * @param tourHouseAdvisorInfoList 新增对象列表。
     */
    void insertList(List<TourHouseAdvisorInfo> tourHouseAdvisorInfoList);

    /**
     * 获取过滤后的对象列表。
     *
     * @param tourHouseAdvisorInfoFilter 主表过滤对象。
     * @param orderBy 排序字符串，order by从句的参数。
     * @return 对象列表。
     */
    List<TourHouseAdvisorInfo> getTourHouseAdvisorInfoList(
            @Param("tourHouseAdvisorInfoFilter") TourHouseAdvisorInfo tourHouseAdvisorInfoFilter, @Param("orderBy") String orderBy);

    /**
     * 根据关联主表Id，获取关联从表数据列表。
     *
     * @param houseId 关联主表Id。
     * @param tourHouseAdvisorInfoFilter 从表过滤对象。
     * @param tourHouseAdvisorRelationFilter 多对多关联表过滤对象。
     * @param orderBy 排序字符串，order by从句的参数。
     * @return 从表数据列表。
     */
    List<TourHouseAdvisorInfo> getTourHouseAdvisorInfoListByHouseId(
            @Param("houseId") Long houseId,
            @Param("tourHouseAdvisorInfoFilter") TourHouseAdvisorInfo tourHouseAdvisorInfoFilter,
            @Param("tourHouseAdvisorRelationFilter") TourHouseAdvisorRelation tourHouseAdvisorRelationFilter,
            @Param("orderBy") String orderBy);

    /**
     * 根据关联主表Id列表，获取关联从表数据列表。
     *
     * @param houseIds 关联主表Id列表。
     * @param tourHouseAdvisorInfoFilter 从表过滤对象。
     * @param orderBy 排序字符串，order by从句的参数。
     * @return 从表数据列表。
     */
    List<TourHouseAdvisorInfo> getTourHouseAdvisorInfoListByHouseIds(
            @Param("houseIds") List<Long> houseIds,
            @Param("tourHouseAdvisorInfoFilter") TourHouseAdvisorInfo tourHouseAdvisorInfoFilter,
            @Param("orderBy") String orderBy);

    /**
     * 根据关联主表Id，获取关联从表中没有和主表建立关联关系的数据列表。
     *
     * @param houseId 关联主表Id。
     * @param tourHouseAdvisorInfoFilter 过滤对象。
     * @param orderBy 排序字符串，order by从句的参数。
     * @return 与主表没有建立关联的从表数据列表。
     */
    List<TourHouseAdvisorInfo> getNotInTourHouseAdvisorInfoListByHouseId(
            @Param("houseId") Long houseId,
            @Param("tourHouseAdvisorInfoFilter") TourHouseAdvisorInfo tourHouseAdvisorInfoFilter,
            @Param("orderBy") String orderBy);

    List<TourHouseAdvisorInfo> getAdvisors(Long id);
}
