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/test/java/cn/iocoder/yudao/module/qcreport/engine/ReportEvaluatorTest.java |   22 ++++++++++++++++++++++
 1 files changed, 22 insertions(+), 0 deletions(-)

diff --git a/yudao-module-qcreport/src/test/java/cn/iocoder/yudao/module/qcreport/engine/ReportEvaluatorTest.java b/yudao-module-qcreport/src/test/java/cn/iocoder/yudao/module/qcreport/engine/ReportEvaluatorTest.java
index c0b74e2..a0f80bf 100644
--- a/yudao-module-qcreport/src/test/java/cn/iocoder/yudao/module/qcreport/engine/ReportEvaluatorTest.java
+++ b/yudao-module-qcreport/src/test/java/cn/iocoder/yudao/module/qcreport/engine/ReportEvaluatorTest.java
@@ -32,6 +32,28 @@
 class ReportEvaluatorTest {
 
     @Test
+    void numericRuleRequiresRealMeasurementsAndLimits() {
+        ReportContext context = ReportContext.empty().setInspectionItems(List.of(
+                item("鏈娴�", "", 10.0, 0.0),
+                item("缂鸿鏍�", "5", null, null),
+                item("宸叉娴�", "5", 10.0, 0.0)));
+        List<QualityRuleDefinition> rules = List.of(
+                itemRule("鏁板�艰寖鍥�", "item.actualValue >= item.lowerLimit AND item.actualValue <= item.upperLimit"),
+                new QualityRuleDefinition("report-rate", "鏁翠綋鍚堟牸鐜�", RuleScope.REPORT,
+                        "PASS_RATE(inspectionItems) >= 60", true));
+
+        EvaluationOutcome outcome = ReportEvaluator.evaluate(context, rules);
+        assertEquals("", outcome.context().getInspectionItems().get(0).getResult());
+        assertEquals("", outcome.context().getInspectionItems().get(1).getResult());
+        assertEquals("PASS", outcome.context().getInspectionItems().get(2).getResult());
+        assertEquals("", outcome.context().getReport().getResult());
+        assertEquals(QualityResult.PENDING_TEXT, outcome.context().getReport().getConclusion());
+        assertEquals("33.33%", outcome.context().getReport().getPassRate());
+        assertEquals(2, outcome.errors().size());
+        assertTrue(outcome.errors().stream().allMatch(error -> error.contains("鏁板�兼瘮杈冪己灏戞湁鏁堝疄娴嬪�兼垨瑙勬牸闄愬��")));
+    }
+
+    @Test
     void blankOrNonNumericResultsWithLimitsStayPendingAndCannotProduceAPass() {
         ReportContext context = ReportContext.empty().setInspectionItems(List.of(
                 item("閾�", "", 0.5, null),

--
Gitblit v1.9.3