package jnpf.limsService.support; import java.math.BigDecimal; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Locale; import java.util.Set; /** * 水系统趋势读模型的无状态转换规则。 */ public final class LimsSxtQushiTrendSupport { private static final Set NON_TREND_ITEM_NAMES = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( "性状", "氨", "硝酸盐", "亚硝酸盐", "内毒素检查", "重金属" ))); private LimsSxtQushiTrendSupport() { } public static boolean isTrendEnabled(String itemName) { return isTrendEnabled(itemName, null); } public static boolean isTrendEnabled(String itemName, String shujuLeixing) { if (itemName == null || NON_TREND_ITEM_NAMES.contains(itemName.trim())) { return false; } if (shujuLeixing == null || shujuLeixing.trim().isEmpty()) { return true; } String normalized = shujuLeixing.trim().toLowerCase(Locale.ROOT); return !(normalized.contains("文本") || normalized.contains("字符") || normalized.contains("定性") || normalized.contains("枚举") || normalized.contains("布尔") || normalized.contains("选项") || normalized.contains("日期") || normalized.contains("时间") || normalized.contains("文件") || normalized.contains("string") || normalized.contains("text") || normalized.contains("textarea") || normalized.contains("select") || normalized.contains("radio") || normalized.contains("checkbox") || normalized.contains("boolean") || normalized.contains("date") || normalized.contains("time") || normalized.contains("file")); } public static BigDecimal toNumericOrNull(String value) { if (value == null) { return null; } String normalized = value.trim(); if (normalized.isEmpty() || "N/A".equalsIgnoreCase(normalized) || "NA".equalsIgnoreCase(normalized) || "-".equals(normalized) || "--".equals(normalized)) { return null; } try { return new BigDecimal(normalized); } catch (NumberFormatException e) { return null; } } }