package com.ruoyi.credit.mapper;

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

/**
 * 银行机构Mapper接口
 * 
 * @author ruoyi
 * @date 2025-12-24
 */
public interface BankInstitutionMapper 
{
    /**
     * 查询银行机构
     * 
     * @param bankId 银行机构主键
     * @return 银行机构
     */
    public BankInstitution selectBankInstitutionByBankId(Long bankId);

    /**
     * 查询银行机构列表
     * 
     * @param bankInstitution 银行机构
     * @return 银行机构集合
     */
    public List<BankInstitution> selectBankInstitutionList(BankInstitution bankInstitution);

    /**
     * 新增银行机构
     * 
     * @param bankInstitution 银行机构
     * @return 结果
     */
    public int insertBankInstitution(BankInstitution bankInstitution);

    /**
     * 修改银行机构
     * 
     * @param bankInstitution 银行机构
     * @return 结果
     */
    public int updateBankInstitution(BankInstitution bankInstitution);

    /**
     * 删除银行机构
     * 
     * @param bankId 银行机构主键
     * @return 结果
     */
    public int deleteBankInstitutionByBankId(Long bankId);

    /**
     * 批量删除银行机构
     * 
     * @param bankIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteBankInstitutionByBankIds(Long[] bankIds);

    /**
     * 根据银行编码查询银行机构
     * 
     * @param bankCode 银行编码
     * @return 银行机构
     */
    public BankInstitution selectBankInstitutionByBankCode(String bankCode);

    /**
     * 根据银行类型查询银行机构列表
     * 
     * @param bankType 银行类型
     * @return 银行机构集合
     */
    public List<BankInstitution> selectBankInstitutionsByBankType(String bankType);

    /**
     * 查询合作状态为活跃的银行机构列表
     * 
     * @return 银行机构集合
     */
    public List<BankInstitution> selectActiveBankInstitutions();

    /**
     * 根据贷款金额范围查询匹配的银行机构
     * 
     * @param loanAmount 贷款金额
     * @return 银行机构集合
     */
    public List<BankInstitution> selectBankInstitutionsByLoanAmount(java.math.BigDecimal loanAmount);

    /**
     * 根据贷款期限查询匹配的银行机构
     * 
     * @param loanTermMonths 贷款期限(月)
     * @return 银行机构集合
     */
    public List<BankInstitution> selectBankInstitutionsByLoanTerm(Integer loanTermMonths);

    /**
     * 根据创建者账号类型查询银行机构列表
     * 
     * @param creatorAccountType 创建者账号类型
     * @return 银行机构集合
     */
    public List<BankInstitution> selectBankInstitutionsByCreatorAccountType(String creatorAccountType);

    /**
     * 根据当前用户权限查询银行机构列表 (支持账号过滤)
     * 
     * @param bankInstitution 银行机构查询条件
     * @param currentUserType 当前用户类型
     * @param currentUserName 当前用户名
     * @return 银行机构集合
     */
    public List<BankInstitution> selectBankInstitutionListWithPermission(BankInstitution bankInstitution, String currentUserType, String currentUserName);
}