From 91db18c1cfd1b48f653a9ae3435abe84d9a603bf Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期一, 07 九月 2026 16:10:17 +0800
Subject: [PATCH] feat: 汇总大表人工修母版——货运规上规下 2021-2026 补数 + 6 个成品页当月块按 2026-07 重算(含周转行/巡游行/合计列三处脚本 bug 修正)及测试报告

---
 traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java |   36 ++++++++++++++++++++++++++++--------
 1 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java b/traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java
index 29bffc1..5d343bb 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java
@@ -631,6 +631,8 @@
                     .eq(InvestmentSystem::getReportPeriod, reportPeriod))) {
             sysMap.computeIfAbsent(normInvestName(s.getProjectName()), k -> new ArrayList<>()).add(s);
         }
+        // 鍚屾姤琛ㄦ湡鎶曡祫绯荤粺鍩哄噯鏁存湡缂哄け鏃讹紝涓嶅仛"椤圭洰缂哄け鏍稿疄"锛堢己澶�=鍩哄噯鏈鍏ワ紝涓嶇瓑浜庨」鐩笉瀛樺湪锛夛紝閬垮厤鏁磋〃璇姤
+        boolean benchmarkMissing = sysMap.isEmpty();
 
         // 骞傜瓑锛氬彧娓呴櫎 INVEST 瑙勫垯鐨勬棫瀹℃牳缁撴灉
         List<Long> ruleIds = new ArrayList<>();
@@ -647,6 +649,7 @@
             String projectName = project == null ? "鏈煡椤圭洰" : project.getProjectName();
             InvestmentSystem sys = findInvestSystem(sysMap, projectName);
             for (AuditRule rule : rules) {
+                if (benchmarkMissing && "EXISTENCE_SYS".equals(rule.getCompareType())) continue;
                 AuditResult result = checkInvestRule(rule, monthly, projectName, sys);
                 if (result != null) {
                     result.setRuleName(rule.getRuleName());
@@ -1538,6 +1541,7 @@
             case "RULE_I001":
             case "RULE_I002":
             case "RULE_I003":
+            case "RULE_I004":
                 return investSystemMapper.selectCount(new LambdaQueryWrapper<InvestmentSystem>()
                     .eq(InvestmentSystem::getReportPeriod, period)) == 0;
             default:
@@ -1675,15 +1679,29 @@
         return null;
     }
 
-    /** 鏁板�艰寖鍥存鏌ワ紙濡� 鏁磋溅鍚ㄤ綅 4鈮や笖鈮�40锛� */
+    /** 鏁板�艰寖鍥存鏌ワ紱鏁磋溅鍚ㄤ綅鎸夆�滃钩鍧囧惃浣�=鏁磋溅鍚ㄤ綅/鏁磋溅鏁扳�濆彛寰勫垽瀹� 4~40 */
     private AuditResult checkOutRange(AuditRule rule, H2032EnterpriseMonthly report) {
         String[] bounds = rule.getThreshold().split(",");
         if (bounds.length < 2) return null;
-        double value = getH2032FieldValue(report, rule.getCheckField());
+        String field = rule.getCheckField();
+        String label = h2032FieldLabel(field);
+        double value;
+        if ("tonsWhole".equals(field)) {
+            double vehicles = report.getVehicleWhole() == null ? 0.0 : report.getVehicleWhole().doubleValue();
+            double tons = nvl(report.getTonsWhole());
+            if (vehicles > 0) {
+                value = tons / vehicles;
+                label = "鏁磋溅骞冲潎鍚ㄤ綅(鏁磋溅鍚ㄤ綅/鏁磋溅鏁�)";
+            } else {
+                value = tons; // 鏃犳暣杞︽暟浣嗘湁鍚ㄤ綅鏃朵粛鎸夊師鍚ㄤ綅鍒ゅ畾
+            }
+        } else {
+            value = getH2032FieldValue(report, field);
+        }
         double low = Double.parseDouble(bounds[0].trim());
         double high = Double.parseDouble(bounds[1].trim());
         if (value > 0 && (value < low || value > high)) {
-            return buildResult(rule, report, h2032FieldLabel(rule.getCheckField()) + "=" + fmt(value),
+            return buildResult(rule, report, label + "=" + fmt(value),
                 "鑼冨洿 " + fmt(low) + "~" + fmt(high), "瓒呭嚭鑼冨洿");
         }
         return null;
@@ -1801,18 +1819,20 @@
     }
 
     private String fmt(double v) {
-        if (v == Math.floor(v) && !Double.isInfinite(v)) {
+        if (v == Math.floor(v) && !Double.isInfinite(v) && Math.abs(v) < 1e15) {
             return String.valueOf((long) v);
         }
-        return String.valueOf(Math.round(v * 100.0) / 100.0);
+        return java.math.BigDecimal.valueOf(v).setScale(2, java.math.RoundingMode.HALF_UP)
+            .stripTrailingZeros().toPlainString();
     }
 
     /** 鍗犳瘮/灏忔暟鍊硷細淇濈暀 4 浣嶅皬鏁� */
     private String fmt4(double v) {
-        if (v == Math.floor(v) && !Double.isInfinite(v)) {
+        if (v == Math.floor(v) && !Double.isInfinite(v) && Math.abs(v) < 1e15) {
             return String.valueOf((long) v);
         }
-        return String.valueOf(Math.round(v * 10000.0) / 10000.0);
+        return java.math.BigDecimal.valueOf(v).setScale(4, java.math.RoundingMode.HALF_UP)
+            .stripTrailingZeros().toPlainString();
     }
 
     // ========== H2031 鏃呭瀹℃牳 ==========
@@ -2021,4 +2041,4 @@
         result.setStatus("PENDING");
         return result;
     }
-}
\ No newline at end of file
+}

--
Gitblit v1.9.1