package com.ruoyi.credit.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.ruoyi.credit.domain.ContractFile;

/**
 * 合同文件Mapper接口
 * 
 * @author ruoyi
 * @date 2025-01-20
 */
public interface ContractFileMapper 
{
    /**
     * 查询合同文件
     * 
     * @param fileId 合同文件主键
     * @return 合同文件
     */
    public ContractFile selectContractFileByFileId(Long fileId);

    /**
     * 根据合同ID查询合同文件列表
     * 
     * @param contractId 合同ID
     * @return 合同文件集合
     */
    public List<ContractFile> selectContractFileListByContractId(@Param("contractId") Long contractId);

    /**
     * 根据文件哈希查询合同文件
     * 
     * @param fileHash 文件哈希
     * @return 合同文件
     */
    public ContractFile selectContractFileByFileHash(@Param("fileHash") String fileHash);

    /**
     * 查询合同文件列表
     * 
     * @param contractFile 合同文件
     * @return 合同文件集合
     */
    public List<ContractFile> selectContractFileList(ContractFile contractFile);

    /**
     * 根据上传状态查询合同文件列表
     * 
     * @param uploadStatus 上传状态
     * @return 合同文件集合
     */
    public List<ContractFile> selectContractFileListByUploadStatus(@Param("uploadStatus") String uploadStatus);

    /**
     * 根据验证状态查询合同文件列表
     * 
     * @param validationStatus 验证状态
     * @return 合同文件集合
     */
    public List<ContractFile> selectContractFileListByValidationStatus(@Param("validationStatus") String validationStatus);

    /**
     * 统计文件总大小
     * 
     * @param contractId 合同ID
     * @return 文件总大小
     */
    public Long sumFileSizeByContractId(@Param("contractId") Long contractId);

    /**
     * 新增合同文件
     * 
     * @param contractFile 合同文件
     * @return 结果
     */
    public int insertContractFile(ContractFile contractFile);

    /**
     * 修改合同文件
     * 
     * @param contractFile 合同文件
     * @return 结果
     */
    public int updateContractFile(ContractFile contractFile);

    /**
     * 更新文件上传状态
     * 
     * @param fileId 文件ID
     * @param uploadStatus 上传状态
     * @return 结果
     */
    public int updateFileUploadStatus(@Param("fileId") Long fileId, @Param("uploadStatus") String uploadStatus);

    /**
     * 更新文件验证状态
     * 
     * @param fileId 文件ID
     * @param validationStatus 验证状态
     * @param validationResult 验证结果
     * @return 结果
     */
    public int updateFileValidationStatus(@Param("fileId") Long fileId, 
                                        @Param("validationStatus") String validationStatus,
                                        @Param("validationResult") String validationResult);

    /**
     * 删除合同文件
     * 
     * @param fileId 合同文件主键
     * @return 结果
     */
    public int deleteContractFileByFileId(Long fileId);

    /**
     * 批量删除合同文件
     * 
     * @param fileIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteContractFileByFileIds(Long[] fileIds);

    /**
     * 根据合同ID删除合同文件
     * 
     * @param contractId 合同ID
     * @return 结果
     */
    public int deleteContractFileByContractId(@Param("contractId") Long contractId);
}