package cn.pluss.platform.merchant;

import cn.pluss.platform.dto.MerchantRateNewDTO;
import cn.pluss.platform.entity.MerchantChannelStatus;
import cn.pluss.platform.entity.MerchantRateNew;
import cn.pluss.platform.vo.MerchantRateNewVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 商户费率表(新) 服务类
 * </p>
 *
 * @author Djh
 * @since 2021-08-09
 */
public interface MerchantRateNewService extends IService<MerchantRateNew> {

    void passD0(String merchantId);

    void passD0(List<String> merchantIdList);

    /**
     * @description:获取商户的费率
     * @date: 2021/8/20 14:18
     * @param merchantCode: 商户编号
     * @param payWay: 支付方式
     * @param orderAmt:  订单金额
     * @return java.math.BigDecimal
     */
    BigDecimal getMchRate(String merchantCode,String payWay,Double orderAmt);

    /**
     * 调用的方法，获取商户的费率信息
     * @param userId 商户的id
     *
     * @return  费率信息
     */
    Map<String, Object> apiGetRate(String userId);

    Page<Map<String, Object>> pageData(Page<Object> page, Map<String, Object> condition);

    /**
     * app修改费率或提交费率修改申请
     * @param param
     */
    void apiChangeMerchantRateNew(MerchantRateNewDTO param);

    /**
     * 修改费率或提交费率修改申请
     * @param param     费率参数
     * @param d1        d1进件信息
     * @param d0        d0进件信息
     */
    void changeMerchantRateNew(MerchantRateNewDTO param, MerchantChannelStatus d1, MerchantChannelStatus d0);

    MerchantRateNewVO getChannelRate(String channel, String merchantCode);

    /**
     * 根据用户id获取费率信息
     * @param userId    用户id
     * @return 费率信息
     */
    MerchantRateNew getByUserId(String userId, String channel);

    /**
     * 根据商编获取费率信息
     * @param merchantCode  商编
     * @return 费率信息
     */
    MerchantRateNew getByMerchantCode(String merchantCode, String channel);

    /**
     * 获取对应支付方式下，费率等级对应的费率值
     * @param rateLevel 费率等级
     * @param payWay    支付方式
     * @return  费率值
     */
    double getRate(String rateLevel, String payWay,Double orderAmt);

    /**
     * 获取微信支付，费率等级对应的费率值
     * @param rateLevel 费率等级
     * @return  费率值
     */
    double getWxRate(String rateLevel,Double orderAmt);

    /**
     * 获取支付宝支付，费率等级对应的费率值
     * @param rateLevel 费率等级
     * @return  费率值
     */
    double getAliRate(String rateLevel,Double orderAmt);

    /**
     * 获取银联支付，费率等级对应的费率值
     * @param rateLevel 费率等级
     * @return  费率值
     */
    double getBankRate(String rateLevel,Double orderAmt);

    /**
     * 获取银联支付(大于 1000)，费率等级对应的费率值
     * @param rateLevel 费率等级
     * @return  费率值
     */
    double getBankRateLarge(String rateLevel,Double orderAmt);

    /**
     * @description:根据订单以及费率等级获取商户费率
     * @date: 2021/8/19 16:48
     * @param payTypeCode: 支付方式code
     * @param orderAmt: 订单金额
     * @param userId:  用户ID
     * @return double
     */
//    BigDecimal getMercOrderRate(String payTypeCode,Double orderAmt,String userId);
}
