# M3ReportCommonUtils.java

    package cloud.wconnect.workperformance.service.hotelkpi.m3;

    import org.apache.commons.lang3.StringUtils;

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

    /**
     * Utils: M3 报告通用工具类
     *
     * @author zc
     * @date 2025/08/29
     */
    public class M3ReportCommonUtils {

        /**
         * 忽略大小写的获取 Map 中的值
         *
         * @param map Map 对象
         * @param key 键
         * @param <K> 键的类型
         * @param <V> 值的类型
         * @return 值
         * @author zc
         * @date 2025/8/27
         */
        public static <K, V> V getIgnoreCase(Map<K, V> map, String key) {
            return map.entrySet().stream()
                    .filter(entry -> entry.getKey().toString().equalsIgnoreCase(key))
                    .map(Map.Entry::getValue)
                    .findFirst()
                    .orElse(null);
        }

        /**
         * 解析货币值字符串为 BigDecimal
         *
         * @param value 货币值字符串
         * @return BigDecimal 值
         * @author zc
         * @date 2025/8/27
         */
        public static BigDecimal parseCurrencyValue(String value) {
            if (StringUtils.isBlank(value)) {
                return BigDecimal.ZERO;
            }
            String cleanValue = value.trim();
            // 处理数值在报告文件中显示空间不足省略的情况
            if (cleanValue.contains("…")) {
                if (cleanValue.contains(".")) {
                    // 移除省略号
                    cleanValue = cleanValue.replaceAll("…", "");
                    if (cleanValue.endsWith(".")) {
                        cleanValue = cleanValue.substring(0, cleanValue.length() - 1);
                        // 补齐小数位
                        cleanValue = cleanValue + ".00";
                    }
                } else {
                    return BigDecimal.ZERO;
                }
            }

            // 移除货币符号和逗号
            cleanValue = cleanValue.replaceAll("[$,]", "").trim();
            // 处理括号表示的负数
            boolean isNegative = false;
            if (cleanValue.contains("(") || cleanValue.contains(")")) {
                isNegative = true;
                cleanValue = cleanValue.replace("(", "")
                        .replace(")", "");
            }

            // 检查处理后的值是否为空
            if (StringUtils.isBlank(cleanValue)) {
                return BigDecimal.ZERO;
            }

            try {
                BigDecimal result = new BigDecimal(cleanValue);
                return isNegative ? result.negate() : result;
            } catch (NumberFormatException e) {
                return BigDecimal.ZERO;
            }
        }
    }