
package com.tmerclub.cloud.supplier.mapper;

import com.tmerclub.cloud.supplier.dto.SupplierWalletLogSearchDTO;
import com.tmerclub.cloud.supplier.model.SupplierWallet;
import com.tmerclub.cloud.supplier.vo.SupplierWalletVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 供应商钱包信息
 *
 * @author lhd
 * @date 2022-03-14 17:04:32
 */
public interface SupplierWalletMapper {

    /**
     * 保存商家钱包信息
     *
     * @param supplierWallet 商家钱包信息
     */
    void save(@Param("supplierWallet") SupplierWallet supplierWallet);

    /**
     * 根据供应商id获取钱包信息
     *
     * @param supplierId 供应商id
     * @param paySysType
     * @return 钱包信息
     */
    SupplierWalletVO getBySupplierId(@Param("supplierId") Long supplierId, @Param("paySysType") Integer paySysType);

    /**
     * 给商家钱包，添加未结算金额
     *
     * @param supplierId 供应商id
     * @param changeAmount
     * @param paySysType
     * @return
     */
    int addUnsettledAmount(@Param("supplierId") Long supplierId, @Param("changeAmount") Long changeAmount, @Param("paySysType") Integer paySysType);

    /**
     * 给供应商钱包，添加结算金额
     *
     * @param supplierId 供应商id
     * @param settledAmount
     * @param paySysType
     * @param isUpdateTotal
     * @return
     */
    int addSettledAmount(@Param("supplierId") Long supplierId,
                         @Param("settledAmount") Long settledAmount,
                         @Param("paySysType") Integer paySysType,
                         @Param("isUpdateTotal") boolean isUpdateTotal);

    /**
     * 给供应商钱包，减少结算金额
     *
     * @param supplierId 供应商id
     * @param settledAmount
     * @param paySysType
     * @return
     */
    int subSettledAmount(@Param("supplierId") Long supplierId, @Param("settledAmount") Long settledAmount, @Param("paySysType") Integer paySysType);

    /**
     * 锁定未结算金额
     *
     * @param supplierId
     * @param supplierRealRefundAmount
     * @param paySysType
     * @return
     */
    int subUnsettledAmount(@Param("supplierId") Long supplierId, @Param("supplierRealRefundAmount") Long supplierRealRefundAmount, @Param("paySysType") Integer paySysType);

    /**
     * 提现申请的时候增加冻结金额
     * @param supplierId 供应商id
     * @param changeAmount 冻结金额
     * @param paySysType
     * @return
     */
    int addFreezeAmount(@Param("supplierId") Long supplierId, @Param("changeAmount") Long changeAmount, @Param("paySysType") Integer paySysType);

    /**
     * 提现申请通过的时候/提现申请被拒绝的时候减少冻结金额
     * @param supplierId 供应商id
     * @param changeAmount 冻结金额
     * @param paySysType
     * @return
     */
    int subFreezeAmount(@Param("supplierId") Long supplierId, @Param("changeAmount") Long changeAmount, @Param("paySysType") Integer paySysType);

    /**
     * 获取所有商家钱包信息
     * @param supplierWalletLogSearchDTO
     * @param paySysType
     * @return 钱包信息
     */
    SupplierWalletVO getAllSupplier(@Param("supplierWalletLogSearchDTO") SupplierWalletLogSearchDTO supplierWalletLogSearchDTO, @Param("paySysType") Integer paySysType);

    /**
     * 分页获取供应商钱包
     * @param supplierWalletLogSearchDTO
     * @param paySysType
     * @return
     */
    List<SupplierWalletVO> listAllSupplierWallet(@Param("supplierWalletLogSearchDTO") SupplierWalletLogSearchDTO supplierWalletLogSearchDTO, @Param("paySysType") Integer paySysType);
}
