package com.ruoyi.credit.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.ruoyi.credit.domain.ContractExtraction;

/**
 * 合同信息提取Mapper接口
 * 
 * @author ruoyi
 * @date 2025-01-20
 */
public interface ContractExtractionMapper 
{
    /**
     * 查询合同信息提取
     * 
     * @param extractionId 合同信息提取主键
     * @return 合同信息提取
     */
    public ContractExtraction selectContractExtractionByExtractionId(Long extractionId);

    /**
     * 根据文件ID查询合同信息提取
     * 
     * @param fileId 文件ID
     * @return 合同信息提取
     */
    public ContractExtraction selectContractExtractionByFileId(@Param("fileId") Long fileId);

    /**
     * 根据合同ID查询合同信息提取列表
     * 
     * @param contractId 合同ID
     * @return 合同信息提取集合
     */
    public List<ContractExtraction> selectContractExtractionListByContractId(@Param("contractId") Long contractId);

    /**
     * 查询合同信息提取列表
     * 
     * @param contractExtraction 合同信息提取
     * @return 合同信息提取集合
     */
    public List<ContractExtraction> selectContractExtractionList(ContractExtraction contractExtraction);

    /**
     * 根据提取方法查询合同信息提取列表
     * 
     * @param extractionMethod 提取方法
     * @return 合同信息提取集合
     */
    public List<ContractExtraction> selectContractExtractionListByMethod(@Param("extractionMethod") String extractionMethod);

    /**
     * 根据提取状态查询合同信息提取列表
     * 
     * @param extractionStatus 提取状态
     * @return 合同信息提取集合
     */
    public List<ContractExtraction> selectContractExtractionListByStatus(@Param("extractionStatus") String extractionStatus);

    /**
     * 统计提取成功率
     * 
     * @param extractionMethod 提取方法
     * @return 成功率百分比
     */
    public Double calculateSuccessRateByMethod(@Param("extractionMethod") String extractionMethod);

    /**
     * 查询平均处理时间
     * 
     * @param extractionMethod 提取方法
     * @return 平均处理时间(毫秒)
     */
    public Double getAverageProcessingTimeByMethod(@Param("extractionMethod") String extractionMethod);

    /**
     * 新增合同信息提取
     * 
     * @param contractExtraction 合同信息提取
     * @return 结果
     */
    public int insertContractExtraction(ContractExtraction contractExtraction);

    /**
     * 修改合同信息提取
     * 
     * @param contractExtraction 合同信息提取
     * @return 结果
     */
    public int updateContractExtraction(ContractExtraction contractExtraction);

    /**
     * 更新提取状态
     * 
     * @param extractionId 提取ID
     * @param extractionStatus 提取状态
     * @param errorMessage 错误信息
     * @return 结果
     */
    public int updateExtractionStatus(@Param("extractionId") Long extractionId, 
                                    @Param("extractionStatus") String extractionStatus,
                                    @Param("errorMessage") String errorMessage);

    /**
     * 删除合同信息提取
     * 
     * @param extractionId 合同信息提取主键
     * @return 结果
     */
    public int deleteContractExtractionByExtractionId(Long extractionId);

    /**
     * 批量删除合同信息提取
     * 
     * @param extractionIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteContractExtractionByExtractionIds(Long[] extractionIds);

    /**
     * 根据文件ID删除合同信息提取
     * 
     * @param fileId 文件ID
     * @return 结果
     */
    public int deleteContractExtractionByFileId(@Param("fileId") Long fileId);

    /**
     * 根据合同ID删除合同信息提取
     * 
     * @param contractId 合同ID
     * @return 结果
     */
    public int deleteContractExtractionByContractId(@Param("contractId") Long contractId);
}