package com.yunyan.business.document.y22;

import cn.hutool.core.convert.NumberChineseFormatter;
import cn.hutool.core.util.NumberUtil;
import com.yunyan.business.document.utils.ReadExcelUtil;
import com.yunyan.business.document.y22.pojo.finalExcelY22.*;
import com.yunyan.common.utils.NumStrConvertor;
import com.yunyan.common.utils.NumberFormatUtils;
import com.yunyan.common.utils.StringUtils;
import com.yunyan.common.utils.reflect.ReflectUtils;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Objects;
import java.util.regex.Pattern;

/**
 * excel的工具类
 */
public class FinalY22Utils {

    /**
     * 获取 val1/val2 的完成比率
     * @param val1
     * @param val2
     * @return
     */
    public static String getSuccessRatio(String val1, String val2) {
        //去掉 逗号 分隔符等
        val1 = FinalY22Utils.strFormaTtoNum(val1);
        val2 = FinalY22Utils.strFormaTtoNum(val2);

        //比率变化
        BigDecimal ratioRes = BigDecimal.ZERO;
        BigDecimal val2BigDecimal = BigDecimal.ZERO;
        BigDecimal val1BigDecimal = BigDecimal.ZERO;
        if(StringUtils.isNotBlank(val2) ) {
            val2BigDecimal = new BigDecimal(val2);
        }
        if(StringUtils.isNotBlank(val1) ) {
            val1BigDecimal = new BigDecimal(val1);
        }
        if (val2BigDecimal.compareTo(BigDecimal.ZERO) != 0) {
            ratioRes = val1BigDecimal.multiply(new BigDecimal(100)).divide(val2BigDecimal, 2, RoundingMode.HALF_DOWN);
        } else if (val2BigDecimal.compareTo(BigDecimal.ZERO) == 0 && val1BigDecimal.compareTo(BigDecimal.ZERO) == 1) {
            ratioRes = new BigDecimal(100);
        }

        return ratioRes.toString();
    }

    /**
     *  p3t4, p3t5
     * 3.2部分的年度一般公共预算财政拨款支出决算情况 功能分类科目
     * 格式: （一）一般公共服务支出（类）年初预算为   万元，支出决算为   万元，完成年初预算的  %。
     * @param itemName 项名
     * @param val1 支出决算
     * @param val2 年初预算
     * @param ratio 预算完成率
     * @return
     */
    public static String getInfoStr(String itemName, String val1, String val2, String ratio) {
        //String changeItemName = "（" + itemName.replace("、","）");
        String str =  String.format("%s（类）决算数为%s万元，年初预算为%s万元", itemName, val1, val2);

        //判断 初始值 是否为空 变化率的显示
        if(StringUtils.isNotBlank(val2) ) {
            String valNum = FinalY22Utils.strFormaTtoNum(val2);
            BigDecimal val1Decimal =  new BigDecimal(valNum);
            if(val1Decimal.compareTo(BigDecimal.ZERO) != 0 ) {
                str += String.format("，完成年初预算的%s%%", ratio);
            }
        }

        return str;
    }

    /**
     * p3t2 的 item list
     * @param itemName
     * @param val1 结束
     * @param val2 开始
     * @param ratio
     * @return
     */
    public static String getInfoStrP3T2(String itemName, String val1, String val2, String ratio) {
        //String changeItemName = "（" + itemName.replace("、","）");
        String str =  String.format("%s决算数为%s万元，年初预算为%s万元", itemName, val1, val2);

        //判断 初始值 是否为空 变化率的显示
        if(StringUtils.isNotBlank(val2) ) {
            String valNum = FinalY22Utils.strFormaTtoNum(val2);
            BigDecimal val1Decimal =  new BigDecimal(valNum);
            if(val1Decimal.compareTo(BigDecimal.ZERO) != 0 ) {
                str += String.format("，完成年初预算的%s%%", ratio);
            }
        }

        return str;
    }

    /**
     * p3t1 构建 item string
     * @param itemName
     * @param val1 本年
     * @return
     */
    public static String getInfoStrItemP3T1(String itemName, String val1) {

        //暂不拼接， 后续依据类型会去掉 数值为0的情况

        String str = String.format("%s%s万元", itemName.substring(itemName.indexOf("、")+1), val1);

        return str;
    }

    /**
     * p3t1的 同比字符串的 说明
     * @param val2 去年
     * @param lastYear
     * @param addOrSubStrItem
     * @return
     */
    public static String getInfoCompareStrItemP3T1( String val2, String lastYear, String addOrSubStrItem) {
        //暂不拼接， 后续依据类型会去掉 数值为0的情况
        String str = String.format("较%s年度决算数%s万元，%s", lastYear, val2,  addOrSubStrItem);
        return str;
    }

    /**
     * 比较 2个值是否都为0, 返回对应的语句
     * @param val1 本年
     * @param val2 去年
     * @param result 返回的语句
     * @return
     */
    public static String getReasonStrItem(String val1, String val2, String result) {
        if(StringUtils.isBlank(result)) {
            result = "本单位年度无该项收入，故无数据情况说明";
        }

        if(StringUtils.isBlank(val1) && StringUtils.isBlank(val2)) {
            return result;
        }

        BigDecimal val1BigDecimal = BigDecimal.ZERO;
        BigDecimal val2BigDecimal = BigDecimal.ZERO;
        if(StringUtils.isNotBlank(val2) ) {
            val2BigDecimal = new BigDecimal(FinalY22Utils.strFormaTtoNum(val2));
        }
        if(StringUtils.isNotBlank(val1) ) {
            val1BigDecimal = new BigDecimal(FinalY22Utils.strFormaTtoNum(val1));
        }

        if(val1BigDecimal.compareTo(BigDecimal.ZERO) == 0 && val2BigDecimal.compareTo(BigDecimal.ZERO) == 0) {
            return result;
        }

        return "";
    }

    /**
     * 比较 2个数是否都为 0, 为0或者空返回 0, 默认返回1
     * @param val1 第一个数
     * @param val2 第二个数
     * @return
     */
    public static Integer getFlagByValue(String val1, String val2) {
        Integer result = 1;

        if(StringUtils.isBlank(val1) && StringUtils.isBlank(val2)) {
            return 0;
        }

        BigDecimal val1BigDecimal = BigDecimal.ZERO;
        BigDecimal val2BigDecimal = BigDecimal.ZERO;
        if(StringUtils.isNotBlank(val2) ) {
            val2BigDecimal = new BigDecimal(FinalY22Utils.strFormaTtoNum(val2));
        }
        if(StringUtils.isNotBlank(val1) ) {
            val1BigDecimal = new BigDecimal(FinalY22Utils.strFormaTtoNum(val1));
        }

        if(val1BigDecimal.compareTo(BigDecimal.ZERO) == 0 && val2BigDecimal.compareTo(BigDecimal.ZERO) == 0) {
            return 0;
        }

        return result;
    }

    /**
     * 比较 2个数是否都为 0, 为0或者空返回 1, 默认返回0
     * @param val1 第一个数
     * @param val2 第二个数
     * @return
     */
    public static Integer getFlagByValueZero(String val1, String val2) {
        Integer result = 0;

        if(StringUtils.isBlank(val1) && StringUtils.isBlank(val2)) {
            return 1;
        }

        BigDecimal val1BigDecimal = BigDecimal.ZERO;
        BigDecimal val2BigDecimal = BigDecimal.ZERO;
        if(StringUtils.isNotBlank(val2) ) {
            val2BigDecimal = new BigDecimal(FinalY22Utils.strFormaTtoNum(val2));
        }
        if(StringUtils.isNotBlank(val1) ) {
            val1BigDecimal = new BigDecimal(FinalY22Utils.strFormaTtoNum(val1));
        }

        if(val1BigDecimal.compareTo(BigDecimal.ZERO) == 0 && val2BigDecimal.compareTo(BigDecimal.ZERO) == 0) {
            return 1;
        }

        return result;
    }

    /**
     * 3.3部分的年度一般公共预算财政拨款基本支出决算情况说明 经济分类支出科目 的info 文字
     * @param itemName
     * @param val1 本年/结束
     * @param val2 去年/开始
     * @param ratio
     * @return
     */
    public static String getInfoStrP3T3(String itemName, String val1, String val2, String ratio) {
        String str =  String.format("%s决算数为%s万元，年初预算为%s万元", itemName, val1, val2);

        //判断 初始值 是否为空 变化率的显示
        if(StringUtils.isNotBlank(val2) ) {
            String valNum = FinalY22Utils.strFormaTtoNum(val2);
            BigDecimal val1Decimal =  new BigDecimal(valNum);
            if(val1Decimal.compareTo(BigDecimal.ZERO) != 0 ) {
                str += String.format("，完成年初预算的%s%%", ratio);
            }
        }

        return str;
    }

    /**
     * 比较 val1 与 val2, val1 >= val2 时, 返回增加
     * @param val1
     * @param val2
     * @return
     */
    public static String getAddOrSubStringP3t2(String val1, String val2) {
        val1 = FinalY22Utils.strFormaTtoNum(val1);
        val2 = FinalY22Utils.strFormaTtoNum(val2);

        //数值变化
        BigDecimal subRes = NumberUtil.sub(val1, val2);

        String str = subRes.compareTo(BigDecimal.ZERO) != -1 ? String.format("增加%s万元", subRes.abs())
                : String.format("减少%s万元", subRes.abs());

        //是否加 增长率
        String str2 = FinalY22Utils.getRatioCampareStr(val2, subRes);
        if(StringUtils.isNotBlank(str2)) {
            str += str2;
        }

        return str;
    }

    /**
     * 比较 val1 与 val2, val1 >= val2 时, 返回: 增减（减少） xxx
     * @param val1
     * @param val2
     * @return
     */
    public static String getAddOrSubStringP3t6(String val1, String val2) {
        val1 = FinalY22Utils.strFormaTtoNum(val1);
        val2 = FinalY22Utils.strFormaTtoNum(val2);

        //数值变化
        BigDecimal subRes = NumberUtil.sub(val1, val2);

        String str = subRes.compareTo(BigDecimal.ZERO) != -1 ? String.format("增加%s", subRes.abs())
                : String.format("减少%s", subRes.abs());
        return str;
    }

    /**
     * P3t6  后面增加 p3t4
     *  总数的比对:  较2021年决算数  万元增加（减少）  万元，增长（下降）  %
     * @param val1 本年
     * @param val2 去年
     * @return
     */
    public static String getP3t6ComapreTotalStr(String year, String val1, String val2) {

        BigDecimal yearLastBigDecimal= NumberUtil.sub(year, "1");
        String yearLast = yearLastBigDecimal.toString();

        String val1NumNoformat = FinalY22Utils.strFormaTtoNum(val1);
        String val2NumNoformat = FinalY22Utils.strFormaTtoNum(val2);

        //数值变化
        BigDecimal subRes = NumberUtil.sub(val1NumNoformat, val2NumNoformat);

        String changeValue = subRes.abs().toString();
        String changeRatio = ReadExcelUtil.getChangeRatioValue(val2NumNoformat, subRes, 2);
        String changeValueWord = ReadExcelUtil.getChangeValueWord(subRes);
        String changeRatioWord = ReadExcelUtil.getChangeRatioWord(subRes);

        String str = String.format("较%s年决算数%s万元，%s%s万元，%s%s%%", yearLast, val2, changeValueWord, NumberFormatUtils.addThousandSeparatorForInteger(changeValue), changeRatioWord, changeRatio);

        return str;
    }



    /**
     * 比较 val1 与 val2, val1 >= val2 时, 返回增加
     * @param val1
     * @param val2
     * @return
     */
    public static String getAddOrSubStringP3t7s1(String val1, String val2) {
        val1 = FinalY22Utils.strFormaTtoNum(val1);
        String val2Noformat = FinalY22Utils.strFormaTtoNum(val2);

        //数值变化
        BigDecimal subRes = NumberUtil.sub(val1, val2Noformat);

        String str = String.format("决算数%s万元", val2);
        str += subRes.compareTo(BigDecimal.ZERO) != -1 ? String.format("增加%s万元", subRes.abs())
                : String.format("减少%s万元", subRes.abs());

        //是否加 增长率
        String str2 = FinalY22Utils.getRatioCampareStr(val2Noformat, subRes);
        if(StringUtils.isNotBlank(str2)) {
            str += str2;
        }

        return str;
    }

    /**
     * 读取 excel的表格的数值, 加千分位分隔
     * @param map
     * @param key
     * @return
     */
    public static String getMapNumFormat(LinkedHashMap<Integer, String> map, Integer key) {
        //String mapStr = map.getOrDefault(key, "").replace(",","");
        String mapStr = map.getOrDefault(key, "0").replace(",","");
        if(StringUtils.isNotBlank(mapStr) && mapStr.contains("—")) {
            mapStr = mapStr.replace("—", "0");
        }

        if(StringUtils.isBlank(mapStr)) {
            mapStr = "0.00";
        }

        String res = mapStr;
        res = NumberFormatUtils.amountInThousands(mapStr);
        //判断是否有 千分位分隔， 没有加上
        /*if(!res.contains(",")) {
            res = NumberFormatUtils.amountInThousands(mapStr);
        }*/
        return res;
    }

    /**
     * 读取 excel的表格的数值, 加千分位分隔 替换
     * @param map excel的 字段
     * @param key 键
     * @param targetTag 替换目标对象
     * @param replacement 替换对象
     * @return
     */
    public static String getMapNumFormat(LinkedHashMap<Integer, String> map, Integer key, String targetTag, String replacement) {
        String mapStr = map.getOrDefault(key, "");
        if(StringUtils.isNotBlank(targetTag)) {
            String replaceStr = StringUtils.isNotBlank(replacement) ? replacement : "";
            mapStr = mapStr.replace(targetTag, replaceStr);
        }
        //String mapStr = map.getOrDefault(key, "").replace(",","");
        String res = mapStr;
        res = NumberFormatUtils.amountInThousands(mapStr);
        //判断是否有 千分位分隔， 没有加上
        /*if(!res.contains(",")) {
            res = NumberFormatUtils.amountInThousands(mapStr);
        }*/
        return res;
    }

    /**
     * 读取 表单元的数值
     * @param map
     * @param key
     * @param targetTag
     * @param replacement
     * @return
     */
    public static String getMapNum(LinkedHashMap<Integer, String> map, Integer key, String targetTag, String replacement) {
        String mapStr = map.getOrDefault(key, "");
        if(StringUtils.isNotBlank(targetTag)) {
            String replaceStr = StringUtils.isNotBlank(replacement) ? replacement : "";
            mapStr = mapStr.replace(targetTag, replaceStr);
        }

        return mapStr;
    }

    /**
     * 把 千分位分隔 的字符串转数字字符串
     * @param str
     * @return
     */
    public static String strFormaTtoNum(String str) {
        if(StringUtils.isBlank(str)) {
            return str;
        }

        str = str.replace(",","");
        return str;
    }

    /**
     * 比较 val1 与 val2, val1 >= val2 时, 返回增加
     * @param val1 本年
     * @param val2 去年
     * @return
     */
    public static String getAddOrSubString(String val1, String val2) {
        //去掉 逗号 分隔符等
        val1 = FinalY22Utils.strFormaTtoNum(val1);
        val2 = FinalY22Utils.strFormaTtoNum(val2);

        //数值变化
        BigDecimal subRes = NumberUtil.sub(val1, val2);
        //数值格式化
        String subResFormat = NumberFormatUtils.addThousandSeparatorForInteger(subRes.abs().toString());
        String str = subRes.compareTo(BigDecimal.ZERO) != -1 ? String.format("增加%s万元", subResFormat)
                : String.format("减少%s万元", subResFormat);

        //是否加 增长率
        String str2 = FinalY22Utils.getRatioCampareStr(val2, subRes);
        if(StringUtils.isNotBlank(str2)) {
            str += str2;
        }

        return str;
    }

    /**
     * 比较 val1 与 val2, val1 >= val2 时, 返回增加
     * @param val1 本年
     * @param val2 去年
     * @return
     */
    public static String getAddOrSubStringRatioCompareStr2(String val1, String val2) {
        //去掉 逗号 分隔符等
        val1 = FinalY22Utils.strFormaTtoNum(val1);
        val2 = FinalY22Utils.strFormaTtoNum(val2);

        //数值变化
        BigDecimal subRes = NumberUtil.sub(val1, val2);
        //数值格式化
        String subResFormat = NumberFormatUtils.addThousandSeparatorForInteger(subRes.abs().toString());
        String str = subRes.compareTo(BigDecimal.ZERO) != -1 ? String.format("增加%s万元", subResFormat)
                : String.format("减少%s万元", subResFormat);

        //是否加 增长率
        String str2 = FinalY22Utils.getRatioCampareStr(val2, subRes);
        if(StringUtils.isNotBlank(str2)) {
            str += str2;
        }

        return str;
    }

    /**
     * 判断 是否 加增长率
     * @param val2
     * @param subRes
     * @return
     */
    public static String getRatioCampareStr(String val2, BigDecimal subRes) {
        String str = "";
        //比率变化
        BigDecimal ratioRes = BigDecimal.ZERO;
        //0 的不要
        BigDecimal val2BigDecimal = BigDecimal.ZERO;
        if(StringUtils.isNotBlank(val2)) {
            val2BigDecimal = new BigDecimal(val2);
        }
        if (val2BigDecimal.compareTo(BigDecimal.ZERO) != 0) {
            ratioRes = subRes.abs().multiply(new BigDecimal(100)).divide(val2BigDecimal, 2, RoundingMode.HALF_DOWN);
            str += subRes.compareTo(BigDecimal.ZERO) != -1 ? String.format("，增长%s%%",  ratioRes)
                    : String.format("，下降%s%%", ratioRes);
        }/*  else if (val2BigDecimal.compareTo(BigDecimal.ZERO) == 0 && new BigDecimal(val1).compareTo(BigDecimal.ZERO) == 1) {
            ratioRes = new BigDecimal(100);
        }*/

        return str;
    }

    /**
     * 截取 map 的string 从某个字符串 开始
     * @param map
     * @param key
     * @param targetTagBegin
     * @return
     */
    public static String getMapSubString(LinkedHashMap<Integer, String> map, Integer key, String targetTagBegin) {
        String mapStr = map.getOrDefault(key, "");
        if(StringUtils.isNotBlank(targetTagBegin)) {
            mapStr = mapStr.substring(mapStr.indexOf(targetTagBegin)+1);
        }

        return mapStr;
    }

    /**
     * 设置 list 的排序
     * @param collection
     * @param fieldName
     */
    public static void setRowNo(Collection collection, String fieldName, String concantFieldName) {
        if(StringUtils.isBlank(fieldName)) {
            fieldName = "rowNo";
        }

        final int[] i = {0};
        String finalFieldName = fieldName;
        collection.forEach(item->{
            i[0] = i[0]+1;
            ReflectUtils.setFieldValue(item, finalFieldName, String.valueOf(i[0]));
            if(StringUtils.isNotBlank(concantFieldName)) {
                String prefixStrRowNo = i[0] + ".";
                String exitsStr = ReflectUtils.getFieldValue(item, concantFieldName);
                if(StringUtils.isNotBlank(exitsStr) ) {
                    if(exitsStr.contains(".")) {
                        String subRowNoStr = exitsStr.substring(0, exitsStr.indexOf("."));
                        if(StringUtils.isNumeric(subRowNoStr)) {
                            //String newValue = prefixStrRowNo + exitsStr.indexOf(".");
                            //String newValue = exitsStr.replaceFirst("\\d+\\.\\s", prefixStrRowNo);
                            //现在的没有空
                            String newValue = exitsStr.replaceFirst("\\d+\\.", prefixStrRowNo);
                            ReflectUtils.setFieldValue(item, concantFieldName, newValue);
                        } else {
                            //还未设置过序号
                            String newValue = prefixStrRowNo + exitsStr;
                            ReflectUtils.setFieldValue(item, concantFieldName, newValue);
                        }
                    } else {
                        //还未设置过序号
                        String newValue = prefixStrRowNo + exitsStr;
                        ReflectUtils.setFieldValue(item, concantFieldName, newValue);
                    }
                }

            }
        });
    }

    /**
     * 转中文
     * 设置 list 的排序
     * @param collection
     * @param fieldName
     */
    public static void setRowNoChineseFormatter(Collection collection, String fieldName, String concantFieldName) {
        if(StringUtils.isBlank(fieldName)) {
            fieldName = "rowNo";
        }

        final int[] i = {0};
        String finalFieldName = fieldName;
        collection.forEach(item->{
            i[0] = i[0]+1;
            //String chineseFormatter = NumberChineseFormatter.format(i[0], false, false);
            String chineseFormatter = NumStrConvertor.cnNumConvertor(i[0]);
            ReflectUtils.setFieldValue(item, finalFieldName, String.valueOf(i[0]));
            if(StringUtils.isNotBlank(concantFieldName)) {
                String prefixStrRowNo = "（" + chineseFormatter + "）";
                String exitsStr = ReflectUtils.getFieldValue(item, concantFieldName);
                if(exitsStr.startsWith("（") && exitsStr.contains("）")) {
                    String newValue = exitsStr.replaceFirst("（.*?）", prefixStrRowNo);
                    ReflectUtils.setFieldValue(item, concantFieldName, newValue);
                } else {
                    String newValue = prefixStrRowNo + exitsStr;
                    ReflectUtils.setFieldValue(item, concantFieldName, newValue);
                }
            }
        });
    }

    /**
     * 转中文
     * 设置 list 的排序
     * @param collection
     * @param fieldName
     */
    public static void setRowNoChineseFormatter(Collection collection, String fieldName) {
        if(StringUtils.isBlank(fieldName)) {
            fieldName = "rowNo";
        }

        if(Objects.isNull(collection) || collection.isEmpty()) {
            return;
        }

        final int[] i = {0};
        String finalFieldName = fieldName;
        collection.forEach(item->{
            i[0] = i[0]+1;
            String chineseFormatter = NumStrConvertor.cnNumConvertor(i[0]);
            String newValue = chineseFormatter;
            ReflectUtils.setFieldValue(item, finalFieldName, newValue);
        });
    }



    /**
     * 比较 本地
     * @param val1 本年 决算数
     * @param val2 预算数
     * @return
     */
    public static Integer compareValueStr(String val1, String val2) {
        //去掉 逗号 分隔符等
        val1 = FinalY22Utils.strFormaTtoNum(val1);
        val2 = FinalY22Utils.strFormaTtoNum(val2);

        //比率变化
        BigDecimal val2BigDecimal = BigDecimal.ZERO;
        BigDecimal val1BigDecimal = BigDecimal.ZERO;
        if(StringUtils.isNotBlank(val2) ) {
            val2BigDecimal = new BigDecimal(val2);
        }
        if(StringUtils.isNotBlank(val1) ) {
            val1BigDecimal = new BigDecimal(val1);
        }

        if(val1BigDecimal.compareTo(val2BigDecimal) == 1) {
            return 1;
        }

        return 0;
    }



    /**
     * 2个数 除法
     * @param val1 被除数
     * @param val2 除数
     * @return
     */
    public static String getDivisionNum(String val1, String val2) {
        if(StringUtils.isBlank(val1)) {
            val1 = "0";
        }

        if(StringUtils.isBlank(val2)) {
            val2 = "0";
        }

        val1 = FinalY22Utils.strFormaTtoNum(val1);

        val2 = FinalY22Utils.strFormaTtoNum(val2);

        BigDecimal decimal1 = new BigDecimal(val1);
        BigDecimal decimal2 = new BigDecimal(val2);

        if(decimal1.compareTo(BigDecimal.ZERO) == 0 ) {
            return "0";
        }

        BigDecimal res = decimal1.divide(decimal2, 2, RoundingMode.HALF_DOWN);

        return res.toString();
    }

    /**
     * 比较2个数 val1 ,val2 大于时 返回1, 小于返回 -1, 相等返回 0
     * @param val1 本年
     * @param val2 初始
     * @return
     */
    public static Integer compareValue(String val1, String val2) {
        Integer result = 1;

        if(StringUtils.isBlank(val1) && StringUtils.isBlank(val2)) {
            return 0;
        }

        BigDecimal val1BigDecimal = BigDecimal.ZERO;
        BigDecimal val2BigDecimal = BigDecimal.ZERO;
        if(StringUtils.isNotBlank(val2) ) {
            val2BigDecimal = new BigDecimal(FinalY22Utils.strFormaTtoNum(val2));
        }
        if(StringUtils.isNotBlank(val1) ) {
            val1BigDecimal = new BigDecimal(FinalY22Utils.strFormaTtoNum(val1));
        }

        int compareRes = val1BigDecimal.compareTo(val2BigDecimal);
        return compareRes;
    }

    /**
     * 依据 比较的 数字 返回对应的字符串  1=大于, -1=小于, 0=等于
     * @param value
     * @return
     */
    public static String compareValueStr(int value) {
        switch (value) {
            case 1:
                return "大于";
            case -1:
                return "小于";
            case 0:
                return "等于";
            default:
                return "等于";
        }
    }

    /**
     * 设置 list的 rowNo排序
     */
    public static void setListRowNo(FinalExcelDataVo dataVo) {
        //p3t1 只进行一次排序
        FinalY22Utils.setRowNo(dataVo.getP3T1Vo().getIncome().getList(), "rowNo", "info");
        FinalY22Utils.setRowNo(dataVo.getP3T1Vo().getExpenditure().getList(), "rowNo", "info");

        //p3t2
        FinalY22Utils.setRowNoChineseFormatter(dataVo.getP3T2Vo().getList(), "rowNo", "info");
        FinalY22Utils.setRowNoChineseFormatter(dataVo.getP3T2Vo().getList(), "rowNoChinese");
        //p3t2 sublist
        FinalY22Utils.setRowNoChineseFormatter(dataVo.getP3T2Vo().getSubItemList(), "rowNoChinese");
        //p3t3
        FinalY22Utils.setRowNoChineseFormatter(dataVo.getP3T3Vo().getList(), "rowNo", "info");
        FinalY22Utils.setRowNoChineseFormatter(dataVo.getP3T3Vo().getList(), "rowNoChinese");
        //p3t4
        //FinalY22Utils.setRowNoChineseFormatter(dataVo.getP3T4Vo().getList(), "rowNo", "info");

        //p3t2的大类下的子类的 列表, 只进行一次排序
        List<FinalP3T2CategoryItemVo> p3T2CategoryList = dataVo.getP3T2Vo().getList();
        for (FinalP3T2CategoryItemVo categoryItemVo : p3T2CategoryList) {
            List<FinalP3T2ItemVo> p3T2ItemList = categoryItemVo.getList();
            if(p3T2ItemList.isEmpty()) {
                continue;
            }
            FinalY22Utils.setRowNo(p3T2ItemList, "rowNo", "");
        }

        //p3t2
        /*FinalY22Utils.setRowNo(dataVo.getP3T2Vo().getList(), "rowNo", "info");

        //p3t3
        FinalY22Utils.setRowNo(dataVo.getP3T3Vo().getList(), "rowNo", "info");*/

        //p3t4
        FinalY22Utils.setRowNoChineseFormatter(dataVo.getP3T4Vo().getList(), "rowNo", "info");
        //p3t4的项的设置 中文
        FinalY22Utils.setRowNoChineseFormatter(dataVo.getP3T4Vo().getList(), "rowNoChinese");
        //p3t4 项的
        List<FinalP3T4CategoryItemVo> p3T4CategoryList = dataVo.getP3T4Vo().getList();
        for (FinalP3T4CategoryItemVo categoryItemVo : p3T4CategoryList) {
            List<FinalP3T4ItemVo> p3T4ItemList = categoryItemVo.getList();
            if(p3T4ItemList.isEmpty()) {
                continue;
            }
            FinalY22Utils.setRowNo(p3T4ItemList, "rowNo", "");
        }

        //p3t5
        FinalY22Utils.setRowNoChineseFormatter(dataVo.getP3T5Vo().getList(), "rowNo", "info");
        //p3t5 项的
        List<FinalP3T5CategoryItemVo> p3T5CategoryList = dataVo.getP3T5Vo().getList();
        for (FinalP3T5CategoryItemVo categoryItemVo : p3T5CategoryList) {
            List<FinalP3T5ItemVo> p3T5ItemList = categoryItemVo.getList();
            if(p3T5ItemList.isEmpty()) {
                continue;
            }
            FinalY22Utils.setRowNo(p3T5ItemList, "rowNo", "");
        }

    }

    /**
     *  读取 map, 空字符串转变为 0
     * @param map
     * @param key
     * @param defaultValue
     * @return
     */
    public static String getMapOrDefault(LinkedHashMap<Integer, String> map, Object key, String defaultValue) {
        String value = map.getOrDefault(key, defaultValue);
        if(StringUtils.isBlank(value)) {
            value = defaultValue;
        }

        return value;
    }

    public static void main(String[] args) {

        int res = compareValue("2,32", "3,000");

        String resStr = compareValueStr(res);
        System.out.println(res);

        //（三）国防支出（类）年初预算为0万元，决算数为0万元   需要把 () 中的替换成四
        String str = "（三））国防支出（类）年初预算为0万元，决算数为0万元";
        String str3 = "1.一般公共服务支出0万元";
        String resStr2 = str.replaceFirst("（.*?）", "（四）");
        //把 str3 .前面的替换成其他的数字 replaceFirst 匹配第一个 只替换 第一个



        String resStr4 = str3.replaceFirst( "\\d+\\.\\s", "4.");
        System.out.println(resStr4);

        //8.社会保障和就业支出4.59万元
        String str6 = "8.社会保障和就业支出4.59万元";
        String resStr6 = str6.replaceFirst( "\\d+\\.\\s", "2.");
        System.out.println(resStr6);
        Pattern pattern = Pattern.compile("\\d+\\.\\s");

        /*BigDecimal subRes = NumberUtil.sub("0", "2");
        System.out.println("s");*/

        /*String s = "（五）资本性支出（基本建设）";

        String s2 = s.substring(s.indexOf("）")+1);
        System.out.println("s2 " + s2);*/
    }

}
