package cn.iocoder.yudao.module.qcreport.engine;
|
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* JS 值语义。
|
* <p>
|
* 渲染与规则求值的产物要跟前端逐字一致,而 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<String> parts = new ArrayList<>(list.size());
|
for (Object element : list) {
|
parts.add(element == null ? "" : asText(element));
|
}
|
return String.join(",", parts);
|
}
|
return String.valueOf(value);
|
}
|
|
}
|