From a9e6c0b1ddc8c2683ea604f3d5146ce8c310816e Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期五, 04 九月 2026 16:54:34 +0800
Subject: [PATCH] fix: 整车吨位按平均吨位口径审核、提示数字去科学计数;拆分导入按目标期取月页签(重导04-06验证);数据查看全屏可翻页 + 测试报告
---
docs/功能测试报告/功能测试报告_审核平均吨位口径与拆分目标月导入及全屏翻页_2026-09-04.md | 22 +++++++++++
traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java | 13 +++++-
traffic-audit-web/src/views/DataView.vue | 44 +++++++++++++++-------
docs/生成汇总大表/数据导入现状与缺口清单_2026-09-04.md | 9 ++++
traffic-audit-server/src/main/java/com/trafficaudit/auditengine/service/AuditEngineService.java | 30 +++++++++++---
5 files changed, 95 insertions(+), 23 deletions(-)
diff --git "a/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\345\256\241\346\240\270\345\271\263\345\235\207\345\220\250\344\275\215\345\217\243\345\276\204\344\270\216\346\213\206\345\210\206\347\233\256\346\240\207\346\234\210\345\257\274\345\205\245\345\217\212\345\205\250\345\261\217\347\277\273\351\241\265_2026-09-04.md" "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\345\256\241\346\240\270\345\271\263\345\235\207\345\220\250\344\275\215\345\217\243\345\276\204\344\270\216\346\213\206\345\210\206\347\233\256\346\240\207\346\234\210\345\257\274\345\205\245\345\217\212\345\205\250\345\261\217\347\277\273\351\241\265_2026-09-04.md"
new file mode 100644
index 0000000..ad60e87
--- /dev/null
+++ "b/docs/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212/\345\212\237\350\203\275\346\265\213\350\257\225\346\212\245\345\221\212_\345\256\241\346\240\270\345\271\263\345\235\207\345\220\250\344\275\215\345\217\243\345\276\204\344\270\216\346\213\206\345\210\206\347\233\256\346\240\207\346\234\210\345\257\274\345\205\245\345\217\212\345\205\250\345\261\217\347\277\273\351\241\265_2026-09-04.md"
@@ -0,0 +1,22 @@
+# 鍔熻兘娴嬭瘯鎶ュ憡锛氬鏍稿叕寮忎慨姝� + 鎷嗗垎鐩爣鏈堝鍏� + 鍏ㄥ睆缈婚〉锛�2026-09-04锛�
+
+## 涓�銆佽揣杩愬鏍� RULE_006锛氭暣杞﹀惃浣嶆敼涓衡�滃钩鍧囧惃浣嶁�濆彛寰�
+- 鏀瑰姩锛歚AuditEngineService.checkOutRange` 瀵� `tonsWhole` 瀛楁鎸夆�滄暣杞﹀钩鍧囧惃浣� = 鏁磋溅鍚ㄤ綅(tonsWhole) / 鏁磋溅杞﹁締鏁�(vehicleWhole)鈥濊绠楀悗涓� 4~40 姣旇緝锛涙棤鏁磋溅鏁版椂閫�鍥炲師鍊煎垽鏂�俙h2032FieldLabel` 涓嶅彉锛屾彁绀烘枃鏈樉寮忔爣鈥滄暣杞﹀钩鍧囧惃浣�(鏁磋溅鍚ㄤ綅/鏁磋溅鏁�)鈥濄��
+- 鍘熷洜锛氬師閫昏緫鐩存帴鎷挎暣杞﹀惃浣嶆�婚噺锛堝榛勫唸鍚▼鐗╂祦 357 鍚紝23 杈嗘暣杞︼級姣� 4~40锛屾妸鎬婚噺褰撳崟鍧囪鎶ャ��
+- 楠岃瘉锛氶噸鏂版墽琛� 2026-07 H2032 瀹℃牳锛圥OST /api/audit/execute锛夛紝RULE_006 鍛戒腑 8 鏉′笖鍏ㄩ儴涓衡�滄暣杞﹀钩鍧囧惃浣�=0.92~3.93锛岃寖鍥� 4~40鈥濓紙榛勫唸鍚▼ 357/23鈮�15.52 涓嶅啀鍛戒腑锛夛紱鍏朵綑瑙勫垯姝e父锛圧ULE_001 59銆丷ULE_002 106銆丷ULE_004 6銆丷ULE_005 21銆丷ULE_003 0锛夈�傜粨璁� PASS銆�
+
+## 浜屻�佸鏍告彁绀烘暟瀛椾笉鍐嶇敤绉戝璁℃暟娉�
+- 鏀瑰姩锛歚fmt`/`fmt4` 鐢� BigDecimal.toPlainString 杈撳嚭锛屽ぇ鏁板 1.04e7 鏄剧ず涓� 10435762.52 鑰屼笉鏄� 1.043576252E7銆�
+- 楠岃瘉锛氶噸瀵煎悗 2026-07 瀹℃牳鏂囨湰鍧囦负鏅�氬崄杩涘埗鏄剧ず锛涚紪璇戦�氳繃銆傜粨璁� PASS銆�
+
+## 涓夈�佽涓婅涓嬫媶鍒嗗鍏ワ細鎸夌洰鏍囨姤琛ㄦ湡鍙彇瀵瑰簲鏈堥〉绛�
+- 鏀瑰姩锛歚DataImportService.importScaleSplit` 澧炲姞鐩爣鏈堬紙period 鐨勬湀浠斤級杩囨护锛氶〉绛惧舰濡傗�渰M}鏈堢疮璁�/M鏈堜唤鈥濆彧鍦ㄨ M=鐩爣鏈堟椂瀵煎叆锛圡鏈堢疮璁♀啋CUMULATIVE銆丮鏈堜唤鈫扢ONTH锛夛紱椤电涓衡�滃綋鏈�/绱鈥濓紙妯℃澘鏍峰紡锛変笉闄愬畾鏈堛��
+- 鍘熷洜锛�1-N 鏈堟暣鍖呮枃浠惰鏁村浼氭妸澶氫釜鏈堥〉绛惧杩涘悓涓�鎶ヨ〃鏈熼�犳垚閲嶅琛岋紙姝ゅ墠 04-07 鍒嗗埆 72/90/108/126 琛屽嵆涓烘绫昏剰鏁版嵁锛夈��
+- 楠岃瘉锛堢鍒扮锛夛細鐢ㄣ��2026骞�1-6鏈堝叕璺揣杩愰噺锛堝垎甯傚窞锛�.xlsx銆嬮噸瀵� 2026-04/05/06锛屾瘡鏈熻繑鍥炩��36 鏉¤褰曗��=褰撴湀 18 + 绱 18锛涘簱鍐呮瘡鏈熸寜 region 鍞竴锛涙姹� 2026-06 褰撴湀鍚堣鍛ㄨ浆閲� 687103.88 涓庢簮鏂囦欢閫愬�间竴鑷达紱2026-07 鏃� 126 琛岀疮璁℃暟鎹緟鐢� 1-7 鏈堟枃浠堕噸瀵间竴娆″嵆鏀舵暃涓� 36 琛屻�傜粨璁� PASS銆�
+
+## 鍥涖�佹暟鎹煡鐪嬪叏灞忔ā寮忓彲缈婚〉锛堝墠绔級
+- 鏀瑰姩锛歚DataView.vue` 鎶婅〃鏍间笌鍏朵笅鍒嗛〉鍣ㄥ寘杩涘悓涓� `.table-wrap`锛屽叏灞忕洰鏍囦粠 `.table-area` 鏀逛负 `.table-wrap`锛屽苟鍔犲叏灞� flex 甯冨眬鏍峰紡锛屽叏灞忔椂淇濈暀鍒嗛〉鏉°��
+- 楠岃瘉锛氭ā鏉跨粨鏋�/閫昏緫璋冩暣缂栬瘧鐢� vue-cli-service 鐑洿鏂帮紱娴忚鍣ㄧ闇�鐢ㄦ埛鍏ㄥ睆鏌ョ湅纭锛堣〃鏍�+鍒嗛〉鍙銆佸彲缈婚〉锛夈�傜粨璁猴細浠g爜灏辩华锛屽緟浜哄伐瑙嗚纭銆�
+
+## 鐜
+- 鍚庣 8090锛堝娆¢噸鍚嚦鏈�鏂颁唬鐮侊紝鏈�鍚庝竴娆� 16:51 灏辩华锛夛紱鍓嶇 8080 杩愯涓紱MySQL 127.0.0.1:3308銆�
diff --git "a/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/\346\225\260\346\215\256\345\257\274\345\205\245\347\216\260\347\212\266\344\270\216\347\274\272\345\217\243\346\270\205\345\215\225_2026-09-04.md" "b/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/\346\225\260\346\215\256\345\257\274\345\205\245\347\216\260\347\212\266\344\270\216\347\274\272\345\217\243\346\270\205\345\215\225_2026-09-04.md"
index 0fdc0ae..eb7f164 100644
--- "a/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/\346\225\260\346\215\256\345\257\274\345\205\245\347\216\260\347\212\266\344\270\216\347\274\272\345\217\243\346\270\205\345\215\225_2026-09-04.md"
+++ "b/docs/\347\224\237\346\210\220\346\261\207\346\200\273\345\244\247\350\241\250/\346\225\260\346\215\256\345\257\274\345\205\245\347\216\260\347\212\266\344\270\216\347\274\272\345\217\243\346\270\205\345\215\225_2026-09-04.md"
@@ -65,3 +65,12 @@
3. 姣嶇増鎸夆�滄暟鎹拰鍏紡鏀瑰鍚庝綔涓烘瘝鐗堚�濆鐞嗭紙鎷嶆澘绗� 5 鏉★紝鍗充綋妫�娓呭崟鏂规 A 淇锛夈��
4. 鐙珛灏忚〃淇濈暀涓嶅垹锛堟媿鏉跨 1 鏉★級锛屽緟澶ц〃楠岃瘉閫氳繃鍚庡啀璁笅绾裤��
5. 鍏佽閲嶅瀵煎叆宸茬敓鏁堬紙鎸夋姤琛ㄦ湡鍏堝垹鍚庢彃锛屾媿鏉跨 3 鏉★級銆�
+
+---
+
+## 鏇存柊璁板綍锛�2026-09-04 涓嬪崍 鐢ㄦ埛绛斿鍚庯級
+- 鍏氦/鍑虹/涓綋瀹㈣繍/H203-1 宸茶ˉ瀵硷細2026-01~07锛圚203-1 鑷� 08锛夌幇宸插叏榻愶紱鎶曡祫妯″潡鏆備笉绾冲叆鏈鑼冨洿锛堢敤鎴风瓟澶嶏級銆�
+- 璐ц繍閲忓懆杞噺锛�2026-02 宸叉湁瀵煎叆琛岋紱鐢ㄦ埛绛斿鈥�7鏈堣〃鏍煎凡鍚� 1-7 鏈堟瘡鏈堟暟鎹�濅笖宸查噸鏂板鍏ワ紙2026-04~07 鍦ㄥ簱锛�01銆�03 鏃犵嫭绔嬭浣� 07 琛屽唴宓屽悇鏈堝垪鍊硷紝鍙栨暟鏃舵寜 m01~m07 浣跨敤锛夈��
+- 瑙勪笂瑙勪笅鎷嗗垎瀵煎叆宸插崌绾т负鈥滄寜鐩爣鎶ヨ〃鏈熷彇椤电鈥濓紙鍙鍏� {鐩爣鏈坿鏈堜唤/{鐩爣鏈坿绱锛屼笉鍐嶆妸 1-N 鏈堝叏閮ㄩ〉绛惧杩涘悓涓�鏈燂級锛屽苟宸茬敤銆�2026骞�1-6鏈堝叕璺揣杩愰噺锛堝垎甯傚窞锛�.xlsx銆嬮噸瀵� 2026-04/05/06 楠岃瘉锛氭瘡鏈� = 褰撴湀 18 琛� + 绱 18 琛岋紝姝︽眽 6 鏈堝綋鏈堝悎璁″懆杞噺 687103.88 涓庢簮鏂囦欢涓�鑷淬��2026-07 鐩墠浠嶄负鏃ф暟鎹紙126 琛岀疮璁★級锛屽緟鐢ㄣ��2026骞�1-7鏈堝叕璺揣杩愰噺锛堝垎甯傚窞锛�.xlsx銆嬮噸瀵间竴娆″嵆鍙彉骞插噣锛�36 琛岋級銆�
+- 瑙勪笂瑙勪笅鎷嗗垎 2026-01~03 浠嶇┖锛氬彲澶嶇敤銆�2026骞�1-6鏈堝叕璺揣杩愰噺锛堝垎甯傚窞锛夈�嬬瓑鏂囦欢锛屽鍏ラ〉閫夋姤琛ㄦ湡 01/02/03 鍗冲彲锛堢▼搴忓彧鍙栧搴旀湀椤电锛夛紝鎴栫敤鍚勬湀鑷繁鐨勫畾绋挎枃浠躲��
+- 鍘熲�滀釜浣撳杩� 2026-05 鏂囦欢鍚嶄负 (2026.3)鈥濈枒鐐瑰凡婢勬竻锛氭枃浠跺悕鍐欓敊銆佸唴瀹逛负 6 鏈堟暟鎹紝宸蹭慨鏀瑰悗瀵煎叆锛�06 鐜版湁 7 琛岋級銆�
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..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
@@ -1679,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;
@@ -1805,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 鏃呭瀹℃牳 ==========
diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java b/traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java
index 0f0c0f6..894487e 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java
@@ -924,6 +924,7 @@
List<ScaleSplitTransport> list = new ArrayList<>();
int failRows = 0;
try (Workbook wb = WorkbookFactory.create(file.getInputStream())) {
+ int targetMonth = Integer.parseInt(period.split("-")[1]); // 浠呭鍏ョ洰鏍囨湡鎵�鍦ㄦ湀鐨勯〉绛撅紙1-N鏈堟枃浠舵寜鐩爣鏈熷彇褰撴湀/绱锛�
boolean hasPeriodSheet = false;
for (int i = 0; i < wb.getNumberOfSheets(); i++) {
String sn = wb.getSheetAt(i).getSheetName();
@@ -936,8 +937,16 @@
Sheet sheet = wb.getSheetAt(i);
String sheetName = sheet.getSheetName();
String periodType = null;
- if (sheetName.contains("褰撴湀") || sheetName.contains("鏈堜唤")) periodType = "MONTH";
- else if (sheetName.contains("绱")) periodType = "CUMULATIVE";
+ java.util.regex.Matcher mSheetMonth = java.util.regex.Pattern.compile("(\\d{1,2})\\u6708(\\u4efd|\\u7d2f\\u8ba1)").matcher(sheetName);
+ if (mSheetMonth.find()) {
+ int sheetMonth = Integer.parseInt(mSheetMonth.group(1));
+ if (sheetMonth == targetMonth) {
+ periodType = "浠�".equals(mSheetMonth.group(2)) ? "MONTH" : "CUMULATIVE";
+ }
+ } else {
+ if (sheetName.contains("褰撴湀")) periodType = "MONTH";
+ else if (sheetName.contains("绱")) periodType = "CUMULATIVE";
+ }
if (periodType == null) continue;
// 鏍¢獙 sheet 甯冨眬锛氱2琛屽簲鍚�屽競宸�/瑙勪笂浼佷笟杩愯緭閲忋�嶏紝绗�3琛屽瓙琛ㄥご搴斿惈銆屽懆杞噺銆嶆垨銆岃揣杩愰噺銆嶏紙鎵╁睍甯冨眬锛�
diff --git a/traffic-audit-web/src/views/DataView.vue b/traffic-audit-web/src/views/DataView.vue
index 875f9ab..8ef5b0d 100644
--- a/traffic-audit-web/src/views/DataView.vue
+++ b/traffic-audit-web/src/views/DataView.vue
@@ -45,20 +45,22 @@
<div style="color:#909399;font-size:12px;margin-bottom:6px">
鍏� {{ total }} 鏉¤褰曪紝褰撳墠绗� {{ page }} 椤�
</div>
- <div class="table-area" ref="tableArea">
- <el-table :data="records" border v-loading="loading" size="small" style="width:100%" height="100%">
- <el-table-column v-for="c in columns" :key="c.prop" :prop="c.prop" :label="c.label" :min-width="c.width" show-overflow-tooltip>
- <template slot-scope="scope">
- <span>{{ formatCell(scope.row[c.prop]) }}</span>
- </template>
- </el-table-column>
- </el-table>
+ <div class="table-wrap" ref="tableWrap">
+ <div class="table-area">
+ <el-table :data="records" border v-loading="loading" size="small" style="width:100%" height="100%">
+ <el-table-column v-for="c in columns" :key="c.prop" :prop="c.prop" :label="c.label" :min-width="c.width" show-overflow-tooltip>
+ <template slot-scope="scope">
+ <span>{{ formatCell(scope.row[c.prop]) }}</span>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ <el-pagination style="margin-top:15px;text-align:right"
+ background layout="total, prev, pager, next, sizes"
+ :total="total" :current-page.sync="page" :page-size.sync="size"
+ :page-sizes="[20, 50, 100]" @current-change="loadData" @size-change="loadData">
+ </el-pagination>
</div>
- <el-pagination style="margin-top:15px;text-align:right"
- background layout="total, prev, pager, next, sizes"
- :total="total" :current-page.sync="page" :page-size.sync="size"
- :page-sizes="[20, 50, 100]" @current-change="loadData" @size-change="loadData">
- </el-pagination>
</el-main>
</el-container>
</el-container>
@@ -110,7 +112,7 @@
})
},
toggleFullscreen() {
- const el = this.$refs.tableArea
+ const el = this.$refs.tableWrap
if (!document.fullscreenElement) {
if (el && el.requestFullscreen) el.requestFullscreen()
else this.$message.warning("娴忚鍣ㄤ笉鏀寔鍏ㄥ睆")
@@ -139,4 +141,18 @@
background: #fff;
overflow: auto;
}
+#app .table-wrap:fullscreen {
+ padding: 20px;
+ background: #fff;
+ overflow: auto;
+ display: flex;
+ flex-direction: column;
+}
+#app .table-wrap:fullscreen .table-area {
+ flex: 1 1 auto;
+ min-height: 0;
+}
+#app .table-wrap:fullscreen .el-pagination {
+ flex: none;
+}
</style>
\ No newline at end of file
--
Gitblit v1.9.1