package com.ruoyi.info.collection.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.info.collection.domain.CcdiCustFmyRelation;
import com.ruoyi.info.collection.domain.dto.CcdiCustFmyRelationQueryDTO;
import com.ruoyi.info.collection.domain.vo.CcdiCustFmyRelationVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 信贷客户家庭关系Mapper接口
 *
 * @author ruoyi
 * @date 2026-02-11
 */
public interface CcdiCustFmyRelationMapper extends BaseMapper<CcdiCustFmyRelation> {

    /**
     * 分页查询信贷客户家庭关系
     *
     * @param page 分页对象
     * @param query 查询条件
     * @return 信贷客户家庭关系VO列表
     */
    Page<CcdiCustFmyRelationVO> selectRelationPage(Page<CcdiCustFmyRelationVO> page,
                                                     @Param("query") CcdiCustFmyRelationQueryDTO query);

    /**
     * 根据ID查询信贷客户家庭关系详情
     *
     * @param id 主键ID
     * @return 信贷客户家庭关系VO
     */
    CcdiCustFmyRelationVO selectRelationById(@Param("id") Long id);

    /**
     * 查询已存在的关系记录(用于导入校验)
     *
     * @param personId 信贷客户身份证号
     * @param relationType 关系类型
     * @param relationCertNo 关系人证件号码
     * @return 已存在的关系记录
     */
    CcdiCustFmyRelation selectExistingRelations(@Param("personId") String personId,
                                                 @Param("relationType") String relationType,
                                                 @Param("relationCertNo") String relationCertNo);

    /**
     * 批量插入信贷客户家庭关系
     *
     * @param relations 信贷客户家庭关系列表
     * @return 插入条数
     */
    int insertBatch(@Param("relations") List<CcdiCustFmyRelation> relations);

    /**
     * 根据证件号码查询关系数量
     *
     * @param relationCertNo 关系人证件号码
     * @return 关系数量
     */
    int countByCertNo(@Param("relationCertNo") String relationCertNo);

    /**
     * 批量查询已存在的关系组合(性能优化)
     * 一次性查询所有 person_id + relation_type + relation_cert_no 组合
     *
     * @param combinations 组合列表,格式为 "personId|relationType|relationCertNo"
     * @return 已存在的组合列表
     */
    List<String> batchExistsByCombinations(@Param("combinations") List<String> combinations);
}
