| docs/功能测试报告/功能测试报告_市州统一填报模板与县市区解析_2026-09-20.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/工作日结/工作日结_2026-09-20.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/投资/填报口径与统一模板_2026-09-20.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/投资/模板/模板_市州月报_客运站场.xlsx | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/投资/模板/模板_市州月报_物流园区.xlsx | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_ÊÐÖÝͳһÌģ°åÓëÏØÊÐÇø½âÎö_2026-09-20.md
New file @@ -0,0 +1,50 @@ # åè½æµè¯æ¥å_å¸å·ç»ä¸å¡«æ¥æ¨¡æ¿ä¸å¿ï¼å¸ãåºï¼è§£æ_2026-09-20 ## ä¸ãåè½è¯´æ | åè½ | 说æ | | --- | --- | | å¸å·å¡«æ¥æ¨¡æ¿ | æ°å¢ä¸¤ä»½å¸å·ææ¥æ¨¡æ¿ï¼`docs/æèµ/模æ¿/模æ¿_å¸å·ææ¥_客è¿ç«åº.xlsx`ã`docs/æèµ/模æ¿/模æ¿_å¸å·ææ¥_ç©æµååº.xlsx`ï¼å页ç¾ãææ¥ã17 ååè¡è¡¨å¤´ + ãå¡«æ¥è¯´æã页 | | å¿ï¼å¸ãåºï¼åè§£æ | å¸å·åè¡¨å¯¼å ¥æ°å¢å¯¹ãå¿ï¼å¸ãåºï¼ãåçè¯å«ï¼åå ¥é¡¹ç®ä¸»æ¡£ `county`ï¼åå ä» æèµç³»ç»å¯¼åºä¼åï¼ | | 表头è¡å¤å®æ¶ç´§ | `findInvestHeader` å¢å ç»ä¸çå ³é®è¯å¤å® `investHeaderKey`ï¼å¹¶è¦æ±è¡¨å¤´è¡åæ¶æ»¡è¶³ãå«é¡¹ç®åç§°ã+ãè³å° 2 个çè¡¨å¤´åæ®µï¼â¤20 åï¼ãï¼é¿å æãå¡«æ¥è¯´æã页çé¿å¥å½ä½æ°æ®è¡¨ | æ¹å¨æä»¶ï¼`traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java` ## äºãæµè¯ç¯å¢ - å端 Spring Boot 8090ï¼éå¯åå¯å¨æ¶é´ 2026-09-20 16:06:48ï¼ï¼å端 8080ï¼MySQL 3308 / åº `traffic_audit` - æµè¯æ°æ®ï¼ä»¥ã模æ¿_å¸å·ææ¥_客è¿ç«åº.xlsxã为åºç¨¿çæ `æ¦æ±å¸_2026-09_客è¿ç«åºææ¥.xlsx`ï¼2 æ¡æµè¯é¡¹ç®ï¼ - è°ç¨æ¹å¼ï¼`POST /api/import/investCityBatch?period=2026-09&category=客è¿ç«åº`ï¼æ¬å°èªç¾ JWTï¼ - å ¥åºæ½æ¥ï¼`investment_project` / `investment_monthly` éåæ®µä¸æºæä»¶æ¯å¯¹ ## ä¸ãç¨ä¾è¡¨ | # | ç¨ä¾ | è¾å ¥ | 颿 | å®é | ç»è®º | | --- | --- | --- | --- | --- | --- | | T01 | 模æ¿ç»æï¼å®¢è¿ç«åºï¼ | æå¼æ¨¡æ¿ | ãææ¥ã页第 4 è¡ 17 å表头ï¼E å建设æ§è´¨ä¸æï¼ç¬¬äºä¸ªé¡µç¾ä¸ºå¡«æ¥è¯´æä¸å« 11 æ¡è¦æ± | ä¸é¢æä¸è´ | éè¿ | | T02 | 模æ¿ç»æï¼ç©æµååºï¼ | æå¼æ¨¡æ¿ | å T01ï¼æ é¢ä¸ºã交éç©æµï¼ç©æµååºï¼ã | ä¸é¢æä¸è´ | éè¿ | | T03 | æ£åå¯¼å ¥ï¼2 æ¡é¡¹ç®ï¼ | ææ¨¡æ¿å¡«æ¥ 2 æ¡é¡¹ç®ï¼å«å¿åºãæ¹æå·ï¼ | total=2ãsuccess=2ãcity=æ¦æ±å¸ | total=2ãsuccess=2ãfail=0ãcity=æ¦æ±å¸ | éè¿ | | T04 | å ¥åºæ½æ¥-主档 | åä¸ | 8 ä¸ªä¸»æ¡£åæ®µé项çäºæºå¼ | æ±å²¸åº/æµè¯å»ºè®¾åä½A/æ°å»º/2026/2027/12345.67/æµè¯å·¥å¯A/æµè¯å设Aï¼æ´ªå±±åº/æµè¯å»ºè®¾åä½B/ç»å»º/2024/2026/20000/æµè¯å·¥å¯B/å设为空 | éè¿ | | T05 | å ¥åºæ½æ¥-æåº¦æ° | åä¸ | 6 个æåº¦å段é项çäºæºå¼ãæ¥è¡¨ææ£ç¡® | æ¥åæ 2026-09ï¼1000/5000/1200/300/å¨å»º/æµè¯å½¢è±¡è¿åº¦Aï¼15000/8000/6000/1500/å®å·¥/æµè¯å½¢è±¡è¿åº¦B | éè¿ | | T06 | è´åï¼è¯´æé¡µè¢«å½æ°æ®è¡¨ï¼ä¿®å¤åï¼ | æ¨¡æ¿æä»¶ï¼å«å¡«æ¥è¯´æé¡µï¼ | åªè§£æãææ¥ã页 | **失败**ï¼è¯¯è§£æ 8 æ¡è¯´æé¡µé¿å¥ä¸ºé¡¹ç®ï¼id 233~240ï¼ï¼city 被æä»¶åå åºä¸ºãæ¦æ±å¸ã | 已修å¤ï¼è§ T07ï¼ | | T07 | è´åï¼è¯´æé¡µè¢«å½æ°æ®è¡¨ï¼ä¿®å¤åï¼ | å T06 | 说æé¡µä¸å被è¯å«ä¸ºæ°æ®è¡¨ | åä¸æä»¶ç± 8 æ¡é为 2 æ¡æ£ç¡®è®°å½ï¼è¯´æé¡µ 0 æ¡ | éè¿ | | T08 | è´åï¼å¿åºååæ³åä½ | 表头ãå¿(å¸ãåº)ããå¿ï¼å¸ãåºï¼ããå¿å¸åºã | åè¯å«ä¸ºå¿åºå | å½ä¸åå¹é åä¸ç§åæ³åå½ä¸ï¼ä¿®å¤ååæãå¿ï¼å¸,åºï¼ã带éå·ï¼åä¸å½ä¸ï¼ | éè¿ | | T09 | åå½ï¼8 æçå®å¸å·æä»¶é导 | 8 æå®¢è¿ 9 份ãç©æµ 16 份åå§ææ¥ | è§£ææ¡æ°ä¸å岿¹æ¬¡ä¸è´ãæ æ¥é | å®¢è¿ 39 æ¡ãç©æµ 128 æ¡ï¼å fail=0ï¼ä¸ 09-19 æ¹æ¬¡ 531/532 ä¸è´ï¼ | éè¿ | | T10 | åå½ï¼8 ææåº¦æ°é弿¯å¯¹ | é导å 136 è¡ vs é导å 136 è¡ | éå¼ä¸è´ | å»ä¸»é®åéè¡æ¯å¯¹ï¼**IDENTICAL** | éè¿ | ## åãåç°çé®é¢ä¸å¤ç½® | # | é®é¢ | å¤ç½® | | --- | --- | --- | | P1 | ãå¡«æ¥è¯´æã页éå«ã项ç®åç§°ãçé¿å¥è¢«å½ä½è¡¨å¤´è¡ï¼æ´é¡µ 8 æ¡è¢«è¯¯å»ºæé¡¹ç® | 已修ï¼è¡¨å¤´è¡å¤å®è¦æ±ãå«é¡¹ç®åç§°ã+ãè³å° 2 个çè¡¨å¤´åæ®µï¼â¤20 åï¼ãï¼æµè¯æ°æ®å·²ä»åºä¸æ¸ é¤ | | P2 | å¿åºåå ³é®è¯åæ `å¿ï¼å¸,åºï¼`ï¼éå·ï¼ï¼å®é è¡¨å¤´æ¯ `å¿ï¼å¸ãåºï¼`ï¼é¡¿å·ï¼ï¼å¯¼è´ county åä¸å° | 已修ï¼å å½ä¸åï¼å ¨/åè§æ¬å·ãé¡¿å·ãéå·å ¨é¨å»æï¼åå¹é ãå¿(å¸åº)ããå¿å¸åºããåºå¿ã | | P3 | **åå½é导 8 æç©æµæ¶ï¼ãæ¹åçåå °äº¤éç©æµåºç¡è®¾æ½æèµç»è®¡æ±æ»è¡¨ï¼ææ¥ï¼ã忬¡å¸¦åºéåå °çæ¦æ± 27 + é»ç³ 4 = 31 个项ç®** | 已忬¡æ¸ é¤ï¼`investment_project` 152 / `investment_monthly` 284 æ¢å¤åç¶ï¼ï¼æ ¹æ²»éæ¸ ç 8 ææºæä»¶ï¼**å¾ ç¨æ·ç¡®è®¤æ¯å¦ç±æä»£å** | | P4 | çå®å¸å·ææ¥è¡¨å¤´é**没æ**ãå¿ï¼å¸ãåºï¼ãåï¼æ½æ¥ 8 æ 25 份æä»¶ï¼0 份å«è¯¥åï¼ | 屿£å¸¸ï¼å岿°æ® county ä¸ºç©ºæ¯æ°æ®æºéå¶ï¼9 æèµ·æç»ä¸æ¨¡æ¿å¡«æ¥åè¯¥åææå¼ | | P5 | æµè¯ç¨çä¸´æ¶æä»¶ä¸ä¸´æ¶æ°æ® | æµè¯æä»¶ `docs/æèµ/è¾å ¥/客è¿ï¼å®¢è¿ç«ï¼/9æ/æ¦æ±å¸_2026-09_客è¿ç«åºææ¥.xlsx`ãæµè¯é¡¹ç® A/Bã2026-09 å¯¼å ¥æ¹æ¬¡å·²å ¨é¨å é¤ | ## äºãç»è®º - 两份å¸å·å¡«æ¥æ¨¡æ¿å¯ç¨ï¼æ£åé¾è·¯ï¼æ¨¡æ¿ â è§£æ â 主档 + æåº¦æ°ï¼éåæ®µå¯¹é½ï¼ - 表头å¤å®æ¶ç´§åï¼æ¨¡æ¿èªå¸¦çãå¡«æ¥è¯´æã页ä¸åè¢«è¯¯å½æ°æ®è¡¨ï¼è´åç¨ä¾ T06/T07ï¼ï¼ - 8 æçå®å¸å·æ°æ®é导å彿 åä¾ï¼æ¡æ°ä¸åå²ä¸è´ï¼æåº¦æ°éå¼ä¸è´ï¼ - éçï¼8 æåå °æ±æ»è¡¨æºæä»¶çéåå °æ®µæªæ¸ çï¼P3ï¼ï¼éç¨æ·ç¡®è®¤æ¸ çæ¹å¼ã docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-20.md
@@ -82,6 +82,19 @@ - **åæ¶ä¿®æä¸ä¸ªä¸¥éåå½**ï¼æ¬æ¬¡æ°å¢ç `computed` 䏿件ä¸å·²æ `computed` **ååéå¤**ï¼JS 对象åè è¦çåè â `username/myModules/visibleModules` å ¨é¨ä¸¢å¤±ï¼ ãæ¥è¡¨çæã页 `created()` ç´æ¥æéã**æ´é¡µç½å±**ãæ¥å£æµè¯åç°ä¸äºï¼æ¯æµè§å¨å®æµææ´é²çï¼è¯¦è§æµè¯æ¥å第åèï¼ã ### 1.8 å¸å·ç»ä¸å¡«æ¥æ¨¡æ¿ï¼ç¨æ·æé®ãæåªä¸ªæ ¼å¼æ¥æå¥½ï¼è¦ä¸è¦çæä¸¤ä¸ªæ¨¡æ¿ãï¼ - **èæ¯**ï¼ç¨æ·æåºãè¿å ä¸ªè¡¨çæ´æ°å ¶å®å¾ç®åââæé¡¹ç®åç§°æ´æ°æ±æ»è¡¨ææ ãæ°å¢é¡¹ç®å°±æ°å¢å°æç»è¡¨ï¼ é¢å®ææ±æ»è¡¨åæç»è¡¨æ¹å¼ä¸æ ·ï¼å©ä¸ä¸å¼ 表项ç®åºå®åªæ´æ°ææ ââ为ä»ä¹ç°å¨å¼å¾æç¹å¤æãã - **æ ¸å¯¹**ï¼éæ±ææ¡£ãæèµææ¥æ°æ®å¤çä¸å¤è¡¨æ´æ°éæ±è¯´æãStep1/2/3 ä¸ç¨æ·æè¿°å®å ¨ä¸è´ï¼ç¨åºé»è¾ä¹æ¯è¿ä¹å®ç°çã - **ç»è®º**ï¼å¤æä¸å¨ã表ãï¼å¨ãæºãââçå¼ä¸ç»ä¸ï¼27 份é 7 份æå·®å¼ï¼ãä¸ä¸ªæä»¶æ··å¤ä¸ªå¸å·ã没æå¿åºåãåä½ç½®é å åºã - **产åº**ï¼ 1. æ°å¢ä¸¤ä»½å¸å·å¡«æ¥æ¨¡æ¿ `模æ¿_å¸å·ææ¥_客è¿ç«åº.xlsx` / `模æ¿_å¸å·ææ¥_ç©æµååº.xlsx` ï¼ãææ¥ã页 17 ååè¡è¡¨å¤´ + 建设æ§è´¨ä¸æ + ãå¡«æ¥è¯´æã页 11 æ¡è¦æ±ï¼ï¼ 2. å£å¾è¯´æææ¡£ `docs/æèµ/å¡«æ¥å£å¾ä¸ç»ä¸æ¨¡æ¿_2026-09-20.md`ï¼æ¨¡æ¿å段å»åãå¤æåº¦æ¥æºãå¾ å®æ»ç 3 ä»¶äºãè¿æ¸¡å®æï¼ã - **é å¥è§£ææ¹å¨**ï¼æ°å¢ãå¿ï¼å¸ãåºï¼ãåè§£æï¼åå ¥ä¸»æ¡£ `county`ï¼ï¼è¡¨å¤´è¡å¤å®æ¶ç´§ä¸º ãå«é¡¹ç®åç§° + è³å° 2 个çè¡¨å¤´åæ®µãï¼é¿å ææ¨¡æ¿èªå¸¦çãå¡«æ¥è¯´æã页彿°æ®è¡¨ã ## äºãæµè¯ç»ææè¦ ãåè½æµè¯æ¥å_æèµæç»è¡¨å°±ç»ªä¸é¢è§ç±»åè¡¥é½_2026-09-20.mdãï¼**7 æ¡ç¨ä¾éè¿ï¼1 æ¡æªå®æµ**ï¼ç¼ºæ¯çæç¤ºï¼æªä¸´æ¶ç§»å¨ç¨æ·æ¯çæä»¶ï¼ã @@ -139,6 +152,20 @@ | éå¸¦ä¿®å¤ | `computed` éå¤é®å¯¼è´æ¥è¡¨çæé¡µæ´é¡µç½å±ï¼å·²ä¿®å¤å¹¶æµè§å¨å¤éªï¼ | | å¤éªï¼ç¨æ·é®é¢ 2ï¼ | é¢è§åæ¯ 12 è¡é½å ¨ï¼ã累计货ç©å¨è½¬é 0%ãç»æ¥åºä¸ºåæ°æºæ¬èº« `total_yoy=0.00000346`ï¼éç¼ºé· | ãåè½æµè¯æ¥å_å¸å·ç»ä¸å¡«æ¥æ¨¡æ¿ä¸å¿å¸åºè§£æ_2026-09-20.mdãï¼**10 æ¡ç¨ä¾éè¿ï¼æ£å 5 + è´å 3 + åå½ 2ï¼**ã | æ ¡éªé¡¹ | ç»æ | | --- | --- | | 模æ¿ç»æ | 两份模æ¿åä¸ºãææ¥ã17 å表头 + 建设æ§è´¨ä¸æ + å¡«æ¥è¯´æ 11 æ¡ | | æ£åå¯¼å ¥ï¼æ¨¡æ¿å¡«æ¥ï¼ | total=2ãsuccess=2ãcity=æ¦æ±å¸ | | 主档éåæ®µ | å¿åºï¼æ±å²¸åº/洪山åºï¼ã建设åä½ãæ§è´¨ãå¼å·¥/ç«£å·¥å¹´ãæ»æèµãå·¥å¯/åè®¾å ¨é¨å¯¹é½ | | æåº¦æ°éåæ®µ | èªå¼å§ç´¯è®¡/æ¬å¹´è®¡å/èªå¹´å累计/æ¬æå®æ/å»ºè®¾é¶æ®µ/形象è¿åº¦å ¨é¨å¯¹é½ï¼æ¥è¡¨æ 2026-09 | | è´åï¼è¯´æé¡µè¢«å½æ°æ®è¡¨ | ä¿®å¤å 8 æ¡è¯¯è§£æï¼id 233~240ï¼â ä¿®å¤å 0 æ¡ | | è´åï¼å¿åºååæ³åä½ | ãå¿ï¼å¸ãåºï¼/å¿(å¸ãåº)/å¿å¸åºãå½ä¸åååå½ä¸ | | åå½ï¼8 æçå®å¸å·é导 | å®¢è¿ 39ãç©æµ 128ï¼ä¸ 09-19 æ¹æ¬¡ä¸è´ï¼fail=0 | | åå½ï¼8 ææåº¦æ°æ¯å¯¹ | é导åå 136 è¡éå¼ **IDENTICAL** | | æ°æ®æ¸ ç | æµè¯é¡¹ç® A/Bã2026-09 æ¹æ¬¡ãæµè¯æä»¶åå·²å é¤ | ## ä¸ãéçé®é¢ä¸å¾ å 1. æ¦æ±ç©æµé¡¹ç®æ¸ åå£å¾ï¼å·²ç¡®è®¤å¿½ç¥ï¼ã @@ -161,5 +188,8 @@ 9. **8 æçåå °æ±æ»è¡¨æªæ¸ ç**ï¼ç¨æ·åªæ¸ äº 7 æçï¼108032â90112 åèï¼ï¼8 æçï¼mtime 2026-08-20ï¼ä»å«æ¦æ± 27 + é»ç³ 4 æ®µï¼ è¥é导 8 æç©æµï¼å·²å é¤ç 31 个项ç®ä¼éæ°å»ºæ¡£ â é导åéåæ ·æ¸ çï¼æç±æä»£åï¼å¾ ç¨æ·ç¡®è®¤ï¼ã **2026-09-20 ä¸åååå½é导æ¶å·²å®æµå¤ç°**ï¼8 æç©æµé导å +31 ä¸ªé¡¹ç® / +31 æ¡æåº¦æ°ï¼ï¼å·²åæ¬¡æ¸ é¤ï¼åºåå° 152 ä¸ªé¡¹ç® / 284 æ¡æåº¦æ°ï¼2026-08 æåº¦æ°éå¼ä¸é导åä¸è´ã 10. å¸å·åè¡¨å¯¼å ¥ç**å¤å¸å·åå åºæç¤º**ï¼è¯å«ä¸ä»½æä»¶å«å¤ä¸ªå¸å·åå¹¶æç¤º/è·³è¿ï¼å¾ ç¨æ·ç¡®è®¤æ¯å¦è¦åã 11. çæè¡¨æ¦æ±ç©æµå°è®¡ç°å¨åªæãæ»æèµãï¼ç¼º 8 æçèªå¼å§ç´¯è®¡/æ¬å¹´è®¡å/æå®æ â éæ¦æ± 8 æç©æµåè¡¨ï¼æçå å£å¾ï¼æè½è¡¥é½ã 12. 两份å¸å·å¡«æ¥æ¨¡æ¿å¾ ç¨æ·è¿ç®åä¸åå¸å·ï¼å»ºè®® 9 æèµ·æ§è¡ï¼ï¼å¦éãæ¨¡æ¿ä½æ£ + 表头ä¸ç¬¦å¼¹çªãï¼å¾ ç¨æ·ç¡®è®¤åææã 13. 8 æåå °ç©æµæ±æ»è¡¨æºæä»¶ï¼å«æ¦æ± 27 + é»ç³ 4ï¼æ¯å¦ç±æä»£åæ¸ çï¼å¾ ç¨æ·ç¡®è®¤ï¼è§ 1.8 / æµè¯æ¥å P3ï¼ã docs/Ͷ×Ê/Ì¿Ú¾¶Óëͳһģ°å_2026-09-20.md
New file @@ -0,0 +1,78 @@ # å¸å·ææ¥å¡«æ¥å£å¾ä¸ç»ä¸æ¨¡æ¿ï¼2026-09-20ï¼ > èµ·å ï¼ç¨æ·æé®ãä»ä»¬å¯¼å ¥çæ°æ®æåªä¸ªæ ¼å¼æ¥æå¥½ï¼è¦ä¸è¦çæä¸¤ä¸ªæ¨¡æ¿ï¼å®¢è¿ç«ä¸ä¸ªãç©æµåä¸ä¸ªï¼ï¼ > è¿å ä¸ªè¡¨çæ´æ°å ¶å®å¾ç®åââæé¡¹ç®åç§°æ´æ°æ±æ»è¡¨æå®ææ ãæ°å¢é¡¹ç®å°±æ°å¢å°æç»è¡¨ï¼ > é¢å®ææ±æ»è¡¨åæç»è¡¨æ¹å¼ä¸æ ·ï¼å©ä¸ä¸å¼ 表项ç®åºå®åªæ´æ°ææ ââ为ä»ä¹ç°å¨å¼å¾æç¹å¤æäºï¼ã ## ä¸ãç»è®ºå 说 1. **ä½ çå¿æºæ¨¡åæ¯å¯¹ç**ï¼èä¸å°±æ¯éæ±ææ¡£ãæèµææ¥æ°æ®å¤çä¸å¤è¡¨æ´æ°éæ±è¯´æãéåç䏿¥ï¼ - Step1 ææ¥ â ä¸¤å¼ æç»è¡¨ï¼ä»¥**项ç®åç§°**为é®ï¼å·²æâæ´æ° 5 åï¼æ²¡æâæ°å¢æ´è¡ï¼ - Step2 æç»è¡¨ â å ¨çé¢å®æè®¡åè¿åº¦æ 嵿±æ»ï¼ååæ´æ° 4 é¡¹ï¼æ²¡æçæ°å¢ï¼æ¯çæèææ¥æ²¡æçä¿æåå¼ï¼ - Step3 æç»è¡¨ â ä¸å¼ åºå®é¡¹ç®è¡¨ï¼åäºäºè§åç©æµ / äº¿å æèµé¡¹ç® / ç»æµå¼ºå¿ï¼ï¼é¡¹ç®æ¸ åä¸å¨ï¼åªæ´æ° 3 é¡¹ææ ã 2. **夿ä¸å¨ã表ãï¼å¨ãæºã**ãç¨åºä¾§è¦å¤çç麻ç¦å ¨é¨æ¥èªå¸å·æ¥ä¸æ¥çåå§è¡¨æ ¼æ ¼å¼ä¸ç»ä¸ï¼ä¸æ¥èªæ±æ»è§åæ¬èº«ã 3. **å»ºè®®ä» 9 æèµ·ç»ä¸ç¨ä¸¤ä»½æ¨¡æ¿**ï¼å®¢è¿ç«åºãç©æµååºåä¸ä»½ï¼ã模æ¿å·²ç»åå¥½ï¼ - `docs/æèµ/模æ¿/模æ¿_å¸å·ææ¥_客è¿ç«åº.xlsx` - `docs/æèµ/模æ¿/模æ¿_å¸å·ææ¥_ç©æµååº.xlsx` ## äºã两份模æ¿é¿ä»ä¹æ · åªæä¸ä¸ªæ°æ®é¡µãææ¥ã+ ä¸ä¸ªãå¡«æ¥è¯´æã页ã第 4 è¡æ¯è¡¨å¤´ï¼ä¸è¡ä¸æ¡é¡¹ç®ï¼å ± 17 åï¼ | å | 表头 | ç¨åºéçå»å | | --- | --- | --- | | A | åºå· | ä» ç¨äºè¯å«å¸å·å°èè¡/å计è¡ï¼ä¸åä¸å¹é | | B | å¿ï¼å¸ãåºï¼ | 项ç®ä¸»æ¡£ `county`ï¼å ¨çæ±æ»è¡¨è¦æ¾ç¤ºè¿ä¸åï¼ | | C | **项ç®åç§°åç«çº§** | **å¹é é®**ï¼å¸å· + ç±»å« + 项ç®åç§°ï¼ | | D | æèµå»ºè®¾åä½åç§° | 主档 `builder_name` | | E | 建设æ§è´¨ | 主档 `construct_nature`ï¼ä¸æï¼æ°å»º/ç»å»º/æ¹æ©å»º/æ¹å»ºï¼ | | F | å¼å·¥å¹´ | 主档 `start_time` | | G | 竣工年 | 主档 `end_time` | | H | è®¡åæ»æèµï¼ä¸å ï¼ | 主档 `total_investment` | | I | èªå¼å§å»ºè®¾ç´¯è®¡å®ææèµï¼ä¸å ï¼ | **彿æåº¦æ°** | | J | æ¬å¹´è®¡åæèµï¼ä¸å ï¼ | **彿æåº¦æ°** | | K | èªå¹´åç´¯è®¡å®ææèµï¼ä¸å ï¼ | **彿æåº¦æ°** | | L | å ¶ä¸ï¼æ¬æå®ææèµï¼ä¸å ï¼ | **彿æåº¦æ°** | | M | å»ºè®¾é¶æ®µ | **彿æåº¦æ°** | | N | 形象è¿åº¦ | **彿æåº¦æ°** | | O | 工坿¹å¤æå· | 主档 `approval_gk` | | P | å设/æ½å·¥å¾æ¹å¤æå· | 主档 `approval_cs` | | Q | 夿³¨ | ä¸åæ° | - **主档åï¼AãBãDãEãFãGãHãOãPï¼**ï¼ç¬¬ä¸æ¬¡å»ºæ¡£æ¶åå ¥ï¼ä¹ååªè¦é¡¹ç®åä¸åå°±ä¸å¨ï¼ - **æåº¦æ°ï¼IãJãKãLãMãNï¼**ï¼æ¯ä¸ªææ¥å¤å°åå¤å°ï¼åä¸ï¼é¡¹ç®ï¼æ¥è¡¨æï¼è¦çå¼éå»ºï¼ - **ã项ç®åç§°åç«çº§ãæ¯å¯ä¸å¹é é®**ï¼æ¹ä¸ä¸ªå = æ°å»ºä¸ä¸ªé¡¹ç®ï¼æä»¥è¦æ±ä¸æ¹å¤åç§°ä¸åä¸å·®ï¼ - ãå¡«æ¥è¯´æã页åäº 11 æ¡è¦æ±ï¼ä¸ä»½æä»¶åªæ¾æ¬å¸å·ãæä»¶å带å¸å·åãæ°å¼ä¸å¸¦å符ã å¿ï¼å¸ãåºï¼å¿ å¡«ã建设æ§è´¨åªè½åéä¸ãæ°å¢é¡¹ç®ç´æ¥å è¡ãéèè¡ä¸æ¾æ°æ®ãå计è¡å¯ä¸å¡«çï¼ã ## ä¸ã为ä»ä¹ç°å¨æè§å¤æï¼4 个çå®åå ï¼é½å¨è¾å ¥ä¾§ï¼ 1. **çå¼ä¸ç»ä¸**ï¼27 份å¸å·ææ¥éï¼20 份ä¸çç»ä¸æ¨¡æ¿ä¸è´ï¼7 份æå·®å¼ââ éå·å¤ä¸ä¸ª Sheet2ãç¥åæ¶/æ½æ±/è¥é³ææå¤ä¸ªåæé¡µç¾ãè¥é³æ´ä½å³ç§» 1 åã æ©æ½/é»ç³åå¹¶è¡¨å¤´ãæ¦æ±ï¼åå±±/æ±å£ï¼åªæ¥ä¸¤ä¸ªé¡¹ç®çç®è¡¨ãè¯¦è§ `docs/æèµ/è¾åº/å¸å·ææ¥æ ¼å¼å·®å¼æ¥å_2026-07.md`ãç¨åºä¸ºäºè¯»å ¨ï¼åªè½ä¸ä¸ªçå¼ä¸ä¸ªå åºåæ¯ã 2. **ä¸ä¸ªæä»¶éæ··å¤ä¸ªå¸å·**ï¼ãæ¹åçåå °äº¤éç©æµåºç¡è®¾æ½æèµç»è®¡æ±æ»è¡¨ï¼ææ¥ï¼ãä¸ä¸ªé¡µç¾æ¶äºå ¨çï¼ 2026 å¹´ 8 æè¿ä»½ 38 è¡éåªæ **7 è¡æ¯åå °**ï¼å¦å¤ **27 è¡æ¦æ± + 4 è¡é»ç³**ã ç¨åºæ¯ææãå°èè¡ã忢å¸å·ï¼è¿æ¯ææåçåè½ï¼ï¼æä»¥è½è¯»è¿æ¥ï¼ä½ä»£ä»·æ¯ï¼ **åªè¦é导 8 æç©æµï¼è¿ 31 个项ç®å°±ä¼éæ°å»ºå°æ¦æ±/é»ç³åä¸**ï¼ä»å¤©ååå½é导æ¶å¤ç°ï¼å·²åæ¬¡æ¸ é¤ï¼è§æµè¯æ¥å P3ï¼ã 3. **é¡¹ç®æ¸ åæä¸¤ä¸ªæ¥æº**ï¼ä¸æ¯å¸å·å½ææ¥ä¸æ¥çï¼äºæ¯æ¯ç/åºéå·²ç»æçï¼å¦é¢å®ææ¯çéçæ¦æ±ç©æµè¡ï¼ã äºæ¯äº§çãææ»æèµãæ²¡ææ¬ææåº¦æ°ãç项ç®ï¼è¦ä¸è¦è¡¥è¿å°è®¡/å计就æäºè¦åç¬å³ççäºã 4. **åä½ç½®é å åº**ï¼æ©æå®ç°æãèªå¹´å累计 = èªå¼å§å»ºè®¾ç´¯è®¡ + 2 åãè¿ç±»ååºæ¨ç®ï¼ å¸å·ä¸æªåå°±å¾åå 䏿¡å åºââè¿æ¯ãçãåºæ¥çå¤æåº¦ï¼ä¸æ¯ä¸å¡å¤æåº¦ã ## åãæ¢æç»ä¸æ¨¡æ¿åï¼è¿è¦å®æ» 3 ä»¶äº æ¨¡æ¿è§£å³çæ¯ãæä¹è¯»ããä¸é¢ 3 ä»¶äºå®ä¸æ¥ï¼æ´æ¡é¾å°±æ²¡ææ§ä¹äºï¼ | # | å¾ å®äºé¡¹ | 建议 | | --- | --- | --- | | 1 | å¹´åº¦é¡¹ç®æ¸ å以è°ä¸ºåï¼åºéæä»ä¹å°±åºä»ä¹ï¼è¿æ¯ä»¥ã年度é¢å®æè®¡å表ã为åï¼ | 以年度é¢å®æè®¡å表为åï¼éæ¯çä¸åæåç¬å»ºä¸å¼ ã年度é¢å®æè®¡åã表ï¼ï¼æ¯æåªæ´æ°ææ | | 2 | æå¸å·å½æ**没æ¥**æä¹åï¼ | 该å¸å·ææ ç空 + 导åºåå¼¹çªååºãæªæ¥éå¸å·ãï¼ä¸é»æå¯¼åº | | 3 | å¸å·**æ°å¢**çé¡¹ç®æå°åªï¼ | æå°è¯¥å¸å·ãé¢å®æè®¡åå ãå°èæ«å°¾ï¼è®¡åå¤çåç¬æ 注ï¼å¯¼åä¸ä»åºä½ææ¾åºå«äºè®¡åå | ## äºãè¿æ¸¡å®æä¸ä¸ä¸æ¥ - **8 æå以å**ï¼å·²ææ§æ ¼å¼å¯¼å ¥å®æ¯ï¼ç¨åºç»§ç»å ¼å®¹æ§çå¼ï¼**䏿¹ãä¸é导**ï¼8 æåå °æºæä»¶æ¸ çå¦è¡ç¡®è®¤ï¼ã - **9 æèµ·**ï¼å¸å·æç»ä¸æ¨¡æ¿å¡«æ¥ï¼å»ºè®®åå ä¸ä¸ªã模æ¿ä½æ£ãââå¯¼å ¥æ¶æ ¡éªè¡¨å¤´æ¯å¦ä¸ºæ¬æ¨¡æ¿ 17 åï¼ æ¯åèµ°ãæè¡¨å¤´åæ°ãçç´è·¯ï¼ä¸æ¯å**å¼¹çªæç¤º**ï¼åªä¸å对ä¸ä¸ï¼ï¼è䏿¯ç»§ç»çåä½ç½®ã - è¿æ ·è§£æé»è¾å¯ä»¥éåæãæè¡¨å¤´ååå¼ãï¼ç°æé£äºå®¹éå åºåæ¯å¯ä»¥éæ¥ä¸çº¿ï¼å¤æåº¦èªç¶å°±é䏿¥äºã docs/Ͷ×Ê/Ä£°å/Ä£°å_ÊÐÖÝÔ±¨_¿ÍÔËÕ¾³¡.xlsxBinary files differ
docs/Ͷ×Ê/Ä£°å/Ä£°å_ÊÐÖÝÔ±¨_ÎïÁ÷Ô°Çø.xlsxBinary files differ
traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java
@@ -2489,6 +2489,8 @@ project.setProjectName(nt); project.setCategory(category); project.setCity(currentCity); String countyCell = cellStr(row, col.get("county")); if (countyCell != null && !countyCell.trim().isEmpty()) project.setCounty(countyCell.trim()); project.setBuilderName(cellStr(row, col.get("builder"))); project.setConstructNature(cellStr(row, col.get("nature"))); project.setStartTime(investTime(cellStr(row, col.get("start")))); @@ -2524,11 +2526,19 @@ Row row = sh.getRow(r); if (row == null) continue; boolean hasName = false; int headerCells = 0; for (int c = 0; c <= row.getLastCellNum(); c++) { String v = cellStr(row, c); if (v != null && v.contains("项ç®åç§°")) { hasName = true; break; } if (v == null) continue; String t = v.trim(); if (t.isEmpty() || t.length() > 20) continue; // è¯´ææ§é¿å¥ä¸ç®è¡¨å¤´å段 String k = investHeaderKey(t); if (k == null) continue; headerCells++; if ("name".equals(k)) hasName = true; } if (!hasName) continue; // ç表头è¡è³å°æ 2 个çè¡¨å¤´åæ®µï¼åªæä¸æ ¼é¿å¥å«ã项ç®åç§°ãç说æé¡µä¼è¢«æé¤ if (!hasName || headerCells < 2) continue; Map<Integer, String> colTexts = new HashMap<>(); int scanEnd = investHeaderScanEnd(sh, r, row); for (int rr = r; rr <= scanEnd; rr++) { @@ -2542,23 +2552,8 @@ } Map<String, Integer> col = new HashMap<>(); for (Map.Entry<Integer, String> e : colTexts.entrySet()) { int c = e.getKey(); String v = e.getValue(); if (v.contains("项ç®åç§°")) col.putIfAbsent("name", c); else if (v.contains("æèµå»ºè®¾") || v.contains("建设åä½") || v.contains("项ç®ä¸ä¸»")) col.putIfAbsent("builder", c); else if (v.contains("建设æ§è´¨")) col.putIfAbsent("nature", c); else if (v.contains("å¼å·¥")) col.putIfAbsent("start", c); else if (v.contains("竣工") || v.contains("建æ")) col.putIfAbsent("end", c); else if ((v.contains("è®¡åæ»æèµ") || v.contains("æ»æèµ")) && !v.contains("累计")) col.putIfAbsent("total", c); else if (v.contains("èªå¼å§å»ºè®¾")) col.putIfAbsent("startcum", c); else if (v.contains("æ¬å¹´è®¡å")) col.putIfAbsent("yearplan", c); else if (v.contains("èªå¹´å累计")) col.putIfAbsent("yearcum", c); else if (v.contains("æ¬æå®æ")) col.putIfAbsent("monthdone", c); else if (v.contains("å»ºè®¾é¶æ®µ")) col.putIfAbsent("stage", c); else if (v.contains("形象è¿åº¦") || v.contains("建设è¿å±")) col.putIfAbsent("desc", c); else if (v.contains("å·¥å¯") && !v.contains("项ç®åç§°")) col.putIfAbsent("gk", c); else if (v.contains("å设") && !v.contains("项ç®åç§°")) col.putIfAbsent("cs", c); else if (v.contains("建çé¢ç§¯") && !v.contains("æ°å¢")) col.putIfAbsent("area", c); String k = investHeaderKey(e.getValue()); if (k != null) col.putIfAbsent(k, e.getKey()); } if (!col.containsKey("name")) continue; for (int c = 0; c <= row.getLastCellNum(); c++) { @@ -2582,7 +2577,7 @@ if (dc <= row.getLastCellNum()) col.put("desc", dc); } for (String k : new String[]{"builder", "nature", "start", "end", "total", "startcum", "yearplan", "yearcum", "monthdone", "stage", "desc", "gk", "cs", "area"}) { "yearplan", "yearcum", "monthdone", "stage", "desc", "gk", "cs", "area", "county"}) { col.putIfAbsent(k, -1); } col.put("headerRow", r); @@ -2591,6 +2586,31 @@ return null; } /** å个表头åå æ ¼ -> åæ®µé®ï¼null è¡¨ç¤ºä¸æ¯è¡¨å¤´å段ï¼ï¼ä¾è¡¨å¤´è¡å¤å®ä¸åæ å°å ±ç¨ */ private String investHeaderKey(String v) { if (v == null) return null; String flat = v.replace(" ", ""); if (v.contains("项ç®åç§°")) return "name"; // ãå¿ï¼å¸ãåºï¼ãçåç§åæ³ï¼å/å ¨è§æ¬å·ãé¡¿å·/éå·ãææ æ¬å·ï¼ç»ä¸å½ä¸åååå¤å® String flatCounty = flat.replace("ï¼", "(").replace("ï¼", ")").replace("ã", "").replace("ï¼", "").replace(",", ""); if (flatCounty.contains("å¿(å¸åº)") || flatCounty.contains("å¿å¸åº") || flatCounty.contains("åºå¿")) return "county"; if (v.contains("æèµå»ºè®¾") || v.contains("建设åä½") || v.contains("项ç®ä¸ä¸»")) return "builder"; if (v.contains("建设æ§è´¨")) return "nature"; if (v.contains("å¼å·¥")) return "start"; if (v.contains("竣工") || v.contains("建æ")) return "end"; if ((v.contains("è®¡åæ»æèµ") || v.contains("æ»æèµ")) && !v.contains("累计")) return "total"; if (v.contains("èªå¼å§å»ºè®¾")) return "startcum"; if (v.contains("æ¬å¹´è®¡å")) return "yearplan"; if (v.contains("èªå¹´å累计")) return "yearcum"; if (v.contains("æ¬æå®æ")) return "monthdone"; if (v.contains("å»ºè®¾é¶æ®µ")) return "stage"; if (v.contains("形象è¿åº¦") || v.contains("建设è¿å±")) return "desc"; if (v.contains("å·¥å¯") && !v.contains("项ç®åç§°")) return "gk"; if (v.contains("å设") && !v.contains("项ç®åç§°")) return "cs"; if (v.contains("建çé¢ç§¯") && !v.contains("æ°å¢")) return "area"; return null; } /** è¡¨å¤´ææ¬æ«æä¸çï¼é»è®¤è¡¨å¤´è¡ +3ï¼è¥ã项ç®åç§°ãåé¦ä¸ªæ°æ®è¡æ´é ä¸ï¼åæ©å±å°æ°æ®è¡åä¸è¡ï¼ä¸é +12ï¼ã * èæ¯ï¼å¸å®/åå °çå¸å·æãå»ºè®¾é¶æ®µ/形象è¿åº¦ãæ ç¾åå¨è¡¨å¤´ä¸ç¬¬ 4~8 è¡ï¼åºå® +3 伿¼åï¼å½¢è±¡è¿åº¦è¯»ä¸å°ï¼ã */ private int investHeaderScanEnd(Sheet sh, int headerRow, Row headerRowObj) {