package com.jeequan.jeepay.core.model.applyment;

import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;
import com.jeequan.jeepay.core.constants.CS;
import com.jeequan.jeepay.core.exception.BizException;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeSet;

@Data
@EqualsAndHashCode(callSuper = true)
public class YspayApplymentInfo extends ApplymentBasicInfo {

    /** 控制人是否同法人 **/
    protected String isControlToLegal;
    /** 实际控制人姓名 **/
    protected String controlName;
    /** 实际控制人证件号 **/
    protected String controlCertNo;
    /** 实际控制人证件起始日期,格式：YYYYMMDD **/
    protected String controlCertBgn;
    /** 实际控制人证件有效期,格式：YYYYMMDD **/
    protected String controlCertExpire;
    /** 实际控制人证件地址 **/
    protected String controlAddr;


    /** 是否非法人结算 Y是 N否，默认否 */
    protected String isUncrpSett;
    /** 自定义结算账户名 */
    protected String diySettAccountName;
    /** 银行预留手机号,非法人结算必填 */
    protected String bankMobile;
    /** 开户证件号,默认法人证件号,非法人结算必填 */
    protected String openCertNo;
    /** 结算非法人地址 **/
    protected String settleAuthAddress;
    /** 结算授权照片,非法人结算必填 **/
    protected String settleAuthLetterPhoto;
    /** 法人手持结算授权书,非法人结算必填 **/
    protected String settleAuthLetterHandlePhoto;

    /** 是否提供备用结算账户信息 */
    protected String isOtherAccountInfo;
    /** 备用结算账户类型,11 对私 21 对公 23 对公存折 24 单位结算卡  **/
    protected String standByStlAccType;
    /** 备用结算账号 **/
    protected String standByStlAccNo;
    /** 备用结算户名 **/
    protected String standByStlAccNm;
    /** 备用结算账户开户行支行编号 **/
    protected String standByBankSubCode;

    protected String standByAccountBankName;
    /** 备用账户结算银行开户支行区域编码 **/
    protected JSONArray standByAccountBankBranchAreaCode;
    /** 备用结算账户卡号面 **/
    protected String standByStlAccCardImg;


    /** 客户经理名称 **/
    protected String cusMgrNm;


    /** 法人电话号 **/
    protected String legalPersonPhone;

    /** 行别编号 **/
    protected String bankType;

    /** 最低结算金额 **/
    protected BigDecimal lowestStlAmt;

    /** 开户行行号 **/
    protected String openAccBanktype;

    /** 开户支行联行号 **/
    protected String bankSubCode;

    /** 是否为法人结算 0-否 1-是 **/
    protected String codeLegalPersonAcc;

    /** 结算非法人姓名 **/
    protected String unincorporatedName;

    /** 是否为法人信息 **/
    protected String isLegalInfo;

    /** 开户行省 **/
    protected String openAccProvince;

    /** 开户行市 **/
    protected String openAccCity;

    /** 商户归属省 **/
    protected String mercProv;

    /** 商户归属市 **/
    protected String mercCity;

    /** 商户归属区 **/
    protected String mercArea;

    /** 结算卡反面照 **/
    protected String settAccountBankImg2;

    /** 收单协议盖章页照片 **/
    protected String acquiringAgreementPhoto;

    /** 其他材料照片1 **/
    protected String other1;

    /** 结算方式 1- T1/D1 2-D0 */
    protected String settAccountCut;

    /**
     * 商户类型
     */
    @JSONField(serialize = false)
    public String getYsMerchantType() {
        if (this.merchantType == 1) {   // 个人
            return "2";
        }else if (this.merchantType == 2) { // 个体工商
            return "3";
        }else if (this.merchantType == 3) { // 企业
            return "4";
        }
        return null;
    }

    @JSONField(serialize = false)
    public boolean isPersonal(){
        // 个人
        return this.merchantType == 1;
    }

    /** 结算账户类型,11 对私 21 对公 23 对公存折 24 单位结算卡 **/
    @JSONField(serialize = false)
    public String getYsSettAccountType(String settAccountType){
        if ("B".equals(settAccountType)) {
            // 对公
            return "21";
        }else if ("B2".equals(settAccountType)) {
            // 对公存折
            return "23";
        } else if ("C".equals(settAccountType)) {
            // 对私
            return "11";
        } else if ("D".equals(settAccountType)) {
            // 单位结算卡
            return "24";
        }
        return null;
    }

    public String convertDate(String dateStr) {
        if ("长期".equals(dateStr)) {
            return "29991231";
        }else {
            dateStr = dateStr.replace("-", "");
        }
        return dateStr;
    }

    /**
     * 合同签约申请的  费率配置参数
     * 结算方式 settType 1- T1/D1 2-D0
     */
    public static JSONObject convertFeeJSON(List<PaywayFee> paywayFeeList, String settType) {

        if (CollUtil.isEmpty(paywayFeeList)) {
            throw new BizException("请配置费率");
        }

        // D0
        if (settType.contains("3")) {
            return paywayFeeList.stream().filter(r -> CS.PAY_WAY_CODE.D0.equals(r.getWayCode()))
                    .map(r -> {
                        // 取D1结算费率
                        JSONObject rateJSON = new JSONObject();
                        rateJSON.put("rateType", "0"); // 默认为百分比费率
                        rateJSON.put("rateFee", convertRate(r.getFeeRate())); // 费率值
                        rateJSON.put("rateBottom", "1"); // 默认封底金额
                        return rateJSON;
                    }).findFirst().orElseThrow(() -> new BizException("未配置D0手续费费率"));
        }

        // D1
        else if (settType.equals("2")) {
            return paywayFeeList.stream().filter(r -> CS.PAY_WAY_CODE.D1.equals(r.getWayCode()))
                    .map(r -> {
                        // 取D1结算费率
                        JSONObject rateJSON = new JSONObject();
                        rateJSON.put("rateType", "0"); // 默认为百分比费率
                        rateJSON.put("rateFee", convertRate(r.getFeeRate())); // 费率值
                        rateJSON.put("rateBottom", "1"); // 默认封底金额
                        return rateJSON;
                    }).findFirst().orElseGet(() -> {
                        // 取D1结算费率
                        JSONObject d1FeeJSON = new JSONObject();
                        d1FeeJSON.put("rateType", "0"); // 默认为百分比费率
                        // 基本的D1费率值
                        d1FeeJSON.put("rateFee", "0.01"); // 费率值
                        d1FeeJSON.put("rateBottom", "1"); // 默认封底金额
                        return d1FeeJSON;
                    });
        }

        // T1
        else if (settType.equals("1")) {
            return genCodeScanT1FeeJSON(paywayFeeList);
        }

        return new JSONObject();
    }



    // 扫码工作日到账费率
    private static JSONObject genCodeScanT1FeeJSON(List<PaywayFee> paywayFeeList) {
        JSONObject codeScanT1FeeJSON = new JSONObject();

        JSONObject wxPayFeeJson = new JSONObject(); // 微信费率
        JSONObject aliPayFeeJson = new JSONObject(); // 支付宝费率
        JSONObject bank1debitFeeJson = new JSONObject(); // 银联一档借记卡扫码费率(>1000)
        JSONObject bank2debitFeeJson = new JSONObject(); // 银联二档借记卡扫码费率(<=1000)
        JSONObject bank1creditFeeJson = new JSONObject(); // 银联一档贷记卡扫码费率(>1000)
        JSONObject bank2creditFeeJson = new JSONObject(); // 银联二档贷记卡扫码费率(<=1000)

        // 费率设置列表
        for (PaywayFee item : paywayFeeList) {
            if (PaywayFee.FEE_TYPE_SINGLE.equals(item.getFeeType())) {
                if (item.getWayCode().startsWith("WX_")) {
                    wxPayFeeJson.put("rateType", "0"); // 默认为百分比费率
                    wxPayFeeJson.put("rateFee", convertRate(item.getFeeRate())); // 费率值
                    wxPayFeeJson.put("rateBottom", "1"); // 默认封底金额
                }

                // 支付宝费率
                if (item.getWayCode().startsWith("ALI_")) {
                    aliPayFeeJson.put("rateType", "0"); // 默认为百分比费率
                    aliPayFeeJson.put("rateFee", convertRate(item.getFeeRate())); // 费率值
                    aliPayFeeJson.put("rateBottom", "1"); // 默认封底金额
                }
            }

            // 阶梯费率
            if ((item.getWayCode().startsWith("UP_") || item.getWayCode().startsWith("YSF_")) && PaywayFee.FEE_TYPE_LEVEL.equals(item.getFeeType())) {

                // 借记卡费率
                if(CollUtil.isNotEmpty(item.getLevelList())){
                    // 银联二档借记卡扫码费率(<=1000)
                    bank2debitFeeJson.put("rateType","0");// 收费方式  只支持0按百分比
                    bank2debitFeeJson.put("rateFee", convertRate(item.getLevelList().get(0).getFeeRate())); // 借记卡手续费费率（单笔交易≤1000元） 参数单位为‰
                    bank2debitFeeJson.put("rateBottom", "1"); // 借记卡手续费封底  单位：分
                    bank2debitFeeJson.put("rateTop", "999900"); // 借记卡手续费封顶  单位：分

                    // 银联一档借记卡扫码费率(>1000)
                    bank1debitFeeJson.put("rateType","0");// 收费方式  只支持0按百分比
                    bank1debitFeeJson.put("rateFee", convertRate(item.getLevelList().get(1).getFeeRate())); // 借记卡手续费费率（单笔交易>1000元） 参数单位为‰
                    bank1debitFeeJson.put("rateBottom", "1"); // 借记卡手续费封底  单位：分
                    bank1debitFeeJson.put("rateTop", "999900"); // 借记卡手续费封顶, 不能高于999900  单位：分
                }

                // 贷记卡费率
                if(item.getCreditCardPaywayFee() != null && CollUtil.isNotEmpty(item.getCreditCardPaywayFee().getLevelList())){
                    List<PaywayFee> levelList = item.getCreditCardPaywayFee().getLevelList();
                    // 银联二档贷记卡扫码费率(<=1000)
                    bank2creditFeeJson.put("rateType","0");// 收费方式  只支持0按百分比
                    bank2creditFeeJson.put("rateFee", convertRate(levelList.get(0).getFeeRate())); // 借记卡手续费费率（单笔交易≤1000元） 参数单位为‰
                    bank2creditFeeJson.put("rateBottom", "1"); // 借记卡手续费封底  单位：分

                    // 银联一档贷记卡扫码费率(>1000)
                    bank1creditFeeJson.put("rateType","0");// 收费方式  只支持0按百分比
                    bank1creditFeeJson.put("rateFee", convertRate(levelList.get(1).getFeeRate())); // 借记卡手续费费率（单笔交易>1000元） 参数单位为‰
                    bank1creditFeeJson.put("rateBottom", "1"); // 借记卡手续费封底  单位：分

                }
            }

            // 线上费率使用同一个费率
            if (CS.PAY_WAY_CODE.SCAN.equals(item.getWayCode())) {
                wxPayFeeJson.put("rateType", "0"); // 默认为百分比费率
                wxPayFeeJson.put("rateFee", convertRate(item.getFeeRate())); // 费率值
                wxPayFeeJson.put("rateBottom", "1"); // 默认封底金额

                aliPayFeeJson.put("rateType", "0"); // 默认为百分比费率
                aliPayFeeJson.put("rateFee", convertRate(item.getFeeRate())); // 费率值
                aliPayFeeJson.put("rateBottom", "1"); // 默认封底金额

                // 银联二档借记卡扫码费率(<=1000)
                bank2debitFeeJson.put("rateType","0");// 收费方式  只支持0按百分比
                bank2debitFeeJson.put("rateFee", convertRate(item.getFeeRate())); // 借记卡手续费费率（单笔交易≤1000元） 参数单位为‰
                bank2debitFeeJson.put("rateBottom", "1"); // 借记卡手续费封底  单位：分
                bank2debitFeeJson.put("rateTop", "999900"); // 借记卡手续费封顶  单位：分

                // 银联一档借记卡扫码费率(>1000)
                bank1debitFeeJson.put("rateType","0");// 收费方式  只支持0按百分比
                bank1debitFeeJson.put("rateFee", convertRate(item.getFeeRate())); // 借记卡手续费费率（单笔交易>1000元） 参数单位为‰
                bank1debitFeeJson.put("rateBottom", Math.max(item.getMinFee(), 1) + ""); // 借记卡手续费封底  单位：分
                bank1debitFeeJson.put("rateTop", "999900"); // 借记卡手续费封顶, 不能高于999900  单位：分

                // 银联二档贷记卡扫码费率(<=1000)
                bank2creditFeeJson.put("rateType","0");// 收费方式  只支持0按百分比
                bank2creditFeeJson.put("rateFee", convertRate(item.getFeeRate())); // 贷记卡手续费费率（单笔交易≤1000元） 参数单位为‰
                bank2creditFeeJson.put("rateBottom", "1"); // 贷记卡手续费封底  单位：分

                // 银联一档贷记卡扫码费率(>1000)
                bank1creditFeeJson.put("rateType","0");// 收费方式  只支持0按百分比
                bank1creditFeeJson.put("rateFee", convertRate(item.getFeeRate())); //  贷记卡手续费费率（单笔交易>1000元） 参数单位为‰
                bank1creditFeeJson.put("rateBottom", "1"); // 贷记卡手续费封底  单位：分
            }
        }

        if (!wxPayFeeJson.containsKey("rateType")) throw new BizException("请配置微信单笔费率");
        if (!aliPayFeeJson.containsKey("rateType")) throw new BizException("请配置支付宝单笔费率");
        if (!bank1debitFeeJson.containsKey("rateType")) {
            // 配置默认费率
            bank1debitFeeJson.put("rateType","0");// 收费方式  只支持0按百分比
            bank1debitFeeJson.put("rateFee", "0.6"); // 借记卡手续费费率（单笔交易>1000元） 参数单位为‰
            bank1debitFeeJson.put("rateBottom", "1"); // 借记卡手续费封底  单位：分
            bank1debitFeeJson.put("rateTop", "999900"); // 借记卡手续费封顶, 不能高于999900  单位：分

//            throw new BizException("请配置借记卡 (金额>1000) 银联阶梯费率");
        };
        if (!bank2debitFeeJson.containsKey("rateType")) {
            // 配置默认费率
            bank2debitFeeJson.put("rateType","0");// 收费方式  只支持0按百分比
            bank2debitFeeJson.put("rateFee", "0.6"); // 借记卡手续费费率（单笔交易>1000元） 参数单位为‰
            bank2debitFeeJson.put("rateBottom", "1"); // 借记卡手续费封底  单位：分
            bank2debitFeeJson.put("rateTop", "999900"); // 借记卡手续费封顶, 不能高于999900  单位：分
//            throw new BizException("请配置借记卡 (金额<=1000) 银联阶梯费率");
        }

        if (!bank1creditFeeJson.containsKey("rateType")) {
            // 银联一档贷记卡扫码费率(>1000)
            bank1creditFeeJson.put("rateType","0");// 收费方式  只支持0按百分比
            bank1creditFeeJson.put("rateFee", "0.6"); // 借记卡手续费费率（单笔交易>1000元） 参数单位为‰
            bank1creditFeeJson.put("rateBottom", "1"); // 借记卡手续费封底  单位：分

//            throw new BizException("请配置贷记卡 (金额>1000) 银联阶梯费率");
        }

        if (!bank2creditFeeJson.containsKey("rateType")) {
            // 银联二档贷记卡扫码费率(<=1000)
            bank2creditFeeJson.put("rateType","0");// 收费方式  只支持0按百分比
            bank2creditFeeJson.put("rateFee", "0.60"); // 借记卡手续费费率（单笔交易≤1000元） 参数单位为‰
            bank2creditFeeJson.put("rateBottom", "1"); // 借记卡手续费封底  单位：分
            bank2creditFeeJson.put("rateTop", "1700"); // 借记卡手续费封顶  单位：分

//            throw new BizException("请配置贷记卡 (金额<=1000) 银联阶梯费率");
        }

        codeScanT1FeeJSON.put("wxPayFee", wxPayFeeJson);
        codeScanT1FeeJSON.put("aliPayFee", aliPayFeeJson);
        codeScanT1FeeJSON.put("bank1debitPayFee", bank1debitFeeJson);
        codeScanT1FeeJSON.put("bank2debitPayFee", bank2debitFeeJson);
        codeScanT1FeeJSON.put("bank1creditPayFee", bank1creditFeeJson);
        codeScanT1FeeJSON.put("bank2creditPayFee", bank2creditFeeJson);

        return codeScanT1FeeJSON;
    }

    /**
     * @author: xiaoyu
     * @date: 2022/7/21 9:38
     * @describe: 交易权限及费率配置参数
     */
    public static JSONObject convertPayConfig(List<PaywayFee> paywayFeeList) {
        JSONObject result = new JSONObject();
        // 费率设置列表
        if (CollectionUtils.isNotEmpty(paywayFeeList)) {
            // 交易权限
            ArrayList<String> list = new ArrayList<>();
            // 费率
            JSONObject feeJson = new JSONObject();

            paywayFeeList.forEach(item -> {
                String bizProductCode = "";
                switch (item.getWayCode()){
                    case CS.PAY_WAY_CODE.WX_LITE: bizProductCode = "1"; break;
                    case CS.PAY_WAY_CODE.WX_JSAPI: bizProductCode = "2"; break;
                    case CS.PAY_WAY_CODE.WX_BAR: bizProductCode = "3"; break;
                    case CS.PAY_WAY_CODE.ALI_QR: bizProductCode = "4"; break;
                    case CS.PAY_WAY_CODE.ALI_BAR: bizProductCode = "5"; break;
                    case CS.PAY_WAY_CODE.ALI_JSAPI: bizProductCode = "6"; break;
                    case CS.PAY_WAY_CODE.ALI_LITE: bizProductCode = "6"; break;
                    case CS.PAY_WAY_CODE.UP_BAR: bizProductCode = "8"; break;
                    case CS.PAY_WAY_CODE.YSF_JSAPI: bizProductCode = "9"; break;
                    case CS.PAY_WAY_CODE.UP_QR: bizProductCode = "7"; break;
                }
                if (StringUtils.isNotEmpty(bizProductCode)) {
                    list.add(bizProductCode);
                }
                if (PaywayFee.FEE_TYPE_SINGLE.equals(item.getFeeType())) {
                    // 微信费率
                    if (item.getWayCode().startsWith("WX_")) {
                        // [微信]默认为百分比费率
                        feeJson.put("rscanWxFeeType", "1");
                        // [微信]默认封底金额
                        feeJson.put("rscanWxFeeNum", "0");

                        feeJson.put("rscanWxFeeRate", convertRate(item.getFeeRate()) + "");
                    }
                    // 支付宝费率
                    if (item.getWayCode().startsWith("ALI_")) {
                        // [支付宝]默认为百分比费率
                        feeJson.put("rscanAliFeeType", "1");
                        // [支付宝]默认封底金额
                        feeJson.put("rscanAliFeeNum", "0");

                        feeJson.put("rscanAliFeeRate", convertRate(item.getFeeRate()) + "");
                    }
                }

                // 阶梯费率
                if ((item.getWayCode().startsWith("UP_") || item.getWayCode().startsWith("YSF_")) && PaywayFee.FEE_TYPE_LEVEL.equals(item.getFeeType())) {
                    // 银联借记卡一档费率类型 1-百分比
                    feeJson.put("rscanDebitType1", "1");
                    // 银联借记卡二档费率类型 1-百分比
                    feeJson.put("rscanDebitType2", "1");

                    // 银联贷记卡一档费率类型 1-百分比
                    feeJson.put("rscanCreditType1", "1");
                    // 银联贷记卡二档费率类型 1-百分比
                    feeJson.put("rscanCreditType2", "1");

                    // 借记卡费率
                    if(CollUtil.isNotEmpty(item.getLevelList())){

                        feeJson.put("rscanDebitNum2", convertRate(item.getLevelList().get(0).getFeeRate()) + ""); // 借记卡手续费费率（单笔交易≤1000元） 参数单位为‰
                        feeJson.put("rscanDebitMin2", item.getMinFee() + ""); // 借记卡手续费封底  单位：分
                        feeJson.put("rscanDebitMax2", item.getMaxFee() + ""); // 借记卡手续费封顶  单位：分

                        feeJson.put("rscanDebitNum1", convertRate(item.getLevelList().get(1).getFeeRate()) + ""); // 借记卡手续费费率（单笔交易>1000元） 参数单位为‰
                        feeJson.put("rscanDebitMin1", item.getMinFee() + ""); // 借记卡手续费封底  单位：分
                        feeJson.put("rscanDebitMax1", item.getMaxFee() + ""); // 借记卡手续费封顶  单位：分

                    }

                    // 贷记卡费率
                    if(item.getCreditCardPaywayFee() != null && CollUtil.isNotEmpty(item.getCreditCardPaywayFee().getLevelList())){

                        feeJson.put("rscanCreditNum2", convertRate(item.getCreditCardPaywayFee().getLevelList().get(0).getFeeRate()) + ""); // 贷记卡手续费费率 （单笔交易≤1000元） 参数单位为‰
                        feeJson.put("rscanCreditMin2", item.getMinFee() + ""); // 借记卡手续费封底  单位：分

                        feeJson.put("rscanCreditNum1", convertRate(item.getCreditCardPaywayFee().getLevelList().get(1).getFeeRate()) + ""); // 贷记卡手续费费率（单笔交易>1000元） 参数单位为‰
                        feeJson.put("rscanCreditMin1", item.getMinFee() + ""); // 借记卡手续费封底  单位：分

                    }
                }

            });

            if (CollUtil.isNotEmpty(list)) {
                // 开通类型排序去重复
                ArrayList<String> listCollect = new ArrayList<>(new TreeSet<>(list));
                String collect = String.join(",", listCollect);
                result.put("scanServiceOpen", collect);
            }
            result.put("easyFeeBean", feeJson);
        }
        return result;
    }


    /**
     * @author: xiaoyu
     * @date: 2022/7/21 9:38
     * @describe: 交易权限及费率配置参数
     */
    public static JSONObject convertApplymentPayConfig(List<PaywayFee> paywayFeeList) {
        JSONObject feeJson = new JSONObject();
        // 费率设置列表
        if (CollectionUtils.isNotEmpty(paywayFeeList)) {
            // 费率
            paywayFeeList.forEach(item -> {
                if (PaywayFee.FEE_TYPE_SINGLE.equals(item.getFeeType())) {
                    // 微信费率
                    if (item.getWayCode().startsWith("WX_")) {
                        feeJson.put("wechatSignRate", convertRate(item.getFeeRate()));
                        // [微信]默认封底金额
                        feeJson.put("wechatSignMin", "1");
                    }
                    // 支付宝费率
                    if (item.getWayCode().startsWith("ALI_")) {
                        feeJson.put("alipaySignRate", convertRate(item.getFeeRate()));
                        // [支付宝]默认封底金额
                        feeJson.put("alipaySignMin", "1");
                    }
                }

                // 阶梯费率
                if ((item.getWayCode().startsWith("UP_") || item.getWayCode().startsWith("YSF_")) && PaywayFee.FEE_TYPE_LEVEL.equals(item.getFeeType())) {
                    // 借记卡费率
                    if(CollUtil.isNotEmpty(item.getLevelList())){

                        feeJson.put("debitRate2", convertRate(item.getLevelList().get(0).getFeeRate())); // 借记卡手续费费率（单笔交易≤1000元） 参数单位为‰
                        feeJson.put("debitMin2", item.getMinFee() + ""); // 借记卡手续费封底  单位：分
                        feeJson.put("debitMax2", item.getMaxFee() + ""); // 借记卡手续费封顶  单位：分

                        feeJson.put("debitRate1", convertRate(item.getLevelList().get(1).getFeeRate())); // 借记卡手续费费率（单笔交易>1000元） 参数单位为‰
                        feeJson.put("debitMin1", item.getMinFee() + ""); // 借记卡手续费封底  单位：分
                        feeJson.put("debitMax1", item.getMaxFee() + ""); // 借记卡手续费封顶  单位：分

                    }

                    // 贷记卡费率
                    if(item.getCreditCardPaywayFee() != null && CollUtil.isNotEmpty(item.getCreditCardPaywayFee().getLevelList())){

                        feeJson.put("creditRate2", convertRate(item.getCreditCardPaywayFee().getLevelList().get(0).getFeeRate())); // 贷记卡手续费费率 （单笔交易≤1000元） 参数单位为‰
                        feeJson.put("creditMin2", item.getMinFee() + ""); // 借记卡手续费封底  单位：分

                        feeJson.put("creditRate1", convertRate(item.getCreditCardPaywayFee().getLevelList().get(1).getFeeRate())); // 贷记卡手续费费率（单笔交易>1000元） 参数单位为‰
                        feeJson.put("creditMin1", item.getMinFee() + ""); // 借记卡手续费封底  单位：分

                    }
                }

            });
        }
        return feeJson;
    }

    private static String convertRate(BigDecimal rate){
        return rate == null ? null : String.valueOf(rate.multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP));
    }

    @Override
    public String bankBranchNo() {
        return bankSubCode;
    }

    @Override
    public String bankAccountName() {
        return StringUtils.defaultString(getDiySettAccountName(), getIdcardName());
    }

    public String getSettAccountName() {
        if ("Y".equals(isUncrpSett)) {
            return settAccountName;
        } else {
            return idcardName;
        }
    }
}
