package org.dromara.payment.sys.mapper;

import org.apache.ibatis.annotations.Param;
import org.dromara.payment.sys.domain.SysSydAccount;
import org.dromara.payment.sys.domain.vo.SysSydAccountVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;

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

/**
 * 服务商账户Mapper接口
 *
 * @author LionLi
 * @date 2024-03-26
 */
public interface SysSydAccountMapper extends BaseMapperPlus<SysSydAccount, SysSydAccountVo> {
    /**
     * 查询税源地虚拟银行账号
     *
     * @param id 税源地虚拟银行账号ID
     * @return 税源地虚拟银行账号
     */
    public SysSydAccount selectSysSydAccountById(Long id);

    /**
     * 查询税源地虚拟银行账号列表
     *
     * @param sysSydAccount 税源地虚拟银行账号
     * @return 税源地虚拟银行账号集合
     */
    public List<SysSydAccount> selectSysSydAccountList(SysSydAccount sysSydAccount);

    /**
     * 新增税源地虚拟银行账号
     *
     * @param sysSydAccount 税源地虚拟银行账号
     * @return 结果
     */
    public int insertSysSydAccount(SysSydAccount sysSydAccount);

    /**
     * 修改税源地虚拟银行账号
     *
     * @param sysSydAccount 税源地虚拟银行账号
     * @return 结果
     */
    public int updateSysSydAccount(SysSydAccount sysSydAccount);

    /**
     * 删除税源地虚拟银行账号
     *
     * @param id 税源地虚拟银行账号ID
     * @return 结果
     */
    public int deleteSysSydAccountById(Long id);

    /**
     * 批量删除税源地虚拟银行账号
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteSysSydAccountByIds(String[] ids);

    /**
     * 修改结算中心开票金额
     * @author 张涛
     * @date 2021年9月2日
     * @param sydId 结算中心id
     * @param accType 账户类型（0:主账户 1:个人服务费账户）
     * @param invoice 开票金额
     * @return
     */
    public Integer updateInvoiceAmount(@Param("sydId") Integer sydId, @Param("accType") short accType, @Param("invoice") long invoice, @Param("bankType") String bankType);

    /**
     * 递增或递减账户余额
     * @author 张涛
     * @date 2021年9月7日
     * @param sydId 结算中心id
     * @param accType 账户类型（0:主账户 1:个人服务费账户）
     * @param amount 变动金额（减为复数）
     * @return
     */
    public Integer updateBalance(@Param("sydId") Long sydId,@Param("accType") short accType,@Param("amount") long amount,@Param("bankType") String bankType);

    /**
     * 递增或递减已结算金额
     * @author 张涛
     * @date 2021年9月7日
     * @param sydId 结算中心id
     * @param accType 账户类型（0:主账户 1:个人服务费账户）
     * @param amount 变动金额（减为复数）
     * @return
     */
    public Integer updateSettlement(@Param("sydId") Long sydId,@Param("accType") short accType,@Param("amount") long amount,@Param("bankType") String bankType);

    /**
     * 递增或递减冻结金额
     * @author 张涛
     * @date 2021年9月7日
     * @param sydId 结算中心id
     * @param accType 账户类型（0:主账户 1:个人服务费账户）
     * @param amount 变动金额（减为复数）
     * @return
     */
    public Integer updateFrozen(@Param("sydId") Long sydId,@Param("accType") short accType,@Param("amount") long amount,@Param("bankType") String bankType);

    /**
     * 查询结算中心的默认账户
     * @author 张涛
     * @date 2021年9月9日
     * @param sydId 结算中心id
     * @param accType 账户类型（0:主账户 1:个人服务费账户）
     * @return
     */
    public List<SysSydAccount> selectSysSydAccountBySydId(@Param("sydId") Long sydId,@Param("accType") Short accType,@Param("bankType") String bankType);

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

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

    /**
     * 修改结算中心开票金额
     * @author 张涛
     * @date 2021年9月2日
     * @param invoice 开票金额
     * @return
     */
    public Integer updateInvoiceAmountByAccId(@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 updateSettlementByAccId(@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);


    public Long selectSysdAccount(Map map);

}
