From 59ed6c3057a37da9e50e69f0e087291bbfaa69d5 Mon Sep 17 00:00:00 2001 From: chenchuchuan <13554600537@163.com> Date: Mon, 31 Aug 2026 13:46:38 +0800 Subject: [PATCH] =?UTF-8?q?fix(rule):=20=E4=BF=AE=E5=A4=8D=E8=A1=A8?= =?UTF-8?q?=E5=8D=95=E8=A7=84=E5=88=99=E5=BC=95=E6=93=8E=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E5=92=8C=E6=95=B0=E5=80=BC=E8=AE=A1=E7=AE=97=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改 FormRuleEngine 中 executeRule 方法访问修饰符为 public 并新增 executeAction 方法 - 在 Jexl3Util 中添加数值参数归一化处理,解决整数除法截断问题 - 统一在线操作服务中文件列表返回格式为 JSON 字符串保持数据契约一致性 --- .../apelet/common/online/rule/FormRuleEngine.java | 12 ++++++++--- .../service/impl/OnlineOperationServiceImpl.java | 5 ++++- .../java/apelet/common/online/util/Jexl3Util.java | 25 ++++++++++++++++++++-- 3 files changed, 36 insertions(+), 6 deletions(-) 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()) {