
package com.tmerclub.cloud.multishop.mapper;

import com.tmerclub.cloud.multishop.dto.ShopWalletLogSearchDTO;
import com.tmerclub.cloud.multishop.model.ShopWallet;
import com.tmerclub.cloud.multishop.vo.ShopWalletVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 商家钱包信息
 *
 * @author tmerclub
 * @date 2021-01-07 16:41:03
 */
public interface ShopWalletMapper {

    /**
     * 根据店铺ids获取商家钱包信息列表
     *
     * @param shopIds 店铺ids
     * @param paySysType
     * @return 商家钱包信息列表
     */
    List<ShopWalletVO> listByShopIds(@Param("shopIds") List<Long> shopIds, @Param("paySysType") Integer paySysType);

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

    /**
     * 更新商家钱包信息
     *
     * @param shopWallet 商家钱包信息
     * @return int
     */
    int update(@Param("shopWallet") ShopWallet shopWallet);

    /**
     * 根据店铺id获取钱包信息
     *
     * @param shopId 店铺id
     * @param paySysType 支付系统
     * @return 钱包信息
     */
    ShopWalletVO getByShopId(@Param("shopId") Long shopId, @Param("paySysType") Integer paySysType);

    /**
     * 给商家钱包，添加未结算金额
     *
     * @param shopId
     * @param changeAmount
     * @param paySysType 支付系统 0默认1通联
     * @return
     */
    int addUnsettledAmount(@Param("shopId") Long shopId, @Param("changeAmount") Long changeAmount, @Param("paySysType") Integer paySysType);

    /**
     * 锁定未结算金额
     *
     * @param shopId
     * @param shopRealRefundAmount
     * @param paySysType 支付系统 0默认1通联
     * @return
     */
    int subUnsettledAmount(@Param("shopId") Long shopId, @Param("shopRealRefundAmount") Long shopRealRefundAmount, @Param("paySysType") Integer paySysType);

    /**
     * 进行结算
     * 添加结算金额可用金额、结算总金额
     *
     * @param shopId
     * @param settledAmount
     * @param paySysType 支付系统 0默认1通联
     * @param isUpdateTotal 是否更新总结算金额
     * @return
     */
    int addSettledAmount(@Param("shopId") Long shopId,
                         @Param("settledAmount") Long settledAmount,
                         @Param("paySysType") Integer paySysType,
                         @Param("isUpdateTotal") boolean isUpdateTotal);

    /**
     * 给商家钱包，减少结算金额
     *
     * @param shopId
     * @param changeAmount
     * @param paySysType 支付系统 0默认1通联
     * @return
     */
    int subSettledAmount(@Param("shopId") Long shopId, @Param("changeAmount") Long changeAmount, @Param("paySysType") Integer paySysType);

    /**
     * 提现申请的时候增加冻结金额
     *
     * @param shopId
     * @param changeAmount
     * @param paySysType 支付系统 0默认1通联
     * @return
     */
    int addFreezeAmount(@Param("shopId") Long shopId, @Param("changeAmount") Long changeAmount, @Param("paySysType") Integer paySysType);

    /**
     * 提现申请通过的时候/提现申请被拒绝的时候减少冻结金额
     *
     * @param shopId
     * @param changeAmount
     * @param paySysType 支付系统 0默认1通联
     * @return
     */
    int subFreezeAmount(@Param("shopId") Long shopId, @Param("changeAmount") Long changeAmount, @Param("paySysType") Integer paySysType);

    /**
     * 获取所有商家钱包信息
     *
     * @param shopWalletLogSearchDTO
     * @param paySysType
     * @return 钱包信息
     */
    ShopWalletVO getAllShop(@Param("shopWalletLogSearchDTO") ShopWalletLogSearchDTO shopWalletLogSearchDTO, @Param("paySysType") Integer paySysType);

    /**
     * 获取所有店铺的钱包信息
     *
     * @param shopWalletLogSearchDTO
     * @param paySysType
     * @return
     */
    List<ShopWalletVO> listAllShopWallet(@Param("shopWalletLogSearchDTO") ShopWalletLogSearchDTO shopWalletLogSearchDTO, @Param("paySysType") Integer paySysType);

    /**
     * 获取店铺余额,不含分片
     *
     * @param shopId 店铺id
     * @param paySysType 支付系统 0默认1通联
     * @return
     */
    Long getSettlementAmountByShopId(@Param("shopId") Long shopId, @Param("paySysType") Integer paySysType);
}
