package com.brilliance.isc.mda.dao;

import com.brilliance.isc.bo.Lgb;
import com.brilliance.isc.model.lgb.LgbPageVo;
import com.brilliance.isc.model.lgb.LgoVo;
import com.brilliance.isc.vo.manager.LgbInfoVo;
import com.brilliance.isc.vo.manager.LgbStmVo;
import com.brilliance.isc.vo.manager.ReqLgbVo;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * (Lgb)表数据库访问层
 *
 * @author makejava
 * @since 2023-01-11 16:42:40
 */
public interface LgbMapper {

    int insert(Lgb record);

    int insertSelective(Lgb record);

    int updateByPrimaryKeySelective(Lgb record);

    int updateByPrimaryKey(Lgb record);

    int deleteByPrimaryKey(Lgb record);

    int deleteByIds(Collection<Object> collection);

    Lgb selectByPrimaryKey(Lgb record);

    int dyncDelete(Map<String,Object> dyncMap);

    List<Lgb> dyncRead(Map<String,Object> dyncMap);

    List<LgbStmVo> getLgbStm(ReqLgbVo reqLgbVo);

    Lgb selectByInr(@Param("inr") String inr);

    Lgb selectByInrAndTyp(@Param("inr") String inr);

    /**
     * 通过extkey查询pty inr数据
     *
     * @param extkey
     * @return pty inr
     */
    String getInrFromPty(@Param("extkey") String extkey);

    /**
     * 通过pty inr查询lgb inr数据
     *
     * @param  ptyinr
     * @return lgb inr
     */
    String getLgbInrFromPtyInr(@Param("ptyinr") String ptyinr);

    /**
     * 分页查询指定行数据
     * @return 对象列表
     */
    List<LgbPageVo> queryAllByIdFromLgbAndLga(@Param("inr") String ptyinr);

    /**
     * 分页查询指定行数据
     *
     * @param inr lgb表的inr
     * @return 对象列表
     */
    List<LgbPageVo> queryPageByIdFromLgbAndLga(@Param("inr") String inr);

    /**
     * 通过lgb inr查询数据
     *查询额度明细(lgo表)
     * @param  inr
     * @return 对象列表
     */
    LgbPageVo queryByIdFromLgbAndLga(@Param("inr") String inr);

    /**
     * 通过lgb inr查询数据
     *查询额度明细(lgo表)
     * @param  lgbinr
     * @return 对象列表
     */
    List<LgoVo> queryByIdFromLgo(@Param("lgbinr") String lgbinr);

    /**
     * 统计总行数
     *
     * @param lgb 查询条件
     * @return 总行数
     */
    long count(Lgb lgb);

    /**
     * 向lgb表插入数据
     * @param lgbPageVo 实例对象
     * @return 影响行数
     */
    int insert(LgbPageVo lgbPageVo);

    /**
     * 通过lgb inr向lga表插入数据
     * @param lgbPageVo 实例对象
     * @return 影响行数
     */
    int insertLgaFromLgb(LgbPageVo lgbPageVo);


    /**
     * 从队列中获取lgb主键
     * @return 主键数
     */
    String queryLgbKey();

    /**
     * 从队列中获取lga主键
     * @return 主键数
     */
    String queryLgaKey();

//    /**
//     * 批量新增或按主键更新数据（MyBatis原生foreach方法）
//     *
//     * @param entities List<Lgb> 实例对象列表
//     * @return 影响行数
//     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常，请自行校验入参
//     */
//    int insertOrUpdateBatch(@Param("entities") List<Lgb> entities);

    /**
     * 修改数据
     * @param lgbPageVo 实例对象
     * @return 影响行数
     */
    int update(LgbPageVo lgbPageVo);

    /**
     * 通过lgb inr查询lga inr数据
     * @param  inr
     * @return lgb inr
     */
    String getLgaInrFromLgbInr(@Param("inr") String inr);

    /**
     * 通过lgb inr删除lga表数据
     * @param inr
     * @return 影响行数
     */
    int deleteLgaDataFromLgb(@Param("inr") String inr);

    /**
     * 通过lgb inr删除lgb表数据
     * @param inr
     * @return 影响行数
     */
    int deleteById(@Param("inr") String inr);

    /**
     * 通过额度类型和额度对应的当事人PTY表主键查询lgb表数据
     * @param typ 额度类型
     * @param ptyinr 额度对应的当事人PTY表主键
     * @return 对象
     */
    Lgb queryLgbByPtyInrAndTyp(@Param("typ") String typ, @Param("ptyinr") String ptyinr);

    Lgb queryLgbByPtyInrAndTypAndSta(@Param("typ") String typ, @Param("ptyinr") String ptyinr, @Param("sta") String sta);

}

