package com.ruoyi.info.collection.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.info.collection.domain.dto.CcdiCustFmyRelationAddDTO;
import com.ruoyi.info.collection.domain.dto.CcdiCustFmyRelationEditDTO;
import com.ruoyi.info.collection.domain.dto.CcdiCustFmyRelationQueryDTO;
import com.ruoyi.info.collection.domain.excel.CcdiCustFmyRelationExcel;
import com.ruoyi.info.collection.domain.vo.CcdiCustFmyRelationVO;
import com.ruoyi.info.collection.domain.vo.CustFmyRelationImportFailureVO;

import jakarta.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 信贷客户家庭关系Service接口
 *
 * @author ruoyi
 * @date 2026-02-11
 */
public interface ICcdiCustFmyRelationService {

    /**
     * 分页查询信贷客户家庭关系
     *
     * @param query 查询条件
     * @param pageNum 页码
     * @param pageSize 每页条数
     * @return 分页结果
     */
    Page<CcdiCustFmyRelationVO> selectRelationPage(CcdiCustFmyRelationQueryDTO query,
                                                     Integer pageNum, Integer pageSize);

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

    /**
     * 新增信贷客户家庭关系
     *
     * @param addDTO 新增DTO
     * @return 是否成功
     */
    boolean insertRelation(CcdiCustFmyRelationAddDTO addDTO);

    /**
     * 修改信贷客户家庭关系
     *
     * @param editDTO 编辑DTO
     * @return 是否成功
     */
    boolean updateRelation(CcdiCustFmyRelationEditDTO editDTO);

    /**
     * 删除信贷客户家庭关系
     *
     * @param ids 主键ID数组
     * @return 是否成功
     */
    boolean deleteRelationByIds(Long[] ids);

    /**
     * 导出信贷客户家庭关系
     *
     * @param query 查询条件
     * @param response HTTP响应
     */
    void exportRelations(CcdiCustFmyRelationQueryDTO query, HttpServletResponse response);

    /**
     * 生成导入模板
     *
     * @param response HTTP响应
     */
    void importTemplate(HttpServletResponse response);

    /**
     * 批量导入信贷客户家庭关系
     *
     * @param excels Excel数据列表
     * @return 导入任务ID
     */
    String importRelations(List<CcdiCustFmyRelationExcel> excels);

    /**
     * 获取导入失败记录
     *
     * @param taskId 任务ID
     * @return 失败记录列表
     */
    List<CustFmyRelationImportFailureVO> getImportFailures(String taskId);
}
