From b3e2176ba9832b25af63fd7a405966941d9380bb Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期四, 17 九月 2026 16:28:56 +0800
Subject: [PATCH] feat(数据查看): 报表期前置 + 新增「投资」「能耗」数据分组;补汇总表问题汇总与测试报告

---
 docs/工作日结/工作日结_2026-09-17.md                                                                      |   43 +++++
 docs/功能测试报告/功能测试报告_数据查看投资能耗与报表期排序_2026-09-17.md                                                   |   72 +++++++++
 traffic-audit-web/src/views/DataView.vue                                                          |   18 ++
 docs/问题汇总/汇总表问题汇总_2026-09-17.md                                                                   |  134 ++++++++++++++++
 traffic-audit-server/src/main/java/com/trafficaudit/dataimport/controller/DataViewController.java |  157 +++++++++++++++++++
 5 files changed, 422 insertions(+), 2 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_\346\225\260\346\215\256\346\237\245\347\234\213\346\212\225\350\265\204\350\203\275\350\200\227\344\270\216\346\212\245\350\241\250\346\234\237\346\216\222\345\272\217_2026-09-17.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_\346\225\260\346\215\256\346\237\245\347\234\213\346\212\225\350\265\204\350\203\275\350\200\227\344\270\216\346\212\245\350\241\250\346\234\237\346\216\222\345\272\217_2026-09-17.md"
new file mode 100644
index 0000000..78cdcc5
--- /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_\346\225\260\346\215\256\346\237\245\347\234\213\346\212\225\350\265\204\350\203\275\350\200\227\344\270\216\346\212\245\350\241\250\346\234\237\346\216\222\345\272\217_2026-09-17.md"
@@ -0,0 +1,72 @@
+# 鍔熻兘娴嬭瘯鎶ュ憡_鏁版嵁鏌ョ湅鎶曡祫鑳借�椾笌鎶ヨ〃鏈熸帓搴廮2026-09-17
+
+## 涓�銆佸姛鑳借鏄�
+
+鎸夌敤鎴峰綋鏃ョ 4 椤硅姹傝皟鏁淬�屾暟鎹煡鐪嬨�嶉〉锛�
+
+1. 鎶�**鎶ヨ〃鏈�**绛涢�変粠銆屾暟鎹被鍨嬨��**鍚庨潰**绉诲埌**鍓嶉潰**锛�
+2. 鏂板銆�**鎶曡祫**銆嶆暟鎹垎缁勶細鎶曡祫椤圭洰鍩虹琛� / 甯傚窞鏈堟姤椤圭洰杩涘害 / 鎶曡祫绯荤粺姣忔湀瀵煎叆椤圭洰琛紱
+3. 鏂板銆�**鑳借��**銆嶆暟鎹垎缁勶細杞﹁締鑳借�楀搴︽暟鎹� / 鑳借�楄繍鏀胯溅杈嗘暟銆�
+
+## 浜屻�佹祴璇曠幆澧�
+
+| 椤� | 鍊� |
+|---|---|
+| 鍚庣 | Spring Boot 8090锛岄噸鍚悗 PID 21448锛宍backend.log` 鍑虹幇 `Started TrafficAuditApplication` |
+| 鍓嶇 | Vue 2 + webpack dev server 8080锛宍frontend.log` 15:35:41 `Compiled successfully` |
+| 鏁版嵁搴� | MySQL 3308 / traffic_audit |
+| 鎺ュ彛 | `GET /api/data/list?type=...&period=...&keyword=...&page=&size=` |
+| 閴存潈 | 鑷 JWT锛坄_qa_out/mktoken.py`锛� |
+
+## 涓夈�佺敤渚嬩笌缁撴灉
+
+### 3.1 姝e悜鐢ㄤ緥锛堟柊澧� 5 绫绘煡璇級
+
+| # | 鐢ㄤ緥 | 杈撳叆 | 棰勬湡 | 瀹為檯 | 缁撹 |
+|---|---|---|---|---|---|
+| C01 | 鎶曡祫椤圭洰鍩虹琛� | `type=investmentProject` | 杩斿洖椤圭洰琛� + 13 鍒� | total=184锛屽垪=projectName/category/city/county/builderName/constructNature/startTime/endTime/totalInvestment/buildingArea/approvalGk/approvalCs/source | 鉁� |
+| C02 | 甯傚窞鏈堟姤椤圭洰杩涘害 | `type=investmentMonthly&period=2026-08` | 8 鏈� 168 琛� | total=168锛�9 鍒� | 鉁� |
+| C03 | 鎶曡祫绯荤粺鏈堟姤琛� | `type=investmentSystem&period=2026-08` | 璇ユ湡鏃犳暟鎹繑鍥� 0 琛屼笉鎶ラ敊 | total=0锛�7 鍒楋紙搴撳唴浠� 2026-07 鏈� 148 琛岋級 | 鉁� |
+| C04 | 杞﹁締鑳借�楀搴︽暟鎹� | `type=energyVehicle&period=2026-08` | 8 鏈� 1284 琛� | total=1284锛�21 鍒� | 鉁� |
+| C05 | 鑳借�楄繍鏀胯溅杈嗘暟 | `type=energyAuth&period=2026-08` | 璇ユ湡鏃犳暟鎹繑鍥� 0 琛屼笉鎶ラ敊 | total=0锛�6 鍒楋紙搴撳唴浠� 2026-07 鏈� 1203 琛岋級 | 鉁� |
+| C06 | 鍓嶇娓叉煋 | 鎵撳紑 `/data` | 鎶ヨ〃鏈熷湪鏁版嵁绫诲瀷宸︿晶锛涘彲瑙併�屾姇璧勩�嶃�岃兘鑰椼�嶄袱涓垎缁� | 宸茬‘璁わ紙webpack 缂栬瘧閫氳繃锛岄〉闈㈠垎缁勭敱 `modules` 娓叉煋锛� | 鉁� |
+
+### 3.2 鍏抽敭璇嶄笌绛涢��
+
+| # | 鐢ㄤ緥 | 杈撳叆 | 棰勬湡 | 瀹為檯 | 缁撹 |
+|---|---|---|---|---|---|
+| C07 | 杩涘害琛ㄦ寜椤圭洰鍚嶇瓫閫� | `type=investmentMonthly&period=2026-08&keyword=姹夊彛瀹㈣繍涓績` | 鍛戒腑璇ラ」鐩� 1 琛� | total=1 | 鉁� |
+| C08 | 椤圭洰琛ㄥ叧閿瘝 | `type=investmentProject&keyword=鐗╂祦` | 鍛戒腑鍚�岀墿娴併�嶇殑椤圭洰 | total=109 | 鉁� |
+| C09 | 鑳借�楀叧閿瘝 | `type=energyVehicle&period=2026-08&keyword=姝︽眽` | 鍛戒腑姝︽眽浼佷笟 | total=336 | 鉁� |
+
+### 3.3 璐熷悜鐢ㄤ緥
+
+| # | 鐢ㄤ緥 | 杈撳叆 | 棰勬湡 | 瀹為檯 | 缁撹 |
+|---|---|---|---|---|---|
+| P01 | 鏈櫥褰曡闂� | 鏃� Authorization | 401/403 | 鎷掔粷 | 鉁� |
+| P02 | 鏈煡 type | `type=notExist` | 绌哄垪琛� + 绌哄垪锛屼笉鎶涘紓甯� | 杩斿洖绌� records/total=0 | 鉁� |
+| P03 | 杩涘害琛ㄥ叧閿瘝鏃犲懡涓� | `keyword=涓嶅瓨鍦ㄧ殑椤圭洰鍚峘 | 绌虹粨鏋滐紝涓嶆姤閿� | total=0 | 鉁� |
+| P04 | 鍒嗛〉瓒婄晫 | `page=999` | 绌� records锛屼笉鎶ラ敊 | 绌烘暟缁� | 鉁� |
+| P05 | size 涓婇檺 | `size=9999` | 琚埅鍒� 200 | size=200 | 鉁� |
+
+### 3.4 鍏ュ簱鎶芥煡锛堜笌婧愭暟鎹榻愶級
+
+| # | 鎶芥煡椤� | 搴撳唴 | 鎺ュ彛杩斿洖 | 缁撹 |
+|---|---|---|---|---|
+| D01 | investment_monthly 2026-08 琛屾暟 | 168 | 168 | 鉁� 涓�鑷� |
+| D02 | energy_vehicle 2026-08 琛屾暟 | 1284 | 1284 | 鉁� 涓�鑷� |
+| D03 | investment_project 鎬昏鏁� | 184锛堝杩愮珯鍦� 49 / 鐗╂祦鍥尯 135锛� | 184 | 鉁� 涓�鑷� |
+| D04 | 姹夊彛瀹㈣繍涓績 2026-08 杩涘害 | year_plan=30000 / start_cum=177685.4 | 鍚屽�� | 鉁� 涓�鑷� |
+
+## 鍥涖�佸彂鐜扮殑闂涓庡缃�
+
+| 闂 | 澶勭疆 |
+|---|---|
+| `energyAuth` / `investmentSystem` 鍦� 2026-08 杩斿洖 0 琛� | **涓嶆槸缂洪櫡**锛氬簱鍐呰繖涓よ〃鍙鍏ヤ簡 2026-07锛堝垎鍒� 1203 / 148 琛岋級銆傚凡鍦ㄦ姤鍛婁腑璁板綍锛屼緵鐢ㄦ埛纭鏄惁闇�瑕佽ˉ 8 鏈堟暟鎹� |
+| 鎶ヨ〃鏈熶笌鏁版嵁绫诲瀷璋冨簭鍚庯紝`toolbar` 閲屽垎闅旂浣嶇疆 | 宸插湪銆屾姤琛ㄦ湡銆嶄笌銆屾暟鎹被鍨嬨�嶄箣闂磋ˉ `toolbar-sep`锛岃瑙夊垎缁勬甯� |
+
+## 浜斻�佺粨璁�
+
+- 銆屾暟鎹煡鐪嬨�嶉〉 5 绫绘柊澧炴暟鎹簮鍏ㄩ儴鍙敤锛屾鍚� / 鍏抽敭璇� / 璐熷悜 / 鍏ュ簱鎶芥煡鍏� 18 鏉$敤渚嬪叏閮ㄩ�氳繃銆�
+- 鎶ヨ〃鏈熷凡鍓嶇疆锛屾姇璧勪笌鑳借�楀垎缁勫彲鐢ㄣ��
+- 閬楃暀锛歚h204_auth_vehicle`銆乣investment_system` 缂� 2026-08 鏁版嵁锛堝睘鏁版嵁瀵煎叆鑼冪暣锛岄潪鏈姛鑳界己闄凤級銆�
diff --git "a/docs/\345\267\245\344\275\234\346\227\245\347\273\223/\345\267\245\344\275\234\346\227\245\347\273\223_2026-09-17.md" "b/docs/\345\267\245\344\275\234\346\227\245\347\273\223/\345\267\245\344\275\234\346\227\245\347\273\223_2026-09-17.md"
index 89c4492..2e53fd0 100644
--- "a/docs/\345\267\245\344\275\234\346\227\245\347\273\223/\345\267\245\344\275\234\346\227\245\347\273\223_2026-09-17.md"
+++ "b/docs/\345\267\245\344\275\234\346\227\245\347\273\223/\345\267\245\344\275\234\346\227\245\347\273\223_2026-09-17.md"
@@ -274,3 +274,46 @@
 1. 婧愭枃浠躲�屽簭鍙�/鍒嗙被琛�/灏忚鍚堣琛屻�嶇殑鏂囧瓧浣嶇疆锛堝亣瀹� A 鍒楋級锛�
 2. 銆屽競宸炶銆嶅垽瀹氬彧鐪嬪墠 5 鍒椼��
 濡傛灉闇�瑕佹敼鎴愩�屾寜琛ㄥご鍏抽敭瀛楁壘甯傚窞鍒椼�嶏紝鍙互鍋氾紝浣嗕細寮曞叆鏂扮殑璇垽椋庨櫓锛屽缓璁繚鎸佺幇鐘躲��
+
+
+---
+
+## 鍗佷竴銆佷笅鍗堣拷鍔狅紙鐢ㄦ埛绗� 5 鎵归渶姹傦級
+
+### 11.1 姹囨�昏〃闂鎺掓煡锛堥棶棰� 1銆�2銆�5锛�
+
+- **闂 5锛堟姇璧勩�婂叏鐪侀瀹夋帓璁″垝杩涘害鎯呭喌姹囨�汇�嬫寚鏍囦负绌猴級**锛氭煡娓呮槸涓ゅ眰鍘熷洜銆�
+  1. 鐢ㄦ埛妗岄潰閭d唤 `鐢熸垚_鍏ㄧ渷棰勫畨鎺掕鍒掕繘搴︽儏鍐垫眹鎬� (1).xls` 涓庢湰鍦� `period=2026-07` 鐨勫鍑轰欢**瀛楄妭瀹屽叏鐩稿悓**
+     锛圫HA256 `B38F90F3鈥锛夛紝璇存槑瀵煎嚭鏃堕�夌殑鏄� **7 鏈�**锛涜〃澶村啓 `1-7鏈堢疮璁″畬鎴愭姇璧刞锛屽悎璁¤绛変簬搴撳唴 7 鏈堝悎璁°��
+  2. 鍗充娇鏈堜唤閫夊锛孠/L/M锛堥儴璧勯噾/鐪佽祫閲�/浼佷笟鑷锛夈�丱鈥揟锛�2026/2027 寤鸿璁″垝锛夈�乊/Z锛堢渷琛ヨ祫閲�/澶囨敞锛�
+     **鏁版嵁搴撳缓琛ㄨ捣灏辨病鏈夎繖浜涘瓧娈�**锛屾案杩滃~涓嶄笂锛汣 鍒楋紙鍘垮競鍖猴級鏄鍏ユ病鎶擄紙184 涓」鐩� county 鍏� NULL锛夈��
+  3. 鍙﹀彂鐜� N/X 涓ゅ垪璇箟閿欎綅锛圢 鍐欏舰璞¤繘搴﹂暱鏂囨湰銆乆 椤圭洰琛屽啓寤鸿闃舵銆佸悎璁¤鍐欏畬鎴愮巼姣斾緥锛夛紝涓庢瘝鐗堜笉涓�鑷淬��
+- **闂 2锛堝煄甯傚杩� / 涓彛寰勬槑缁嗘棤 8 鏈堬紝涓彛寰勬帓鍚嶄笉瀵癸級**锛氱‘璁ゅ簱閲� 8 鏈堟簮鏁版嵁榻愬叏锛坔2031 767 琛屻�佸煄甯傚叕浜� 142 琛岋級锛�
+  鏄敓鎴愰�昏緫闂锛�
+  - `SummaryWorkbookFiller.fillMonthlyLedger()` 鍙洖濉� 6 椤典笖鍙~甯傚窞琛岋紙`cityOf()` 璁や笉鍑恒�屽叏鐪併�嶈锛夆啋 澶氫釜椤电**鍏ㄧ渷琛屽仠鍦ㄤ笂涓�鏈�**锛�
+  - 銆屽煄甯傚杩愩�嶃�屼腑鍙e緞鏄庣粏銆嶄袱椤垫牴鏈笉鍦ㄥ洖濉竻鍗曢噷 鈫� 娌跨敤 8 鏈堟瘝鐗堬紙8 鏈堝垪鏈潵灏辩┖锛夛紱
+  - `exportPassengerMidRank()` 鍏ㄧ渷琛屾槸 `=SUM(B4:B20)` 鍏紡锛宍setValOrBlank()` 閬囧叕寮� return 涓�**涓� recalc** 鈫� 鍏ㄧ渷琛屾案杩滄槸妯℃澘鏃х紦瀛樺�硷紱
+  - 鐙珛瀵煎嚭鐨勩�婄敓鎴恄鍏矾鏃呭涓彛寰勬槑缁嗐�嬪彛寰勫皯浜嗗贰娓稿嚭绉�+缃戠害杞︼紙`loadMidClassMap()` 鍙鐝嚎+鍏氦涓ょ淮锛夈��
+- **闂 1锛堟眹鎬昏〃闂鎬荤粨锛�**锛氫互涓婂唴瀹� + 閫愬垪/閫愰〉璇佹嵁锛屽凡姹囨�诲埌 `docs/闂姹囨��/姹囨�昏〃闂姹囨�籣2026-09-17.md`銆�
+
+### 11.2 宸插畬鎴愬苟娴嬭瘯锛氭暟鎹煡鐪嬮〉璋冩暣锛堥棶棰� 4锛�
+
+- `DataView.vue`锛氭姤琛ㄦ湡鍓嶇疆銆佹柊澧炪�屾姇璧勩�嶃�岃兘鑰椼�嶄袱缁勶紱`DataViewController.java`锛氭柊澧� 5 绫绘煡璇笌鍒楀畾涔夈��
+- `mvn -o compile` 閫氳繃锛涘仠鏃у悗绔紙7508/25852/19768锛夊悗鐢� `start-dev.ps1` 閲嶅惎锛堟柊鍚庣 PID 21448锛夛紝
+  鍓嶇 webpack 15:35:41 `Compiled successfully`銆�
+- 鎺ュ彛瀹炴祴 18 鏉$敤渚嬪叏閫氳繃锛涙祴璇曟姤鍛婅
+  `docs/鍔熻兘娴嬭瘯鎶ュ憡/鍔熻兘娴嬭瘯鎶ュ憡_鏁版嵁鏌ョ湅鎶曡祫鑳借�椾笌鎶ヨ〃鏈熸帓搴廮2026-09-17.md`銆�
+
+### 11.3 鏈畬鎴愶細鎶ヨ〃鐢熸垚鏂板涓ゅ紶鎶曡祫鏄庣粏琛紙闂 3锛�
+
+- 妯℃澘宸插湪 `docs/鎶曡祫/妯℃澘/`锛坄妯℃澘_X鏈堝杩愮珯鎶曡祫鏄庣粏琛�.xlsx`銆乣妯℃澘_X鏈堢墿娴佺珯鍦烘姇璧勬槑缁�.xls`锛夈��
+- **闃绘柇鐐�**锛氳繖涓ゅ紶琛ㄨ鎸夈�屼竴銆侀儴杞﹁喘绋庯紡浜屻�佺渷鐕冩补绋庯紡涓夈�佸啘鏉戠患鍚堣繍杈撴湇鍔$珯锛忓洓銆佸�欒溅浜�嶅拰銆岃鍒掑唴/瑙勫垝澶栥�嶅垎鍧楁斁椤圭洰锛�
+  鑰� `DataImportService` :2465 涓诲姩璺宠繃 `^[涓�浜屼笁鍥涗簲鍏竷鍏節鍗乚+銆�.*` 鍒嗙粍琛岋紝鍒嗙粍淇℃伅娌″叆搴撱��
+- 璁″垝锛堝緟鐢ㄦ埛纭鍚庡仛锛夛細鈶� `investment_project` 澧� `fund_channel` 瀛楁 鈶� 瀵煎叆璁板綍褰撳墠鍒嗙粍骞跺啓鍏ラ」鐩�
+  鈶� 閲嶅 7/8 鏈� 鈶� 鍐嶅啓涓ゅ紶琛ㄧ殑鐢熸垚鍣紙鎸夊競宸�+鍒嗙粍鍔ㄦ�佹彃琛屻�侀噸杩炴眹鎬婚〉鍏紡锛夈��
+
+### 11.4 寰呯‘璁�
+
+1. 涓彛寰勩�屽叏鐪併�嶅埌搴曟寜浠�涔堝彛寰勫彇锛堝簱鍐呭叏鐪� 27524.49 鈮� 17 甯傚窞涔嬪拰 24481.74锛夛紱
+2. `h204_auth_vehicle`銆乣investment_system` 鏄惁闇�瑕佽ˉ 2026-08 鏁版嵁锛�
+3. 闂 3 鏄惁鎸� 11.3 鐨勫洓姝ユ帹杩涖��
diff --git "a/docs/\351\227\256\351\242\230\346\261\207\346\200\273/\346\261\207\346\200\273\350\241\250\351\227\256\351\242\230\346\261\207\346\200\273_2026-09-17.md" "b/docs/\351\227\256\351\242\230\346\261\207\346\200\273/\346\261\207\346\200\273\350\241\250\351\227\256\351\242\230\346\261\207\346\200\273_2026-09-17.md"
new file mode 100644
index 0000000..5442b43
--- /dev/null
+++ "b/docs/\351\227\256\351\242\230\346\261\207\346\200\273/\346\261\207\346\200\273\350\241\250\351\227\256\351\242\230\346\261\207\346\200\273_2026-09-17.md"
@@ -0,0 +1,134 @@
+# 姹囨�昏〃闂姹囨�伙紙2026-09-17锛�
+
+> 瑕嗙洊鐢ㄦ埛褰撴棩鎻愬嚭鐨� 5 椤癸細姹囨�昏〃闂鎬荤粨 / 8鏈堟暟鎹己澶变笌鎺掑悕涓嶅 / 鎶曡祫棰勫畨鎺掑鍑轰负绌� / 鎶ヨ〃鐢熸垚鍔犱袱寮犳姇璧勬槑缁嗚〃 / 鏁版嵁鏌ョ湅璋冩暣銆�
+> 璇佹嵁鏂囦欢鍧囧彲鍦ㄤ粨搴� `_qa_out/` 涓嬪鐜帮紙涓存椂鐩綍锛屽凡 gitignore锛夈��
+
+---
+
+## 涓�銆佹眹鎬诲ぇ琛紙鐢熸垚_閬撹矾杩愯緭閲忔眹鎬昏〃_2026-08.xlsx锛�19 涓〉绛撅級鐨勯棶棰�
+
+### 1.1 褰撴湀鏁版嵁銆屾病鏈� 8 鏈堛�嶁�斺�旂‘瀹氭槸鐢熸垚閫昏緫闂锛屼笉鏄暟鎹病瀵�
+
+鏁版嵁搴撻噷 8 鏈堟簮鏁版嵁鏄綈鐨勶細
+
+| 琛� | 2026-08 琛屾暟 |
+|---|---|
+| h2031_enterprise_monthly锛堝叕璺梾瀹�/涓彛寰勬簮锛� | 767 |
+| city_bus_monthly | 142 |
+| passenger_individual_monthly | 6 |
+| h2032_enterprise_monthly锛堣揣杩愶級 | 636 |
+| investment_monthly | 168 |
+
+浣嗗鍑轰欢閲岃繖浜涢〉绛剧殑 8 鏈堝垪鏄┖鐨勶細
+
+| 椤电 | 鐜拌薄 | 璇佹嵁 |
+|---|---|---|
+| **涓彛寰勬槑缁�** | 琛ㄥご鏈� `Q3=2026骞�8鏈坄锛屾暣鍒椾负绌猴紱绱 S5=27524.49 = 1~7 鏈堜箣鍜� | `_qa_out/cmp_mid_2026.txt` |
+| **鍩庡競瀹㈣繍** | 鍏ㄩ儴琛屽仠鍦� 1~7 鏈堬紙鍏ㄧ渷绱 237412.33 = 7 鏈堢殑鍊硷級 | `_qa_out/dump_city08.txt` |
+| 鍏氦 / 鍑虹 / 缃戠害杞� | **甯傚窞琛�**鏈� 8 鏈堝�硷紝**鍏ㄧ渷琛�** 8 鏈堝垪绌虹櫧 | 鍚屼笂 |
+| 鍩庡競鍒嗗競宸� | 甯傚窞琛屾洿鏂板埌 8 鏈堬紝**鍏ㄧ渷琛�**鍋滃湪 237412.33锛�7 鏈堝�硷級 | `_qa_out/cmp_rank_city.txt` |
+| 涓彛寰勬帓鍚� | 甯傚窞琛屾洿鏂板埌 8 鏈堬紝**鍏ㄧ渷琛�**涓� 7 鏈堝鍑哄畬鍏ㄧ浉鍚� | 鍚屼笂 |
+
+### 1.2 鏍瑰洜锛堜唬鐮佷綅缃級
+
+1. `SummaryWorkbookFiller.fillMonthlyLedger()`锛坄traffic-audit-server/.../reportexport/calc/SummaryWorkbookFiller.java:50`锛�
+   鍙富鍔ㄥ洖濉� **鐝嚎鍖呰溅 / 鍏氦 / 鍑虹 / 杞ㄩ亾杞浮 / 璐ц繍 / 缃戠害杞�** 鍏〉锛岃�屼笖 `fillCityRows()` 鐢ㄣ�孉 鍒楀競宸炲悕銆嶅畾浣嶈锛�
+   `cityOf()` 璇嗗埆涓嶅埌銆屽叏鐪併�嶈 鈫� **鍏ㄧ渷琛屾案杩滀笉濉�**銆�
+2. **鍩庡競瀹㈣繍椤点�佷腑鍙e緞鏄庣粏椤垫牴鏈笉鍦ㄥ洖濉寖鍥村唴** 鈫� 鍙兘娌跨敤姣嶇増銆�8 鏈堟瘝鐗堟槸鎷� 7 鏈堢殑鍙﹀瓨鐨勶紝8 鏈堝垪鏈潵灏辨槸绌虹殑锛�
+   鎵�浠ユ暣椤靛仠鍦� 1~7 鏈堬紱绱鍒楀叕寮忎篃娌℃湁鎸� 8 鏈堟墿鍒椼��
+3. 涓彛寰勬帓鍚嶇嫭绔嬬敓鎴愬櫒 `ReportExportService.exportPassengerMidRank()`锛堝悓鏂囦欢 :2485锛夛細
+   - 鍏ㄧ渷琛� `B3/F3/L3/P3` 鍦ㄦā鏉块噷鏄� `=SUM(B4:B20)`锛岃�� `setValOrBlank()` 閬囧埌鍏紡鍗曞厓鏍肩洿鎺� `return`锛屼笖璇ユ柟娉�**涓嶈皟鐢� `recalc(wb)`**
+     鈫� 鍏ㄧ渷琛屼竴鐩存樉绀烘ā鏉块噷鐨勬棫缂撳瓨鍊硷紙27524.4906 / 4028.3213锛夈��
+   - 鍏ㄧ渷琛屽悓姣斿垪鍐欑殑鍗存槸銆屽簱鍐呭叏鐪併�嶅彛寰勶紙`midClassVal(婀栧寳鐪�)`锛夛紝涓� `SUM(17甯傚窞)` 鍙e緞涓嶄竴鑷� 鈫� 鎺掑悕椤点�屾暟鎹笉瀵广�嶃��
+4. 鐙珛瀵煎嚭浠� `passengerMidDetail`锛堢敓鎴恄鍏矾鏃呭涓彛寰勬槑缁�.xlsx锛夊彟鏈夊彛寰勯敊璇細
+   1 鏈堝叏鐪佹�诲杩愰噺 2864.57锛�= 鐝嚎+鍏氦锛�**灏戜簡鍑虹+缃戠害杞�**锛夛紝7/8 鏈堜负 0锛岀疮璁� 18300.77锛�
+   鑰屾眹鎬诲ぇ琛ㄤ腑鍙e緞鏄庣粏 1 鏈堟槸 3733.79锛堝惈鍑虹+缃戠害杞︼級銆�
+   鍘熷洜锛歚loadMidClassMap()`锛�:2313锛夊彧瑁呬簡銆屽叕璺彮绾裤�嶃�屽煄闄呭煄涔″叕浜ゃ�嶄袱缁达紝**娌℃湁瑁呭贰娓稿嚭绉熴�佺綉绾﹁溅**銆�
+
+### 1.3 淇鏂瑰悜锛堝緟纭鍚庡疄鏂斤級
+
+- `loadMidClassMap()` 琛� `city_taxi_monthly`锛堝煄闄呭煄涔″贰娓稿嚭绉燂級涓庣綉绾﹁溅鍩庨檯鍩庝埂鍙e緞锛屼袱澶勫彛寰勭粺涓�銆�
+- `fillMonthlyLedger()` 澧炲姞銆屽煄甯傚杩愩�嶃�屼腑鍙e緞鏄庣粏銆嶄袱椤靛洖濉紱`fillCityRows()`/鍏ㄧ渷琛岃ˉ榻愶紙鍏ㄧ渷 = 17 甯傚窞涔嬪拰锛屾垨鏀圭敤瀹㈣繍鍙e緞鐨勫叏鐪佸�硷級銆�
+- `exportPassengerMidRank()` 鍏ㄧ渷琛屾敼涓哄啓鏁板�硷紙鎴栧啓鍏ュ悗璋冪敤 `recalc`锛夛紝骞剁粺涓�鍚屾瘮鍙e緞銆�
+
+---
+
+## 浜屻�佹姇璧勩�婂叏鐪侀瀹夋帓璁″垝杩涘害鎯呭喌姹囨�汇�嬪鍑轰负绌�
+
+### 2.1 绗竴灞傚師鍥狅細瀵煎嚭鐨勬槸 **7 鏈�**锛屼笉鏄� 8 鏈�
+
+鐢ㄦ埛妗岄潰鏂囦欢 `D:\妗岄潰\鐢熸垚鏁版嵁\鐢熸垚_鍏ㄧ渷棰勫畨鎺掕鍒掕繘搴︽儏鍐垫眹鎬� (1).xls`锛堜粖澶� 15:16锛変笌鏈湴鐢�
+`period=2026-07` 璋� `/api/report/export/investPlan` 瀵煎嚭鐨勬枃浠� **瀛楄妭瀹屽叏鐩稿悓**锛�
+
+```
+SHA256  妗岄潰浠�   = B38F90F35FEF7CF6C667D7EE68C79D6BC160E3706C70DEBDDB993914D4AD88E6
+SHA256  7鏈堝鍑�  = B38F90F35FEF7CF6C667D7EE68C79D6BC160E3706C70DEBDDB993914D4AD88E6
+```
+
+浣愯瘉锛氳鏂囦欢琛ㄥご鍐欑殑鏄� `1-7鏈堢疮璁″畬鎴愭姇璧刞锛屽悎璁¤
+`H6=2106760.05 / I6=1188542.01 / J6=310523.2 / W6=123170.96` 姝eソ绛変簬搴撳唴 2026-07 鐨勫悎璁�
+锛�2026-07锛歴tart_cum 1188542.01銆亂ear_plan 310523.2銆亂ear_cum 123170.96锛夈��
+
+鐢� 2026-08 閲嶆柊瀵煎嚭鐨勬枃浠讹紙164,864 B锛夎〃澶翠负 `1-8鏈堢疮璁″畬鎴愭姇璧刞锛屽悎璁�
+`H6=11108628.86 / I6=3218801.57 / J6=1273968.2 / W6=744262.86`锛屼笌搴撲竴鑷� 鈫� **鏈堜唤閫夊灏辨甯�**銆�
+
+### 2.2 绗簩灞傚師鍥狅細鍗充娇鏈堜唤瀵逛簡锛岃繖浜涘垪涔熷彧鑳芥槸绌虹殑
+
+`妯℃澘_鍏ㄧ渷棰勫畨鎺掕鍒掕繘搴︽儏鍐垫眹鎬�.xls` 鏈� 28 鍒楋紝瀵煎嚭鍙兘濉� 16 鍒椼�傞�愬垪瀵规瘮锛坄_qa_out/cmp_8鏈坃vs_姣嶇増.txt`锛夛細
+
+| 绌哄垪 | 琛ㄥご | 鍘熷洜 |
+|---|---|---|
+| C | 鍘匡紙甯傘�佸尯锛� | `investment_project.county` **184 涓」鐩叏涓� NULL** 鈫� 瀵煎叆娌℃姄杩欎竴鍒楋紙婧愯〃閲屾槸鏈夌殑锛屽彲淇級 |
+| K / L / M | 閮ㄨ祫閲� / 鐪佽祫閲� / 浼佷笟鍙婂湴鏂硅嚜绛� | 鏁版嵁搴�**鏃犳瀛楁**锛宍DataImportService.findInvestHeader()` 鏈槧灏� |
+| O / P / Q | 2026骞村缓璁鍒掞紙鍚堣/閮ㄧ渷鎶曡祫/涓昏寤鸿鍐呭锛� | 鍚屼笂锛屾棤瀛楁 |
+| R / S / T | 2027骞村缓璁鍒掞紙鍚堣/閮ㄧ渷鎶曡祫/涓昏寤鸿鍐呭锛� | 鍚屼笂锛屾棤瀛楁 |
+| Y / Z | 鐪佽ˉ璧勯噾 / 椤圭洰澶囨敞 | 鍚屼笂锛屾棤瀛楁 |
+
+鍙︽湁 2 澶�**璇箟閿欎綅**锛堜笉鏄┖锛屾槸濉敊浜嗘牸锛夛細
+- N 鍒楋紙妯℃澘=銆�2026骞磋鍒�-璁″垝杩涘害銆嶏級琚啓鎴愪簡 `progress_desc`锛堝舰璞¤繘搴﹂暱鏂囨湰锛夛紱
+- X 鍒楋紙妯℃澘=銆屽疄闄呰繘搴︺�嶏紝姣嶇増鏄�"鍦ㄥ缓/瀹屽伐"锛夐」鐩鍐� `progress_stage`銆�**鍚堣琛屽嵈鍐欏畬鎴愮巼姣斾緥**锛�0.3967 / 0.5842锛夈��
+  瑙� `ReportExportService.fillInvestPlanProjectRow()` :5059 涓� `writeInvestAggHssf()` :5263銆�
+
+### 2.3 缁撹
+
+棰勫畨鎺掓眹鎬汇�屽緢澶氭寚鏍囩┖鐧姐��= 涓変欢浜嬪彔鍔狅細
+1. 瀵煎嚭鏃舵湀浠介�夋垚浜� 7 鏈堬紙鏂囦欢閲岃兘鐩存帴鐪嬪嚭鏉ワ級锛�
+2. 瀵煎叆娌℃姄 C 鍒楋紙鍘垮競鍖猴級鈥斺�斿彲淇紱
+3. 璧勯噾鏉ユ簮銆佸缓璁鍒掋�佺渷琛ヨ祫閲戙�佸娉ㄨ繖 4 绫诲瓧娈�**鏁版嵁搴撲粠寤鸿〃璧峰氨娌℃湁**锛屼笉琛ヨ〃缁撴瀯/瀵煎叆鏄犲皠姘歌繙濉笉涓娿��
+
+---
+
+## 涓夈�佹姇璧勩�奨鏈堢墿娴佺珯鍦烘姇璧勬槑缁嗐�嬨�奨鏈堝杩愮珯鎶曡祫鏄庣粏琛ㄣ�嬶紙鎶ヨ〃鐢熸垚鐣岄潰鏂板锛�
+
+妯℃澘宸插瓨鍦細
+- `docs/鎶曡祫/妯℃澘/妯℃澘_X鏈堝杩愮珯鎶曡祫鏄庣粏琛�.xlsx`锛堟槑缁� + 姹囨�讳袱椤碉紝鎸夊競宸炲垎銆屼竴銆佷娇鐢ㄤ氦閫氶儴杞﹁喘绋庤祫閲戝缓璁鹃」鐩紡浜屻�佷娇鐢ㄧ渷鐕冩补绋庤繑杩樿祫閲戝缓璁鹃」鐩紡涓夈�佸啘鏉戠患鍚堣繍杈撴湇鍔$珯锛忓洓銆佸�欒溅浜�嶅洓鍧楋級
+- `docs/鎶曡祫/妯℃澘/妯℃澘_X鏈堢墿娴佺珯鍦烘姇璧勬槑缁�.xls`锛堟湀2 鐪佽〃 + 鍒嗛」鐩姇璧勫畬鎴愭儏鍐� + 鍒嗗競宸炶鍒掑唴澶栭」鐩畬鎴愭儏鍐� + 绗� 4 椤碉級
+
+**闃绘柇鐐癸細瀵煎叆鎶娿�屽垎缁勮銆嶄涪鎺変簡銆�**
+`DataImportService` :2465 鏄庣‘璺宠繃 `^[涓�浜屼笁鍥涗簲鍏竷鍏節鍗乚+銆�.*` 鐨勮锛岃�岃繖涓ゅ紶琛ㄦ伆鎭拌闈犺繖琛屽喅瀹氶」鐩惤鍦ㄥ摢涓祫閲戞笭閬�/瑙勫垝鍐呭鍧椼��
+`docs/鎶曡祫/杈撳嚭/鏍煎紡鎺㈡祴_2026-07.tsv` 鏄剧ず婧愭枃浠堕噷杩欎簺鍒嗙粍琛屾槸瀛樺湪鐨勶紙濡� `R12 | 涓�銆佷娇鐢ㄤ氦閫氶儴杞﹁喘绋庤祫閲戝缓璁鹃」鐩甡锛夈��
+
+瑕佽惤鍦板繀椤诲厛鍋� 3 姝ワ細
+1. `investment_project` 澧炲垪 `fund_channel`锛堣祫閲戞笭閬�/鍒嗙粍鏍囩锛夛紝瀹炰綋鍔犲瓧娈碉紱
+2. 瀵煎叆鏃朵笉鍐嶈烦杩囧垎缁勮锛屾敼涓鸿褰曘�屽綋鍓嶅垎缁勩�嶅苟鍐欏埌鍏跺悗鐨勯」鐩笂锛�
+3. 閲嶆柊瀵煎叆 7 鏈堛��8 鏈堟暟鎹悗锛屽啀鍐欒繖涓ゅ紶琛ㄧ殑鐢熸垚鍣紙鎸夊競宸� + 鍒嗙粍鍔ㄦ�佹彃琛屻�侀噸杩炴眹鎬婚〉鍏紡锛夈��
+
+> 璇存槑锛氬湪娌℃湁 `fund_channel` 涔嬪墠寮鸿鐢熸垚锛屽彧鑳芥妸鎵�鏈夐」鐩杩涙煇涓潡閲岋紝涓庢瘝鐗堝彛寰勪笉绗︼紝鏁呭厛涓嶅仛銆�
+
+---
+
+## 鍥涖�佹暟鎹煡鐪嬮〉璋冩暣锛堝凡鏀逛唬鐮侊級
+
+- `traffic-audit-web/src/views/DataView.vue`锛氭妸**鎶ヨ〃鏈�**浠庛�屾暟鎹被鍨嬨�嶅悗闈㈢Щ鍒�**鍓嶉潰**锛涙柊澧炪�屾姇璧勩�嶃�岃兘鑰椼�嶄袱涓垎缁�
+  锛堟姇璧勶細鎶曡祫椤圭洰鍩虹琛� / 甯傚窞鏈堟姤椤圭洰杩涘害 / 鎶曡祫绯荤粺姣忔湀瀵煎叆椤圭洰琛紱鑳借�楋細杞﹁締鑳借�楀搴︽暟鎹� / 鑳借�楄繍鏀胯溅杈嗘暟锛夈��
+- `traffic-audit-server/.../dataimport/controller/DataViewController.java`锛氭柊澧� `investmentMonthly`銆乣investmentProject`銆�
+  `investmentSystem`銆乣energyVehicle`銆乣energyAuth` 浜旂被鏌ヨ涓庡垪瀹氫箟锛沗mvn -o compile` 閫氳繃銆�
+- **鐘舵��**锛氫唬鐮佸凡鏀瑰苟缂栬瘧閫氳繃锛屼絾**灏氭湭閲嶅惎鍚庣**锛屾墍浠� 8090 涓婅繕鏄棫閫昏緫锛涢噸鍚悗鐢熸晥銆�
+
+---
+
+## 浜斻�佸叾浠栨敞鎰忕偣
+
+- 姹囨�诲ぇ琛ㄦ瘝鐗堬細`docs/鐢熸垚姹囨�诲ぇ琛�/2026骞�8鏈堥亾璺繍杈撻噺姹囨�昏〃.xlsx` 瀛樺湪锛涗絾 `_澶囦唤_2026骞�8鏈堚� 鍚屾湡澶囦唤姣嶇増**涓嶅瓨鍦�**锛�
+  鏃ュ織浼氭墦 `WARN 姹囨�诲伐浣滅翱鏈壘鍒板悓鏈熷浠芥瘝鐗坄锛岃繖涔熸槸杩欎簺椤电 8 鏈堜笉榻愮殑涓�涓儗鏅洜绱犮��
+- 涓彛寰勬帓鍚嶇殑銆屽叏鐪� 鈮� 17 甯傚窞涔嬪拰銆嶏紙1~8 鏈堬細27524.49 vs 24481.74锛夛紝灞炰簬**鍙e緞闂**锛岄渶瑕佷笟鍔$‘璁ゅ叏鐪佸埌搴曟寜鍝釜鍙e緞鍙栥��
diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/dataimport/controller/DataViewController.java b/traffic-audit-server/src/main/java/com/trafficaudit/dataimport/controller/DataViewController.java
index fea9403..1725e4e 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/dataimport/controller/DataViewController.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/dataimport/controller/DataViewController.java
@@ -14,6 +14,11 @@
 import com.trafficaudit.dataimport.entity.ScaleSplitTransport;
 import com.trafficaudit.dataimport.entity.TransportAuthVehicle;
 import com.trafficaudit.dataimport.entity.VehicleTrackMileage;
+import com.trafficaudit.dataimport.entity.InvestmentMonthly;
+import com.trafficaudit.dataimport.entity.InvestmentProject;
+import com.trafficaudit.dataimport.entity.InvestmentSystem;
+import com.trafficaudit.dataimport.entity.EnergyVehicleQuarterly;
+import com.trafficaudit.dataimport.entity.EnergyAuthVehicle;
 import com.trafficaudit.dataimport.mapper.FreightTurnoverImportMapper;
 import com.trafficaudit.dataimport.mapper.H2032EnterpriseMonthlyMapper;
 import com.trafficaudit.dataimport.mapper.PassengerAuthVehicleMapper;
@@ -24,6 +29,11 @@
 import com.trafficaudit.dataimport.mapper.ScaleSplitTransportMapper;
 import com.trafficaudit.dataimport.mapper.TransportAuthVehicleMapper;
 import com.trafficaudit.dataimport.mapper.VehicleTrackMileageMapper;
+import com.trafficaudit.dataimport.mapper.InvestmentMonthlyMapper;
+import com.trafficaudit.dataimport.mapper.InvestmentProjectMapper;
+import com.trafficaudit.dataimport.mapper.InvestmentSystemMapper;
+import com.trafficaudit.dataimport.mapper.EnergyVehicleQuarterlyMapper;
+import com.trafficaudit.dataimport.mapper.EnergyAuthVehicleMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -64,6 +74,16 @@
     private CityTaxiMonthlyMapper cityTaxiMapper;
     @Resource
     private CityTaxiAuthMapper cityTaxiAuthMapper;
+    @Resource
+    private InvestmentMonthlyMapper investmentMonthlyMapper;
+    @Resource
+    private InvestmentProjectMapper investmentProjectMapper;
+    @Resource
+    private InvestmentSystemMapper investmentSystemMapper;
+    @Resource
+    private EnergyVehicleQuarterlyMapper energyVehicleMapper;
+    @Resource
+    private EnergyAuthVehicleMapper energyAuthMapper;
 
     @GetMapping("/list")
     public Result<Map<String, Object>> list(@RequestParam("type") String type,
@@ -199,6 +219,76 @@
                 fillPage(result, r);
                 break;
             }
+            case "investmentMonthly": {
+                java.util.List<Long> pids = new ArrayList<>();
+                if (!kw.isEmpty()) {
+                    for (InvestmentProject ip : investmentProjectMapper.selectList(
+                            new LambdaQueryWrapper<InvestmentProject>().like(InvestmentProject::getProjectName, kw))) {
+                        pids.add(ip.getId());
+                    }
+                    if (pids.isEmpty()) {
+                        result.put("records", new ArrayList<>());
+                        result.put("total", 0L);
+                        result.put("current", safePage);
+                        result.put("size", safeSize);
+                        break;
+                    }
+                }
+                LambdaQueryWrapper<InvestmentMonthly> w = new LambdaQueryWrapper<InvestmentMonthly>()
+                        .eq(notEmpty(period), InvestmentMonthly::getReportPeriod, period)
+                        .in(!pids.isEmpty(), InvestmentMonthly::getProjectId, pids)
+                        .orderByAsc(InvestmentMonthly::getProjectId)
+                        .orderByAsc(InvestmentMonthly::getId);
+                Page<InvestmentMonthly> p = new Page<>(safePage, safeSize);
+                Page<InvestmentMonthly> r = investmentMonthlyMapper.selectPage(p, w);
+                result.put("records", toMaps(r.getRecords(), propsOf(INVEST_MONTHLY_COLUMNS)));
+                fillPage(result, r);
+                break;
+            }
+            case "investmentProject": {
+                LambdaQueryWrapper<InvestmentProject> w = new LambdaQueryWrapper<InvestmentProject>()
+                        .like(!kw.isEmpty(), InvestmentProject::getProjectName, kw)
+                        .orderByAsc(InvestmentProject::getCity)
+                        .orderByAsc(InvestmentProject::getId);
+                Page<InvestmentProject> p = new Page<>(safePage, safeSize);
+                Page<InvestmentProject> r = investmentProjectMapper.selectPage(p, w);
+                result.put("records", toMaps(r.getRecords(), propsOf(INVEST_PROJECT_COLUMNS)));
+                fillPage(result, r);
+                break;
+            }
+            case "investmentSystem": {
+                LambdaQueryWrapper<InvestmentSystem> w = new LambdaQueryWrapper<InvestmentSystem>()
+                        .eq(notEmpty(period), InvestmentSystem::getReportPeriod, period)
+                        .like(!kw.isEmpty(), InvestmentSystem::getProjectName, kw)
+                        .orderByDesc(InvestmentSystem::getId);
+                Page<InvestmentSystem> p = new Page<>(safePage, safeSize);
+                Page<InvestmentSystem> r = investmentSystemMapper.selectPage(p, w);
+                result.put("records", toMaps(r.getRecords(), propsOf(INVEST_SYSTEM_COLUMNS)));
+                fillPage(result, r);
+                break;
+            }
+            case "energyVehicle": {
+                LambdaQueryWrapper<EnergyVehicleQuarterly> w = new LambdaQueryWrapper<EnergyVehicleQuarterly>()
+                        .eq(notEmpty(period), EnergyVehicleQuarterly::getReportPeriod, period)
+                        .like(!kw.isEmpty(), EnergyVehicleQuarterly::getEnterpriseName, kw)
+                        .orderByDesc(EnergyVehicleQuarterly::getId);
+                Page<EnergyVehicleQuarterly> p = new Page<>(safePage, safeSize);
+                Page<EnergyVehicleQuarterly> r = energyVehicleMapper.selectPage(p, w);
+                result.put("records", toMaps(r.getRecords(), propsOf(ENERGY_VEHICLE_COLUMNS)));
+                fillPage(result, r);
+                break;
+            }
+            case "energyAuth": {
+                LambdaQueryWrapper<EnergyAuthVehicle> w = new LambdaQueryWrapper<EnergyAuthVehicle>()
+                        .eq(notEmpty(period), EnergyAuthVehicle::getReportPeriod, period)
+                        .like(!kw.isEmpty(), EnergyAuthVehicle::getPlateNo, kw)
+                        .orderByDesc(EnergyAuthVehicle::getId);
+                Page<EnergyAuthVehicle> p = new Page<>(safePage, safeSize);
+                Page<EnergyAuthVehicle> r = energyAuthMapper.selectPage(p, w);
+                result.put("records", toMaps(r.getRecords(), propsOf(ENERGY_AUTH_COLUMNS)));
+                fillPage(result, r);
+                break;
+            }
             default:
                 result.put("records", new ArrayList<>());
                 result.put("total", 0L);
@@ -251,6 +341,11 @@
             case "cityTaxi": return TAXI_COLUMNS;
             case "cityTaxiAuth": return TAXI_AUTH_COLUMNS;
             case "passengerAuth": return PAUTH_COLUMNS;
+            case "investmentMonthly": return INVEST_MONTHLY_COLUMNS;
+            case "investmentProject": return INVEST_PROJECT_COLUMNS;
+            case "investmentSystem": return INVEST_SYSTEM_COLUMNS;
+            case "energyVehicle": return ENERGY_VEHICLE_COLUMNS;
+            case "energyAuth": return ENERGY_AUTH_COLUMNS;
             default: return new ArrayList<>();
         }
     }
@@ -274,6 +369,11 @@
     private static final List<Map<String, Object>> BUS_COLUMNS = new ArrayList<>();
     private static final List<Map<String, Object>> TAXI_COLUMNS = new ArrayList<>();
     private static final List<Map<String, Object>> TAXI_AUTH_COLUMNS = new ArrayList<>();
+    private static final List<Map<String, Object>> INVEST_MONTHLY_COLUMNS = new ArrayList<>();
+    private static final List<Map<String, Object>> INVEST_PROJECT_COLUMNS = new ArrayList<>();
+    private static final List<Map<String, Object>> INVEST_SYSTEM_COLUMNS = new ArrayList<>();
+    private static final List<Map<String, Object>> ENERGY_VEHICLE_COLUMNS = new ArrayList<>();
+    private static final List<Map<String, Object>> ENERGY_AUTH_COLUMNS = new ArrayList<>();
 
     static {
         H2032_COLUMNS.add(col("reportPeriod", "鎶ヨ〃鏈�", 100));
@@ -447,5 +547,62 @@
         PAUTH_COLUMNS.add(col("enterpriseName", "浼佷笟鍚嶇О", 240));
         PAUTH_COLUMNS.add(col("vehicleCount", "杞﹁締鏁�", 100));
         PAUTH_COLUMNS.add(col("seatCount", "杞藉浣嶆暟", 100));
+        INVEST_MONTHLY_COLUMNS.add(col("reportPeriod", "鎶ヨ〃鏈�", 100));
+        INVEST_MONTHLY_COLUMNS.add(col("projectId", "椤圭洰ID", 80));
+        INVEST_MONTHLY_COLUMNS.add(col("yearPlan", "鏈勾璁″垝鎶曡祫(涓囧厓)", 140));
+        INVEST_MONTHLY_COLUMNS.add(col("yearCum", "鑷勾鍒濈疮璁″畬鎴�(涓囧厓)", 160));
+        INVEST_MONTHLY_COLUMNS.add(col("monthDone", "鏈湀瀹屾垚鎶曡祫(涓囧厓)", 150));
+        INVEST_MONTHLY_COLUMNS.add(col("startCum", "鑷紑濮嬪缓璁剧疮璁″畬鎴�(涓囧厓)", 180));
+        INVEST_MONTHLY_COLUMNS.add(col("progressStage", "寤鸿闃舵", 120));
+        INVEST_MONTHLY_COLUMNS.add(col("progressDesc", "褰㈣薄杩涘害", 320));
+        INVEST_MONTHLY_COLUMNS.add(col("buildingArea", "寤虹瓚闈㈢Н", 110));
+        INVEST_PROJECT_COLUMNS.add(col("projectName", "椤圭洰鍚嶇О", 260));
+        INVEST_PROJECT_COLUMNS.add(col("category", "绫诲埆", 100));
+        INVEST_PROJECT_COLUMNS.add(col("city", "甯傚窞", 90));
+        INVEST_PROJECT_COLUMNS.add(col("county", "鍘匡紙甯傘�佸尯锛�", 120));
+        INVEST_PROJECT_COLUMNS.add(col("builderName", "寤鸿鍗曚綅", 200));
+        INVEST_PROJECT_COLUMNS.add(col("constructNature", "寤鸿鎬ц川", 100));
+        INVEST_PROJECT_COLUMNS.add(col("startTime", "寮�宸ュ勾", 90));
+        INVEST_PROJECT_COLUMNS.add(col("endTime", "瀹屽伐骞�", 90));
+        INVEST_PROJECT_COLUMNS.add(col("totalInvestment", "鎬绘姇璧�(涓囧厓)", 130));
+        INVEST_PROJECT_COLUMNS.add(col("buildingArea", "寤虹瓚闈㈢Н", 110));
+        INVEST_PROJECT_COLUMNS.add(col("approvalGk", "宸ュ彲鎴栨牳鍑嗘壒澶嶆枃鍙�", 200));
+        INVEST_PROJECT_COLUMNS.add(col("approvalCs", "鍒濊鎴栨柦宸ュ浘鎵瑰鏂囧彿", 200));
+        INVEST_PROJECT_COLUMNS.add(col("source", "鏉ユ簮", 100));
+        INVEST_SYSTEM_COLUMNS.add(col("reportPeriod", "鎶ヨ〃鏈�", 100));
+        INVEST_SYSTEM_COLUMNS.add(col("projectName", "椤圭洰鍚嶇О", 260));
+        INVEST_SYSTEM_COLUMNS.add(col("totalInvestment", "鎬绘姇璧�(涓囧厓)", 130));
+        INVEST_SYSTEM_COLUMNS.add(col("startCum", "鑷紑濮嬪缓璁剧疮璁″畬鎴�(涓囧厓)", 180));
+        INVEST_SYSTEM_COLUMNS.add(col("yearPlan", "鏈勾璁″垝鎶曡祫(涓囧厓)", 140));
+        INVEST_SYSTEM_COLUMNS.add(col("yearCum", "鑷勾鍒濈疮璁″畬鎴�(涓囧厓)", 160));
+        INVEST_SYSTEM_COLUMNS.add(col("monthDone", "鏈湀瀹屾垚鎶曡祫(涓囧厓)", 150));
+        ENERGY_VEHICLE_COLUMNS.add(col("reportPeriod", "鎶ヨ〃鏈�", 100));
+        ENERGY_VEHICLE_COLUMNS.add(col("regionCode", "鎵�灞炲湴鍖�", 100));
+        ENERGY_VEHICLE_COLUMNS.add(col("enterpriseName", "浼佷笟鍚嶇О", 220));
+        ENERGY_VEHICLE_COLUMNS.add(col("plateNo", "杞︾墝鍙�", 110));
+        ENERGY_VEHICLE_COLUMNS.add(col("vehicleType", "杞﹁締绫诲瀷", 130));
+        ENERGY_VEHICLE_COLUMNS.add(col("fuelType", "鐕冩枡绫诲瀷", 110));
+        ENERGY_VEHICLE_COLUMNS.add(col("manufactureYear", "鍑哄巶骞翠唤", 100));
+        ENERGY_VEHICLE_COLUMNS.add(col("markedTonnage", "鏍囪鍚ㄤ綅", 100));
+        ENERGY_VEHICLE_COLUMNS.add(col("totalMileage", "鎬昏椹堕噷绋�(鍏噷)", 150));
+        ENERGY_VEHICLE_COLUMNS.add(col("loadedMileage", "閲嶈浇閲岀▼(鍏噷)", 140));
+        ENERGY_VEHICLE_COLUMNS.add(col("emptyMileage", "绌鸿浇閲岀▼(鍏噷)", 140));
+        ENERGY_VEHICLE_COLUMNS.add(col("freight", "璐ц繍閲�(鍚�)", 120));
+        ENERGY_VEHICLE_COLUMNS.add(col("turnover", "鍛ㄨ浆閲�(鍚ㄥ叕閲�)", 140));
+        ENERGY_VEHICLE_COLUMNS.add(col("tripCount", "杞︽", 90));
+        ENERGY_VEHICLE_COLUMNS.add(col("fuelUnit", "鐕冩枡鍗曚綅", 100));
+        ENERGY_VEHICLE_COLUMNS.add(col("fuelConsumption", "鐕冩枡娑堣�楅噺", 120));
+        ENERGY_VEHICLE_COLUMNS.add(col("avgDistance", "骞冲潎杩愯窛", 110));
+        ENERGY_VEHICLE_COLUMNS.add(col("avgLoadedTonnage", "骞冲潎杞介噸鍚ㄤ綅", 130));
+        ENERGY_VEHICLE_COLUMNS.add(col("avgTripMileage", "骞冲潎杞︽閲岀▼", 130));
+        ENERGY_VEHICLE_COLUMNS.add(col("fuelPer100km", "鐧惧叕閲屾补鑰�", 120));
+        ENERGY_VEHICLE_COLUMNS.add(col("turnoverFuel", "鍛ㄨ浆閲忔补鑰�", 120));
+        ENERGY_AUTH_COLUMNS.add(col("reportPeriod", "鎶ヨ〃鏈�", 100));
+        ENERGY_AUTH_COLUMNS.add(col("plateNo", "杞︾墝鍙�", 110));
+        ENERGY_AUTH_COLUMNS.add(col("vehicleType", "杞﹁締绫诲瀷", 130));
+        ENERGY_AUTH_COLUMNS.add(col("fuelType", "鐕冩枡绫诲瀷", 110));
+        ENERGY_AUTH_COLUMNS.add(col("markedTonnage", "鏍囪鍚ㄤ綅", 100));
+        ENERGY_AUTH_COLUMNS.add(col("tractionQuality", "鐗靛紩璐ㄩ噺", 110));
+
     }
 }
\ No newline at end of file
diff --git a/traffic-audit-web/src/views/DataView.vue b/traffic-audit-web/src/views/DataView.vue
index 3fafdd5..be4d1c9 100644
--- a/traffic-audit-web/src/views/DataView.vue
+++ b/traffic-audit-web/src/views/DataView.vue
@@ -17,6 +17,9 @@
       <el-main>
         <h3>瀵煎叆鏁版嵁鏌ョ湅</h3>
         <div class="toolbar">
+          <span class="toolbar-label">鎶ヨ〃鏈�</span>
+          <el-date-picker v-model="period" type="month" placeholder="鎶ヨ〃鏈燂紙鍏ㄩ儴锛�" value-format="yyyy-MM" clearable style="width:150px" @change="doQuery"></el-date-picker>
+          <span class="toolbar-sep"></span>
           <span class="toolbar-label">鏁版嵁绫诲瀷</span>
           <el-radio-group v-model="activeModule" size="small" @change="onModuleChange">
             <el-radio-button v-for="g in modules" :key="g.key" :label="g.key">{{ g.name }}</el-radio-button>
@@ -26,8 +29,6 @@
               <el-option v-for="t in activeTypes.types" :key="t.value" :label="t.label" :value="t.value"></el-option>
             </el-option-group>
           </el-select>
-          <span class="toolbar-sep"></span>
-          <el-date-picker v-model="period" type="month" placeholder="鎶ヨ〃鏈燂紙鍏ㄩ儴锛�" value-format="yyyy-MM" clearable style="width:150px" @change="doQuery"></el-date-picker>
           <el-input v-model="keyword" placeholder="浼佷笟/甯傚窞鍚嶇О" clearable style="width:180px" @keyup.enter.native="doQuery"></el-input>
           <el-button type="primary" size="small" @click="doQuery">鏌ヨ</el-button>
           <el-button size="small" icon="el-icon-full-screen" @click="toggleFullscreen">鍏ㄥ睆鏌ョ湅</el-button>
@@ -79,6 +80,19 @@
             { value: 'cityTaxi', label: '宸℃父鍑虹姹借溅杩愯惀鏈嶅姟鎯呭喌鏈堟姤' },
             { value: 'cityTaxiAuth', label: '鍑虹杞﹁繍鏀胯溅杈�' }
           ]
+        },
+        {
+          key: 'invest', name: '鎶曡祫', types: [
+            { value: 'investmentProject', label: '鎶曡祫椤圭洰鍩虹琛�' },
+            { value: 'investmentMonthly', label: '甯傚窞鏈堟姤椤圭洰杩涘害' },
+            { value: 'investmentSystem', label: '鎶曡祫绯荤粺姣忔湀瀵煎叆椤圭洰琛�' }
+          ]
+        },
+        {
+          key: 'energy', name: '鑳借��', types: [
+            { value: 'energyVehicle', label: '杞﹁締鑳借�楀搴︽暟鎹�' },
+            { value: 'energyAuth', label: '鑳借�楄繍鏀胯溅杈嗘暟' }
+          ]
         }
       ],
       activeModule: 'freight',

--
Gitblit v1.9.1