From 5e2982df8aca712c3156711c1917fcedb6cfb087 Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期三, 09 九月 2026 10:30:23 +0800
Subject: [PATCH] fix: 09-09上午整改——RULE_001分项运政对比(6段)+阈值说明联动通用化+汇总大表列宽回归母版+导入结果弹窗 + 测试报告与工作日结
---
traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java | 86 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 86 insertions(+), 0 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 799c2fc..8269c27 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
@@ -1569,6 +1569,8 @@
switch (rule.getCompareType()) {
case "DIFF":
return checkDiff(rule, report, authMap);
+ case "DIFF_FIELDS":
+ return checkDiffFields(rule, report, authMap);
case "RATIO":
return checkRatio(rule, report, authMap, trackMap);
case "MOM":
@@ -1609,6 +1611,86 @@
"宸窛鈮�" + fmt(threshold), "宸窛=" + fmt(diff));
}
return null;
+ }
+
+ /** RULE_001 鍒嗛」杩愭斂瀵规瘮锛氱壍寮曡溅/鎸傝溅/鏁磋溅杞﹁締鏁颁笌鎸傝溅鍚ㄤ綅/鏁磋溅鍚ㄤ綅/鎬诲惃浣嶅垎鍒笌杩愭斂瀵规瘮锛屼换涓�鍒嗛」瓒呴檺鍗虫彁閱� */
+ private AuditResult checkDiffFields(AuditRule rule, H2032EnterpriseMonthly report,
+ Map<String, TransportAuthVehicle> authMap) {
+ TransportAuthVehicle auth = findAuth(authMap, report.getEnterpriseName());
+ if (auth == null) return null;
+ String[] fields = rule.getCheckField() == null ? new String[0] : rule.getCheckField().split(",");
+ String[] limits = rule.getThreshold() == null ? new String[0] : rule.getThreshold().split("[,;|]");
+ if (fields.length == 0 || limits.length != fields.length) return null;
+ java.util.List<String> hits = new java.util.ArrayList<>();
+ double maxAbs = 0;
+ for (int i = 0; i < fields.length; i++) {
+ String field = fields[i].trim();
+ double limit;
+ try {
+ limit = Double.parseDouble(limits[i].trim());
+ } catch (Exception e) {
+ return null;
+ }
+ double actual;
+ double reference;
+ String unit;
+ switch (field) {
+ case "vehicleTractor":
+ actual = num(report.getVehicleTractor());
+ reference = num(auth.getTractorCount());
+ unit = "鍙�";
+ break;
+ case "vehicleTrailer":
+ actual = num(report.getVehicleTrailer());
+ reference = num(auth.getTrailerCount());
+ unit = "鍙�";
+ break;
+ case "tonsTrailer":
+ actual = nvl(report.getTonsTrailer());
+ reference = nvl(auth.getTrailerTons());
+ unit = "鍚�";
+ break;
+ case "vehicleWhole":
+ actual = num(report.getVehicleWhole());
+ reference = num(auth.getOtherCount());
+ unit = "鍙�";
+ break;
+ case "tonsWhole":
+ actual = nvl(report.getTonsWhole());
+ reference = nvl(auth.getOtherTons());
+ unit = "鍚�";
+ break;
+ case "tonsTotal":
+ actual = nvl(report.getTonsTotal());
+ reference = nvl(auth.getTrailerTons()) + nvl(auth.getOtherTons());
+ unit = "鍚�";
+ break;
+ default:
+ return null;
+ }
+ double diff = Math.abs(actual - reference);
+ maxAbs = Math.max(maxAbs, diff);
+ if (diff > limit) {
+ hits.add(h2032FieldLabel(field) + "锛氫笂鎶�=" + fmt(actual) + " " + unit + "锛岃繍鏀�=" + fmt(reference) + " " + unit
+ + "锛屽樊" + fmt(diff) + " " + unit + "锛堥檺" + fmt(limit) + " " + unit + "锛�");
+ }
+ }
+ if (hits.isEmpty()) return null;
+ StringBuilder detail = new StringBuilder();
+ for (int i = 0; i < hits.size(); i++) {
+ String one = hits.get(i);
+ if (detail.length() == 0) {
+ detail.append(one);
+ } else if (detail.length() + one.length() + 1 <= 180) {
+ detail.append("锛�").append(one);
+ } else {
+ detail.append("锛涚瓑").append(hits.size() - i).append("椤硅秴闄�");
+ break;
+ }
+ }
+ return buildResult(rule, report, detail.toString(),
+ "鐗靛紩杞�/鎸傝溅/鏁磋溅杞﹁締宸墹5鍙帮紱鎸傝溅鍚ㄤ綅/鏁磋溅鍚ㄤ綅宸墹50鍚紱鎬诲惃浣嶅樊鈮�50鍚�",
+ "瓒呭嚭椤规暟=" + hits.size() + "锛屾渶澶у樊=" + fmt(maxAbs));
}
/** 涓婃姤鍛ㄨ浆閲忎笌杞ㄨ抗娴嬬畻鍛ㄨ浆閲忓姣旓紝楂樺嚭闃堝�兼瘮渚嬫牳瀹� */
@@ -1804,6 +1886,10 @@
labels.put("tonsWhole", "鏁磋溅鍚ㄤ綅");
labels.put("turnoverTotal", "鍛ㄨ浆閲�");
labels.put("vehicleWhole", "鏁磋溅杞﹁締鏁�");
+ labels.put("vehicleTractor", "鐗靛紩杞︽暟");
+ labels.put("vehicleTrailer", "鎸傝溅鏁�");
+ labels.put("tonsTrailer", "鎸傝溅鍚ㄤ綅");
+ labels.put("tonsWhole", "鏁磋溅鍚ㄤ綅");
String v = labels.get(field);
return v == null ? field : v;
}
--
Gitblit v1.9.1