package com.ruoyi.credit.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.ruoyi.credit.domain.DigitalCredit;

/**
 * 数字债权凭证Mapper接口
 * 
 * @author ruoyi
 * @date 2025-01-20
 */
public interface DigitalCreditMapper 
{
    /**
     * 查询数字债权凭证
     * 
     * @param creditId 数字债权凭证主键
     * @return 数字债权凭证
     */
    public DigitalCredit selectDigitalCreditByCreditId(Long creditId);

    /**
     * 根据债权编号查询数字债权凭证
     * 
     * @param creditNumber 债权编号
     * @return 数字债权凭证
     */
    public DigitalCredit selectDigitalCreditByCreditNumber(@Param("creditNumber") String creditNumber);

    /**
     * 根据合同ID查询数字债权凭证
     * 
     * @param contractId 合同ID
     * @return 数字债权凭证
     */
    public DigitalCredit selectDigitalCreditByContractId(@Param("contractId") Long contractId);

    /**
     * 查询数字债权凭证列表
     * 
     * @param digitalCredit 数字债权凭证
     * @return 数字债权凭证集合
     */
    public List<DigitalCredit> selectDigitalCreditList(DigitalCredit digitalCredit);

    /**
     * 根据债权状态查询数字债权凭证列表
     * 
     * @param creditStatus 债权状态
     * @return 数字债权凭证集合
     */
    public List<DigitalCredit> selectDigitalCreditListByStatus(@Param("creditStatus") String creditStatus);

    /**
     * 查询即将到期的债权列表
     * 
     * @param days 提前天数
     * @return 数字债权凭证集合
     */
    public List<DigitalCredit> selectExpiringCredits(@Param("days") int days);

    /**
     * 根据状态统计债权数量
     * 
     * @param creditStatus 债权状态
     * @return 债权数量
     */
    public int countCreditsByStatus(@Param("creditStatus") String creditStatus);

    /**
     * 统计债权总金额
     * 
     * @param creditStatus 债权状态
     * @return 债权总金额
     */
    public java.math.BigDecimal sumCreditAmountByStatus(@Param("creditStatus") String creditStatus);

    /**
     * 新增数字债权凭证
     * 
     * @param digitalCredit 数字债权凭证
     * @return 结果
     */
    public int insertDigitalCredit(DigitalCredit digitalCredit);

    /**
     * 修改数字债权凭证
     * 
     * @param digitalCredit 数字债权凭证
     * @return 结果
     */
    public int updateDigitalCredit(DigitalCredit digitalCredit);

    /**
     * 更新债权状态
     * 
     * @param creditId 债权ID
     * @param creditStatus 新状态
     * @param updateBy 更新者
     * @return 结果
     */
    public int updateCreditStatus(@Param("creditId") Long creditId, @Param("creditStatus") String creditStatus, @Param("updateBy") String updateBy);

    /**
     * 更新债权区块链哈希
     * 
     * @param creditId 债权ID
     * @param blockchainHash 区块链哈希
     * @param updateBy 更新者
     * @return 结果
     */
    public int updateCreditBlockchainHash(@Param("creditId") Long creditId, @Param("blockchainHash") String blockchainHash, @Param("updateBy") String updateBy);

    /**
     * 更新数字签名
     * 
     * @param creditId 债权ID
     * @param digitalSignature 数字签名
     * @return 结果
     */
    public int updateDigitalSignature(@Param("creditId") Long creditId, @Param("digitalSignature") String digitalSignature, @Param("updateBy") String updateBy);

    /**
     * 更新数字债权状态
     * 
     * @param creditId 债权ID
     * @param creditStatus 新状态
     * @param updateBy 更新者
     * @return 结果
     */
    public int updateDigitalCreditStatus(@Param("creditId") Long creditId, @Param("creditStatus") String creditStatus, @Param("updateBy") String updateBy);

    /**
     * 验证债权完整性
     * 
     * @param creditId 债权ID
     * @return 验证结果
     */
    public boolean validateCreditIntegrity(@Param("creditId") Long creditId);

    /**
     * 根据状态查询数字债权凭证
     * 
     * @param creditStatus 债权状态
     * @return 数字债权凭证集合
     */
    public List<DigitalCredit> selectDigitalCreditByStatus(@Param("creditStatus") String creditStatus);

    /**
     * 检查债权编号唯一性
     * 
     * @param creditNumber 债权编号
     * @return 是否唯一
     */
    public boolean checkCreditNumberUnique(@Param("creditNumber") String creditNumber);

    /**
     * 删除数字债权凭证
     * 
     * @param creditId 数字债权凭证主键
     * @return 结果
     */
    public int deleteDigitalCreditByCreditId(Long creditId);

    /**
     * 批量删除数字债权凭证
     * 
     * @param creditIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteDigitalCreditByCreditIds(Long[] creditIds);
}