package com.huatek.busi.util;

import cn.hutool.core.util.StrUtil;

import java.math.BigDecimal;
import java.math.RoundingMode;
import org.apache.commons.lang3.StringUtils;

/**
 * gis评测计算公式
 */
public class GisFormulaCal {
    private static volatile GisFormulaCal gisFormulaCal = null;
    private GisFormulaCal(){}
    public static GisFormulaCal getInstance(){
        if(gisFormulaCal == null){
            synchronized (GisFormulaCal.class) {
                if(gisFormulaCal == null){
                    gisFormulaCal = new GisFormulaCal();
                }
            }
        }
        return gisFormulaCal;
    }

    /**
     * 计算额定电流
     * @param value
     * @return
     */
    public BigDecimal getEddl(String value) {
        BigDecimal val = Convert.createBigD("0");
        if(StrUtil.isNotBlank(value)) {
            val = Convert.str2BigDecimal(value).multiply(new BigDecimal(1000));
        }
        return val;
    }

    /**
     * 负荷
     * @param I_b 触头断开时的断开电流（KA）
     * @param I_n 触头额定断开电流（KA）
     * @return
     */
    public BigDecimal getFh(BigDecimal I_b, BigDecimal  I_n) {
        BigDecimal val = Convert.createBigD("0");
        if(Convert.isNotZero(I_n)) {
            val = I_b.divide(I_n,5,BigDecimal.ROUND_HALF_UP).multiply(Convert.str2BigDecimal("100")).setScale(2,BigDecimal.ROUND_HALF_UP);
        }
        return val;
    }

    /**
     * 导电回路电阻计算公式：r1=(导电回路电阻计算值）*e1*m4(运行数据权重）
     * @param v1 导电回路电阻计算值
     * @param v2 导电回路电阻权重e1
     * @param v3 运行数据权重 m4
     * @return BigDecimal
     */
    public BigDecimal calcValue(BigDecimal v1, BigDecimal v2,BigDecimal v3) {
        BigDecimal tmp = new BigDecimal(0);
        if(v2 != null) {
            tmp = v1.multiply(v2).setScale(4, RoundingMode.HALF_UP);
        }
        if(v3 != null) {
            tmp = tmp.multiply(v3).setScale(4, RoundingMode.HALF_UP);
        }
        return tmp;
    }

    /**
     * 升降计算方法
     * @param value 导电回路电阻(微欧)
     * @param UpOrDown 升降标识
     * @param a
     * @param b
     * @return BigDecimal
     */
    public BigDecimal formulaForUpAndDown(BigDecimal value, String UpOrDown, BigDecimal a, BigDecimal b) {
        BigDecimal val = Convert.createBigD("1");
        BigDecimal def = Convert.createBigD("0");
        BigDecimal val_1 = Convert.createBigD("1");
        if(null != value) {
            System.out.println(" 升降计算: +" + UpOrDown+"  a=" + a + ", b=" + b );
            if(StringUtils.isNotBlank(UpOrDown)) {
                if (Constant.DOWN.equals(UpOrDown)) {
                    if (value.compareTo(def) >= 0 && value.compareTo(a) < 0) {
                        val = val_1;
                        System.out.println("升降计算: (0<=N<a) down:  input_N=" + value + ", 计算结果系数：val=" + val);
                    } else if (value.compareTo(a) >= 0 && value.compareTo(b) < 0) {
                        val = (b.subtract(value)).divide(b.subtract(a), 5, BigDecimal.ROUND_HALF_UP);
                        System.out.println("升降计算: (a<=N<b) down:  input_N=" + value + ", 计算结果系数：val=" + val + "使用年限 a值 5， b值 30，已使用年限：12.775 计算方法：（30 - 12.775）/ （30 - 5）");
                    } else {
                        val = def;
                        System.out.println("升降计算: (N>b) down:  input_N=" + value + ", 计算结果系数：val=" + val);
                    }
                } else if (Constant.UP.equals(UpOrDown)) {
                    if (value.compareTo(def) >= 0 && value.compareTo(a) < 0) {
                        val = def;
                        System.out.println("升降计算: (0<=N<a) UP:  input_N=" + value + ", 计算结果系数：val=" + val);
                    } else if (value.compareTo(a) >= 0 && value.compareTo(b) < 0) {
                        val = (value.subtract(a)).divide(b.subtract(a), 5, BigDecimal.ROUND_HALF_UP);
                        System.out.println("升降计算: (a<=N<b) UP:  input_N=" + value + ", 计算结果系数：val=" + val);
                    } else {
                        val = val_1;
                        System.out.println("升降计算: (N>b) UP:  input_N=" + value + ", 计算结果系数：val=" + val);
                    }
                }
            } else {
                val = value;
                System.out.println("升降计算: 无升降值(1,2):  input_N=" + value + ", 计算结果系数：val=" + val);
            }
        }
        return val;
    }

    /**
     * 额定电流触头允许次数
     * @param I_b 触头断开时的断开电流（KA） PMS
     * @param I_n 触头额定断开电流（KA）标牌数据
     * @return
     */
    public BigDecimal getEdKdkcs(BigDecimal I_b, BigDecimal I_n, BigDecimal fh ) {

        System.out.println("N计算公式：(49.5/Ib)^3.46   Ib<11  KA");
        System.out.println("N计算公式：(223.5/Ib)^1.76  Ib>=11 KA");

        BigDecimal val = new BigDecimal("0");
        if(Convert.isNotEmptyForBigDecimal(I_b)) {
            if(Convert.getIsBetween(I_b, Convert.str2BigDecimal("0"), Convert.str2BigDecimal("11"))) {
                BigDecimal temp = Convert.str2BigDecimal("49.5").divide(I_b,10,BigDecimal.ROUND_HALF_UP);
                double a = Double.valueOf(temp.toString());
                val = new BigDecimal(Math.pow(a, 3.46)).setScale(10, BigDecimal.ROUND_HALF_UP);
                System.out.println("N计算公式：(49.5/Ib)^3.46 = (" + 49.5 +"/" + I_b + ")^3.46 =" + val );
            } else {
                BigDecimal temp = Convert.str2BigDecimal("223.5").divide(I_b,10,BigDecimal.ROUND_HALF_UP);
                double a = Double.valueOf(temp.toString());
                val = new BigDecimal(Math.pow(a,1.76)).setScale(10,BigDecimal.ROUND_HALF_UP);
                System.out.println("N计算公式：(223.5/Ib)^1.76 = (" + 223.5 +"/" + I_b + ")^1.76 =" + val );
            }
        }
        return val;
    }

    /**
     * 设置设备状态
     * @param score
     * @return
     */
    public String getGisStatus(BigDecimal score) {
        String health_level;
        if(Convert.getIsBetween(score, Convert.str2BigDecimal("0"), Convert.str2BigDecimal("20"))) {
            health_level = Constant.FATAL_FAILURE;
        } else if(Convert.getIsBetween(score, Convert.str2BigDecimal("20"), Convert.str2BigDecimal("40"))) {
            health_level = Constant.FAULT;
        } else if(Convert.getIsBetween(score, Convert.str2BigDecimal("40"), Convert.str2BigDecimal("60"))) {
            health_level = Constant.COMMONLY;
        } else if(Convert.getIsBetween(score, Convert.str2BigDecimal("60"), Convert.str2BigDecimal("85"))) {
            health_level = Constant.GOOD;
        } else if(Convert.getIsBetween(score, Convert.str2BigDecimal("85"), Convert.str2BigDecimal("100"))) {
            health_level = Constant.EXCELLENT;
        } else {
            health_level = Constant.EXCELLENT;
        }
        return health_level;
    }

    /**
     * 设置设备状态
     * @param score
     * @return
     */
    public String getJxjy(BigDecimal score) {
        String overhaulSuggest = "";
        if(Convert.getIsBetween(score, Convert.str2BigDecimal("0"), Convert.str2BigDecimal("20"))) {
            overhaulSuggest = Constant.IMMEDIATE_MAINTENANCE;
        } else if(Convert.getIsBetween(score, Convert.str2BigDecimal("20"), Convert.str2BigDecimal("40"))) {
            overhaulSuggest = Constant.RECONDITION;
        } else if(Convert.getIsBetween(score, Convert.str2BigDecimal("40"), Convert.str2BigDecimal("60"))) {
            overhaulSuggest = Constant.PLAN_MAINTENANCE;
        } else if(Convert.getIsBetween(score, Convert.str2BigDecimal("60"), Convert.str2BigDecimal("85"))) {
            overhaulSuggest = Constant.EXTENDED_MAINTENANCE;
        } else if(Convert.getIsBetween(score, Convert.str2BigDecimal("85"), Convert.str2BigDecimal("100"))) {
            overhaulSuggest = Constant.NORMAL_OPERATION;
        } else {
            overhaulSuggest = Constant.NORMAL_OPERATION;
        }
        return overhaulSuggest;
    }

    /**
     * 获取健康水平说明
     * @param score
     * @return
     */
    public String getJkspsm(BigDecimal score) {
        String overhaulSuggest = "";
        if(Convert.getIsBetween(score, Convert.str2BigDecimal("0"), Convert.str2BigDecimal("20"))) {
            overhaulSuggest = "对运行有严重威胁";
        } else if(Convert.getIsBetween(score, Convert.str2BigDecimal("20"), Convert.str2BigDecimal("40"))) {
            overhaulSuggest = "对运行有现实的威胁";
        } else if(Convert.getIsBetween(score, Convert.str2BigDecimal("40"), Convert.str2BigDecimal("60"))) {
            overhaulSuggest = "对运行存在威胁";
        } else if(Convert.getIsBetween(score, Convert.str2BigDecimal("60"), Convert.str2BigDecimal("85"))) {
            overhaulSuggest = "有一定影响";
        } else if(Convert.getIsBetween(score, Convert.str2BigDecimal("85"), Convert.str2BigDecimal("100"))) {
            overhaulSuggest = "不影响运行";
        } else {
            overhaulSuggest = "不影响运行";
        }
        return overhaulSuggest;
    }

    /**
     * 获取100负荷下的断开次数
     * @param fh
     * @return
     */
    public BigDecimal getDkcsFor100(BigDecimal fh) {
        BigDecimal val = new BigDecimal("0");
        if(Convert.getIsBetween(fh, Convert.str2BigDecimal("0"), Convert.str2BigDecimal("3"))) {
            val = Convert.str2BigDecimal("14").divide(Convert.str2BigDecimal("6680"),5,BigDecimal.ROUND_HALF_UP);
            System.out.println("折算到100%负荷下的断开次数(查表附件2)： 负荷P(0~3)=" + fh + ", 折算为：14/6680 = "+ val );
        } else if(Convert.getIsBetween(fh, Convert.str2BigDecimal("3"), Convert.str2BigDecimal("10"))) {
            val = Convert.str2BigDecimal("14").divide(Convert.str2BigDecimal("2786"),5,BigDecimal.ROUND_HALF_UP);
            System.out.println("折算到100%负荷下的断开次数(查表附件2)： 负荷P(3~10)=" + fh + ", 折算为：14/2786 = "+ val );
        } else if(Convert.getIsBetween(fh, Convert.str2BigDecimal("10"), Convert.str2BigDecimal("25"))) {
            val = Convert.str2BigDecimal("14").divide(Convert.str2BigDecimal("160"),5,BigDecimal.ROUND_HALF_UP);
            System.out.println("折算到100%负荷下的断开次数(查表附件2)： 负荷P(10~25)=" + fh + ", 折算为：14/160 = "+ val );
        } else if(Convert.getIsBetween(fh, Convert.str2BigDecimal("25"), Convert.str2BigDecimal("35"))) {
            val = Convert.str2BigDecimal("14").divide(Convert.str2BigDecimal("88"),5,BigDecimal.ROUND_HALF_UP);
            System.out.println("折算到100%负荷下的断开次数(查表附件2)： 负荷P(25~35)=" + fh + ", 折算为：14/88 = "+ val );
        } else if(Convert.getIsBetween(fh, Convert.str2BigDecimal("35"), Convert.str2BigDecimal("50"))) {
            val = Convert.str2BigDecimal("14").divide(Convert.str2BigDecimal("47"),5,BigDecimal.ROUND_HALF_UP);
            System.out.println("折算到100%负荷下的断开次数(查表附件2)： 负荷P(35~50)=" + fh + ", 折算为：14/47 = "+ val );
        } else if(Convert.getIsBetween(fh, Convert.str2BigDecimal("50"), Convert.str2BigDecimal("75"))) {
            val = Convert.str2BigDecimal("14").divide(Convert.str2BigDecimal("23"),5,BigDecimal.ROUND_HALF_UP);
            System.out.println("折算到100%负荷下的断开次数(查表附件2)： 负荷P(50~75)=" + fh + ", 折算为：14/23 = "+ val );
        } else if(Convert.getIsBetween(fh, Convert.str2BigDecimal("75"), Convert.str2BigDecimal("100"))) {
            val = Convert.str2BigDecimal("14").divide(Convert.str2BigDecimal("14"),5,BigDecimal.ROUND_HALF_UP);
            System.out.println("折算到100%负荷下的断开次数(查表附件2)： 负荷P(75~100)=" + fh + ", 折算为：14/14 = "+ val );
        }
        return val;
    }

    /**
     * 可断开次数
     * @param fh 负荷
     *
     * @return
     */
    public BigDecimal getKdkcs(BigDecimal fh) {

        BigDecimal baseVal = getBaseInfoFordkcs(fh);
        BigDecimal val = new BigDecimal("0");

        if(Convert.getIsBetween(fh, Convert.str2BigDecimal("0"), Convert.str2BigDecimal("3"))) {
            val = Convert.str2BigDecimal("6680");
        } else if(Convert.getIsBetween(fh, Convert.str2BigDecimal("3"), Convert.str2BigDecimal("10"))) {
            baseVal = (Convert.str2BigDecimal("6680").subtract(Convert.str2BigDecimal("2786"))).divide(Convert.str2BigDecimal("10").subtract(Convert.str2BigDecimal("3")),1,BigDecimal.ROUND_HALF_UP);
            val = Convert.str2BigDecimal("6680").subtract((fh.subtract(Convert.str2BigDecimal("3"))).multiply(baseVal));
        } else if(Convert.getIsBetween(fh, Convert.str2BigDecimal("10"), Convert.str2BigDecimal("25"))) {
            baseVal = (Convert.str2BigDecimal("2786").subtract(Convert.str2BigDecimal("160"))).divide(Convert.str2BigDecimal("25").subtract(Convert.str2BigDecimal("10")),1,BigDecimal.ROUND_HALF_UP);
            val = Convert.str2BigDecimal("2786").subtract((fh.subtract(Convert.str2BigDecimal("10"))).multiply(baseVal));
        } else if(Convert.getIsBetween(fh, Convert.str2BigDecimal("25"), Convert.str2BigDecimal("35"))) {
            baseVal = (Convert.str2BigDecimal("160").subtract(Convert.str2BigDecimal("88"))).divide(Convert.str2BigDecimal("35").subtract(Convert.str2BigDecimal("25")),1,BigDecimal.ROUND_HALF_UP);
            val = Convert.str2BigDecimal("160").subtract((fh.subtract(Convert.str2BigDecimal("25"))).multiply(baseVal));
        } else if(Convert.getIsBetween(fh, Convert.str2BigDecimal("35"), Convert.str2BigDecimal("50"))) {
            baseVal = (Convert.str2BigDecimal("88").subtract(Convert.str2BigDecimal("47"))).divide(Convert.str2BigDecimal("50").subtract(Convert.str2BigDecimal("35")),1,BigDecimal.ROUND_HALF_UP);
            val = Convert.str2BigDecimal("88").subtract((fh.subtract(Convert.str2BigDecimal("35"))).multiply(baseVal));
        } else if(Convert.getIsBetween(fh, Convert.str2BigDecimal("50"), Convert.str2BigDecimal("75"))) {
            baseVal = (Convert.str2BigDecimal("47").subtract(Convert.str2BigDecimal("23"))).divide(Convert.str2BigDecimal("75").subtract(Convert.str2BigDecimal("50")),1,BigDecimal.ROUND_HALF_UP);
            val = Convert.str2BigDecimal("47").subtract((fh.subtract(Convert.str2BigDecimal("50"))).multiply(baseVal));
        } else if(Convert.getIsBetween(fh, Convert.str2BigDecimal("75"), Convert.str2BigDecimal("100"))) {
            baseVal = (Convert.str2BigDecimal("23").subtract(Convert.str2BigDecimal("14"))).divide(Convert.str2BigDecimal("100").subtract(Convert.str2BigDecimal("75")),1,BigDecimal.ROUND_HALF_UP);
            val = Convert.str2BigDecimal("23").subtract((fh.subtract(Convert.str2BigDecimal("75"))).multiply(baseVal));
        }
        return val;
    }

    /**
     * 获取断开次数增长基数信息
     * @param fh
     * @return
     */
    public BigDecimal getBaseInfoFordkcs(BigDecimal fh) {
        BigDecimal baseVal = new BigDecimal("0");
        if(Convert.getIsBetween(fh, Convert.str2BigDecimal("0"), Convert.str2BigDecimal("3"))) {
            baseVal =Convert.str2BigDecimal("6680");
        } else if(Convert.getIsBetween(fh, Convert.str2BigDecimal("3"), Convert.str2BigDecimal("10"))) {
            baseVal = (Convert.str2BigDecimal("6680").subtract(Convert.str2BigDecimal("2786"))).divide(Convert.str2BigDecimal("10").subtract(Convert.str2BigDecimal("3")),1,BigDecimal.ROUND_HALF_UP);
        } else if(Convert.getIsBetween(fh, Convert.str2BigDecimal("10"), Convert.str2BigDecimal("25"))) {
            baseVal = (Convert.str2BigDecimal("2786").subtract(Convert.str2BigDecimal("160"))).divide(Convert.str2BigDecimal("25").subtract(Convert.str2BigDecimal("10")),1,BigDecimal.ROUND_HALF_UP);
        } else if(Convert.getIsBetween(fh, Convert.str2BigDecimal("25"), Convert.str2BigDecimal("35"))) {
            baseVal = (Convert.str2BigDecimal("160").subtract(Convert.str2BigDecimal("88"))).divide(Convert.str2BigDecimal("35").subtract(Convert.str2BigDecimal("25")),1,BigDecimal.ROUND_HALF_UP);
        } else if(Convert.getIsBetween(fh, Convert.str2BigDecimal("35"), Convert.str2BigDecimal("50"))) {
            baseVal = (Convert.str2BigDecimal("88").subtract(Convert.str2BigDecimal("47"))).divide(Convert.str2BigDecimal("50").subtract(Convert.str2BigDecimal("35")),1,BigDecimal.ROUND_HALF_UP);
        } else if(Convert.getIsBetween(fh, Convert.str2BigDecimal("50"), Convert.str2BigDecimal("75"))) {
            baseVal = (Convert.str2BigDecimal("47").subtract(Convert.str2BigDecimal("23"))).divide(Convert.str2BigDecimal("75").subtract(Convert.str2BigDecimal("50")),1,BigDecimal.ROUND_HALF_UP);
        } else if(Convert.getIsBetween(fh, Convert.str2BigDecimal("75"), Convert.str2BigDecimal("100"))) {
            baseVal = (Convert.str2BigDecimal("23").subtract(Convert.str2BigDecimal("14"))).divide(Convert.str2BigDecimal("100").subtract(Convert.str2BigDecimal("75")),1,BigDecimal.ROUND_HALF_UP);
        }
        return baseVal;
    }

    /**
     * 触头相对磨损量（每断开一次）
     * @param fh 负荷
     * @param n 为额定断开电流下，触头允许断开次数
     * @return BigDecimal
     */
    public BigDecimal getMslForFh(BigDecimal fh, BigDecimal n) {

        System.out.println("-------------------触头相对磨损量( C )计算公式---------------");
        System.out.println("P负荷:" + fh + ",  额定断开电流下，触头允许断开次数N:" + n);
        System.out.println("P负荷:" + fh + ",  额定断开电流下，触头允许断开次数N:" + n);
        System.out.println("---- 负荷值在附件表2中对应的区间，计算触头相对磨损量C: ---");

        // 当前断开的磨损量
        BigDecimal val = new BigDecimal("0");
        if (Convert.getIsBetweenO(fh, Convert.str2BigDecimal("0"), Convert.str2BigDecimal("3"))) {
            val = Convert.str2BigDecimal("2").divide(Convert.str2BigDecimal("1000").multiply(n), 20, BigDecimal.ROUND_HALF_UP);

        } else if (Convert.getIsBetweenO(fh, Convert.str2BigDecimal("3"), Convert.str2BigDecimal("10"))) {
            val = Convert.str2BigDecimal("5").divide(Convert.str2BigDecimal("1000").multiply(n), 20, BigDecimal.ROUND_HALF_UP);

        } else if (Convert.getIsBetweenO(fh, Convert.str2BigDecimal("10"), Convert.str2BigDecimal("25"))) {
            val = Convert.str2BigDecimal("88").divide(Convert.str2BigDecimal("1000").multiply(n), 20, BigDecimal.ROUND_HALF_UP);

        } else if (Convert.getIsBetweenO(fh, Convert.str2BigDecimal("25"), Convert.str2BigDecimal("35"))) {
            val = Convert.str2BigDecimal("159").divide(Convert.str2BigDecimal("1000").multiply(n), 20, BigDecimal.ROUND_HALF_UP);

        } else if (Convert.getIsBetweenO(fh, Convert.str2BigDecimal("35"), Convert.str2BigDecimal("50"))) {
            val = Convert.str2BigDecimal("303").divide(Convert.str2BigDecimal("1000").multiply(n), 20, BigDecimal.ROUND_HALF_UP);

        } else if (Convert.getIsBetweenO(fh, Convert.str2BigDecimal("50"), Convert.str2BigDecimal("75"))) {
            val = Convert.str2BigDecimal("606").divide(Convert.str2BigDecimal("1000").multiply(n), 20, BigDecimal.ROUND_HALF_UP);
        } else if (Convert.getIsBetweenO(fh, Convert.str2BigDecimal("75"), Convert.str2BigDecimal("100"))) {
            val = Convert.str2BigDecimal("1").divide(n, 20, BigDecimal.ROUND_HALF_UP);
        }
        System.out.println("------ 触头相对磨损量C计算结果:" + val);
        System.out.println("------触头相对磨损量C计算结果:" + val);
        return val;
    }

    /**
     * 获取运行参数外观情况系数信息
     * @param value
     * @return
     */
    public BigDecimal getWgxs(BigDecimal value) {
        BigDecimal val = Convert.createBigD("1");
        if(Convert.getIsBetween(value, Convert.str2BigDecimal("0"), Convert.str2BigDecimal("1"))) {
            val = Convert.str2BigDecimal("0.95");
        } else if(Convert.getIsBetween(value, Convert.str2BigDecimal("1"), Convert.str2BigDecimal("3"))) {
            val = Convert.str2BigDecimal("0.9");
        } else if(Convert.getIsBetween(value, Convert.str2BigDecimal("3"), Convert.str2BigDecimal("6"))) {
            val = Convert.str2BigDecimal("0.8");
        } else if(Convert.getIsBetween(value, Convert.str2BigDecimal("6"), Convert.str2BigDecimal("12"))) {
            val = Convert.str2BigDecimal("0.7");
        } else if(value.compareTo(Convert.str2BigDecimal("12"))>0) {
            val = Convert.str2BigDecimal("0.6");
        } else {
            val = Convert.str2BigDecimal("1");
        }
        return val;
    }

    /**
     * 产品成熟度
     * @param value
     * @return BigDecimal
     */
    public BigDecimal getCalMaturity(String value){
        BigDecimal val = new BigDecimal("1");
        BigDecimal val50 = new BigDecimal("50");
        BigDecimal score = Convert.str2BigDecimal(value);
        if(Convert.getIsBetween(score, Convert.str2BigDecimal("0"), Convert.str2BigDecimal("10"))) {
            val = Convert.str2BigDecimal("0.5");
        } else if(Convert.getIsBetween(score, Convert.str2BigDecimal("10"), Convert.str2BigDecimal("20"))) {
            val = Convert.str2BigDecimal("0.7");
        } else if(Convert.getIsBetween(score, Convert.str2BigDecimal("20"), Convert.str2BigDecimal("30"))) {
            val = Convert.str2BigDecimal("0.92");
        } else if(Convert.getIsBetween(score, Convert.str2BigDecimal("30"), Convert.str2BigDecimal("50"))) {
            val = Convert.str2BigDecimal("0.95");
        } else if(score.compareTo(val50) >= 0) {
            val = Convert.str2BigDecimal("1");
        }
        return val;
    }

    /**
     * 获取ABC三相最大值
     * @param aVal A相导电回路电阻(其他)
     * @param bVal B相导电回路电阻(其他)
     * @param cVal C相导电回路电阻(其他)
     * @return BigDecimal
     */
    public BigDecimal compareABCMax(BigDecimal aVal, BigDecimal bVal, BigDecimal cVal) {
        BigDecimal val;
        val = aVal;
        if(bVal.compareTo(val)>0) {
            val = bVal;
        }
        if(cVal.compareTo(val)>0) {
            val = cVal;
        }
        return val;
    }

    /**
     * 获取ABC三相最小值
     * @param aVal A相导电回路电阻(其他)
     * @param bVal B相导电回路电阻(其他)
     * @param cVal C相导电回路电阻(其他)
     * @return BigDecimal
     */
    public BigDecimal compareMinABC(BigDecimal aVal, BigDecimal bVal, BigDecimal cVal) {
        BigDecimal val;
        val = aVal;
        if(bVal.compareTo(val)<0) {
            val = bVal;
        }
        if(cVal.compareTo(val)<0) {
            val = cVal;
        }
        return val;
    }
}
