package org.dromara.payment.merchant.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.payment.api.merchant.domain.RemoteBusMerchantAccountVo;
import org.dromara.payment.merchant.domain.BusMerchantAccount;
import org.dromara.payment.merchant.domain.bo.BusMerchantAccountBo;
import org.dromara.payment.merchant.domain.vo.BusMerchantAccountVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.payment.operator.domain.BusOperatorAccount;
import org.dromara.payment.operator.domain.bo.BusOperatorAccountBo;
import org.dromara.payment.operator.domain.vo.BusOperatorAccountVo;

import java.util.List;

/**
 * 商户资金账户Mapper接口
 *
 * @author LionLi
 * @date 2024-04-03
 */
public interface BusMerchantAccountMapper extends BaseMapperPlus<BusMerchantAccount, BusMerchantAccountVo> {
    /**
     * 获取商户的资金账户
     * @param merId 商户id
     * @param sydId 服务商id
     * @return
     */
    public List<BusMerchantAccountVo> getAccByMerIdAndSydId(@Param("merId") Long merId,@Param("sydId") Long sydId);

    /**
     * 查询结算中心下商户默认的资金账户
     * @author 张涛
     * @date 2021年8月25日
     * @param sydId 结算中心id
     * @param merId 商户id
     * @return
     */
    public List<BusMerchantAccountVo> selectByMerIdAndSydId(@Param("sydId") Long sydId,@Param("merId") long merId,@Param("bankType") String bankType);

    /**
     * 查询资金账户
     * @author 张涛
     * @date 2021年9月9日
     * @param accId 银行账户id
     * @return
     */
    public BusMerchantAccountVo selectByAccId(@Param("accId") int accId);

    /**
     * 新增虚拟银行账号
     * @return 结果
     */
    public int insertAccount(BusMerchantAccount account);

    /**
     * 修改商户开票金额
     * @author 张涛
     * @date 2021年9月2日
     * @param sydId 结算中心id
     * @param merId 商户id
     * @param invoice 开票金额
     * @return
     */
    public Integer updateInvoiceAmount(@Param("sydId") Long sydId,@Param("merId") long merId,@Param("invoice") long invoice,@Param("bankType") String bankType);

    /**
     * 修改商户可开票已结算金额
     * @author 张涛
     * @date 2021年9月2日
     * @param sydId 结算中心id
     * @param merId 商户id
     * @param invoice 开票金额
     * @return
     */
    public Integer updateInvoiceSettlement(@Param("sydId") Long sydId,@Param("merId") long merId,@Param("invoice") long invoice,@Param("bankType") String bankType);

    /**
     * 根据银行账户id更新
     * @author 张涛
     * @date 2021年9月6日
     * @param record
     * @return
     */
    public Integer updateByAccId(BusMerchantAccount record);

    /**
     * 银行账户加锁
     * @author 张涛
     * @date 2021年9月6日
     * @param accId 银行账户id
     * @return
     */
    public Integer lock(@Param("accId") int accId);

    /**
     * 银行账户加锁
     * @author 张涛
     * @date 2021年9月6日
     * @return
     */
    public Integer lockByMerId(@Param("sydId") Long sydId,@Param("merId") long merId,@Param("bankType") String bankType);

    /**
     * 银行账户解锁
     * @author 张涛
     * @date 2021年9月6日
     * @return
     */
    public Integer unlockByMerId(@Param("sydId") Long sydId,@Param("merId") long merId,@Param("bankType") String bankType);

    /**
     * 递增或递减账户余额
     * @author 张涛
     * @date 2021年9月7日
     * @param amount 变动金额（减为复数）
     * @return
     */
    public Integer updateBalance(@Param("sydId") Long sydId,@Param("merId") long merId,@Param("amount") long amount,@Param("bankType") String bankType);

    /**
     * 递增或递减冻结金额
     * @author 张涛
     * @date 2021年9月7日
     * @param amount 变动金额（减为复数）
     * @return
     */
    public Integer updateFrozen(@Param("sydId") Long sydId,@Param("merId") long merId,@Param("amount") long amount,@Param("bankType") String bankType);

    /**
     * 递增或递减已结算金额
     * @author 张涛
     * @date 2021年9月7日
     * @param amount 变动金额（减为复数）
     * @return
     */
    public Integer updateSettlement(@Param("sydId") Long sydId,@Param("merId") long merId,@Param("amount") long amount,@Param("bankType") String bankType);

    /**
     * 修改商户开票金额
     * @author 张涛
     * @date 2021年9月2日
     * @param invoice 开票金额
     * @return
     */
    public Integer updateInvoiceAmountByAccId(@Param("accId") int accId,@Param("invoice") long invoice);

    /**
     * 修改商户可开票已结算金额
     * @author 张涛
     * @date 2021年9月2日
     * @param invoice 开票金额
     * @return
     */
    public Integer updateInvoiceSettlementByAccId(@Param("accId") int accId,@Param("invoice") long invoice);

    /**
     * 递增或递减账户余额
     * @author 张涛
     * @date 2021年9月7日
     * @param amount 变动金额（减为复数）
     * @return
     */
    public Integer updateBalanceByAccId(@Param("accId") int accId,@Param("amount") long amount);

    /**
     * 递增或递减冻结金额
     * @author 张涛
     * @date 2021年9月7日
     * @param amount 变动金额（减为复数）
     * @return
     */
    public Integer updateFrozenByAccId(@Param("accId") int accId,@Param("amount") long amount);

    /**
     * 递增或递减已结算金额
     * @author 张涛
     * @date 2021年9月7日
     * @param amount 变动金额（减为复数）
     * @return
     */
    public Integer updateSettlementByAccId(@Param("accId") int accId,@Param("amount") long amount);




    public List<BusMerchantAccountVo>  selectMerAccountLists(@Param("bo") BusMerchantAccountBo bo, @Param("page") Page<BusOperatorAccount> page);

}
