|
|
|
@ -12,6 +12,7 @@ import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Component; |
|
|
|
import org.springframework.stereotype.Component; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.util.*; |
|
|
|
import java.util.*; |
|
|
|
import java.util.regex.Matcher; |
|
|
|
import java.util.regex.Matcher; |
|
|
|
import java.util.regex.Pattern; |
|
|
|
import java.util.regex.Pattern; |
|
|
|
@ -46,8 +47,7 @@ public class Jexl3Util { |
|
|
|
// 创建Context对象,为表达式中的未知数赋值
|
|
|
|
// 创建Context对象,为表达式中的未知数赋值
|
|
|
|
JexlContext context = new MapContext(); |
|
|
|
JexlContext context = new MapContext(); |
|
|
|
if (paramMap != null) { |
|
|
|
if (paramMap != null) { |
|
|
|
paramMap.forEach((key, value) -> |
|
|
|
paramMap.forEach((key, value) -> context.set(key.toLowerCase(), normalize(value)) |
|
|
|
context.set(key.toLowerCase(), value instanceof String ? ((String) value).toLowerCase() : value) |
|
|
|
|
|
|
|
); |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
// 使用表达式引擎创建表达式对象
|
|
|
|
// 使用表达式引擎创建表达式对象
|
|
|
|
@ -59,6 +59,27 @@ public class Jexl3Util { |
|
|
|
return evaluate; |
|
|
|
return evaluate; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* 数值参数归一:整型转 Double 避免 JEXL 整数除法截断(如 21/2=10 应为 10.5); |
|
|
|
|
|
|
|
* BigDecimal 保留精度(避免大数转 Double 丢精度);String 转小写与表达式归一一致;其余原样。 |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
private Object normalize(Object value) { |
|
|
|
|
|
|
|
if (value instanceof Integer) { |
|
|
|
|
|
|
|
return ((Integer) value).doubleValue(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (value instanceof Long) { |
|
|
|
|
|
|
|
return ((Long) value).doubleValue(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (value instanceof BigDecimal) { |
|
|
|
|
|
|
|
return value; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (value instanceof String) { |
|
|
|
|
|
|
|
return ((String) value).toLowerCase(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return value; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public Map<String, Object> getMapValue(JSONObject obj, ObjectValue objectValue) { |
|
|
|
public Map<String, Object> getMapValue(JSONObject obj, ObjectValue objectValue) { |
|
|
|
HashMap<String, Object> map = new HashMap<>(); |
|
|
|
HashMap<String, Object> map = new HashMap<>(); |
|
|
|
for (String tab : obj.keySet()) { |
|
|
|
for (String tab : obj.keySet()) { |
|
|
|
|