package com.ruoyi.credit.mapper;

import java.util.List;
import com.ruoyi.credit.domain.ServicePeriodLoan;

/**
 * 服务周期贷款关联Mapper接口
 * 
 * @author ruoyi
 * @date 2025-12-24
 */
public interface ServicePeriodLoanMapper 
{
    /**
     * 查询服务周期贷款关联
     * 
     * @param linkId 服务周期贷款关联主键
     * @return 服务周期贷款关联
     */
    public ServicePeriodLoan selectServicePeriodLoanByLinkId(Long linkId);

    /**
     * 查询服务周期贷款关联列表
     * 
     * @param servicePeriodLoan 服务周期贷款关联
     * @return 服务周期贷款关联集合
     */
    public List<ServicePeriodLoan> selectServicePeriodLoanList(ServicePeriodLoan servicePeriodLoan);

    /**
     * 根据服务周期ID查询贷款关联列表
     * 
     * @param servicePeriodId 服务周期ID
     * @return 服务周期贷款关联集合
     */
    public List<ServicePeriodLoan> selectServicePeriodLoansByPeriodId(Long servicePeriodId);

    /**
     * 根据贷款ID查询服务周期关联
     * 
     * @param loanId 贷款ID
     * @return 服务周期贷款关联
     */
    public ServicePeriodLoan selectServicePeriodLoanByLoanId(Long loanId);

    /**
     * 新增服务周期贷款关联
     * 
     * @param servicePeriodLoan 服务周期贷款关联
     * @return 结果
     */
    public int insertServicePeriodLoan(ServicePeriodLoan servicePeriodLoan);

    /**
     * 修改服务周期贷款关联
     * 
     * @param servicePeriodLoan 服务周期贷款关联
     * @return 结果
     */
    public int updateServicePeriodLoan(ServicePeriodLoan servicePeriodLoan);

    /**
     * 删除服务周期贷款关联
     * 
     * @param linkId 服务周期贷款关联主键
     * @return 结果
     */
    public int deleteServicePeriodLoanByLinkId(Long linkId);

    /**
     * 批量删除服务周期贷款关联
     * 
     * @param linkIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteServicePeriodLoanByLinkIds(Long[] linkIds);

    /**
     * 根据服务周期ID删除所有贷款关联
     * 
     * @param servicePeriodId 服务周期ID
     * @return 结果
     */
    public int deleteServicePeriodLoanByPeriodId(Long servicePeriodId);

    /**
     * 根据银行机构ID查询贷款关联列表
     * 
     * @param bankInstitutionId 银行机构ID
     * @return 服务周期贷款关联集合
     */
    public List<ServicePeriodLoan> selectServicePeriodLoansByBankId(Long bankInstitutionId);

    /**
     * 根据审批状态查询贷款关联列表
     * 
     * @param approvalStatus 审批状态
     * @return 服务周期贷款关联集合
     */
    public List<ServicePeriodLoan> selectServicePeriodLoansByApprovalStatus(String approvalStatus);

    /**
     * 统计服务周期的贷款总额
     * 
     * @param servicePeriodId 服务周期ID
     * @return 贷款总额
     */
    public java.math.BigDecimal sumLoanAmountByPeriodId(Long servicePeriodId);

    /**
     * 查询即将到期的贷款（用于提醒）
     * 
     * @param days 提前天数
     * @return 即将到期的贷款列表
     */
    public List<ServicePeriodLoan> selectExpiringLoans(Integer days);
}