package cn.iocoder.yudao.module.qcreport.engine; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; /** * JS 值语义。 *

* 渲染与规则求值的产物要跟前端逐字一致,而 Java 的默认类型转换和 JS 有几处对不上 * ({@code String.valueOf(60.0D)} 是 "60.0"、{@code String.valueOf(true)} 是 "true"、 * 数组 toString 是 "[1, 2]")。凡是拿值当文本用的地方都走这里,别用 Java 的默认转换。 */ public final class JsValues { private JsValues() { } /** {@code String(value)}:null 得空串、布尔得 true/false、数组按逗号连接 */ public static String asText(Object value) { if (value == null) { return ""; } if (value instanceof Boolean bool) { return bool ? "true" : "false"; } if (value instanceof Double || value instanceof Float || value instanceof BigDecimal) { return Numbers.toString(((Number) value).doubleValue()); } if (value instanceof Integer || value instanceof Long) { return String.valueOf(value); } if (value instanceof List list) { List parts = new ArrayList<>(list.size()); for (Object element : list) { parts.add(element == null ? "" : asText(element)); } return String.join(",", parts); } return String.valueOf(value); } }