From 2b1bfd1f5fa86378f2a86541d16d7e46963a0631 Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期二, 08 九月 2026 15:29:31 +0800
Subject: [PATCH] feat: 汇总大表日期格式/小数位复核+VBA列宽宏+DataView滚动加载+RULE_004双向与P005阈值联动
---
traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java | 52 ++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 38 insertions(+), 14 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 8d16e0c..799c2fc 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
@@ -1645,26 +1645,34 @@
return null;
}
- /** 璐ц繍绫诲瀷鐜瘮锛氭湰鏈堟柊澧烇紙涓婃湀涓�0銆佹湰鏈�>0锛夐渶鏍稿疄锛屽皯鐨勪笉绠� */
+ /** 璐ц繍绫诲瀷鐜瘮锛圧ULE_004锛夛細涓婃湀鏃犫啋鏈湀鏂板 鎴� 涓婃湀鏈夆啋鏈湀鏃狅紝鍧囨彁閱掓牳瀹� */
private AuditResult checkMom(AuditRule rule, H2032EnterpriseMonthly report,
Map<String, H2032EnterpriseMonthly> lastMonthMap) {
H2032EnterpriseMonthly lastMonth = lastMonthMap.get(key(report.getEnterpriseCode()));
if (lastMonth == null) return null;
- List<String> hits = new ArrayList<>();
+ List<String> addHits = new ArrayList<>();
+ List<String> delHits = new ArrayList<>();
for (String field : rule.getCheckField().split(",")) {
double current = getH2032FieldValue(report, field);
double last = getH2032FieldValue(lastMonth, field);
if (current > 0 && last == 0) {
- hits.add(h2032FieldLabel(field) + "=" + fmt(current));
+ addHits.add(h2032FieldLabel(field) + "=" + fmt(current));
+ } else if (last > 0 && current == 0) {
+ delHits.add(h2032FieldLabel(field) + "锛堜笂鏈�=" + fmt(last) + "锛屾湰鏈堟棤锛�");
}
}
- if (!hits.isEmpty()) {
- return buildResult(rule, report, "鏈湀鏂板: " + String.join("銆�", hits),
- "涓婃湀璇ョ被鍨嬩负0", "鏈湀鏂板璐ц繍绫诲瀷锛堜笂鏈堟棤锛�");
+ if (!addHits.isEmpty() || !delHits.isEmpty()) {
+ StringBuilder msg = new StringBuilder();
+ if (!addHits.isEmpty()) msg.append("鏈湀鏂板: ").append(String.join("銆�", addHits));
+ if (!delHits.isEmpty()) {
+ if (msg.length() > 0) msg.append("锛�");
+ msg.append("鏈湀娑堝け: ").append(String.join("銆�", delHits));
+ }
+ return buildResult(rule, report, msg.toString(),
+ "涓婃湀鏃犫啋鏈湀鏂板 鎴� 涓婃湀鏈夆啋鏈湀鏃�", "璐ц繍绫诲瀷鐜瘮鏂板/娑堝け闇�鏍稿疄");
}
return null;
}
-
/** 鏈夎揣杩愰噺浣嗗搴旇溅杈嗕负0 闇�鏍稿疄锛堝 鏈夐泦瑁呯璐ц繍閲忔棤闆嗚绠辫溅杈嗭級 */
private AuditResult checkNull(AuditRule rule, H2032EnterpriseMonthly report) {
String[] fields = rule.getCheckField().split(",");
@@ -1679,15 +1687,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;
@@ -1805,18 +1827,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 鏃呭瀹℃牳 ==========
--
Gitblit v1.9.1