From 8c65f898ed6e5b0c7a94c792c4562f6ec831dccd Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期六, 07 十一月 2026 08:50:53 +0800
Subject: [PATCH] feat: 完善质检、生产、销售、财务与人事模块并接入审批流程

---
 yudao-module-qcreport/src/main/java/cn/iocoder/yudao/module/qcreport/engine/rule/RuleEvaluator.java |   23 ++++++++++++++++-------
 1 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/yudao-module-qcreport/src/main/java/cn/iocoder/yudao/module/qcreport/engine/rule/RuleEvaluator.java b/yudao-module-qcreport/src/main/java/cn/iocoder/yudao/module/qcreport/engine/rule/RuleEvaluator.java
index ad9de51..dc8ad33 100644
--- a/yudao-module-qcreport/src/main/java/cn/iocoder/yudao/module/qcreport/engine/rule/RuleEvaluator.java
+++ b/yudao-module-qcreport/src/main/java/cn/iocoder/yudao/module/qcreport/engine/rule/RuleEvaluator.java
@@ -71,6 +71,15 @@
         return asText(left).compareTo(asText(right));
     }
 
+    private static int compareNumbers(Object left, Object right) {
+        double leftNumber = Paths.toNumber(left);
+        double rightNumber = Paths.toNumber(right);
+        if (!Double.isFinite(leftNumber) || !Double.isFinite(rightNumber)) {
+            throw new RuleRuntimeException("鏁板�兼瘮杈冪己灏戞湁鏁堝疄娴嬪�兼垨瑙勬牸闄愬��");
+        }
+        return Double.compare(leftNumber, rightNumber);
+    }
+
     /** 鍒ゅ畾缁撴灉绫诲彇鍊肩粺涓�鎴� PASS / FAIL锛岃瘑鍒笉鍑鸿繑鍥炵┖涓� */
     public static String normalizeResultToken(Object value) {
         if (value instanceof Boolean bool) {
@@ -259,8 +268,8 @@
 
     private static Object evaluateBetween(RuleNode.Between between, Object context) {
         Object value = evaluateNode(between.value(), context);
-        boolean hit = compare(value, evaluateNode(between.lower(), context)) >= 0
-                && compare(value, evaluateNode(between.upper(), context)) <= 0;
+        boolean hit = compareNumbers(value, evaluateNode(between.lower(), context)) >= 0
+                && compareNumbers(value, evaluateNode(between.upper(), context)) <= 0;
         return between.negated() != hit;
     }
 
@@ -290,10 +299,10 @@
         return switch (binary.operator()) {
             case "=" -> compare(left, right) == 0;
             case "!=" -> compare(left, right) != 0;
-            case ">" -> compare(left, right) > 0;
-            case ">=" -> compare(left, right) >= 0;
-            case "<" -> compare(left, right) < 0;
-            case "<=" -> compare(left, right) <= 0;
+            case ">" -> compareNumbers(left, right) > 0;
+            case ">=" -> compareNumbers(left, right) >= 0;
+            case "<" -> compareNumbers(left, right) < 0;
+            case "<=" -> compareNumbers(left, right) <= 0;
             case "+" -> add(left, right);
             case "-" -> Paths.toNumber(left) - Paths.toNumber(right);
             case "*" -> Paths.toNumber(left) * Paths.toNumber(right);
@@ -412,4 +421,4 @@
 
     }
 
-}
\ No newline at end of file
+}

--
Gitblit v1.9.3