diff --git a/common/common-online/src/main/java/apelet/common/online/rule/FormRuleEngine.java b/common/common-online/src/main/java/apelet/common/online/rule/FormRuleEngine.java index 5fcaed2..fa2a07f 100644 --- a/common/common-online/src/main/java/apelet/common/online/rule/FormRuleEngine.java +++ b/common/common-online/src/main/java/apelet/common/online/rule/FormRuleEngine.java @@ -80,14 +80,20 @@ public class FormRuleEngine { if (rule == null) { return null; } + return executeAction(rule, null, values); + } + + public List executeAction(FormRule rule, OnlineEventPluginExecuteDto dto, ObjectValue values) { + if (dto == null) { + dto = new OnlineEventPluginExecuteDto(); + } List result = new ArrayList<>(); - executeRule(rule, null, values, null, new OnlineEventPluginExecuteDto(), result); + executeRule(rule, null, values, null, dto, result); return result; } - private void executeRule(FormRule rule, OnlineForm form, ObjectValue ov, String eventCode, - OnlineEventPluginExecuteDto dto, List result) { + public void executeRule(FormRule rule, OnlineForm form, ObjectValue ov, String eventCode, OnlineEventPluginExecuteDto dto, List result) { if (!rule.isEnable()) { return; } diff --git a/common/common-online/src/main/java/apelet/common/online/service/impl/OnlineOperationServiceImpl.java b/common/common-online/src/main/java/apelet/common/online/service/impl/OnlineOperationServiceImpl.java index e9ddef6..cba3e46 100644 --- a/common/common-online/src/main/java/apelet/common/online/service/impl/OnlineOperationServiceImpl.java +++ b/common/common-online/src/main/java/apelet/common/online/service/impl/OnlineOperationServiceImpl.java @@ -2595,6 +2595,8 @@ public class OnlineOperationServiceImpl implements OnlineOperationService { /** * 查询结果回填:将附件上传/图片上传字段对应的 zz_online_file 数据组装成文件JSON数组回填到字段上。 + *

统一返回文件JSON数组的字符串形式:历史数据业务列直接存JSON字符串,新数据从 zz_online_file 组装后也转成字符串, + * 与保存侧 parseOnlineFileList 的字符串入参契约一致,前端无需区分新旧数据。

* * @param resultList 查询结果列表。 * @param table 在线数据表对象。 @@ -2649,7 +2651,8 @@ public class OnlineOperationServiceImpl implements OnlineOperationService { fileJson.put("uploadFailed", false); fileArray.add(fileJson); } - result.put(column.getColumnName(), fileArray); + // 统一返回文件JSON字符串,与历史数据(业务列直接存JSON字符串)及保存侧(parseOnlineFileList按字符串解析)契约一致。 + result.put(column.getColumnName(), fileArray.toJSONString()); } } } diff --git a/common/common-online/src/main/java/apelet/common/online/util/Jexl3Util.java b/common/common-online/src/main/java/apelet/common/online/util/Jexl3Util.java index a8306eb..3613ef6 100644 --- a/common/common-online/src/main/java/apelet/common/online/util/Jexl3Util.java +++ b/common/common-online/src/main/java/apelet/common/online/util/Jexl3Util.java @@ -12,6 +12,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.math.BigDecimal; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -46,8 +47,7 @@ public class Jexl3Util { // 创建Context对象,为表达式中的未知数赋值 JexlContext context = new MapContext(); if (paramMap != null) { - paramMap.forEach((key, value) -> - context.set(key.toLowerCase(), value instanceof String ? ((String) value).toLowerCase() : value) + paramMap.forEach((key, value) -> context.set(key.toLowerCase(), normalize(value)) ); } // 使用表达式引擎创建表达式对象 @@ -59,6 +59,27 @@ public class Jexl3Util { 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 getMapValue(JSONObject obj, ObjectValue objectValue) { HashMap map = new HashMap<>(); for (String tab : obj.keySet()) {