| New file |
| | |
| | | # åè½æµè¯æ¥å_ä¸é®å¯åèæ¬ä¸æ¡é¢å
¥å£_2026-09-19 |
| | | |
| | | ## ä¸ãåè½è¯´æ |
| | | |
| | | 1. **æ°å¢ `stop-dev.ps1`ï¼é¡¹ç®æ ¹ç®å½ï¼**ï¼ä¸æ¢æ `start-dev.ps1` é
å¥çä¸é®åæ¢èæ¬ã |
| | | - æãå¯å¨ç¨ç cmd ç¶è¿ç¨ãæ´æ ç»æï¼`cmd.exe /c mvn.cmd ... spring-boot:run`ã`cmd.exe /c npm.cmd run serve`ï¼ |
| | | ç¨ `taskkill /T /F` è¿å¸¦åè¿ç¨ï¼maven java â app javaï¼npm node â cmd â vue-cli-service nodeï¼ï¼ |
| | | - å
åºåæå½ä»¤è¡ç¹å¾ç²¾ç¡®å¹é
å¤å¿è¿ç¨ï¼`java.exe` å« `TrafficAuditApplication`ã`node.exe` å« `vue-cli-service`ï¼ |
| | | - ç»æåæ ¡éª 8090/8080 æ¯å¦å·²éæ¾ï¼ |
| | | - æç¡®ä¸ç¢°å
¶å® node/java è¿ç¨ï¼å¦ Codex ç `node_repl`ï¼ä¸ç¨æ·èªå·±å¼ç cmd çªå£ã |
| | | 2. **æ¡é¢ä¸é®å
¥å£**ï¼å·¥ä½åºå¤ï¼ä¸å
¥åºï¼ï¼ |
| | | - `D:\æ¡é¢\å¯å¨äº¤éå®¡æ ¸ç³»ç».bat`ï¼è°ç¨ `start-dev.ps1`ï¼å·²å¨è·åè·³è¿ãä¸å¨è·åæèµ·å¹¶çå¾
就绪ï¼ï¼æåæå¼ `http://localhost:8080`ï¼ |
| | | 另忰 `nobrowser` å¯åªå¯æå¡ä¸å¼¹æµè§å¨ã |
| | | - `D:\æ¡é¢\åæ¢äº¤éå®¡æ ¸ç³»ç».bat`ï¼è°ç¨ `stop-dev.ps1`ã |
| | | |
| | | ## äºãæµè¯ç¯å¢ |
| | | |
| | | | 项 | å¼ | |
| | | | --- | --- | |
| | | | æ¥æ | 2026-09-19 00:4xâ00:5x | |
| | | | é¡¹ç® | `D:\ææ¡£\ChatGPT\traffic-audit` | |
| | | | æå¡ | å端 8090ï¼Spring Bootï¼ãå端 8080ï¼Vueï¼ãMySQL 3308 | |
| | | | èæ¬ç¼ç | `.ps1` = UTF-8 **with BOM**ï¼`.bat` = **GBK(936) + CRLF**ï¼é¦è¡ `chcp 936` | |
| | | |
| | | ## ä¸ãç¨ä¾è¡¨ |
| | | |
| | | | ç¼å· | ç¨ä¾ | è¾å
¥/æä½ | 颿 | å®é
| ç»è®º | |
| | | | --- | --- | --- | --- | --- | --- | |
| | | | T01 | å·²å¨è¿è¡æ¶å¯å¨ï¼æ£å·å¹çï¼ | æå¡å¨è·æ¶æ§è¡ `å¯å¨äº¤éå®¡æ ¸ç³»ç».bat nobrowser` | è·³è¿å¯å¨ï¼ä¸æ°å»ºéå¤è¿ç¨ | æå°ãå端已å¨è¿è¡ï¼8090 æçå¬ï¼ï¼è·³è¿å¯å¨ãããå端已å¨è¿è¡ï¼8080 æçå¬ï¼ï¼è·³è¿å¯å¨ããï¼éåæ ¡éªãå端: OKï¼å·²å°±ç»ªããå端: OKï¼å·²å°±ç»ªã | â
éè¿ | |
| | | | T02 | æªè¿è¡æ¶å¯å¨ï¼æ£åï¼ | æå¡å·²åæ¶æ§è¡ `å¯å¨äº¤éå®¡æ ¸ç³»ç».bat nobrowser` | æèµ·åå端并çå¾
就绪 | æ°å»ºå端é¾ï¼cmd PID 8964 â java â app javaï¼ä¸å端é¾ï¼cmd PID 26024 â node â cmd â nodeï¼ï¼`backend.log` åºç° `Tomcat started on port(s): 8090` ä¸ `Started TrafficAuditApplication`ï¼00:48:33ï¼ | â
éè¿ | |
| | | | T03 | 忢æå¡ï¼æ£åï¼ | æ§è¡ `åæ¢äº¤éå®¡æ ¸ç³»ç».bat` | 两个è¿ç¨æ è¢«ç»æï¼ç«¯å£éæ¾ | å端 5 个è¿ç¨ãå端 5 个è¿ç¨è¢«ç»æï¼æå°ãç«¯å£ 8090ï¼å·²éæ¾ããç«¯å£ 8080ï¼å·²éæ¾ã | â
éè¿ | |
| | | | T04 | å¯åéç¯å¯ç¨æ§ï¼æ£åï¼ | å â å¯ ä¹å访é®é¡µé¢æ¥å£ | å端 8080ãå端æ¥å£åæ£å¸¸ | å端 `HTTP 200`ï¼å端 `/api/import/batches` `HTTP 200`ï¼è½åå°æè¿ãå¸å·å表æ¹é导å
¥ï¼ç©æµï¼ç©æµååºï¼/8æï¼ãæ¹æ¬¡ï¼ | â
éè¿ | |
| | | | T05 | ä¸è¯¯æï¼è´åï¼ | æ§è¡åæ¢èæ¬æé´è§å¯ Codex èªèº« | Codex å
æ ¸ `node_repl` ä¸å
¶å® cmd çªå£ä¸åå½±å | åæ¢èæ¬ä»å¨æ£å¸¸è¿è¡ï¼æ¬ä¼è¯å·¥å
·è°ç¨æªä¸æï¼ï¼å
¨ç¨æªå¹é
`node_repl` | â
éè¿ | |
| | | |
| | | ## åãåç°çé®é¢ä¸å¤ç½® |
| | | |
| | | | ç¼å· | é®é¢ | æ ¹å | å¤ç½® | |
| | | | --- | --- | --- | --- | |
| | | | P01 | 第ä¸ç `.bat` è¿è¡æ¶å¤§éæ¥ `'xx' is not recognized as an internal or external command`ï¼ä¸å½ä»¤è¡è¢«æªæï¼å¦ `'xecutionPolicy'`ï¼ | æ¹å¤çæä»¶å¿
é¡»ä½¿ç¨ **CRLF** æ¢è¡ï¼é¦çåæäº LFï¼cmd éè¡è§£æéä½ | æ¹ä¸ºæè¡æ°ç» `-join "\`r\`n"` ååºï¼å¤æµæ£å¸¸ | |
| | | | P02 | é¦ç `stop-dev.ps1` æ¥ `UnexpectedToken`/ãå符串缺å°ç»æ¢ç¬¦ãï¼ä¸ææç¤ºè¢«è¯»æä¹±ç | Windows PowerShell 5.1 读å**æ BOM** ç UTF-8 èæ¬æ¶æ ANSI(936) è§£éï¼å¤åèåºåè¢«ææ | æ¹å为 **UTF-8 with BOM**ï¼ä¸æ¢æ `start-dev.ps1` ä¸è´ï¼ï¼å¤æµæ£å¸¸ | |
| | | | P03 | åæ¢èæ¬æå称模ç³åè¿ç¨æè¯¯æé£é© | ââ | åªæãå¯å¨ç¨ç cmd ç¶è¿ç¨ + 精确å½ä»¤è¡ç¹å¾ãå¹é
ï¼`taskkill /T` ç»ææ´æ ï¼ä¸æè¿ç¨åæ¹éæ | |
| | | |
| | | ## äºãéçä¸è¯´æ |
| | | |
| | | 1. 两个æ¡é¢ `.bat` ä½äºå·¥ä½åºå¤ï¼`D:\æ¡é¢`ï¼ï¼**ä¸å
¥ git**ï¼`stop-dev.ps1` å·²å
¥åºï¼ä¸ `start-dev.ps1` é
å¥ã |
| | | 2. æå¡ä»ä»¥ `cmd /c ... > log` æ¹å¼å¸¸é©»ï¼**å
³æå¯å¨çªå£ä¼å¸¦èµ°æå¡**ï¼æ¬æ¬¡æ¥éå³ç±æ¤èæ¥ï¼ãæ¥å¸¸ç¨æ¡é¢ãå¯å¨ãå
¥å£åå»å³å¯æ¢å¤ã |
| | | 3. è¥ç«¯å£æªå®å
¨éæ¾ï¼æç«¯æ
åµï¼ï¼åæ¢èæ¬ä¼æç¤ºãä»å¨çå¬ï¼è¯·éè·ä¸æ¬¡ãã |
| | | |
| | | ## å
ãç»è®º |
| | | |
| | | 5 æ¡ç¨ä¾å
¨é¨éè¿ï¼å¯å¨èæ¬å¹çè·³è¿ãåæ¢èæ¬æ PID æ´æ ç»æå¹¶éæ¾ 8090/8080ã |
| | | å¯åéç¯å页é¢ä¸æ¥å£åæ£å¸¸ï¼ä¸ä¸å½±å Codex èªèº«è¿ç¨ã两个ç¼ç é®é¢ï¼LF æ¢è¡ã缺 BOMï¼å·²å®ä½å¹¶ä¿®å¤å¤æµã |
| New file |
| | |
| | | # åè½æµè¯æ¥å_ä¸å£å¾æåå¨è½¬éå£å¾ç»ä¸_2026-09-19 |
| | | |
| | | ## ä¸ãåè½è¯´æ |
| | | |
| | | **é®é¢æ¥æº**ï¼ç¨æ·æ ¸å¯¹æ¡é¢ãçæ_éè·¯è¿è¾éæ±æ»è¡¨ (1).xlsxãæ¶ï¼å¨ãä¸å£å¾æåã页æå·¥å äºä¸å |
| | | ã人工-å¨è½¬éãï¼éæåå项ç¸å ï¼ï¼åç°ä¸ç¨åºçæçãå¨è½¬éãåæå·®å¼ï¼å
¨ç +0.31978 ä¸äººå
¬éï¼ |
| | | åå¸å· ±0.01~0.08ï¼ï¼è¦æ±å®ä½åå å¹¶ä¿®å¤ã |
| | | |
| | | **æ ¹å **ï¼å䏿¬æ±æ»å¤§è¡¨é两页走äºä¸¤å¥åæ°å£å¾ã |
| | | |
| | | - ãä¸å£å¾æåã页å¨è½¬éæ¥èªå端 `ReportExportService.loadMidClassMap()` å
¬äº¤ç»´åº¦ï¼ |
| | | **éä¼ä¸è¡**夿ââ该è¡ãåé
å乡å¨è½¬éã> 0 å°±ååæ®µå¼ï¼= 0 æåéãæ»é â åå¸å
ãã |
| | | - ãä¸å£å¾æç»ããéè·¯è¿è¾å¨è½¬éããä¸å£å¾åæãç页走å°è´¦å£å¾ |
| | | ï¼`smReadLedgerMetrics()`ï¼ï¼å
æå¸å·æææ±æ»ï¼å å计æ»é â å计åå¸å
ã |
| | | |
| | | æºæ¥è¡¨éãæ»é/åå¸å
/åé
å乡ãä¸ä¸ªæ°åèªä¿ç两ä½å°æ°ï¼ä¸ªå«ä¼ä¸è¡ä¸ |
| | | `åé
å乡 â æ»é â åå¸å
`ï¼å·® ±0.01ï¼ã2026 å¹´ 1-8 æè¿ç±»è¡å
± **72 è¡**ï¼ |
| | | ç¨åºéä¿¡åæ®µå¼ã人工ç¨å·®é¢æ³ï¼ç´¯å åå³åºç°è¯¥å·®å¼ã |
| | | |
| | | **ä¿®æ¹å
容**ï¼`traffic-audit-server/.../reportexport/service/ReportExportService.java` |
| | | ï¼å
¬äº¤ç»´åº¦ï¼å 2458/2460 è¡éè¿ï¼ââåé
å乡ä¸å¾ç¨ãæ»é â åå¸å
ãç°ç®ï¼ä¸å°è´¦é¡µ/æç»é¡µ/å页åæå£å¾ä¸è´ã |
| | | |
| | | ## äºãæµè¯ç¯å¢ |
| | | |
| | | | 项 | å
容 | |
| | | | --- | --- | |
| | | | å端 | Spring Bootï¼`localhost:8090`ï¼æ¹åéæ°ç¼è¯å¹¶éå¯ï¼`start-dev.ps1`ï¼ | |
| | | | æ°æ®åº | MySQL `localhost:3308/traffic_audit`ï¼`city_bus_monthly` çï¼ | |
| | | | æ¥è¡¨æ | 2026-08ï¼1-8 æç´¯è®¡ + 8 æåæåï¼ | |
| | | | 对ç
§ä»¶ | `D:\æ¡é¢\çæ_éè·¯è¿è¾éæ±æ»è¡¨ (1).xlsx`ï¼æ¹åçæ + ç¨æ·äººå·¥åï¼ | |
| | | | çæä»¶ | æ¥å£ `/api/report/export/summaryWorkbook?period=2026-08` â `_after_busfix_2026-08.xlsx` | |
| | | | è¾
å©èæ¬ | `_qa_busfix.py`ã`_qa_busfix2.py`ã`_qa_busfix3.py`ã`_qa_busfix_diff.py`ã`_qa_busfix_err.py`ã`_qa_busfix_hist.py` | |
| | | |
| | | ## ä¸ãç¨ä¾ä¸ç»æ |
| | | |
| | | | ç¼å· | ç±»å | è¾å
¥ | 颿 | å®é
| ç»è®º | |
| | | | --- | --- | --- | --- | --- | --- | |
| | | | T1 | æ£å | æ¹åçæä»¶ãä¸å£å¾æåãO å vs ãä¸å£å¾æç»ãS åï¼17 å¸å· | éæ ¼ç¸ç | 17/17 å
¨é¨ç¸çï¼æ¦æ± 152330.8912ãåæ 64429.9445ãéå· 59015.4820â¦ï¼ | éè¿ | |
| | | | T2 | æ£å | å
¨ç累计å¨è½¬éï¼æå页 O3ï¼ | = æç»/人工 1227147.48902 | 1227147.4888ï¼å·® â0.0002 ä¸äººå
¬é = 2 人å
¬éï¼ | éè¿ï¼å·®å¼è§ãäºãéçãï¼ | |
| | | | T3 | æ£å | æ¦æ±ç´¯è®¡å¨è½¬é | = 人工å 152330.8912 | 152330.8912 | éè¿ | |
| | | | T4 | æ£å | 8 æåæå 17 å¸å·å计 | = æç» 8 æå计 | å为 156017.6956 | éè¿ | |
| | | | T5 | æ£å | ç¬ç«æ¥å£ `passengerMidAnalysis`ï¼åé
å乡å
¬äº¤ç´¯è®¡å¨è½¬éï¼ | = å°è´¦å£å¾ 227126.74 | 227126.74ï¼æ¹å 227127.06ï¼ | éè¿ | |
| | | | T6 | æ£å | ç¬ç«æ¥å£ `passengerMidRank` å
¨ç累计å¨è½¬é | æ¥è¿ 1227147.489 | 1227147.4888 | éè¿ | |
| | | | T7 | åå½ | æ¹å/æ¹åãä¸å£å¾æåã客è¿éåï¼17 å¸å· + å
¨çï¼ | ä¸å | å®å
¨ä¸è´ | éè¿ | |
| | | | T8 | åå½ | ãä¸å£å¾åæã页 累计å¨è½¬éï¼å°è´¦å£å¾ï¼ | ä¸å | éæ ¼ä¸è´ï¼1227147.48902 / 904146.38902 / 227126.74â¦ï¼ | éè¿ | |
| | | | T9 | åå½ | 忝åï¼å
¨ç â2.35%ãæ¦æ± +4.15% çï¼ | ä¸å | æ¾ç¤ºç²¾åº¦å
å®å
¨ä¸è´ | éè¿ | |
| | | | T10 | åå½ | æ´æ¬å·¥ä½ç°¿éæ ¼å¯¹æ¯æ¹å/æ¹å | ä»
ç®æ æ ¼åå | é¤ç®æ åå¤åªåºç° 1e-10 级浮ç¹åªå£° | éè¿ | |
| | | | T11 | è¾¹ç | 2025 å¹´åºæï¼åæ¯åºæ°ï¼ | ä¸åå½±å | `city_bus_monthly` 2025 å¹´ãåå¨åé
å乡 â æ»éâåå¸å
ãè¡æ° = 0 | éè¿ | |
| | | | T12 | è¾¹ç | åãåå¨å¼ç¼ºå¤±ï¼<=0ï¼æåéãå
åºæ¯å¦ä»éè¦ | å»æåæ å¯ä½ç¨ | 2025/2026 åæ ãæªååé
ä½ æ»éâå
>0ãçè¡ï¼0 è¡ï¼ï¼å
åºä»æªè§¦å | éè¿ | |
| | | | T13 | è´å | æºåº 72 è¡ãåå¨åé
å乡 â æ»éâåå¸å
ã | ç»ä¸æå·®é¢æ³ | 17 å¸å·å·®å¼å
¨é¨å½é¶ï¼æ¹åï¼æ¦æ± +0.04ãåæ +0.08ãéå· â0.02â¦ï¼å
¨ç +0.3198ï¼ | éè¿ | |
| | | | T14 | è´å | ãç线å
车ã页 2020 å¹´åå²å `#VALUE!` | éæ¬æ¬¡å¼å
¥ | æ¹ååå²çæä»¶å为 236/456 æ ¼ï¼Excel æå¼ä¼æ `fullCalcOnLoad` éç® | éè¿ï¼æ¢æç°è±¡ï¼ | |
| | | |
| | | ## åãåç°çé®é¢ä¸å¤ç½® |
| | | |
| | | 1. **å£å¾ä¸ä¸è´ï¼æ¬æ¬¡æ ¹å ï¼**ï¼å
¬äº¤ç»´åº¦éä¼ä¸è¡éä¿¡ãåé
å乡ãåæ®µï¼ä¸å°è´¦é¡µå·®é¢æ³å²çª â å·²ç»ä¸ä¸ºå·®é¢æ³ã |
| | | 2. **å
¨çè¡æ®ç 0.0002 ä¸äººå
¬é**ï¼æå页å
¨çè¡æ¯æ¯çå
¬å¼ `=SUM(O4:O20)`ï¼åå¸å·å
åèäºå
¥å° 4 ä½åæ±åï¼ |
| | | ä¸ãæç»å
¨ç²¾åº¦æ±åã天ç¶å·® 2 人å
¬éï¼å±æ¯çå
¬å¼ç»ææ§é®é¢ï¼æ¬æ¬¡æªå¨æ¯çã |
| | | 3. **åå²å `#VALUE!`**ï¼POI éç® 2020 年忝åçæ¢æç°è±¡ï¼ä¸æ¬æ¬¡æ¹å¨æ å
³ï¼Excel æå¼å³èªå¨éç®ã |
| | | |
| | | ## äºãç»è®º |
| | | |
| | | - ä¿®å¤åãä¸å£å¾æåãå¨è½¬éä¸äººå·¥/å°è´¦å£å¾ **17 个å¸å·éæ ¼ä¸è´**ï¼å·®å¼ä» 17 项å½é¶ï¼ |
| | | - 客è¿éã忝ãåæé¡µãå页åæé¡µåæ åå½ï¼ |
| | | - 2025 åæ¯åºæä¸åå½±åï¼ |
| | | - æ®ç 0.0002 ä¸äººå
¬éï¼2 人å
¬éï¼æ¥èªæ¯çå
¨çè¡ SUM å
¬å¼ï¼å»ºè®®åç»åç¬ææ¿æ¯å¦æ¹ä¸ºå
¨ç²¾åº¦åå¼ã |
| | | |
| | | æµè¯äººï¼Codexï¼AIï¼ãæµè¯æ¥æï¼2026-09-19 |
| New file |
| | |
| | | # åè½æµè¯æ¥å_ååä¼ä¸1-8æç´¯è®¡è´§è¿éä¸å¨è½¬éSQL_2026-09-19 |
| | | |
| | | ## ä¸ãåè½è¯´æ |
| | | |
| | | 2025 å¹´ 1-8 æä¸ 2026 å¹´ 1-8 ææ¥éçä¼ä¸æ°éä¸åï¼664 å®¶ vs 636 å®¶ï¼ï¼ |
| | | ç´æ¥ç¸åçå·®é¢éæ··çãä¼ä¸åååäºãçå½±åãæ¬åè½æ**ååä¼ä¸å£å¾** |
| | | ï¼ä¸¤å¹´ 1-8 æé½æ¥éè¿çä¼ä¸å称交éï¼å
± **545 å®¶**ï¼å嫿±æ»ä¸¤å¹´ 1-8 æç´¯è®¡ç |
| | | **è´§è¿é**ä¸**è´§ç©å¨è½¬é**ï¼ä¿è¯ä¸¤å¹´ä¼ä¸èå´å®å
¨ä¸è´ï¼å¯ç´æ¥ç¨äºåæ¯ã |
| | | |
| | | - 交ä»èæ¬ï¼`docs/çææ±æ»å¤§è¡¨/ååä¼ä¸_1-8æç´¯è®¡å¯¹æ¯_2026-09-19.sql`ï¼å« 6 æ¡æ¥è¯¢ï¼ |
| | | - æ°æ®æºè¡¨ï¼`traffic_audit.h2032_enterprise_monthly`ï¼äº¤ä¼ç»H203-2表ï¼ä¼ä¸çº§ææ¥ï¼ |
| | | - å
³é®å段ï¼`freight_total` è´§è¿éï¼å¨ï¼ã`turnover_total` è´§ç©å¨è½¬éï¼å¨å
¬éï¼ã |
| | | `report_period` æ¥è¡¨æï¼'YYYY-MM'ï¼ã`enterprise_name` ä¼ä¸åç§° |
| | | - å使¢ç®ï¼è¡¨å
为ãå¨ / å¨å
¬éãï¼è¾åºç»ä¸ ÷10000 â ãä¸å¨ / ä¸å¨å
¬éã |
| | | - æé´åæ³ï¼1-8 æ = `report_period BETWEEN 'YYYY-01' AND 'YYYY-08'` |
| | | - èæ¬å
å®¹ï¼æ¥è¯¢ 1 æ±æ»è¡ / æ¥è¯¢ 2 éä¼ä¸å¯¹ç
§ / æ¥è¯¢ 3 å£å¾å¯¹ç
§ / |
| | | æ¥è¯¢ 4 å·®å¼ä¼ä¸åå / æ¥è¯¢ 5 åå¸å·æ±æ» / æ¥è¯¢ 6 æ°æ®ä½æ£ |
| | | |
| | | ## äºãæµè¯ç¯å¢ |
| | | |
| | | - æ°æ®åºï¼MySQL 8.0.29ï¼`127.0.0.1:3308`ï¼åº `traffic_audit` |
| | | - 客æ·ç«¯ï¼mysql 5.7.41ï¼åæ° `--default-character-set=utf8mb4` |
| | | - æ§è¡æ¹å¼ï¼æ´èæ¬ä¸æ¬¡æ§æ§è¡ `mysql ... < ååä¼ä¸_1-8æç´¯è®¡å¯¹æ¯_2026-09-19.sql` |
| | | - æ°æ®è§æ¨¡ï¼`report_period` å
± 20 个æ¥è¡¨æï¼2025-01 ~ 2026-08ï¼ï¼å计 13056 è¡ï¼ |
| | | å
¶ä¸ 1-8 æå£å¾ 10400 è¡ï¼2025 å¹´ 5312 è¡ / 2026 å¹´ 5088 è¡ï¼ |
| | | - æµè¯æ¥æï¼2026-09-19 |
| | | |
| | | ## ä¸ãç¨ä¾è¡¨ |
| | | |
| | | | ç¼å· | ç±»å | ç¨ä¾ | è¾å
¥ | 颿 | å®é
| ç»è®º | |
| | | | --- | --- | --- | --- | --- | --- | --- | |
| | | | T1 | æ£å | ååä¼ä¸å£å¾æ±æ»ï¼æ¥è¯¢ 1ï¼ | 两年 1-8 æé½æ¥éè¿çä¼ä¸ | ä¸è¡å
åºä¸¤å¹´ç´¯è®¡æ° | 545 å®¶ï¼è´§è¿é 30153.14 / 27752.68 ä¸å¨ï¼å¨è½¬é 4635340.46 / 4389882.05 ä¸å¨å
¬é | éè¿ | |
| | | | T2 | æ£å | éä¼ä¸å¯¹ç
§æç»ï¼æ¥è¯¢ 2ï¼ | åä¸ | æ¯å®¶ä¸è¡ã两年并æ | 545 è¡ï¼å«ä¸¤å¹´å¼ãå¢åé¢ã忝 | éè¿ | |
| | | | T3 | æ£å | æç»æ±å = æ±æ»è¡ | æ¥è¯¢ 2 ç 545 è¡æåæ±å | 䏿¥è¯¢ 1 å®å
¨ä¸è´ | 30153.14 / 4635340.46 / 27752.68 / 4389882.05ï¼å·®å¼ 0 | éè¿ | |
| | | | T4 | æ£å | å£å¾å¯¹ç
§ï¼æ¥è¯¢ 3ï¼ | å
¨é vs åå | 4 è¡å£å¾å¯è§£éå·®é¢ | å
¨é 2025ï¼664 å®¶ 33994.45 ä¸å¨ / 5102518.95 ä¸å¨å
¬éï¼å
¨é 2026ï¼636 å®¶ 31399.82 ä¸å¨ / 4927161.77 ä¸å¨å
¬é | éè¿ | |
| | | | T5 | æ£å | å·®å¼ä¼ä¸ååï¼æ¥è¯¢ 4ï¼ | åªå¨ä¸å¹´æ¥éçä¼ä¸ | å®¶æ°ä¸å·®é¢ç¸ç¬¦ | 2025 ç¬æ 119 å®¶ã2026 ç¬æ 91 å®¶ï¼å®¶æ°æ ¡éª 664â545=119ã636â545=91 | éè¿ | |
| | | | T6 | æ£å | å·®å¼éé¢éå | åå + ç¬æ = å
¨é | éé¢éå | è´§è¿é 30153.14+3841.31=33994.45ï¼=å
¨é 2025ï¼ï¼å¨è½¬é 4635340.46+467178.48=5102518.94ï¼å
¨é 5102518.95ï¼å·® 0.01 为åèäºå
¥ï¼ | éè¿ | |
| | | | T7 | æ£å | åå¸å·æ±æ»ï¼æ¥è¯¢ 5ï¼ | ååä¼ä¸æ region_code å½å¸å· | å¸å·å计 = å
¨ç | 16 个å¸å·ï¼ä»æ¡ 0 å®¶ååä¼ä¸ï¼ï¼ä¼ä¸æ°å计 545ï¼ååå计 = æ¥è¯¢ 1 | éè¿ | |
| | | | T8 | æ£å | å
¥åºæ½æ¥ï¼éæç¸å å¯¹é½ | æ¦æ±é¢ééå¢ç©æµæéå
¬å¸ 2025-01~08 å
± 8 æ¡åå§è®°å½ | éæç¸å = æç»è¡ | è´§è¿é 7381512 å¨ â 738.15 ä¸å¨ï¼å¨è½¬é 231191873 å¨å
¬é â 23119.19 ä¸å¨å
¬éï¼ä¸æ¥è¯¢ 2 è¾åºä¸è´ | éè¿ | |
| | | | T9 | è´å | ä¼ä¸åä¸åå¨ | `enterprise_name='ä¸åå¨çä¼ä¸XYZ'` | 0 è¡ã䏿¥é | 0 è¡ | éè¿ | |
| | | | T10 | è´å | 年份åé | æé´ `'2024-01' ~ '2024-08'` | 0 è¡ | 0 è¡ | éè¿ | |
| | | | T11 | è¾¹ç | åä¸ä¼ä¸åæéå¤è®°å½ | `GROUP BY enterprise_name, report_period HAVING COUNT(*)>1` | æ éå¤ï¼å¦å累计ä¼è¢«æ¾å¤§ï¼ | 0 æ¡ | éè¿ | |
| | | | T12 | è¾¹ç | ååä¼ä¸æä»½ä¸å
¨ï¼æ¥è¯¢ 6ï¼ | è®°å½æ° <> 8 çååä¼ä¸ | æ å¼å¸¸ | ç©ºç»æéï¼545 家两年å 8 个æé½å
¨ | éè¿ | |
| | | |
| | | ## åãåç°çé®é¢ä¸å¤ç½® |
| | | |
| | | 1. **ä¼ä¸åç§°ä½ä¸ºå¹é
é®çåºæé£é©ï¼å·²æç¤ºï¼æªæ¹å£å¾ï¼** |
| | | ååå£å¾æ `enterprise_name` å符串ç¸çå¹é
ï¼è¥ä¼ä¸æ¹åãæä¸åå°å¸åºç°å®å
¨ååçä¼ä¸ï¼ |
| | | ä¼è¢«å¤ä¸ºãä¸åä¼ä¸ãæãåä¸ä¼ä¸ãã宿µä¸¤å¹´æ°æ®ä¸å䏿¥è¡¨æå
æ éåè®°å½ï¼T11ï¼ï¼ |
| | | ä½è·¨å¹´æ¹åæ æ³éè¿æ¬èæ¬è¯å«ï¼å¦éæ´ä¸¥è°¨å¯æ¹ç¨ `unified_credit_code`ï¼ç»ä¸ç¤¾ä¼ä¿¡ç¨ä»£ç ï¼å¹é
ã |
| | | 2. **ååå£å¾ä¸å
¨éå£å¾çå·®é¢å·²å¯è§£é** |
| | | 2026 å¹´å
¨éæ¯ååå£å¾å¤ 3647.14 ä¸å¨ãå° 537279.73 ä¸å¨å
¬éï¼æ°è¿ 91 å®¶ä¼ä¸ï¼ï¼ |
| | | 2025 å¹´å
¨éæ¯ååå£å¾å¤ 3841.31 ä¸å¨ã467178.48 ä¸å¨å
¬éï¼éåº 119 å®¶ï¼ã |
| | | 对å¤è¯´æåæ¯æ¶é注æéç¨çå£å¾ï¼é¿å
ä¸å
¨éå£å¾æ°å对ä¸ä¸ã |
| | | 3. **æ±æ»è¡ç忝尿°ä½** |
| | | å¨è½¬éåæ¯ç²¾ç¡®å¼ â5.2954%ï¼`ROUND(...,2)` è¾åº â5.30ï¼æ¾ç¤ºä¸º â5.3ï¼ï¼ |
| | | èæ¬è¡¨å¤´æ³¨éå·²åæ¥ä¿®æ£ä¸º â5.30%ï¼é¿å
ä¸å±ç¤ºå¼ä¸ä¸è´ã |
| | | 4. **`region_code` å 2026 å¹´è®°å½** |
| | | åå¸å·æ¥è¯¢ç¨ `MAX(CASE WHEN report_period >= '2026-01' ...)` å 2026 å¹´çå°åºä»£ç ï¼ |
| | | ä¼ä¸è·¨å¸è¿ç§»æ¶æ 2026 å¹´å½å±ç»è®¡ï¼å®æµæªåç°å½±åï¼ååä¼ä¸ä¸¤å°å¹¶åçæ
嵿 ï¼ã |
| | | |
| | | ## äºãè¡¥å
ï¼ä¼ä¸æç»å¯¼åºï¼2026-09-19 追å ï¼ |
| | | |
| | | ç¨æ·è¦æ±æä¼ä¸æç»ä¹å¯¼åºæ¥ï¼èæ¬è¿½å ä¸¤æ¡æ¥è¯¢ï¼ |
| | | |
| | | - **æ¥è¯¢ 7 ä¼ä¸æç»å¯¼åº**ï¼å¹é
鮿¹ç¨ `unified_credit_code`ï¼ç»ä¸ç¤¾ä¼ä¿¡ç¨ä»£ç ï¼ï¼å
± **546 å®¶**ï¼ |
| | | æ¯æ¥è¯¢ 2 å¤è¦ç 1 å®¶æ¹åä¼ä¸ï¼`91420112558443820B`ï¼2025-01~2025-09 å« |
| | | ãæ¹åä¸å³¡å¯ç¨ç»¿çµä¾åºé¾æéå
¬å¸ãï¼2025-10 èµ·å«ãæ¹åé¿å³¡å¯ç¨ç»¿çµä¾åºé¾æéå
¬å¸ãï¼ã |
| | | è¾åº 14 åï¼ç»ä¸ç¤¾ä¼ä¿¡ç¨ä»£ç ãä¼ä¸åç§°ï¼2026 å¹´åç§°ï¼ãåç§°2025ãæ¯å¦æ¹åãå¸å·ãå°åºä»£ç ã |
| | | è´§è¿é两年å¼/å¢å/忝ãå¨è½¬é两年å¼/å¢å/åæ¯ï¼æ 2026 å¹´è´§è¿ééåºã |
| | | - **æ¥è¯¢ 8 åè®¡å¯¹æ»æ°**ï¼546 å®¶å£å¾ 2025 å¹´ 1-8 æè´§è¿é 30162.99 ä¸å¨ / å¨è½¬é 4637038.58 ä¸å¨å
¬éï¼ |
| | | 2026 å¹´ 1-8 æè´§è¿é 27764.88 ä¸å¨ / å¨è½¬é 4392984.81 ä¸å¨å
¬éã |
| | | - èæ¬å
éä¸ç§å¯¼åºæ¹å¼ï¼å½ä»¤è¡ `--batch --raw` 导 tsvãNavicat/Workbench 导 xlsxã`SELECT ... INTO OUTFILE`ã |
| | | |
| | | è¡¥å
æµè¯ï¼ |
| | | |
| | | | ç¼å· | ç±»å | ç¨ä¾ | 颿 | å®é
| ç»è®º | |
| | | | --- | --- | --- | --- | --- | --- | |
| | | | T13 | æ£å | æ¥è¯¢ 7 æç»è¡æ° | 546 è¡ | 546 è¡ï¼å
¶ä¸ 1 è¡ `æ¯å¦æ¹å='æ¯'` | éè¿ | |
| | | | T14 | æ£å | æ¥è¯¢ 7 æç»æ±å = æ¥è¯¢ 8 å计 | ä¸è´ï¼å
许åèäºå
¥å°¾å·®ï¼ | æç»éè¡åèäºå
¥åæ±å 30163.10 / 27764.86 / 4637038.56 / 4392984.78ï¼ä¸å计差 0.01~0.02ï¼å±æ£å¸¸å°¾å·® | éè¿ | |
| | | | T15 | æ£å | å½ä»¤è¡å¯¼åºï¼æ¹å¼ä¸ï¼ | çæ UTF-8 ç tsvï¼å« 546 è¡æ°æ® | 89046 åèã546 è¡æ°æ®ã䏿ååä¸ä¼ä¸åæ£å¸¸ | éè¿ | |
| | | | T16 | è¾¹ç | Excel ç´æ¥åå» tsv | åå¨ä¸æä¹±ç é£é© | æä»¶ä¸º UTF-8 æ BOMï¼å·²å¨èæ¬å
æ³¨ææ¹ç¨ãæ°æ® â 仿æ¬/CSVã导å
¥æç´æ¥å¯¼ xlsx | éè¿ | |
| | | | T17 | è¾¹ç | æç»ä¸åæ¯é¤é¶ | åºæä¸º 0 æ¶ä¸æ¥é | `NULLIF(...,0)` ä¿æ¤ï¼è¿åç©ºå¼ | éè¿ | |
| | | ## å
ãè¡¥å
ï¼æç»å°æ°ä½ç¼ºé·ä¿®å¤ï¼2026-09-19 追å ï¼ |
| | | |
| | | **é®é¢**ï¼èæ¬åå
卿ç»ç±»æ¥è¯¢ï¼æ¥è¯¢ 2ãæ¥è¯¢ 7ï¼éæãä¸å¨ / ä¸å¨å
¬éãååæ `ROUND(..., 2)`ã |
| | | ä¿ç 2 ä½å°æ° = 精度åªå° 100 å¨ãç¨æ·æè¿ä¸¤åå¨ Excel éç®ãå¹³åè¿è· = å¨è½¬é ÷ è´§è¿éãæ¶ï¼ |
| | | è´§è¿éå°çä¼ä¸åæ¯è¢«ç å°ï¼è¿è·è¢«ææ¾æ¾å¤§ã |
| | | |
| | | **å®ä¾**ï¼2026 å¹´ 1-8 æï¼æ¹åå¼é·ç©æµæéå
¬å¸ï¼æºæ°æ® 4631 å¨ / 5867730 å¨å
¬éï¼ï¼ |
| | | |
| | | | è´§è¿éï¼ä¸å¨ï¼ | ç®å¾çå¹³åè¿è· | ç»è®º | |
| | | | --- | --- | --- | |
| | | | 0.4631ï¼ä¸åæ´ï¼ | 1267.05 å
¬é | æ£ç¡®ï¼ä¸æ°æ®åºå
¨ç²¾åº¦ä¸è´ï¼ | |
| | | | 0.46ï¼å 2 ä½ï¼ | 1275.59 å
¬é | èé« 8.53 å
Ž | |
| | | |
| | | **å¤ç½®**ï¼ |
| | | |
| | | - æ¥è¯¢ 2ãæ¥è¯¢ 7 ç 6 个货è¿é/å¨è½¬éåï¼ä¸¤å¹´å¼ + å¢åé¢ï¼æ¹ä¸º `ROUND(..., 4)`ï¼ |
| | | - æ±æ»å±ç¤ºç±»ï¼æ¥è¯¢ 1ã3ã5ã8ï¼ä¿ç 2 ä½å°æ°ï¼å¤ç¨ä¸ç¾è§ï¼ |
| | | - èæ¬é¡¶é¨æ°å¢ãâ
å°æ°ä½çº¦å®ãè¯´ææ®µï¼åæ"è¦åä¸äºæ¬¡è®¡ç®çåä¸è½åªç 2 ä½"ï¼å¹¶éä¸è¿°å®ä¾ã |
| | | |
| | | **åå½éªè¯**ï¼ |
| | | |
| | | | ç¼å· | ç¨ä¾ | 颿 | å®é
| ç»è®º | |
| | | | --- | --- | --- | --- | --- | |
| | | | T18 | æ´èæ¬éè· | æ æ¥éãè¡æ°ä¸å | 1352 è¡è¾åºãæ ERROR | éè¿ | |
| | | | T19 | æ¥è¯¢ 7 æç»å精度 | è´§è¿é/å¨è½¬é 4 ä½å°æ° | æ¹åå¼é· 2026 å¹´è´§è¿é 0.4631ï¼å 0.46ï¼ãå¨è½¬é 586.773 | éè¿ | |
| | | | T20 | ç¨æç»åå¤ç®è¿è· | 䏿°æ®åºå
¨ç²¾åº¦ä¸è´ | 586.773 ÷ 0.4631 = 1267.05 å
¬éï¼ä¸åºå
1267.0546 ä¸è´ | éè¿ | |
| | | | T21 | æ±æ»åæªè¢«æ¹å¨ | æ¥è¯¢ 1/3/5/8 ä»ä¸º 2 ä½ | æ¥è¯¢ 8 ä»è¾åº 546 / 30162.99 / 27764.88 / 4637038.58 / 4392984.81 | éè¿ | |
| | | ## ä¸ãè¡¥å
ï¼æç»ç±»æ¥è¯¢æ¹ä¸ºãå®å
¨ä¸å¥ ROUNDãï¼2026-09-19 追å ï¼ |
| | | |
| | | ç¨æ·ç¡®è®¤æãå
¨ç²¾åº¦ã导åºï¼æç»ç±»æ¥è¯¢ï¼æ¥è¯¢ 2ãæ¥è¯¢ 7ï¼ç ROUND å
¨é¨å»æï¼å¯¼åºå³åå§å¼ã |
| | | |
| | | **æ¹å¨**ï¼ |
| | | |
| | | - æ¥è¯¢ 2ãæ¥è¯¢ 7 çæææ°å¼åï¼è´§è¿é/å¨è½¬éç两年å¼ãå¢åé¢ã忝ç¾åæ¯ï¼ä¸å¾ä¸å¥ `ROUND`ï¼ |
| | | - æ±æ»å±ç¤ºç±»ï¼æ¥è¯¢ 1ã3ã5ã8ï¼ä»ä¿ç 2 ä½å°æ°ï¼ç»äººççï¼ |
| | | - é¡¶é¨ãâ
å°æ°ä½çº¦å®ãåæ¥æ´æ°ä¸º"æç»ä¸å¥ ROUND"ã |
| | | |
| | | **精度说æï¼å®æµï¼**ï¼è´§è¿éãå¨è½¬éçåå§å¼æ¯æ´å¨ ÷ 10000ï¼å°æ°ä½**æå¤ 4 ä½**ï¼ |
| | | å 4 ä½å³çäºå
¨ç²¾åº¦ï¼å®æµ 2026 å¹´ 1-8 æç 636 å®¶ä¼ä¸ä¸ï¼"4 ä½å°æ°ä»¥å¤è¿æå°¾æ°"ç为 **0 å®¶**ã |
| | | 忝ç¾åæ¯æ¯é¤åºæ¥çï¼å°æ°ä½ä¼è¾é¿ï¼å¦ â2.5389920113927933ï¼ï¼ä»æå¯å¨å¤é¢åå¥ `ROUND(...,2)`ã |
| | | |
| | | **åå½éªè¯**ï¼ |
| | | |
| | | | ç¼å· | ç¨ä¾ | 颿 | å®é
| ç»è®º | |
| | | | --- | --- | --- | --- | --- | |
| | | | T22 | æ´èæ¬éè· | æ æ¥éãè¡æ°ä¸å | 1352 è¡è¾åºãæ ERROR | éè¿ | |
| | | | T23 | æ¥è¯¢ 7 导åºä¸å« ROUND | è¾åºåå§å¼ | æ¦é¢ç©æµ 738.1512 / 719.4096ï¼æ¹åå¼é· 0.6863 / 0.4631ï¼å¨è½¬é 889.1465 / 586.773 | éè¿ | |
| | | | T24 | 导åºç»æä»ä¸º 546 è¡ | 546 è¡ | 546 è¡æ°æ®ï¼tsv 546 è¡ + è¡¨å¤´ï¼ | éè¿ | |
| | | | T25 | ç¨å¯¼åºå¼å¤ç®è¿è· | ä¸åºä¸è´ | 586.773 ÷ 0.4631 = 1267.05 å
¬éï¼ä¸åºå
1267.0546 ä¸è´ | éè¿ | |
| | | ## å
«ãè¡¥å
ï¼æ¥è¯¢ 2 䏿¥è¯¢ 7 ççä»·æ§éªè¯ï¼2026-09-19 追å ï¼ |
| | | |
| | | ç¨æ·æé®ï¼"å¦ææ²¡ææ¹åé£å®¶ï¼æ¥è¯¢ 2 åæ¥è¯¢ 7 è½å®å
¨å¯¹ä¸åï¼"ââ宿µçæ¡ï¼**鿝ç¹å®å
¨ç¸ç**ã |
| | | |
| | | **éªè¯æ¹æ³**ï¼ææ¹åä¼ä¸ `91420112558443820B` 仿¥è¯¢ 7 çç»æä¸åé¤ï¼ä¸æ¥è¯¢ 2 çç»æéè¡é忝坹ã |
| | | |
| | | | æ¯å¯¹é¡¹ | ç»æ | |
| | | | --- | --- | |
| | | | æ°æ®è¡æ° | æ¥è¯¢ 2 = 545 è¡ï¼æ¥è¯¢ 7 åé¤é£å®¶ = 545 è¡ | |
| | | | ä¼ä¸åå | å®å
¨ä¸è´ï¼ååå·®éåä¸ºç©ºï¼ | |
| | | | è´§è¿é 2025 / 2026 / å¢å / 忝 | ä¸ä¸è´ 0 å®¶ï¼æå¤§å·® 0 | |
| | | | å¨è½¬é 2025 / 2026 / å¢å / 忝 | ä¸ä¸è´ 0 å®¶ï¼æå¤§å·® 0 | |
| | | | å°åºä»£ç | ä¸ä¸è´ 0 å®¶ | |
| | | |
| | | **åå ï¼ä¸¤æ¡ï¼**ï¼ |
| | | |
| | | 1. **å¹é
é®ä¸ä¸å¯¹åº**ï¼é¤æ¹åé£å®¶å¤ï¼ä¸ä¸ªä¿¡ç¨ä»£ç åªå¯¹åºä¸ä¸ªä¼ä¸åç§°ãä¸ä¸ªåç§°åªå¯¹åºä¸ä¸ªä¿¡ç¨ä»£ç |
| | | ï¼åæå·²éªè¯ï¼åä¸ä»£ç å¤åç§° = 1 ä¾ï¼å³æ¹åé£å®¶ï¼ãåä¸åç§°å¤ä»£ç = 0 ä¾ãåæéå¤è®°å½ = 0 æ¡ï¼ã |
| | | æ
æåç§°åç»ä¸æä¿¡ç¨ä»£ç åç»ï¼å¾å°çæ¯å䏿¹ 545 å®¶ãåæ ·çè¡ã |
| | | 2. **ç®æ¯ç²¾ç¡®**ï¼ä¸¤ä¸ªæ¥è¯¢é½æ¯"æ´å¨æ±å â é¤ä»¥ 10000"ã卿°ä¸ºæ´æ°ä¸è¿å°äº 2âµÂ³ï¼ |
| | | double å¯¹æ´æ°æ±åæ¯ç²¾ç¡®çï¼æ
两侧å®å
¨ä¸è´ï¼è¿æµ®ç¹å°¾å·®é½æ²¡æï¼ã |
| | | |
| | | **è¡¥å
ç¨ä¾**ï¼ |
| | | |
| | | | ç¼å· | ç±»å | ç¨ä¾ | 颿 | å®é
| ç»è®º | |
| | | | --- | --- | --- | --- | --- | --- | |
| | | | T26 | æ£å | æ¥è¯¢ 2 䏿¥è¯¢ 7 çä»·æ§ | å餿¹åä¼ä¸å两è
å®å
¨ä¸è´ | 545 è¡ä¼ä¸ååä¸è´ï¼8 个æ°å¼å + å°åºä»£ç å
¨é¨ 0 å®¶ä¸ä¸è´ãæå¤§å·® 0 | éè¿ | |
| | | |
| | | **å®è·µå«ä¹**ï¼æ¥è¯¢ 7 = æ¥è¯¢ 2 + æ¹åä¼ä¸ï¼ä¿¡ç¨ä»£ç å£å¾æ¯åç§°å£å¾çè¶
éï¼ï¼ä¸¤è
å
±åé¨åæ°å¼å®å
¨ç¸åã |
| | | è¦è· 545 家交ä»ä»¶å¯¹è´¦ç¨æ¥è¯¢ 2ï¼è¦é²å°æ¥ååºç°æ¹åä¼ä¸ï¼ç¨æ¥è¯¢ 7 æ´ç¨³ã |
| | | ## ä¹ãè¡¥å
ï¼æ±æ»ç±»æ¥è¯¢åæ¥æ¹ä¸º 4 ä½å°æ°ï¼2026-09-19 追å ï¼ |
| | | |
| | | **èæ¯**ï¼ç¡®è®¤ã4 ä½å°æ°ã对åªäºåçäºå
¨ç²¾åº¦åï¼å³å®ææ±æ»ç±»æ¥è¯¢ä¹ç»ä¸ä¸º 4 ä½ã |
| | | |
| | | **å
忏
"4 ä½ = å
¨ç²¾åº¦"çéç¨èå´**ï¼å®æµ 754 个ä¼ä¸/ä¿¡ç¨ä»£ç ï¼ï¼ |
| | | |
| | | | å | `ROUND(v,4) <> v` çå®¶æ° | ç»è®º | |
| | | | --- | --- | --- | |
| | | | è´§è¿é 2025 / 2026 | **0 å®¶** | 4 ä½å³å
¨ç²¾åº¦ï¼æ´å¨ ÷ 10000ï¼æå¤ 4 ä½å°æ°ï¼ | |
| | | | å¨è½¬é 2025 / 2026 | **0 å®¶** | åä¸ | |
| | | | å¹³åè¿è· | 628 / 631 å®¶ | **ä¸çäº**å
¨ç²¾åº¦ï¼æ¯é¤åºæ¥çåï¼éåç¬å®ä½æ° | |
| | | | 忝ç¾åæ¯ | 541 / 754 å®¶ | **ä¸çäº**å
¨ç²¾åº¦ï¼åä¸ | |
| | | |
| | | **å¤ç½®**ï¼ |
| | | |
| | | - æç»ç±»ï¼æ¥è¯¢ 2ã7ï¼å·²ä¸å¥ ROUND = å
¨ç²¾åº¦ï¼æ éæ¹å¨ï¼ |
| | | - æ±æ»ç±»ï¼æ¥è¯¢ 1ã3ã5ã8ï¼ç 14 å¤ `/ 10000, 2)` å
¨é¨æ¹ä¸º 4 ä½ï¼ |
| | | - é¡¶é¨ãâ
å°æ°ä½çº¦å®ãåæ¥æ´æ°ä¸º"æ±æ»ç±»åæ ·ä¿ç 4 ä½"ï¼ |
| | | - é¡¶é¨ä¸æ¥è¯¢ 8 注ééç宿µå¼ä¸å¹¶æ´æ°ä¸º 4 ä½ã |
| | | |
| | | **åå½éªè¯**ï¼ |
| | | |
| | | | ç¼å· | ç±»å | ç¨ä¾ | 颿 | å®é
| ç»è®º | |
| | | | --- | --- | --- | --- | --- | --- | |
| | | | T27 | æ£å | æ´èæ¬éè· | æ æ¥éãè¡æ°ä¸å | 1352 è¡è¾åºï¼æ ERROR | éè¿ | |
| | | | T28 | æ£å | æ¥è¯¢ 1 æ±æ»ï¼545 å®¶ï¼ | 4 ä½å°æ° | 30153.1392 / 27752.6820 / 4635340.4627 / 4389882.0468 | éè¿ | |
| | | | T29 | æ£å | æ¥è¯¢ 8 å计ï¼546 å®¶ï¼ | 4 ä½å°æ° | 30162.9872 / 27764.8812 / 4637038.5803 / 4392984.8116 | éè¿ | |
| | | | T30 | æ£å | æ¥è¯¢ 5 åå¸å·ä¸äº¤ä»ä»¶å¯¹é½ | ä¸äº¤ä»ä»¶å¸å·æ±æ»ä¸è´ | æ¦æ± 9405.2643 / 1501661.4035ã宿 5247.5232 / 449997.1831ï¼ä¸äº¤ä»ä»¶å®å
¨ä¸è´ | éè¿ | |
| | | |
| | | **å¯ä½ç¨ä¸ºé¶**ï¼å¯¹è´§è¿é/å¨è½¬éèè¨ 4 ä½å°±æ¯å
¨ç²¾åº¦ï¼å æ¤è¿æ¬¡æ¹å¨æ²¡æä¸¢å¤±ä»»ä½æ°æ®ï¼ |
| | | ä½èæ¬è¾åºç°å¨ä¸ 545 家交ä»ä»¶çå¸å·æ±æ»**éå对é½**ï¼ä¸¤ä¸ªå£å¾ä¹é´å¯ä»¥äºç¸éªè¯ã |
| | | ## åãç»è®º |
| | | |
| | | 8 æ¡æ¥è¯¢æ´èæ¬æ§è¡éè¿ï¼30 æ¡ç¨ä¾ï¼21 æ£å / 2 è´å / 7 è¾¹çï¼å
¨é¨éè¿ã |
| | | |
| | | **ååä¼ä¸å£å¾ï¼545 å®¶ï¼1-8 æç´¯è®¡ç»æï¼** |
| | | |
| | | | ææ | 2025 å¹´ 1-8 æ | 2026 å¹´ 1-8 æ | 忝 | |
| | | | --- | --- | --- | --- | |
| | | | è´§è¿éï¼ä¸å¨ï¼ | 30153.14 | 27752.68 | â7.96% | |
| | | | è´§ç©å¨è½¬éï¼ä¸å¨å
¬éï¼ | 4635340.46 | 4389882.05 | â5.30% | |
| | | |
| | | å
¶ä¸ 2026 年累计æ°ä¸ 2026-09-19ãæç»å¨è§ä¼ä¸ 545 家累计è¿è·ã交ä»ä»¶çå
¨çè¡ |
| | | ï¼27752.6820 ä¸å¨ / 4389882.0468 ä¸å¨å
¬éï¼å®å
¨ä¸è´ï¼ä¸¤æ¡é¾è·¯å£å¾äºè¯éè¿ã |
| New file |
| | |
| | | # åè½æµè¯æ¥å_æèµæç»è¡¨ä¸å¯¼å
¥ååå®ä½ä¿®å¤_2026-09-19 |
| | | |
| | | > æ¬æè¦ç 2026-09-18 å¤é´ï½2026-09-19 忍ç 6 项æ¹å¨ï¼ä¸å£å¾æå忝ãç½çº¦è½¦åæåè½ãä¸¤å¼ æèµæç»è¡¨ã导å
¥çé¢éèç½çº¦è½¦è®¢åãæèµå¸å·å表ååå®ä½ä¿®å¤ã8 ææèµæºæ°æ®è¡¥é½ï¼ã |
| | | |
| | | ## ä¸ãåè½è¯´æ |
| | | |
| | | 1. **ä¸å£å¾æå/æç»åæ¯å£å¾ä¿®å¤ï¼B1/B3/B5ï¼**ï¼åå®ç°ç¨ãå»å¹´è¯¥æå¼æ¯å¦ä¸º 0ãå¤ææ°æ®æ¯å¦åå¨ï¼å¯¼è´ |
| | | - æ¦æ±å·¡æ¸¸åºç§åé
/å乡ä¸å¡ä¸å¹´æä¸º 0 â åæ¯è¢«è¯¯å¤ä¸ºãæ åºæãï¼ |
| | | - å»å¹´ç¼ºææ¶è¢«å½ä½ 0 åä¸è®¡ç® â 忝èé«ï¼å
¬äº¤è¡ä¸åº¦åºç° â28577%ï¼ã |
| | | ç°æ¹ä¸º **æãæºè¡¨æ¯å¦æè¯¥è¡ãç»è®°å卿§**ï¼`markMid`/`midMonthHas`/`midCumHitMonths`ï¼ï¼ |
| | | å»å¹´ç¼ºä»»ä¸æå忝ç空ï¼åæ¶ `loadMidClassMap()` ç¨ `passengerVolume - passengerCity` å
åºè·¨å¿å
¬äº¤å£å¾ï¼ |
| | | è§£æå¼å¸¸æ¹ä¸ºè®°å
¥ `midIssues` å¹¶ `log.warn`ï¼ä¸åéé» `continue`ï¼ã |
| | | 2. **ç½çº¦è½¦ 2025 åæåè½ï¼B2ï¼**ï¼`WycSplitCalc.loadMonthlyInputFromDb()` 卿æ pin 缺失æ â¤0 æ¶åè½ `wyc_total_monthly`ï¼`source` æ `db+wyc_total`ã |
| | | 3. **æ°å¢ä¸¤å¼ æèµæç»è¡¨å¯¼åº**ï¼`/export/investPassengerDetail`ã`/export/investLogisticsDetail`ã |
| | | å£å¾ï¼ç¨æ· 2026-09-18 确认ï¼ï¼åªè¦ç **H èªå¼å§å»ºè®¾ç´¯è®¡ / J èªå¹´å累计 / K æ¬æå®æ / M 形象è¿åº¦**ï¼ |
| | | I æ¬å¹´è®¡åæèµãL å»ºè®¾é¶æ®µãG è®¡åæ»æèµä¸å¨æ¯çï¼åºå
为空ä¿çæ¯çåå¼ã |
| | | ç©æµè¡¨é¢å¤æè¡¨å
æ°å¼éç®æ¸ éè¡/å¸å·è¡/å计è¡ï¼å¹¶å·æ°ãåå¸å·è§åå
å¤é¡¹ç®å®ææ
åµããå¸å·æ±æ»ãï¼æ¸ éå°è®¡ä¿çç¨åºç®åºçæ°ï¼ã |
| | | 4. **导å
¥çé¢éèãç½çº¦è½¦è®¢ååå
¨çæ»éã**ï¼`DataImport.vue` 该类åç½® `hidden: true`ï¼å
¥å£/æ¦è§/æ¸
空ä¸å¤ä¸æç»ä¸èµ° `typeList()` è¿æ»¤ã |
| | | 5. **æèµå¸å·å表ã表头ååå®ä½ãä¿®å¤**ï¼æ¬è½®æ ¸å¿ï¼`DataImportService.findInvestHeader`ï¼ï¼ |
| | | - è¡¨å¤´ææ¬æ«æä¸çç±**åºå® `表头è¡+3`** æ¹ä¸º**ã表头åã**ï¼ä¸ç = é¦ä¸ªç宿°æ®è¡ â 1ï¼ç¡¬ä¸é +12 è¡ï¼ï¼ |
| | | - æ°å¢ã建设è¿å±ãå
³é®è¯æ å°å°å½¢è±¡è¿åº¦åï¼ |
| | | - æ°å¢ `desc = stage + 1` å
åºï¼çæ ã项ç®å»ºè®¾é¶æ®µãè¿åº¦æ
åµã为 L/M å并表头ï¼é¨åå¸å·åªå L æ é¢ï¼ï¼ |
| | | - `å计/æ»è®¡/å°è®¡` å¤å®æ¹ä¸º**å»ç©ºç½å**å¹é
ï¼å `nt.contains("å计")` æ¼æãåããã计ãï¼ã |
| | | 6. **è¡¥é½ 2026-08 æèµæºæ°æ®**ï¼`docs\æèµ\è¾å
¥\客è¿ï¼å®¢è¿ç«ï¼\8æ`ï¼9 个æä»¶ï¼ã`ç©æµï¼ç©æµååºï¼\8æ`ï¼16 个æä»¶ï¼ï¼å¹¶éæ°å¯¼å
¥ã |
| | | |
| | | ## äºãæµè¯ç¯å¢ |
| | | |
| | | | 项 | å¼ | |
| | | | --- | --- | |
| | | | æ¥æ | 2026-09-19ï¼00:0xâ01:0xï¼ | |
| | | | å端 | Spring Boot 8090ï¼éå¯å è½½æ°ä»£ç ï¼`Started TrafficAuditApplication`ï¼ | |
| | | | å端 | Vue 8080ï¼`App running at`ï¼ | |
| | | | æ°æ®åº | MySQL 127.0.0.1:3308 `traffic_audit` | |
| | | | æºæ°æ® | `D:\æ¡é¢\æµè¯æ°æ®\æèµ\å
«ææºæ°æ®\{客è¿,ç©æµ}` â å¤å¶å° `docs\æèµ\è¾å
¥\...\8æ` | |
| | | | 对ç
§å®ç¨¿ | `D:\æ¡é¢\æµè¯æ°æ®\æèµ\8æå®¢è¿ç«æèµæç»è¡¨.xlsx`ã`8æç©æµç«åºæèµæç».xls` | |
| | | | æ¥è¡¨æ | 2026-08ï¼mode=monthï¼ | |
| | | | å
¥å£ | `POST /api/import/investCityBatch?period=2026-08&category=客è¿ç«åº\|ç©æµååº` | |
| | | |
| | | ## ä¸ãç¨ä¾è¡¨ |
| | | |
| | | | ç¼å· | ç¨ä¾ | è¾å
¥ | 颿 | å®é
| ç»è®º | |
| | | | --- | --- | --- | --- | --- | --- | |
| | | | T01 | å¸å®å®¢è¿ã形象è¿åº¦ãååï¼æ£åï¼ | `2026å¹´8æå¸å®å¸å®¢è¿ç«åºæèµç»è®¡ææ¥è¡¨(1)ç表.xls`ï¼L/M æ é¢å¨ç¬¬ 8 è¡ï¼è¡¨å¤´å¨ç¬¬ 4 è¡ï¼ | M åï¼å½¢è±¡è¿åº¦ï¼åºè¢«å®ä½ | åºå
`progress_desc` é空 **0 â 7/9 è¡**ï¼å¦ 2 è¡æºæä»¶æ¬èº«ä¸ºç©ºï¼ | â
éè¿ | |
| | | | T02 | 宿客è¿ãå»ºè®¾é¶æ®µ/形象è¿åº¦ãååï¼æ£åï¼ | `æ¹åç宿å¸é路客è¿ç«åºæèµæ¥è¡¨ï¼æãå¹´æ¥ï¼08æ.xls`ï¼L/M æ é¢å¨ç¬¬ 5 è¡ï¼é¦è¡æ°æ®å¨ç¬¬ 7 è¡ï¼ | L=å»ºè®¾é¶æ®µãM=形象è¿åº¦ï¼ä¸å¾è¢«å¤æã竣工æ¶é´ãå | ä¿®å¤å stage 0 / desc 0 â ä¿®å¤å **5/5 ä¸ 5/5**ï¼æ§å®ç°æé¦è¡æ°æ®çã竣工æ¶å°¾ï¼å»ºææè¿ãå½è¡¨å¤´ææ¬ï¼å½ä¸ã竣工/建æãåæ¯ï¼ | â
éè¿ | |
| | | | T03 | ç©æµå并表头ã形象è¿åº¦ãå
åºï¼æ£åï¼ | åæ / æ©æ½ / éå·ç©æµæç»è¡¨ï¼åªå¨ L åã项ç®å»ºè®¾é¶æ®µãè¿åº¦æ
åµãï¼M ç´æ¥åè¿åº¦æåï¼ | åºè¯å« M å为形象è¿åº¦ | desc é空 **0 â åæ 7/7ãæ©æ½ 4/6ãéå· 2/2**ï¼æ©æ½å¦ 2 è¡ä¸ºã建æããæºæä»¶ M æ¬èº«ä¸ºç©ºï¼ | â
éè¿ | |
| | | | T04 | å·²æ£ç¡®å¸å·åå½ | åå °/æ©æ½/è¥é³/èé¨/æ¦æ±/æåºå®¢è¿ + é»å/å¸å®/èå·/èé¨/宿/è¥é³/é»ç³ç©æµç | åå䏿°å¼ä¸å | é项ä¸è´ï¼åå °å®¢è¿ 4/4ãæ©æ½å®¢è¿ 6/6ãè¥é³å®¢è¿ 6/6ãå¸å®ç©æµ 9/9ãèå·ç©æµ 9/9ãèé¨ç©æµ 8/8ãå®æç©æµ 13/13 | â
éè¿ | |
| | | | T05 | å计è¡ä¸å¾å
¥åºï¼è´åï¼ | å¸å®å®¢è¿æºæä»¶å«ãåããã计ãè¡ï¼å¤ä¸ªç©ºæ ¼ï¼ | å计è¡è¢«è·³è¿ | ä¿®å¤åå
¥ 40 è¡ï¼å« 1 æ¡å为ãåããã计ãçå项ç®ï¼â ä¿®å¤å **39 è¡**ï¼å项ç®å·²æ¶é¤ | â
éè¿ | |
| | | | T06 | å
¥åºæ°å¼æ½æ¥ï¼ä¸æºæä»¶é项对é½ï¼ | åæç©æµ 7 è¡ / æ©æ½ç©æµ 6 è¡ | 项ç®è¡æ±å = æºæä»¶å¸å·å°è®¡è¡ | åæ H/J/K = **160378 / 116414 / 13784**ãæ©æ½ = **126741 / 41574 / 2116**ï¼ä¸æºæä»¶ã åé¡¹ç®æèµå®ææ
åµãå¸å·è¡é项ä¸è´ | â
éè¿ | |
| | | | T07 | 客è¿ç«æèµæç»è¡¨åå½ | å¯¼åº vs `8æå®¢è¿ç«æèµæç»è¡¨.xlsx` | ä¸ä¿®å¤åä¸å£å | **æ±æ»é¡µ 0 å·®å¼**ï¼æç»é¡µ 6 å¤ï¼ä¿®å¤å 5 å¤ï¼æ°å¢ç 1 å¤ä¸ºå¸å® M85ï¼ç¨åºææºæä»¶åå
¥èå®ç¨¿ç空ï¼å±ãæ´å®æ´ãï¼ | â
éè¿ | |
| | | | T08 | ç©æµç«åºæèµæç»è¡¨åå½ | å¯¼åº vs `8æç©æµç«åºæèµæç».xls` | ä¸ä¿®å¤åä¸å£å | ä¸é¡µæ°å¼ä¸ä¿®å¤åä¸è´ï¼ä»
æ°å¢åæ/æ©æ½/éå·å½¢è±¡è¿åº¦ï¼å·®å¼ä»éä¸å¨æ¦æ±/åå °/èå·/å¤©é¨ 4 å¸å·ï¼è§ãéçãï¼ | â
éè¿ | |
| | | | T09 | ä¸å£å¾æå忝 | `passengerMidRank`ï¼2026-08ï¼ | ä¸å®ç¨¿ä¸è´ | å
¨ç **5.81%**ãæ¦æ± **4.65%**ã仿¡ 17.23%ãæåº â34.87%ï¼ä¸å®ç¨¿ä¸è´ï¼é»ç³ 7.76ãåå ° 2.52ã宿 â16.17ãè¥é³ 5.67ãèå· 36.62ãé»å 7.74ãå¸å® 17.06ãæ©æ½ 13.92ãæ½æ± â2.84ãå¤©é¨ 9.01ï¼ä¸å®ç¨¿å·® 0.02ï½0.5 个ç¾åç¹ï¼ | â
éè¿ | |
| | | | T10 | ä¸å£å¾æç»åæ¯ | `passengerMidDetail`ï¼2026-08ï¼ | ä¸ååºç°æ°é级é误 | å
¬äº¤è¡ç´¯è®¡åæ¯ **â28577% â +13.15%**ãåºç§ +8.54%ãç½çº¦è½¦ +75.66% | â
éè¿ | |
| | | | T11 | 导å
¥çé¢éèç½çº¦è½¦è®¢å | `DataImport.vue` | å
¥å£/æ¦è§/æ¸
空ä¸å¤åä¸å¯è§ | `wycOrder` ç½® `hidden: true`ï¼ä¸å¤ `v-for` ç»ä¸æ¹ç¨ `typeList(g)` | â
éè¿ | |
| | | | T12 | æ¥è¡¨çææ°å¢ä¸¤å¼ æèµæç»è¡¨ | `ReportExport.vue` | æèµæ¥è¡¨ç»å¯å¯¼åºå¹¶æ£ç¡®å½å | æ°å¢ä¸¤é¡¹ï¼`fileNameOf()` æãXæãæ¿æ¢ä¸ºæ¥è¡¨ææä»½ï¼â`çæ_8æå®¢è¿ç«æèµæç»è¡¨.xlsx`ã`çæ_8æç©æµç«åºæèµæç».xls`ï¼ | â
éè¿ | |
| | | | T13 | å¹ç/ç¡®å®æ§ | å䏿¹æºæä»¶è¿ç»å¯¼å
¥ä¸¤æ¬¡ | è¡æ°ä¸æ°å¼ä¸è´ | å®¢è¿ 39 è¡ãç©æµ 128 è¡ï¼ä¸¤æ¬¡ç»æå®å
¨ä¸è´ | â
éè¿ | |
| | | | T14 | ç¼è¯åå½ | `mvn -q -DskipTests compile` | ç¼è¯éè¿ | exit=0 | â
éè¿ | |
| | | |
| | | ## åãåç°çé®é¢ä¸å¤ç½® |
| | | |
| | | | ç¼å· | é®é¢ | æ ¹å | å¤ç½® | |
| | | | --- | --- | --- | --- | |
| | | | P01 | 宿客è¿ãå»ºè®¾é¶æ®µ/形象è¿åº¦ãå
¨ç©º | è¡¨å¤´æ«æçªå£åºå® `表头è¡+3`ï¼æ**é¦è¡æ°æ®**纳å
¥ååææ¬ï¼æ°æ®éçã竣工æ¶å°¾ï¼å»ºææè¿ãå
å½ä¸ã竣工/建æã忝 | æ«æä¸çæ¹ä¸ºã表头åã= é¦ä¸ªç宿°æ®è¡ â 1ï¼æ°æ®è¡ä¸ååä¸ååå¹é
| |
| | | | P02 | å¸å®å®¢è¿ã形象è¿åº¦ãå
¨ç©º | L/M æ é¢åå¨è¡¨å¤´ä¸ç¬¬ 4 è¡ï¼è¶
åº `+3` çªå£ | åä¸ï¼ä¸çæ©å±å°ç¡¬ä¸é +12 è¡ä¸ä¸è¶è¿æ°æ®è¡ï¼ | |
| | | | P03 | ç©æµåæ/æ©æ½/éå·ã形象è¿åº¦ãå
¨ç©º | çæ ã项ç®å»ºè®¾é¶æ®µãè¿åº¦æ
åµãæ¯ L/M å并表头ï¼è¿äºå¸å·åªå¨ L åæ é¢ | æ°å¢ `desc = stage + 1` å
åºï¼ä¸æ¢æ `startcum+2`ã`yearcum+1` å
åºé£æ ¼ä¸è´ï¼ | |
| | | | P04 | ãåããã计ãè¡è¢«å½æé¡¹ç®å
¥åº | `nt.contains("å计")` ä¸è¯å«å
é¨ç©ºæ ¼ | å计/æ»è®¡/å°è®¡å¤å®ç»ä¸æ¹ä¸ºå»ç©ºç½åå¹é
ï¼è§£æå¾ªç¯ + è¡æ°ç»è®¡ + 馿°æ®è¡æ¢æµä¸å¤åæ¥ï¼ | |
| | | | P05 | è¥é³ H50/J50 çæ 202.9565ãå®ç¨¿ 203 | æºæä»¶å³ 202.9565ï¼å®ç¨¿ä¸ºäººå·¥åæ´ | æç¨æ·ãä¿çç¨åºç®åºçæ°ï¼æ´å®æ´ï¼ãä¿ç 202.9565ï¼ä¸æ¹ç¨åº | |
| | | | P06 | å¸å® L91 å»ºè®¾é¶æ®µï¼çæï¼æ¯çï¼ãæåæ½å·¥ããå®ç¨¿ãå¨å»ºã | ç¨æ·å·²ç¡®è®¤ L å»ºè®¾é¶æ®µä¸å¨æ¯ç | ç¨åºä¸å L åï¼ä¿ææ¯çå¼ | |
| | | | P07 | 竹山 M26ãå¸å® M85ãæåº M116 ä¸å®ç¨¿ä¸å | å®ç¨¿ç空æåæ³ä¸åï¼å¦ã建ææäº§ãvsã建ææäº§ããï¼ | ç¨åºææºæä»¶åå
¥ï¼æ¯å®ç¨¿æ´å®æ´ï¼ä¿ç | |
| | | |
| | | ## äºãéçé®é¢ï¼éä¸å¡/ç¨æ·ç¡®è®¤åå¤çï¼ |
| | | |
| | | 1. **æ¦æ±ç©æµé¡¹ç®æ¸
åä¸å®ç¨¿ä¸ä¸è´**ï¼åºå
27 è¡æ¥èªãæ¹åçåå °äº¤éç©æµåºç¡è®¾æ½æèµç»è®¡æ±æ»è¡¨ï¼ææ¥ï¼ãï¼å®ç¨¿ç¨çæ¯ã2026 å¹´å
¨çé¢å®æè®¡åè¿åº¦æ
嵿±æ»ï¼8æï¼ãï¼å«ãèªåæºæ
§ç©æµåãçï¼ãé确认æ¯ãæ¿æ¢æ¦æ±å
¨é¨ç©æµé¡¹ç®ãè¿æ¯ã追å ãåå导å
¥ã |
| | | 2. **天é¨ç©æµæ æ°æ®**ï¼æºæä»¶ã8æä»½ç©æµåä¸å¿å»ºè®¾é¡¹ç®(天é¨).xlsxãH/J/K 为空ï¼åºå
0ï¼ï¼å®ç¨¿ä¸º 16677.7 / 500ï¼éè¡¥æºæä»¶ã |
| | | 3. **èå·/é»ç³ è§åå
夿åå·®å¼**ï¼åºå
å计ä¸å®ç¨¿ä¸è´ï¼å¦èå· J=46548ï¼ï¼ä»
ãè§åå
/è§åå¤ãå½ç±»ä¸åï¼å®ç¨¿ 46548 vs çæ 38320.5ï¼ï¼å±åç±»å£å¾é®é¢ã |
| | | 4. **åå °ç©æµå°æ°å·®**ï¼å®ç¨¿ 29482 / 1671 vs çæ 29188 / 1591ï¼æºæä»¶æ¬èº«å¦æ¤ï¼ã |
| | | 5. **ä¸å£å¾æåæ®å·®**ï¼ä»
æ¥èª 2025 å¹´ç½çº¦è½¦å¸å·åæç®æ³ï¼`WycSplitCalc` æ¦æ±åæ¯å¤çï¼ï¼æªæ
èªè°æ´ï¼å¾
确认ã |
| | | 6. **C ç»**ï¼åå¸å®¢è¿é¡µç»æå½ä¸ï¼éç¨æ·å¨ WPS æ´åå é¤ AJ ååæ§è¡ï¼ã**D ç»**ï¼å¢éæåæªè¾ï¼ã**B4**ï¼å¯¼åºååºæ°ä½æ£ + å¼¹çª + ãæ°æ®ç¼ºå¤±æ¸
åã页ï¼å¾
ææã |
| | | |
| | | ## å
ãç»è®º |
| | | |
| | | æ¬è½® 14 æ¡ç¨ä¾å
¨é¨éè¿ï¼æèµå¸å·å表çã表头ååå®ä½ã缺é·ï¼P01âP04ï¼å·²ä¿®å¤å¹¶åå½éªè¯ï¼ |
| | | 8 æå®¢è¿/ç©æµæºæ°æ®å·²è¡¥é½å
¥åºä¸ä¸æºæä»¶å°è®¡é项对é½ï¼ |
| | | æ°å¢çä¸¤å¼ æèµæç»è¡¨å¯¼åºæ£å¸¸ï¼æ±æ»é¡µ 0 å·®å¼ï¼ï¼ |
| | | ä¸å£å¾æå/æç»åæ¯å£å¾ä¿®å¤åä¸å®ç¨¿ä¸è´ï¼ |
| | | 导å
¥çé¢éèãæ¥è¡¨é¡¹æ°å¢åæç¡®è®¤å£å¾è½å°ã |
| | | å©ä½å·®å¼å为**æ°æ®æºç¼ºå£ææ¯çæå·¥å£å¾**ï¼ä¸å±äºç¨åºç¼ºé·ï¼è§ç¬¬äºèï¼ã |
| New file |
| | |
| | | # åè½æµè¯æ¥å_æç»å¨è§ä¼ä¸545å®¶åå¸å·ç´¯è®¡è¿è·åæ¯_2026-09-19 |
| | | |
| | | ## ä¸ãåè½è¯´æ |
| | | |
| | | - **éæ±**ï¼æç¨æ·ç¡®è®¤çãæç»å¨è§ä¼ä¸ = 2025 å¹´ 1-8 æä¸ 2026 å¹´ 1-8 æåè¿ç» 8 个æä¸æ¥ãå£å¾ï¼545 å®¶ï¼ï¼ |
| | | ç®åºåå¸å· 1-8 æç´¯è®¡å¹³åè¿è·åæ¯ï¼è¾åºå° `D:\æ¡é¢\è´§è¿ä¼ä¸åå¸å·æ
åµ\`ã |
| | | - **å£å¾**ï¼ |
| | | - æç»å¨è§ä¼ä¸ï¼545 å®¶ï¼ï¼ä¸¤å¹´åè¿ç» 8 个æä¸æ¥ H203-2 ææ¥çä¼ä¸ï¼ä¸¤å¹´é´æ°è¿ãéåºçä¼ä¸ä¸åä¸åæ¯ï¼ |
| | | - 累计平åè¿è·ï¼å
¬éï¼ï¼ 1-8 æç´¯è®¡è´§ç©å¨è½¬é ÷ 1-8 æç´¯è®¡è´§è¿éï¼å æå¹³åï¼ï¼ |
| | | - 忝 ï¼ 2026 å¹´ 1-8 æç´¯è®¡å¹³åè¿è· ÷ 2025 å¹´ 1-8 æç´¯è®¡å¹³åè¿è· â 1ï¼ |
| | | - å
¨çè¡ ï¼ 17 个å¸å·ç累计å¨è½¬éã累计货è¿éå嫿±ååç¸é¤ï¼éå¸å·åæ¯çç®æ¯å¹³åï¼ã |
| | | - **产åº**ï¼`D:\æ¡é¢\è´§è¿ä¼ä¸åå¸å·æ
åµ\æç»å¨è§ä¼ä¸545å®¶_åå¸å·1-8æç´¯è®¡è¿è·å忝_2026-09-19.xlsx` |
| | | ï¼é¡µç¾ï¼`å¸å·æ±æ»`ãå
¨ç + 17 å¸å·ãã`ä¼ä¸æç»(545å®¶)`ï¼ã |
| | | - **çæèæ¬**ï¼`docs\å·¥å
·\æç»å¨è§ä¼ä¸545家累计è¿è·çæ.py`ã |
| | | |
| | | ## äºãæµè¯ç¯å¢ |
| | | |
| | | | 项 | å
容 | |
| | | | --- | --- | |
| | | | æ°æ®åº | MySQL 127.0.0.1:3308 / traffic_auditï¼è¡¨ `h2032_enterprise_monthly` | |
| | | | è¿è¡ç¯å¢ | Python 3.14.2 + openpyxl 3.1.5 | |
| | | | 对ç
§ç© | ç¨æ·ä¾§ `D:\æ¡é¢\è´§è¿ä¼ä¸åå¸å·æ
åµ\è´§è¿ä¼ä¸åå¸å·æ
åµxlsx.xlsx`ï¼M/N 两åï¼ | |
| | | | è¾åºä½ç½® | å·¥ä½åº `outputs\` ä¸ `D:\æ¡é¢\è´§è¿ä¼ä¸åå¸å·æ
åµ\`ï¼ä¸¤ä»½ SHA256 ä¸è´ | |
| | | |
| | | ## ä¸ãç¨ä¾è¡¨ |
| | | |
| | | | ç¼å· | ç±»å | è¾å
¥ | 颿 | å®é
| ç»è®º | |
| | | | --- | --- | --- | --- | --- | --- | |
| | | | TC01 | æ£å | å
¨ç 545 å®¶ 2026 å¹´ 1-8 æç´¯è®¡å¨è½¬é ÷ 累计货è¿é | 158.1787 å
¬é | 4389882.0468 ÷ 27752.6820 = 158.1787 | éè¿ | |
| | | | TC02 | æ£å | å
¨ç 545 å®¶ 2025 å¹´ 1-8 æç´¯è®¡å¹³åè¿è· | ä¸ç¨æ·æä»¶ M4 ä¸è´ | 153.7266ï¼ä¸è´ | éè¿ | |
| | | | TC03 | æ£å | å
¨ç累计è¿è·åæ¯ | 158.1787 ÷ 153.7266 â 1 | +2.8961% | éè¿ | |
| | | | TC04 | æ£å | 17 个å¸å· 2025 年累计平åè¿è·ï¼å»å¹´åæåºæ°ï¼ | ä¸ç¨æ·æä»¶ M åéè¡ä¸è´ | 17/17 ä¸è´ | éè¿ | |
| | | | TC05 | æ£å | 17 个å¸å·ç´¯è®¡è¿è·åæ¯ | ä¸ç¨æ·æä»¶ N åéè¡ä¸è´ | 17/17 ä¸è´ï¼å
¨çè¡é¤å¤ï¼è§ TC10ï¼ | éè¿ | |
| | | | TC06 | æ£å | æç»é¡µ 545 è¡æ±å = æ±æ»é¡µå
¨çè¡ | å·®å¼ 0 | è´§è¿é 27752.6820ãå¨è½¬é 4389882.0468ï¼å·®å¼ 0 | éè¿ | |
| | | | TC07 | æ£å | å
¨çè¡ = Σ17 å¸å· | é项ç¸ç | ç¸çï¼å
æ±ç´¯è®¡å¨è½¬éã累计货è¿éåç¸é¤ï¼ | éè¿ | |
| | | | TC08 | è¾¹ç | 仿¡å¸ 2026 å¹´ 2 å®¶æç»å¨è§ä¼ä¸æ 2025 å¹´è¿ç»ä¸æ¥è®°å½ | 忝ç空并注æä¸éç¨ï¼ä¸é¤é¶æ¥é | ä¼ä¸æ° 0ãè¿è·ä¸åæ¯ç空ï¼å¤æ³¨ã忝ä¸éç¨ã | éè¿ | |
| | | | TC09 | è¾¹ç | 累计货è¿é为 0 çä¼ä¸ | 累计è¿è·ç空ï¼ä¸é¤é¶æ¥é | å·²éªè¯ï¼è¡¨å
æ æ¤ç±»ä¼ä¸ï¼ | éè¿ | |
| | | | TC10 | è´å | ç¨æ·æä»¶å
¨çè¡åæ¯ +7.8217% | åºä¸å¸å·è¡å为 1-8 æç´¯è®¡å£å¾ | 该å¼å®ä¸º 545 å®¶ **8 æå½æ**忝ï¼157.0007 ÷ 145.6114 â 1 = +7.8217%ï¼ï¼ç´¯è®¡å£å¾åºä¸º +2.8961%ï¼ä¸¤è
ç¸å·® 4.93 个ç¾åç¹ | éè¿ï¼é®é¢å·²å¨äº¤ä»ä»¶ä¸ä¿®æ£ï¼å¹¶å¨è¡¨å
注æå£å¾ï¼ | |
| | | | TC11 | è¾¹ç | æ¦æ±ç³å交éè¿è¾æéå
¬å¸ãæ¹åæ·é¾äº¤éè¿ä¸æéå
¬å¸ 2026 å¹´ 1 æå°åºç 为 420100ãå
¶å为 420107/420103 | å屿¦æ±å¸ï¼å½éä¸å½±å | å计å
¥æ¦æ± | éè¿ | |
| | | |
| | | ## åãåç°çé®é¢ä¸å¤ç½® |
| | | |
| | | 1. **ç¨æ·æä»¶å
¨çè¡åæ¯å£å¾æ··ç¨ï¼å·²ç»åºæ£ç¡®å¼ï¼**ï¼`è´§è¿ä¼ä¸åå¸å·æ
åµxlsx.xlsx` ç N4 åå
æ ¼å¡«çæ¯ 545 å®¶ **8 æå½æ**è¿è·åæ¯ |
| | | ï¼+7.8217%ï¼ï¼èå
¶ä¸ 17 个å¸å·è¡é½æ¯ **1-8 æç´¯è®¡**åæ¯ãæ¬è¡¨æç´¯è®¡å£å¾ç»åºå
¨ç **+2.8961%**ã |
| | | 2. **M åæªæ 年份**ï¼è¯¥åè¡¨æ ¼å¼å®ä¸º 2025 å¹´ï¼å»å¹´åæï¼ç´¯è®¡å¹³åè¿è·ï¼è¡¨å¤´ã1-8æå¹³åè¿è·ãæè¯¯è¯»ä¸ºä»å¹´ï¼ |
| | | æ¬è¡¨å° 2025ã2026 两年ååï¼æ¶é¤æ§ä¹ã |
| | | 3. **仿¡å¸æ 坿¯åºæ°**ï¼2026 å¹´æç»å¨è§ç 2 å®¶ä¼ä¸ 2025 å¹´æ è¿ç»ä¸æ¥è®°å½ï¼åæ¯ä¸éç¨ï¼ä¸æ¯ç¼ºæ°ï¼ï¼å·²å¨è¡¨å
注æã |
| | | |
| | | ## äºãç»è®º |
| | | |
| | | 11 æ¡ç¨ä¾ï¼7 æ£å / 3 è¾¹ç / 1 è´åï¼å
¨é¨éè¿ï¼17 个å¸å·ä¸ç¨æ·ç°æè¡¨æ ¼éè¡ä¸è´ï¼å
¨çè¡æ´æ£ä¸ºç´¯è®¡å£å¾ +2.90%ï¼ |
| | | æç» 545 è¡ä¸æ±æ»é项对账 0 å·®å¼ã交ä»ä»¶å·²çæå° `D:\æ¡é¢\è´§è¿ä¼ä¸åå¸å·æ
åµ\`ã |
| | |
| | | - éç®å `åå¸å·æ±æ»` æ¹ä¸ºã2026 å
¨å£å¾ / 2025 å
¨å£å¾ / 忝ã䏿®µåï¼æ°å¢ `å£å¾å¯¹æ¯` 页并å两ç§å£å¾ï¼æ åºå·®å¼è¶
10 个ç¾åç¹çå¸å·ã |
| | | - ä¿®æ£åå¸å·åæ¯ï¼æ¦æ± +17.0%ãé»ç³ +35.3%ãè¥é³ +21.0%ã宿 +7.4%ãæ½æ± +5.6%ãéå· +4.9%ãæ©æ½ +1.2%ãèå· â0.2%ãé»å â0.3%ãåå ° â1.9%ãèé¨ â6.6%ãåæ â13.3%ãå¸å® â25.4%ãæåº â49.1%ãå¤©é¨ â54.6%ãéå· â63.1%ã仿¡ â89.1%ã |
| | | - 已忥æ¡é¢äº¤ä»ä»¶ï¼SHA256 ä¸è´ï¼ã |
| | | |
| | | --- |
| | | |
| | | ## å
ãå¤é´ç»ä½ï¼2026-09-18 æ ~ 2026-09-19 åæ¨ï¼ |
| | | |
| | | ### 6.1 宿äºé¡¹ |
| | | |
| | | | # | äºé¡¹ | ç¶æ | |
| | | | --- | --- | --- | |
| | | | 1 | **ä¸å£å¾æå/æç»åæ¯å£å¾ä¿®å¤**ï¼æ¹ä¸ºæãæºè¡¨æ¯å¦æè¯¥è¡ãå¤å®åºæï¼`markMid`/`midMonthHas`/`midCumHitMonths`ï¼ï¼å»å¹´ç¼ºæå忝ç空ï¼`loadMidClassMap()` å¢å è·¨å¿å
¬äº¤å
åºï¼`passengerVolume - passengerCity`ï¼ï¼è§£æå¼å¸¸è®°å
¥ `midIssues` å¹¶åè¦ | â
已宿µ | |
| | | | 2 | **ç½çº¦è½¦ 2025 åæåè½**ï¼`WycSplitCalc` 卿æ pin 缺失/â¤0 æ¶åè½ `wyc_total_monthly` | â
å·²ç¼è¯ | |
| | | | 3 | **æ°å¢ä¸¤å¼ æèµæç»è¡¨å¯¼åº**ï¼`/export/investPassengerDetail`ã`/export/investLogisticsDetail`ï¼åªè¦ç H/J/K/Mï¼I/L/G ä¸å¨æ¯çï¼ç©æµè¡¨æè¡¨å
æ°å¼éç®æ¸ é/å¸å·/å计è¡ï¼ | â
已宿µ | |
| | | | 4 | **导å
¥çé¢éèãç½çº¦è½¦è®¢ååå
¨çæ»éã** | â
已宿µ | |
| | | | 5 | **æèµå¸å·å表ã表头ååå®ä½ãä¿®å¤**ï¼`findInvestHeader`ï¼ï¼æ«æä¸çæ¹ä¸ºã表头åãï¼é¦ä¸ªæ°æ®è¡ â1ï¼ç¡¬ä¸é +12ï¼ãæ°å¢ã建设è¿å±ãå
³é®è¯ãæ°å¢ `desc=stage+1` å
åºãå计/å°è®¡å»ç©ºç½å¹é
| â
已宿µ | |
| | | | 6 | **è¡¥é½ 2026-08 æèµæºæ°æ®**ï¼å®¢è¿ 9 个æä»¶ + ç©æµ 16 个æä»¶å
¥ `docs\æèµ\è¾å
¥\...\8æ` å¹¶é导ï¼å®¢è¿ 39 è¡ / ç©æµ 128 è¡ï¼ | â
å·²å
¥åº | |
| | | |
| | | ### 6.2 æµè¯ç»ææè¦ |
| | | |
| | | - 详è§ãåè½æµè¯æ¥å_æèµæç»è¡¨ä¸å¯¼å
¥ååå®ä½ä¿®å¤_2026-09-19.mdãï¼**14 æ¡ç¨ä¾å
¨é¨éè¿**ã |
| | | - ååä¿®å¤ææï¼å¸å®å®¢è¿å½¢è±¡è¿åº¦ 0â7ã宿客è¿å»ºè®¾é¶æ®µ/形象è¿åº¦ 0â5/5ãåæç©æµ 0â7ãæ©æ½ç©æµ 0â4ãéå·ç©æµ 0â2ï¼å¸å®ãåããã计ãå项ç®å·²æ¶é¤ï¼40â39 è¡ï¼ã |
| | | - å
¥åºå¯¹é½æ½æ¥ï¼åæç©æµ 160378/116414/13784ãæ©æ½ç©æµ 126741/41574/2116ï¼ä¸æºæä»¶å¸å·å°è®¡è¡é项ä¸è´ã |
| | | - ä¸å£å¾æåï¼2026-08ï¼ï¼å
¨ç 5.81%ãæ¦æ± 4.65%ã仿¡ 17.23%ãæåº â34.87%ï¼ä¸å®ç¨¿ä¸è´ï¼å
¬äº¤è¡ç´¯è®¡åæ¯ â28577% â +13.15%ã |
| | | - æèµæç»è¡¨ï¼å®¢è¿ç«æ±æ»é¡µ **0 å·®å¼**ãæç»é¡µ 6 å¤ï¼ç©æµç«åºä¸é¡µä¸ä¿®å¤åä¸è´ï¼å·®å¼ä»ä¸ºæ¦æ±/åå °/èå·/天鍿°æ®æºç¼ºå£ï¼ã |
| | | |
| | | ### 6.3 éçé®é¢ä¸å¾
å |
| | | |
| | | 1. æ¦æ±ç©æµé¡¹ç®æ¸
åä¸å®ç¨¿ä¸ä¸è´ï¼åºå
æ¥èªãåå °æ±æ»è¡¨ãï¼å®ç¨¿æ¥èªã2026å¹´å
¨çé¢å®æè®¡åè¿åº¦æ
嵿±æ»ï¼8æï¼ãï¼â éç¡®è®¤ãæ¿æ¢æ¦æ±å
¨é¨ç©æµé¡¹ç®ãè¿æ¯ã追å ãã |
| | | 2. 天é¨ç©æµæºæä»¶ H/J/K 为空ï¼åºå
0ï¼å®ç¨¿ 16677.7/500ï¼â éè¡¥æºæä»¶ã |
| | | 3. èå·/é»ç³ãè§åå
/è§åå¤ãæåå£å¾ä¸å®ç¨¿ä¸åï¼å计ä¸è´ï¼ã |
| | | 4. ä¸å£å¾æåæ®å·®æ¥èª 2025 å¹´ç½çº¦è½¦å¸å·åæç®æ³ï¼æªæ
æ¹ï¼å¾
确认ã |
| | | 5. C ç»ï¼åå¸å®¢è¿é¡µç»æå½ä¸ï¼éç¨æ·å
å¨ WPS æ´åå é¤ AJ åï¼ï¼D ç»ï¼å¢éæåæªè¾ï¼ï¼B4ï¼å¯¼åºååºæ°ä½æ£ + å¼¹çª + ãæ°æ®ç¼ºå¤±æ¸
åã页ï¼å¾
ææã |
| | | |
| | | ### 6.4 ææ¥è®¡å |
| | | |
| | | 1. è½å®æ¦æ±ç©æµæ°æ®å£å¾ç¡®è®¤å补导ï¼è¡¥å¤©é¨ç©æµæºæ°æ®ã |
| | | 2. æ¨è¿ C/D ç»ä¸ B4ã |
| | | 3. 代ç ï¼ä»ææç¨æ·è¦æ±**åªæ¨ä¸ªäºº gitee**ï¼`origin master`ï¼ï¼**䏿¨å
¬å¸ gitea**ã |
| | | ### 6.5 éçé®é¢å¤ç½®ï¼2026-09-19 00:5x ç¨æ·ç¡®è®¤ï¼ |
| | | |
| | | | éç项 | å¤ç½® | |
| | | | --- | --- | |
| | | | æ¦æ±ç©æµé¡¹ç®æ¸
åä¸å®ç¨¿ä¸ä¸è´ï¼åºå
æ¥èªãåå °æ±æ»è¡¨ãï¼å®ç¨¿æ¥èªã2026å¹´å
¨çé¢å®æè®¡åè¿åº¦æ
嵿±æ»ï¼8æï¼ãï¼ | **忽ç¥**ï¼ä¸åå¤çï¼ | |
| | | | 天é¨ç©æµæºæä»¶ H/J/K 为空ï¼åºå
0ï¼å®ç¨¿ 16677.7 / 500ï¼ | **å¾
ç¨æ·ææ¥ååäºç´¢åæºæ°æ®**åå导å
¥ | |
| | | | èå·/é»ç³ãè§åå
/ è§åå¤ãæåå£å¾ä¸å®ç¨¿ä¸åï¼å计ä¸è´ï¼ | **å¾
ç¨æ·ååäºç¡®è®¤å£å¾** | |
| | | |
| | | > ç¨æ· 2026-09-19 00:5x åé¦ï¼ãä»å¤©å
æ©ç¹ä¼æ¯ãï¼ä»¥ä¸ä¸é¡¹æ¬¡æ¥è·è¿ã |
| | | |
| | | ### 6.6 æ°å¢ä¸é®å¯åï¼2026-09-19 00:5xï¼ |
| | | |
| | | - **èæ¯**ï¼ç¨æ·åæ 页颿¥ãæ°æ®æ¥è¯¢å¤±è´¥ï¼å¯¼å
¥è®°å½å 载失败ããæ ¸æ¥ä¸ºå端(8090)ä¸å端(8080)è¿ç¨é½å·²éåº |
| | | ï¼MySQL æ£å¸¸ï¼`SELECT 1` éè¿ï¼ï¼åå æ¯æå¡ä»¥ `cmd /c ... > log` æå¨å¯å¨çªå£ä¸ï¼**å
³æå¯å¨çªå£å°±ææå¡å¸¦èµ°äº**ã |
| | | å·²éå¯å¹¶å®æµ `/api/import/batches`ã`/api/data/list` å HTTP 200ã |
| | | - **æ°å¢ `stop-dev.ps1`**ï¼é¡¹ç®æ ¹ç®å½ï¼ï¼æãå¯å¨ç¨ç cmd ç¶è¿ç¨ + 精确å½ä»¤è¡ç¹å¾ãæ´æ `taskkill /T /F`ï¼ |
| | | å
åºå¹é
å¤å¿ `java(TrafficAuditApplication)` / `node(vue-cli-service)`ï¼ç»æåæ ¡éª 8090/8080 æ¯å¦éæ¾ï¼ |
| | | ä¸ç¢° `node_repl` ä¸ç¨æ·èªå·±ç cmd çªå£ã |
| | | - **æ°å¢æ¡é¢å
¥å£**ï¼å·¥ä½åºå¤ï¼ä¸å
¥åºï¼ï¼`D:\æ¡é¢\å¯å¨äº¤éå®¡æ ¸ç³»ç».bat`ï¼å·²å¨è·åè·³è¿ãä¸å¨è·åæèµ·ï¼å¸¦ `nobrowser` åæ°å¯åªå¯æå¡ï¼ã |
| | | `D:\æ¡é¢\åæ¢äº¤éå®¡æ ¸ç³»ç».bat`ã |
| | | - **ç¼ç åï¼å·²ä¿®ï¼**ï¼`.bat` å¿
é¡» CRLF + GBK(936)ï¼é¦çåäº LFï¼cmd è§£ææ¥éï¼ï¼`.ps1` å¿
é¡» UTF-8 **with BOM** |
| | | ï¼é¦çæ BOMï¼PS 5.1 æ ANSI 读ï¼ä¸æææåç¬¦ä¸²å¯¼è´ `UnexpectedToken`ï¼ã |
| | | - **æµè¯**ï¼ãåè½æµè¯æ¥å_ä¸é®å¯åèæ¬ä¸æ¡é¢å
¥å£_2026-09-19.mdãï¼5 æ¡ç¨ä¾å
¨é¨éè¿ï¼å¨è·è·³è¿ï¼æªè·æèµ·ï¼åæ¢éæ¾ç«¯å£ï¼å¯åéç¯æ¥å£ 200ï¼ä¸è¯¯æï¼ã |
| New file |
| | |
| | | # 工使¥ç»_2026-09-19 |
| | | |
| | | ## ä¸ãä»å¤©åäºä»ä¹ |
| | | |
| | | ### 1. æç»å¨è§ä¼ä¸ï¼545 å®¶ï¼åå¸å· 1-8 æç´¯è®¡è¿è·åæ¯ï¼æ¡é¢äº¤ä»ï¼ |
| | | |
| | | ç¨æ· 09-18 确认ãæç»å¨è§ä¼ä¸ã= **2025 å¹´ 1-8 æä¸ 2026 å¹´ 1-8 æåè¿ç» 8 个æä¸æ¥**ï¼545 å®¶ï¼ï¼ |
| | | è¦æ±æè¯¥å£å¾ä¸çåå¸å·ç´¯è®¡è¿è·åæ¯ç®åºæ¥å¹¶è¾åºå° `D:\æ¡é¢\è´§è¿ä¼ä¸åå¸å·æ
åµ\`ã |
| | | |
| | | - æ°æ®æºï¼`traffic_audit.h2032_enterprise_monthly`ï¼2025-01 ~ 2026-08ï¼ã |
| | | - å£å¾ï¼ç´¯è®¡å¹³åè¿è· = 1-8 æç´¯è®¡å¨è½¬é ÷ 累计货è¿éï¼åæ¯ = ä»å¹´ç´¯è®¡ ÷ å»å¹´åæç´¯è®¡ â 1ï¼å
¨ç = Σ17 å¸å·ã |
| | | - 产åºï¼`æç»å¨è§ä¼ä¸545å®¶_åå¸å·1-8æç´¯è®¡è¿è·å忝_2026-09-19.xlsx`ï¼`å¸å·æ±æ»` + `ä¼ä¸æç»(545å®¶)`ï¼ï¼ |
| | | èæ¬ `docs\å·¥å
·\æç»å¨è§ä¼ä¸545家累计è¿è·çæ.py`ã |
| | | |
| | | å
³é®ç»æï¼ |
| | | |
| | | | å¸å· | 2026å¹´1-8æç´¯è®¡è¿è·(å
¬é) | 2025å¹´åæ(å
¬é) | 忝 | å¸å· | 2026å¹´1-8æç´¯è®¡è¿è·(å
¬é) | 2025å¹´åæ(å
¬é) | 忝 | |
| | | | --- | --- | --- | --- | --- | --- | --- | --- | |
| | | | **å
¨ç** | **158.18** | **153.73** | **+2.90%** | é»å | 138.73 | 137.16 | +1.15% | |
| | | | æ¦æ± | 159.66 | 140.71 | +13.47% | å¸å® | 115.25 | 151.84 | â24.10% | |
| | | | é»ç³ | 112.67 | 93.75 | +20.18% | éå· | 187.28 | 226.03 | â17.14% | |
| | | | åå ° | 321.13 | 330.78 | â2.92% | æ©æ½å· | 141.78 | 128.56 | +10.28% | |
| | | | 宿 | 85.75 | 83.61 | +2.57% | 仿¡ | â | â | ä¸éç¨ | |
| | | | è¥é³ | 279.65 | 258.01 | +8.39% | æ½æ± | 407.97 | 367.73 | +10.94% | |
| | | | éå· | 42.38 | 103.49 | â59.05% | å¤©é¨ | 61.02 | 134.33 | â54.57% | |
| | | | èé¨ | 305.92 | 321.00 | â4.70% | ç¥åæ¶æåº | 57.68 | 113.39 | â49.13% | |
| | | | åæ | 183.86 | 198.51 | â7.38% | | | | | |
| | | | èå· | 321.44 | 337.36 | â4.72% | | | | | |
| | | |
| | | ### 2. æ ¸å¯¹ç¨æ·ä¾§ãè´§è¿ä¼ä¸åå¸å·æ
åµã表 |
| | | |
| | | - 该表 M/N 两åï¼æç»å¨è§ä¼ä¸ï¼ä¸æ¬æ¬¡ 545 å®¶å£å¾**éè¡ä¸è´**ï¼M = å»å¹´åæåºæ°ï¼N = ç´¯è®¡åæ¯ï¼ã |
| | | - åç°ä¸å¤å£å¾æ··ç¨ï¼**å
¨çè¡ N4 å¡«çæ¯ 8 æå½æåæ¯ +7.8217%**ï¼157.0007 ÷ 145.6114 â 1ï¼ï¼ |
| | | å
¶ä½ 17 è¡å为 1-8 æç´¯è®¡åæ¯ï¼ç´¯è®¡å£å¾åºä¸º **+2.90%**ï¼158.18 ÷ 153.73 â 1ï¼ï¼ç¸å·® 4.93 个ç¾åç¹ã |
| | | - 表头ã1-8æå¹³åè¿è·ãæªæ 年份ï¼å®é
为 2025 å¹´å¼ï¼å·²å¨æ¬æ¬¡äº¤ä»ä»¶ä¸åå两年æ¶é¤æ§ä¹ã |
| | | - 该表 O åã1-8æé«éè¿è·åæ¯ã䏿头é«éæ°æ®ï¼`è¿è·åææ¥å\è¿è·åææ°æ®æ±æ».xlsx`ï¼ç®å¾çå
¨ç â5.94% ä¸ä¸è´ |
| | | ï¼å¸å·å·®å¼æ´å¤§ï¼ï¼æ¥æºä¸æé´å¾
ç¨æ·ç¡®è®¤ï¼æç¨æ·è¦æ±æ¬è½®ä¸å¤çé«éåã |
| | | |
| | | ### 3. ååä¼ä¸å£å¾ 1-8 æç´¯è®¡è´§è¿é/å¨è½¬é SQL æ¥è¯¢èæ¬ï¼æ¬æ¬¡æ°å¢ï¼ |
| | | |
| | | ç¨æ·æé®ï¼25 å¹´ä¸ 26 å¹´ä¼ä¸æ°ä¸åï¼è¦ãä¼ä¸åç§°ç¸åãå°å嫿±æ» 1-8 æç´¯è®¡ç |
| | | è´§ç©å¨è½¬éåè´§è¿éï¼SQL æä¹åã |
| | | |
| | | - 交ä»èæ¬ï¼`docs\çææ±æ»å¤§è¡¨\ååä¼ä¸_1-8æç´¯è®¡å¯¹æ¯_2026-09-19.sql`ï¼6 æ¡æ¥è¯¢ï¼å
¨ä¸ææ³¨éï¼ã |
| | | - å£å¾ï¼ä¼ä¸åç§°å两年 1-8 æç交éï¼ä¸ç½å¤©ç¡®è®¤çãæç»å¨è§ä¼ä¸ 545 å®¶ãå®å
¨ä¸è´ï¼ |
| | | åä½ç»ä¸ ÷10000 è¾åºãä¸å¨ / ä¸å¨å
¬éãã |
| | | - ç»æï¼ |
| | | |
| | | | å£å¾ | ä¼ä¸æ° | è´§è¿é2025(ä¸å¨) | è´§è¿é2026(ä¸å¨) | è´§è¿é忝 | å¨è½¬é2025(ä¸å¨å
¬é) | å¨è½¬é2026(ä¸å¨å
¬é) | å¨è½¬é忝 | |
| | | | --- | --- | --- | --- | --- | --- | --- | --- | |
| | | | ååä¼ä¸ | 545 | 30153.14 | 27752.68 | â7.96% | 4635340.46 | 4389882.05 | â5.30% | |
| | | | å
¨é | 664 / 636 | 33994.45 | 31399.82 | â | 5102518.95 | 4927161.77 | â | |
| | | |
| | | ååå£å¾ç 2026 年累计æ°ä¸ç½å¤©äº¤ä»ä»¶å
¨çè¡ï¼27752.6820 ä¸å¨ / 4389882.0468 ä¸å¨å
¬éï¼å®å
¨ä¸è´ï¼ä¸¤æ¡é¾è·¯äºè¯éè¿ã |
| | | å
¨éä¸ååå£å¾çå·®é¢ä¹å·²ç®æ¸
ï¼2026 å¹´æ°è¿ 91 å®¶ï¼+3647.14 ä¸å¨ / +537279.73 ä¸å¨å
¬éï¼ï¼ |
| | | 2025 å¹´éåº 119 å®¶ï¼â3841.31 ä¸å¨ / â467178.48 ä¸å¨å
¬éï¼ã |
| | | è¡¥å
ï¼å½æ¥è¿½å ï¼ï¼ç¨æ·æ¥çè¦ãä¼ä¸æç»ä¹å¯¼åºæ¥ãï¼èæ¬è¿½å **æ¥è¯¢ 7 ä¼ä¸æç»å¯¼åº** ä¸ **æ¥è¯¢ 8 åè®¡å¯¹æ»æ°**ã |
| | | |
| | | - æ¥è¯¢ 7 çå¹é
鮿¹ç¨ `unified_credit_code`ï¼è¦ç **546 å®¶**ï¼æ¯åç§°å£å¾å¤ 1 å®¶æ¹åä¼ä¸ï¼ |
| | | `91420112558443820B`ï¼2025-01~09ãæ¹åä¸å³¡å¯ç¨ç»¿çµä¾åºé¾æéå
¬å¸ãâ 2025-10 èµ·ãæ¹åé¿å³¡å¯ç¨ç»¿çµä¾åºé¾æéå
¬å¸ãï¼ï¼ |
| | | è¾åº 14 åï¼ä¿¡ç¨ä»£ç ã两年åç§°ãæ¯å¦æ¹åãå¸å·ã两年货è¿é/å¨è½¬éåå¢å忝ï¼ï¼æ 2026 å¹´è´§è¿ééåºã |
| | | - 546 å®¶å£å¾å计ï¼2025 å¹´ 1-8 æ 30162.99 ä¸å¨ / 4637038.58 ä¸å¨å
¬éï¼2026 å¹´ 27764.88 ä¸å¨ / 4392984.81 ä¸å¨å
¬éã |
| | | - èæ¬å
éä¸ç§å¯¼åºæ¹å¼ï¼å½ä»¤è¡ tsv / Navicat 导 xlsx / INTO OUTFILEï¼ï¼å½ä»¤è¡æ¹å¼å·²å®æµå¯¼åº 546 è¡ã䏿æ£å¸¸ã |
| | | - å¾
ç¨æ·ç¡®è®¤ï¼å¯¹å¤æ¥éç¨ 545 å®¶ï¼å称交éï¼è¿æ¯ 546 å®¶ï¼ä»£ç 交éï¼ï¼ç¡®è®¤ååå®ç¨¿ä»¶ã |
| | | 追å ï¼å½æ¥ç¬¬äºè½®ï¼ï¼æ ¸å¯¹æ¡é¢ãè§ä¸æç»å¨è§ä¼ä¸1-8æè¿è·åæ¯.xlsxãä¸ä»æ¥äº¤ä»ä»¶ï¼ |
| | | å¹¶ä¿®å¤ SQL èæ¬çæç»ç²¾åº¦ç¼ºé·ã |
| | | |
| | | - æ ¸å¯¹ç»è®ºï¼ä¸¤æä»¶ä¼ä¸åç§°**545 å®¶éå符ä¸è´**ï¼å¯ä¸å¤åºçæ¯æ¹åä¼ä¸ æ¹åé¿å³¡å¯ç¨ç»¿çµâ¦ï¼ï¼ |
| | | ä½é¤åç§°å¤å
¶ä½å对ä¸ä¸ââè¿è· 540/545 å®¶ä¸ä¸è´ï¼æå¤§ 8.53 å
¬éï¼ã2025 è¿è· 544/545 ä¸ä¸è´ã |
| | | 忝 540/545 ä¸ä¸è´ï¼æ ¹å æ¯å¯¹æ¹æä»¶ç¨ãä¸å¨ä¿ç 2 ä½ãåç®è¿è·ï¼äº¤ä»ä»¶èµ°å
¨ç²¾åº¦ï¼ä¸æ°æ®åº 0 åå·®ï¼ã |
| | | å¦åç°å¸å·åæ³å·®å¼ï¼å¯¹æ¹å"æ©æ½"ï¼äº¤ä»ä»¶å"æ©æ½å·"ï¼3 å®¶ï¼ã |
| | | - 缺é·ä¿®å¤ï¼å SQL çæç»æ¥è¯¢ï¼æ¥è¯¢ 2ãæ¥è¯¢ 7ï¼æä¸å¨å `ROUND(...,2)`ï¼ç²¾åº¦åªå° 100 å¨ï¼ |
| | | ç¨æ·æ¿å»ç®è¿è·ä¼è¢«æ¾å¤§ï¼æ¹åå¼é· 4631 å¨ â 0.46 ä¸å¨ â è¿è·èé« 8.53 å
¬éï¼ã |
| | | å·²æ¹ä¸º 4 ä½å°æ°ï¼å¹¶å¨èæ¬é¡¶é¨æ°å¢ãâ
å°æ°ä½çº¦å®ãè¯´ææ®µï¼æ´èæ¬åå½éè¿ï¼21 æ¡ç¨ä¾ï¼ã |
| | | - å¾
确认ï¼å¯¹å¤æ¥éç¨ 545 å®¶è¿æ¯ 546 å®¶å£å¾ï¼ä»¥åæ¯å¦æäº¤ä»ä»¶ä¸å¯¹æ¹æä»¶çå°æ°ä½ãæ©æ½åæ³ç»ä¸ã |
| | | - 追å ï¼æç¨æ·è¦æ±ææç»ç±»æ¥è¯¢ï¼æ¥è¯¢ 2ãæ¥è¯¢ 7ï¼ç `ROUND` å
¨é¨å»æï¼å¯¼åºå³åå§å¼ï¼ |
| | | 宿µè´§è¿é/å¨è½¬éçåå§å¼æå¤ 4 ä½å°æ°ï¼636 å®¶ä¼ä¸ä¸ 4 ä½ä»¥å¤è¿æå°¾æ°ç为 0 å®¶ï¼ï¼ |
| | | 4 ä½å³å
¨ç²¾åº¦ãæ±æ»ç±»ä»ä¿ç 2 ä½ãæ´èæ¬åå½éè¿ï¼25 æ¡ç¨ä¾ï¼ã |
| | | - 追å éªè¯ï¼æ¥è¯¢ 2ï¼545 å®¶åç§°å£å¾ï¼ä¸æ¥è¯¢ 7ï¼546 家代ç å£å¾ï¼**å餿¹åä¼ä¸å鿝ç¹å®å
¨ç¸ç** |
| | | ï¼545 è¡ä¼ä¸ååä¸è´ï¼8 个æ°å¼å + å°åºä»£ç æå¤§å·®å为 0ï¼ãåå æ¯å¹é
é®ä¸ä¸å¯¹åº + æ´æ°æ±å精确ã |
| | | 已记为æµè¯æ¥å T26ï¼ç´¯è®¡ 26 æ¡ç¨ä¾ï¼ã |
| | | - 追å ï¼ç¡®è®¤ã4 ä½å°æ°ãçéç¨èå´ï¼è´§è¿é/å¨è½¬é 4 ä½å³å
¨ç²¾åº¦ï¼754 个对象 0 ä¾å¤ï¼ |
| | | è¿è·ã忝ä¸çäºå
¨ç²¾åº¦ï¼ï¼æ®æ¤ææ±æ»ç±»æ¥è¯¢ï¼1/3/5/8ï¼ç 14 å¤å°æ°ä½ç»ä¸ä¸º 4 ä½ã |
| | | æ¹åèæ¬è¾åºä¸ 545 家交ä»ä»¶å¸å·æ±æ»éå对é½ï¼T27~T30ï¼ç´¯è®¡ 30 æ¡ç¨ä¾ï¼ã |
| | | ### 4. æ±æ»å¤§è¡¨ãä¸å£å¾æåãå¨è½¬éå£å¾ç»ä¸ï¼ç¨æ·æ¡é¢æ ¸åºå·®å¼ â å®ä½ â ä¿®å¤ï¼ |
| | | |
| | | ç¨æ·æäººå·¥ç®çä¸åï¼ã人工-å¨è½¬éãï¼æ¾è¿æ¡é¢ãçæ_éè·¯è¿è¾éæ±æ»è¡¨ (1).xlsxãçãä¸å£å¾æåãé¡µï¼ |
| | | é®ä¸ºä»ä¹åç¨åºçæçãå¨è½¬éã对ä¸ä¸ï¼å
¨ç +0.31978 ä¸äººå
¬éï¼åå¸å· ±0.01~0.08ï¼ã |
| | | |
| | | - **å®ä½**ï¼å䏿¬è¡¨é两页å£å¾ä¸åããä¸å£å¾æåãèµ° `loadMidClassMap()` å
¬äº¤ç»´åº¦ââ**éä¼ä¸è¡** |
| | | ãåé
å乡忮µ > 0 å°±ç¨å段å¼ï¼= 0 æåé æ»é â åå¸å
ãï¼ãä¸å£å¾æç»/åæ/éè·¯è¿è¾å¨è½¬éãèµ°å°è´¦å£å¾ |
| | | `smReadLedgerMetrics()`ââå
æææå¸å·æ±æ»å æ»éå计 â åå¸å
å计ã |
| | | æºæ¥è¡¨ä¸ä¸ªæ°åèªä¸¤ä½å°æ°èå
¥ï¼2026 å¹´ 1-8 æå
¨çæ **72 è¡**ä¼ä¸ææ¥ |
| | | `åé
å乡 â æ»é â åå¸å
`ï¼å·® ±0.01ï¼ï¼ç¨åºéä¿¡åæ®µå¼ã人工ç¨å·®é¢æ³ï¼ç´¯å 峿差å¼ã |
| | | æä¼ä¸è¡éç®çè¿è¾å£å¾å·®**éå¸å·ä¸è¡¨éå·®åå®å
¨å»å**ï¼åæ +0.08ã宿/èå· +0.05ãæ¦æ±/é»å/å¤©é¨ +0.04â¦ï¼ã |
| | | - **ä¿®å¤**ï¼`ReportExportService.java` å
¬äº¤ç»´åº¦æ¹ä¸ºä¸å¾ãæ»é â åå¸å
ãç°ç®ï¼ä¸å°è´¦é¡µ/æç»é¡µ/å页åæå£å¾ä¸è´ï¼ã |
| | | - **éªè¯**ï¼éå¯åç«¯éæ°çæ 2026-08 大表ï¼ãä¸å£å¾æåãå¨è½¬éä¸äººå·¥/æç»å£å¾ **17 å¸å·éæ ¼å½é¶**ï¼ |
| | | 客è¿éã忝ãåæé¡µãå页åæé¡µæ åå½ï¼2025 åæ¯åºæ 0 è¡åå½±åï¼æ¹å 17 å¸å·å·®å
¨ 0ï¼ã |
| | | - åè¯èæ¬ä¸çæä»¶ï¼`_qa_busfix*.py`ã`_after_busfix_2026-08.xlsx`ã`_after_midrank.xlsx`ã`_after_midana.xlsx`ã |
| | | |
| | | ## äºãæµè¯ç»ææè¦ |
| | | |
| | | è§ãåè½æµè¯æ¥å_æç»å¨è§ä¼ä¸545å®¶åå¸å·ç´¯è®¡è¿è·åæ¯_2026-09-19.mdãï¼11 æ¡ç¨ä¾ï¼7 æ£å / 3 è¾¹ç / 1 è´åï¼å
¨é¨éè¿ã |
| | | |
| | | - æç» 545 è¡æ±å = æ±æ»é¡µå
¨çè¡ï¼27752.6820 ä¸å¨ / 4389882.0468 ä¸å¨å
¬éï¼å·®å¼ 0ï¼ï¼ |
| | | - å
¨çè¡ = Σ17 å¸å·ï¼17 个å¸å·ä¸ç¨æ·è¡¨æ ¼éè¡ä¸è´ï¼ |
| | | - 仿¡å¸æ 坿¯åºæ°ã累计货è¿é为 0 çä¼ä¸åå·²é²é¤é¶å¤çã |
| | | |
| | | - ååä¼ä¸å£å¾ SQL èæ¬å·²æ´èæ¬æ§è¡éªè¯ï¼å«è¿½å çæç»å¯¼åºæ¥è¯¢ï¼ï¼17 æ¡ç¨ä¾ï¼11 æ£å / 2 è´å / 4 è¾¹çï¼å
¨é¨éè¿ï¼ |
| | | æç» 545 è¡æ±å = æ±æ»è¡ï¼å·®å¼ 0ï¼ï¼å·®å¼ä¼ä¸éåæ ¡éªéè¿ã |
| | | |
| | | - ä¸å£å¾æåå¨è½¬éå£å¾ç»ä¸ï¼14 æ¡ç¨ä¾ï¼6 æ£å / 1 åå½ç» / 3 è¾¹ç / 3 è´ååå½ï¼å
¨é¨éè¿ï¼ |
| | | 详è§ãåè½æµè¯æ¥å_ä¸å£å¾æåå¨è½¬éå£å¾ç»ä¸_2026-09-19.mdãï¼ |
| | | å
¨çè¡ä»æ®ç 0.0002 ä¸äººå
¬éï¼=2 人å
¬éï¼æ¯ç `=SUM(O4:O20)` å
åèäºå
¥åæ±åçåºæç»æï¼ã |
| | | ## ä¸ãéçé®é¢ä¸å¾
å |
| | | |
| | | 1. ç¨æ·è¡¨æ ¼ O åé«éè¿è·åæ¯çæ¥æº/æé´å¾
确认ï¼éä¸ N å为 1-8 æç´¯è®¡ï¼ï¼ç¡®è®¤åæ¹å¯ç®ãè¿è·å¢éå·®ãã |
| | | 2. 09-18 交ä»çãè´§è¿ææ¥_æç»å¨è§ä¼ä¸_åå¸å·1-8æç´¯è®¡è¿è·å忝ãéç¨**宿¹å
¨å£å¾**ï¼åæ¯ +4.54%ï¼ï¼ |
| | | æ¬è¡¨éç¨**两年æç»å¨è§ 545 å®¶å£å¾**ï¼åæ¯ +2.90%ï¼ï¼ä¸¤çå£å¾ä¸åä½é½å·²æ³¨æï¼ä¾ä¸å¡æåºæ¯éç¨ã |
| | | 3. è¥è¯¥è¡¨è¦éãå·®å¼çæ±æ»è¡¨ã䏿¥ï¼å»ºè®®å 注两ç§å£å¾çå·®å¼åå ï¼è§ä¸ä¼ä¸åååå¨ï¼ã |
| | | 4. ãä¸å£å¾æåãå
¨çè¡ï¼æ¯çå
¬å¼ `=SUM(O4:O20)`ï¼ä¸æç»å
¨ç²¾åº¦æ±åå·® 0.0002 ä¸äººå
¬éï¼ |
| | | æ¯å¦æ¹æå
¨ç²¾åº¦åå¼ï¼å¾
ç¨æ·ææ¿ã |
| | | 5. æºæ¥è¡¨ `city_bus_monthly` ä¸ 72 è¡ãåé
å乡 â æ»é â åå¸å
ãç两ä½å°æ°èå
¥å·®å¼ï¼ |
| | | å·²æå·®é¢æ³ç»ä¸ï¼å¦åç»è¦ä¸ä¸æ¥å£å¾å®å
¨å¯¹é½ï¼éå头ä¸å¡«æ¥æ¹ç¡®è®¤è¯¥å段å£å¾ã |
| | | |
| | | ## åãæå¤©è®¡å |
| | | |
| | | 1. è§ç¨æ·åé¦ç¡®å®ä¸æ¥å£å¾ï¼545 å®¶ vs å
¨å£å¾ï¼ï¼å¿
è¦æ¶åå¹¶æä¸çåå£å¾è¡¨ã |
| | | 2. é«éæ°æ®æ¥æºç¡®è®¤åè¡¥ç®ãè¿è·å¢éå·®ãã |
| New file |
| | |
| | | # -*- coding: utf-8 -*- |
| | | """æç»å¨è§ä¼ä¸ï¼545 å®¶ï¼åå¸å· 1-8 æç´¯è®¡å¹³åè¿è·å忝 å°è´¦ |
| | | |
| | | å£å¾ï¼ |
| | | · æç»å¨è§ä¼ä¸ = 2025 å¹´ 1-8 æä¸ 2026 å¹´ 1-8 æåè¿ç» 8 个æä¸æ¥ H203-2 ææ¥çä¼ä¸ï¼545 å®¶ï¼ï¼ |
| | | · 累计平åè¿è·ï¼å
¬éï¼= 1-8 æç´¯è®¡è´§ç©å¨è½¬é ÷ 1-8 æç´¯è®¡è´§è¿éï¼å æå¹³åï¼ï¼ |
| | | · 忝 = 2026 å¹´ 1-8 æç´¯è®¡å¹³åè¿è· ÷ 2025 å¹´ 1-8 æç´¯è®¡å¹³åè¿è· â 1ã |
| | | æ°æ®æºï¼traffic_audit.h2032_enterprise_monthly 导åºä»¶ _tmp_persist_scope.tsv |
| | | """ |
| | | import io, os |
| | | from openpyxl import Workbook |
| | | from openpyxl.styles import Font, PatternFill, Alignment, Border, Side |
| | | from openpyxl.utils import get_column_letter |
| | | |
| | | SRC = r'D:\ææ¡£\ChatGPT\traffic-audit\_tmp_persist_scope.tsv' |
| | | OUT = r'D:\ææ¡£\ChatGPT\traffic-audit\outputs\æç»å¨è§ä¼ä¸545å®¶_åå¸å·1-8æç´¯è®¡è¿è·å忝_2026-09-19.xlsx' |
| | | |
| | | ORDER = ['æ¦æ±å¸', 'é»ç³å¸', 'åå °å¸', '宿å¸', 'è¥é³å¸', 'éå·å¸', 'èé¨å¸', 'åæå¸', 'èå·å¸', |
| | | 'é»åå¸', 'å¸å®å¸', 'éå·å¸', 'æ©æ½å·', '仿¡å¸', 'æ½æ±å¸', '天é¨å¸', 'ç¥åæ¶æåº'] |
| | | SHORT = {'æ¦æ±å¸': 'æ¦æ±', 'é»ç³å¸': 'é»ç³', 'åå °å¸': 'åå °', '宿å¸': '宿', 'è¥é³å¸': 'è¥é³', 'éå·å¸': 'éå·', |
| | | 'èé¨å¸': 'èé¨', 'åæå¸': 'åæ', 'èå·å¸': 'èå·', 'é»åå¸': 'é»å', 'å¸å®å¸': 'å¸å®', 'éå·å¸': 'éå·', |
| | | 'æ©æ½å·': 'æ©æ½å·', '仿¡å¸': '仿¡', 'æ½æ±å¸': 'æ½æ±', '天é¨å¸': '天é¨', 'ç¥åæ¶æåº': 'æåº'} |
| | | CITY = dict(zip(['4201', '4202', '4203', '4205', '4206', '4207', '4208', '4209', '4210', '4211', '4212', '4213', '4228'], |
| | | ORDER[:13])) |
| | | CITY.update({'429004': '仿¡å¸', '429005': 'æ½æ±å¸', '429006': '天é¨å¸', '429021': 'ç¥åæ¶æåº'}) |
| | | |
| | | |
| | | def city_of(rc): |
| | | rc = (rc or '').strip() |
| | | return CITY.get(rc, CITY.get(rc[:4], '?')) |
| | | |
| | | |
| | | def dv(f, t): |
| | | return (t / f) if f else None |
| | | |
| | | |
| | | def gth(a, b): |
| | | return (a / b - 1) if (a is not None and b) else None |
| | | |
| | | |
| | | def num(x): |
| | | try: |
| | | return float(x) |
| | | except Exception: |
| | | return 0.0 |
| | | |
| | | |
| | | rows = [] |
| | | with io.open(SRC, 'r', encoding='utf-8') as fh: |
| | | hdr = fh.readline().rstrip('\r\n').split('\t') |
| | | for line in fh: |
| | | p = line.rstrip('\r\n').split('\t') |
| | | if len(p) < len(hdr): |
| | | continue |
| | | d = dict(zip(hdr, p)) |
| | | if int(num(d['m26'])) != 8 or int(num(d['m25'])) != 8: |
| | | continue |
| | | rows.append(dict(city=city_of(d['rc']), en=d['en'], ec=d['ec'], ucc=d['ucc'], |
| | | f26=num(d['f26']), t26=num(d['t26']), f25=num(d['f25']), t25=num(d['t25']))) |
| | | |
| | | by_city = {} |
| | | for r in rows: |
| | | c = by_city.setdefault(r['city'], dict(n=0, f26=0.0, t26=0.0, f25=0.0, t25=0.0)) |
| | | c['n'] += 1 |
| | | c['f26'] += r['f26']; c['t26'] += r['t26']; c['f25'] += r['f25']; c['t25'] += r['t25'] |
| | | tot = dict(n=0, f26=0.0, t26=0.0, f25=0.0, t25=0.0) |
| | | for c in by_city.values(): |
| | | for k in tot: |
| | | tot[k] += c[k] |
| | | |
| | | THIN = Side(style='thin', color='BFBFBF') |
| | | BORDER = Border(left=THIN, right=THIN, top=THIN, bottom=THIN) |
| | | HDR_FILL = PatternFill('solid', fgColor='DDEBF7') |
| | | TOT_FILL = PatternFill('solid', fgColor='FFF2CC') |
| | | TITLE_FILL = PatternFill('solid', fgColor='1F4E79') |
| | | CT = Alignment(horizontal='center', vertical='center', wrap_text=True) |
| | | LT = Alignment(horizontal='left', vertical='center', wrap_text=True) |
| | | RT = Alignment(horizontal='right', vertical='center') |
| | | NF2, NFP = '#,##0.00', '0.00%' |
| | | |
| | | wb = Workbook() |
| | | ws = wb.active |
| | | ws.title = 'å¸å·æ±æ»' |
| | | heads = ['å¸å·', 'æç»å¨è§ä¼ä¸æ°(å®¶)', '2026å¹´1-8æç´¯è®¡è´§è¿é(ä¸å¨)', '2026å¹´1-8æç´¯è®¡è´§ç©å¨è½¬é(ä¸å¨å
Ž)', |
| | | '2026å¹´1-8æç´¯è®¡å¹³åè¿è·(å
¬é)', '2025å¹´1-8æç´¯è®¡å¹³åè¿è·(å
¬é)', '累计è¿è·åæ¯(%)', '夿³¨'] |
| | | widths = [12, 16, 22, 26, 22, 22, 14, 46] |
| | | ws.cell(1, 1, 'æç»å¨è§ä¼ä¸ï¼545 å®¶ï¼åå¸å· 1-8 æç´¯è®¡å¹³åè¿è·å忝').font = Font(bold=True, size=14, color='FFFFFF') |
| | | ws.cell(1, 1).fill = TITLE_FILL |
| | | ws.cell(1, 1).alignment = Alignment(horizontal='center', vertical='center') |
| | | ws.merge_cells(start_row=1, start_column=1, end_row=1, end_column=len(heads)) |
| | | ws.row_dimensions[1].height = 28 |
| | | notes = [ |
| | | 'å£å¾è¯´æï¼', |
| | | 'â æç»å¨è§ä¼ä¸ = 2025 å¹´ 1-8 æä¸ 2026 å¹´ 1-8 æåè¿ç» 8 个æä¸æ¥ãé路货ç©è¿è¾æåº¦ç产æ
åµãï¼H203-2ï¼ææ¥çä¼ä¸ï¼å
± %d å®¶ï¼ä¸¤å¹´é´æ°è¿ãéåºçä¼ä¸ä¸è®¡å
¥æ¬è¡¨åæ¯ã' % tot['n'], |
| | | '⡠累计平åè¿è·ï¼å
¬éï¼= 1-8 æç´¯è®¡è´§ç©å¨è½¬é ÷ 1-8 æç´¯è®¡è´§è¿éï¼å æå¹³åï¼ï¼åæ¯ = 2026 å¹´ 1-8 æç´¯è®¡å¹³åè¿è· ÷ 2025 å¹´ 1-8 æç´¯è®¡å¹³åè¿è· â 1ã', |
| | | '⢠å
¨çè¡ = 17 个å¸å·ä¹åï¼æç´¯è®¡å¨è½¬éã累计货è¿éå嫿±ååç¸é¤ï¼ä¸æ¯å¸å·åæ¯çç®æ¯å¹³åï¼ã', |
| | | 'â£ ä»æ¡å¸ 2026 å¹´æç»å¨è§ç 2 å®¶ä¼ä¸ 2025 å¹´ 1-8 ææ è¿ç»ä¸æ¥è®°å½ï¼æ¬è¡¨æ 坿¯åºæ°ï¼åæ¯ä¸éç¨ã', |
| | | 'æ°æ®æ¥æºï¼äº¤éç»è®¡æ¥è¡¨å®¡æ ¸ç³»ç»æ°æ®åºï¼H203-2 ä¼ä¸ææ¥ï¼2025 å¹´ 1 æâ2026 å¹´ 8 æï¼ãçææ¥æï¼2026-09-19ã', |
| | | ] |
| | | r = 2 |
| | | for i, t in enumerate(notes): |
| | | c = ws.cell(r, 1, t) |
| | | c.font = Font(size=9, bold=(i == 0), color='404040') |
| | | c.alignment = LT |
| | | ws.merge_cells(start_row=r, start_column=1, end_row=r, end_column=len(heads)) |
| | | r += 1 |
| | | hdr_row = r |
| | | for j, h in enumerate(heads, 1): |
| | | c = ws.cell(hdr_row, j, h) |
| | | c.font = Font(bold=True); c.fill = HDR_FILL; c.alignment = CT; c.border = BORDER |
| | | ws.column_dimensions[get_column_letter(j)].width = widths[j - 1] |
| | | ws.row_dimensions[hdr_row].height = 42 |
| | | |
| | | |
| | | def put(row, vals, fill=None, bold=False): |
| | | for j, v in enumerate(vals, 1): |
| | | c = ws.cell(row, j, v) |
| | | c.border = BORDER |
| | | c.alignment = LT if j == 8 else (CT if j == 1 else RT) |
| | | if j in (3, 4, 5, 6): |
| | | c.number_format = NF2 |
| | | elif j == 7: |
| | | c.number_format = NFP |
| | | if fill: |
| | | c.fill = fill |
| | | if bold: |
| | | c.font = Font(bold=True) |
| | | |
| | | |
| | | rr = hdr_row |
| | | d26 = dv(tot['f26'], tot['t26']); d25 = dv(tot['f25'], tot['t25']) |
| | | rr += 1 |
| | | put(rr, ['å
¨ç', tot['n'], tot['f26'] / 10000.0, tot['t26'] / 10000.0, d26, d25, gth(d26, d25), ''], TOT_FILL, True) |
| | | for city in ORDER: |
| | | c = by_city.get(city) |
| | | rr += 1 |
| | | if not c or c['n'] == 0: |
| | | put(rr, [SHORT[city], 0, None, None, None, None, None, |
| | | '该å¸å· 2026 å¹´æç»å¨è§ä¼ä¸å¨ 2025 å¹´ 1-8 ææ è¿ç»ä¸æ¥è®°å½ï¼åæ¯ä¸éç¨']) |
| | | continue |
| | | a, b = dv(c['f26'], c['t26']), dv(c['f25'], c['t25']) |
| | | put(rr, [SHORT[city], c['n'], c['f26'] / 10000.0, c['t26'] / 10000.0, a, b, gth(a, b), '']) |
| | | ws.freeze_panes = ws.cell(hdr_row + 1, 2).coordinate |
| | | |
| | | # ä¼ä¸æç» |
| | | ws2 = wb.create_sheet('ä¼ä¸æç»(545å®¶)') |
| | | h2 = ['åºå·', 'å¸å·', 'ä¼ä¸åç§°', 'ç»ä¸ç¤¾ä¼ä¿¡ç¨ä»£ç ', '2026å¹´1-8æè´§è¿é(ä¸å¨)', '2026å¹´1-8æå¨è½¬é(ä¸å¨å
Ž)', |
| | | '2026å¹´1-8æç´¯è®¡å¹³åè¿è·(å
¬é)', '2025å¹´1-8æç´¯è®¡å¹³åè¿è·(å
¬é)', '累计è¿è·åæ¯(%)'] |
| | | w2 = [6, 12, 42, 24, 20, 24, 22, 22, 14] |
| | | for j, h in enumerate(h2, 1): |
| | | c = ws2.cell(1, j, h) |
| | | c.font = Font(bold=True); c.fill = HDR_FILL; c.alignment = CT; c.border = BORDER |
| | | ws2.column_dimensions[get_column_letter(j)].width = w2[j - 1] |
| | | ws2.row_dimensions[1].height = 40 |
| | | order = {c: i for i, c in enumerate(ORDER)} |
| | | idx = 0 |
| | | for i, x in enumerate(sorted(rows, key=lambda z: (order.get(z['city'], 99), -z['t26'])), 1): |
| | | a, b = dv(x['f26'], x['t26']), dv(x['f25'], x['t25']) |
| | | vals = [i, SHORT[x['city']], x['en'], x['ucc'], x['f26'] / 10000.0, x['t26'] / 10000.0, a, b, gth(a, b)] |
| | | for j, v in enumerate(vals, 1): |
| | | c = ws2.cell(i + 1, j, v) |
| | | c.border = BORDER |
| | | c.alignment = LT if j in (3, 4) else (CT if j in (1, 2) else RT) |
| | | if j in (5, 6, 7, 8): |
| | | c.number_format = NF2 |
| | | elif j == 9: |
| | | c.number_format = NFP |
| | | ws2.freeze_panes = 'C2' |
| | | ws2.auto_filter.ref = 'A1:I%d' % (len(rows) + 1) |
| | | |
| | | os.makedirs(os.path.dirname(OUT), exist_ok=True) |
| | | wb.save(OUT) |
| | | print('OK ->', OUT) |
| | | print('ä¼ä¸æ° %dï¼å
¨ç 2026 %.4f / 2025 %.4f -> %.4f%%' % (tot['n'], d26, d25, gth(d26, d25) * 100)) |
| New file |
| | |
| | | -- ============================================================ |
| | | -- 2025 / 2026 å¹´ 1-8 æç´¯è®¡ è´§è¿éãè´§ç©å¨è½¬é æ±æ»ï¼ååä¼ä¸å£å¾ï¼ |
| | | -- çææ¥æï¼2026-09-19 æ°æ®åºï¼traffic_auditï¼MySQL 8.0.29ï¼ |
| | | -- ------------------------------------------------------------ |
| | | -- æ°æ®æ¥æºè¡¨ï¼h2032_enterprise_monthly |
| | | -- ãé路货ç©è¿è¾æåº¦ç产æ
åµè¡¨ã= 交ä¼ç»H203-2表ï¼ä¼ä¸çº§ææ¥ï¼è§ä¸ä¼ä¸ï¼ |
| | | -- åæ®µï¼freight_total è´§è¿é_æ»è®¡ï¼å¨ï¼ |
| | | -- turnover_total è´§ç©å¨è½¬é_æ»è®¡ï¼å¨å
¬éï¼ |
| | | -- report_period æ¥è¡¨æï¼æ ¼å¼ 'YYYY-MM' |
| | | -- enterprise_name ä¼ä¸åç§° |
| | | -- å使¢ç®ï¼è¡¨å
åçæ¯ãå¨ / å¨å
¬éãï¼æ¥è¡¨å£å¾æ¯ãä¸å¨ / ä¸å¨å
¬éãï¼ |
| | | -- æä»¥ä¸é¢ç»ä¸ ÷10000ã |
| | | -- æé´åæ³ï¼1-8 æ = report_period BETWEEN '2025-01' AND '2025-08' |
| | | -- ï¼report_period æ¯å符串 'YYYY-MM'ï¼ç´æ¥æ¯å¤§å°å³å¯ï¼ |
| | | -- 为ä»ä¹è¦ãååä¼ä¸å£å¾ãï¼ |
| | | -- 2025 å¹´ 1-8 ææ 664 å®¶ä¼ä¸ã2026 å¹´ 1-8 æåªæ 636 å®¶ï¼ |
| | | -- ç´æ¥æ¿ä¸¤å¹´æ»æ°ç¸åï¼å·®é¢éæ··çãä¼ä¸æ°éåäºãçå½±åï¼ä¸æ¯çå®å¢åã |
| | | -- æä¸¤å¹´é½æ¥éè¿çä¼ä¸åç§°å交éï¼å®æµ 545 å®¶ï¼ï¼ä¸¤å¹´çä¼ä¸èå´æä¸è´ã |
| | | -- 宿µç»æï¼ååä¼ä¸å£å¾ 545 å®¶ï¼4 ä½å°æ°ï¼ï¼ |
| | | -- 2025 å¹´ 1-8 æï¼è´§è¿é 30153.1392 ä¸å¨ï¼å¨è½¬é 4635340.4627 ä¸å¨å
Ž |
| | | -- 2026 å¹´ 1-8 æï¼è´§è¿é 27752.6820 ä¸å¨ï¼å¨è½¬é 4389882.0468 ä¸å¨å
Ž |
| | | -- 忝ï¼è´§è¿é -7.9609%ï¼å¨è½¬é -5.2954% |
| | | -- ï¼2026 å¹´è¿ä¸¤ä¸ªæ°ä¸ãæç»å¨è§ä¼ä¸545å®¶_åå¸å·1-8æç´¯è®¡è¿è·å忝ã交ä»ä»¶çå
¨çè¡å®å
¨ä¸è´ï¼ |
| | | -- ============================================================ |
| | | |
| | | |
| | | -- ============================================================ |
| | | -- â
å°æ°ä½çº¦å®ï¼2026-09-19 è¡¥å
ï¼å¾éè¦ï¼â
|
| | | -- ------------------------------------------------------------ |
| | | -- 1) 表éåçæ¯ãå¨ / å¨å
¬éãçæ´æ°ï¼å¯¼åºæ¶ ÷10000 åæãä¸å¨ / ä¸å¨å
¬éãã |
| | | -- 2) 塿¯ãè¦æ¿å»äºæ¬¡è®¡ç®ãçåï¼å°¤å
¶æ¯ãå¨è½¬é ÷ è´§è¿é = å¹³åè¿è·ãï¼ï¼ |
| | | -- åä¸ä¸è½å¨ SQL éåªä¿ç 2 ä½å°æ°ï¼ |
| | | -- åå ï¼ä¿ç 2 ä½ = ç²¾åº¦å° 100 å¨ã对货è¿éåªæå åå¨çå°ä¼ä¸ï¼ |
| | | -- 忝ä¼è¢«ç ææå¤ 1%ï¼ç®åºæ¥çè¿è·è½å·®åºå¥½å å
¬éã |
| | | -- å®ä¾ï¼æ¹åå¼é·ç©æµæéå
¬å¸ 2026 å¹´ 1-8 æè´§è¿é 4631 å¨ |
| | | -- â ä¸åæ´ 0.4631 ä¸å¨ï¼è¿è· 1267.05 å
¬éï¼æ£ç¡®ï¼ |
| | | -- â å 2 ä½ 0.46 ä¸å¨ï¼è¿è· 1275.59 å
¬éï¼èé« 8.53 å
¬éï¼ |
| | | -- 3) æä»¥æ¬èæ¬çº¦å®ï¼ |
| | | -- · æç»ç±»æ¥è¯¢ï¼æ¥è¯¢ 2ãæ¥è¯¢ 7ï¼â å®å
¨ä¸å¥ ROUNDï¼å¯¼åºå³åå§å¼ |
| | | -- ï¼è´§è¿é/å¨è½¬éçåå§å¼æå¤ 4 ä½å°æ°ï¼å°±æ¯å
¨ç²¾åº¦ï¼åæ¯åå°æ°ä½è¾é¿ï¼ |
| | | -- å«é¿å¯èªè¡å¨å¤é¢å¥ ROUND(...,2)ï¼ï¼ |
| | | -- · æ±æ»ç±»ï¼æ¥è¯¢ 1ã3ã5ã8ï¼â åæ ·ä¿ç 4 ä½å°æ°ï¼å¯¹æ¬è¡¨æ°æ®æ¥è¯´ 4 ä½å°±æ¯å
¨ç²¾åº¦ï¼ |
| | | -- ä¿ç 2 使²¡æä»»ä½å¥½å¤ï¼åèä¼è®©äººè¯¯ä»¥ä¸ºæ°æ®å°±åªæ 2 ä½ç²¾åº¦ï¼ï¼ |
| | | -- · å¦æä½ è¦èªå·±ç®è¿è·/忝ï¼å»ºè®®ç´æ¥ç¨æ¥è¯¢ 7ï¼ææ /10000 é£ä¸å±å»æï¼ |
| | | -- å
å¨ Excel éæãå¨ãç®å®åé¤ã |
| | | -- ============================================================ |
| | | |
| | | -- ===================================================================== |
| | | -- æ¥è¯¢ 1ï¼æ±æ»ä¸è¡ ââ ååä¼ä¸å£å¾çä¸¤å¹´ç´¯è®¡æ° + 忝å¢é |
| | | -- ===================================================================== |
| | | SELECT COUNT(DISTINCT e.enterprise_name) AS ä¼ä¸æ°, |
| | | ROUND(SUM(CASE WHEN e.report_period <= '2025-08' |
| | | THEN e.freight_total ELSE 0 END) / 10000, 4) AS è´§è¿é2025_ä¸å¨, |
| | | ROUND(SUM(CASE WHEN e.report_period >= '2026-01' |
| | | THEN e.freight_total ELSE 0 END) / 10000, 4) AS è´§è¿é2026_ä¸å¨, |
| | | ROUND((SUM(CASE WHEN e.report_period >= '2026-01' THEN e.freight_total ELSE 0 END) |
| | | / NULLIF(SUM(CASE WHEN e.report_period <= '2025-08' THEN e.freight_total ELSE 0 END), 0) - 1) * 100, 2) |
| | | AS è´§è¿é忝_ç¾åæ¯, |
| | | ROUND(SUM(CASE WHEN e.report_period <= '2025-08' |
| | | THEN e.turnover_total ELSE 0 END) / 10000, 4) AS å¨è½¬é2025_ä¸å¨å
Ž, |
| | | ROUND(SUM(CASE WHEN e.report_period >= '2026-01' |
| | | THEN e.turnover_total ELSE 0 END) / 10000, 4) AS å¨è½¬é2026_ä¸å¨å
Ž, |
| | | ROUND((SUM(CASE WHEN e.report_period >= '2026-01' THEN e.turnover_total ELSE 0 END) |
| | | / NULLIF(SUM(CASE WHEN e.report_period <= '2025-08' THEN e.turnover_total ELSE 0 END), 0) - 1) * 100, 2) |
| | | AS å¨è½¬é忝_ç¾åæ¯ |
| | | FROM h2032_enterprise_monthly e |
| | | -- ä¸é¢ä¸¤ä¸ª JOINï¼åªè¦ä¸¤å¹´ 1-8 æé½æ¥éè¿çä¼ä¸ï¼ååä¼ä¸å£å¾çæ ¸å¿ï¼ |
| | | JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly |
| | | WHERE report_period BETWEEN '2025-01' AND '2025-08') a |
| | | ON a.enterprise_name = e.enterprise_name |
| | | JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly |
| | | WHERE report_period BETWEEN '2026-01' AND '2026-08') b |
| | | ON b.enterprise_name = e.enterprise_name |
| | | WHERE e.report_period BETWEEN '2025-01' AND '2026-08'; |
| | | |
| | | |
| | | -- ===================================================================== |
| | | -- æ¥è¯¢ 2ï¼éä¼ä¸å¯¹ç
§æç»ï¼ååä¼ä¸ï¼ä¸¤å¹´å¹¶æï¼ï¼å¯ç´æ¥å¯¼åº Excel |
| | | -- æ 2026 å¹´è´§è¿éä»å¤§å°å°æï¼å»æ ORDER BY å°±æ¯å®æ´ 545 è¡ã |
| | | -- ===================================================================== |
| | | SELECT e.enterprise_name AS ä¼ä¸åç§°, |
| | | MAX(CASE WHEN e.report_period >= '2026-01' THEN e.region_code END) AS å°åºä»£ç , |
| | | SUM(CASE WHEN e.report_period <= '2025-08' THEN e.freight_total ELSE 0 END) / 10000 AS è´§è¿é2025_ä¸å¨, |
| | | SUM(CASE WHEN e.report_period >= '2026-01' THEN e.freight_total ELSE 0 END) / 10000 AS è´§è¿é2026_ä¸å¨, |
| | | (SUM(CASE WHEN e.report_period >= '2026-01' THEN e.freight_total ELSE 0 END) |
| | | - SUM(CASE WHEN e.report_period <= '2025-08' THEN e.freight_total ELSE 0 END)) / 10000 AS è´§è¿éå¢å_ä¸å¨, |
| | | (SUM(CASE WHEN e.report_period >= '2026-01' THEN e.freight_total ELSE 0 END) |
| | | / NULLIF(SUM(CASE WHEN e.report_period <= '2025-08' THEN e.freight_total ELSE 0 END), 0) - 1) * 100 AS è´§è¿é忝_ç¾åæ¯, |
| | | SUM(CASE WHEN e.report_period <= '2025-08' THEN e.turnover_total ELSE 0 END) / 10000 AS å¨è½¬é2025_ä¸å¨å
Ž, |
| | | SUM(CASE WHEN e.report_period >= '2026-01' THEN e.turnover_total ELSE 0 END) / 10000 AS å¨è½¬é2026_ä¸å¨å
Ž, |
| | | (SUM(CASE WHEN e.report_period >= '2026-01' THEN e.turnover_total ELSE 0 END) |
| | | - SUM(CASE WHEN e.report_period <= '2025-08' THEN e.turnover_total ELSE 0 END)) / 10000 AS å¨è½¬éå¢å_ä¸å¨å
Ž, |
| | | (SUM(CASE WHEN e.report_period >= '2026-01' THEN e.turnover_total ELSE 0 END) |
| | | / NULLIF(SUM(CASE WHEN e.report_period <= '2025-08' THEN e.turnover_total ELSE 0 END), 0) - 1) * 100 AS å¨è½¬é忝_ç¾åæ¯ |
| | | FROM h2032_enterprise_monthly e |
| | | JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly |
| | | WHERE report_period BETWEEN '2025-01' AND '2025-08') a |
| | | ON a.enterprise_name = e.enterprise_name |
| | | JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly |
| | | WHERE report_period BETWEEN '2026-01' AND '2026-08') b |
| | | ON b.enterprise_name = e.enterprise_name |
| | | WHERE e.report_period BETWEEN '2025-01' AND '2026-08' |
| | | GROUP BY e.enterprise_name |
| | | ORDER BY è´§è¿é2026_ä¸å¨ DESC; |
| | | |
| | | |
| | | -- ===================================================================== |
| | | -- æ¥è¯¢ 3ï¼ä¸ç§å£å¾å¯¹ç
§ ââ çæ¸
æ¥ãå
¨éãåãååãå·®å¨åª |
| | | -- ALL_2025 / ALL_2026 : åèªå¹´ä»½çå
¨é¨ä¼ä¸ |
| | | -- SAME_2025 / SAME_2026 : ååä¼ä¸å£å¾ï¼545 å®¶ï¼ |
| | | -- ===================================================================== |
| | | SELECT t.scope_type AS å£å¾, |
| | | COUNT(DISTINCT t.enterprise_name) AS ä¼ä¸æ°, |
| | | ROUND(SUM(t.freight_total) / 10000, 4) AS è´§è¿é_ä¸å¨, |
| | | ROUND(SUM(t.turnover_total) / 10000, 4) AS å¨è½¬é_ä¸å¨å
Ž |
| | | FROM ( |
| | | SELECT 'ALL_2025' AS scope_type, enterprise_name, freight_total, turnover_total |
| | | FROM h2032_enterprise_monthly WHERE report_period BETWEEN '2025-01' AND '2025-08' |
| | | UNION ALL |
| | | SELECT 'ALL_2026', enterprise_name, freight_total, turnover_total |
| | | FROM h2032_enterprise_monthly WHERE report_period BETWEEN '2026-01' AND '2026-08' |
| | | UNION ALL |
| | | SELECT 'SAME_2025', e.enterprise_name, e.freight_total, e.turnover_total |
| | | FROM h2032_enterprise_monthly e |
| | | JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly |
| | | WHERE report_period BETWEEN '2025-01' AND '2025-08') a ON a.enterprise_name = e.enterprise_name |
| | | JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly |
| | | WHERE report_period BETWEEN '2026-01' AND '2026-08') b ON b.enterprise_name = e.enterprise_name |
| | | WHERE e.report_period BETWEEN '2025-01' AND '2025-08' |
| | | UNION ALL |
| | | SELECT 'SAME_2026', e.enterprise_name, e.freight_total, e.turnover_total |
| | | FROM h2032_enterprise_monthly e |
| | | JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly |
| | | WHERE report_period BETWEEN '2025-01' AND '2025-08') a ON a.enterprise_name = e.enterprise_name |
| | | JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly |
| | | WHERE report_period BETWEEN '2026-01' AND '2026-08') b ON b.enterprise_name = e.enterprise_name |
| | | WHERE e.report_period BETWEEN '2026-01' AND '2026-08' |
| | | ) t |
| | | GROUP BY t.scope_type |
| | | ORDER BY t.scope_type; |
| | | |
| | | |
| | | -- ===================================================================== |
| | | -- æ¥è¯¢ 4ï¼å·®å¼ä¼ä¸ååï¼æ ¸å¯¹ç¨ï¼ââ åªå¨ä¸å¹´æ¥éçä¼ä¸åå
¶ç´¯è®¡é |
| | | -- only_in = 2025 / 2026 |
| | | -- 宿µï¼2025 å¹´ç¬æ 119 å®¶ã2026 å¹´ç¬æ 91 å®¶ï¼1-8 æå£å¾ï¼ |
| | | -- ===================================================================== |
| | | SELECT '2025' AS only_in, e.enterprise_name AS ä¼ä¸åç§°, |
| | | ROUND(SUM(e.freight_total) / 10000, 2) AS è´§è¿é_ä¸å¨, |
| | | ROUND(SUM(e.turnover_total) / 10000, 2) AS å¨è½¬é_ä¸å¨å
Ž |
| | | FROM h2032_enterprise_monthly e |
| | | LEFT JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly |
| | | WHERE report_period BETWEEN '2026-01' AND '2026-08') b |
| | | ON b.enterprise_name = e.enterprise_name |
| | | WHERE e.report_period BETWEEN '2025-01' AND '2025-08' AND b.enterprise_name IS NULL |
| | | GROUP BY e.enterprise_name |
| | | UNION ALL |
| | | SELECT '2026', e.enterprise_name, |
| | | ROUND(SUM(e.freight_total) / 10000, 2), |
| | | ROUND(SUM(e.turnover_total) / 10000, 2) |
| | | FROM h2032_enterprise_monthly e |
| | | LEFT JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly |
| | | WHERE report_period BETWEEN '2025-01' AND '2025-08') a |
| | | ON a.enterprise_name = e.enterprise_name |
| | | WHERE e.report_period BETWEEN '2026-01' AND '2026-08' AND a.enterprise_name IS NULL |
| | | GROUP BY e.enterprise_name |
| | | ORDER BY only_in, è´§è¿é_ä¸å¨ DESC; |
| | | |
| | | |
| | | -- ===================================================================== |
| | | -- æ¥è¯¢ 5ï¼åå¸å·ãååä¼ä¸å£å¾ã两年累计对ç
§ |
| | | -- å°åºä»£ç å 2026 年飿¡è®°å½ç region_code |
| | | -- ===================================================================== |
| | | SELECT CASE |
| | | WHEN region_code LIKE '4201%' THEN 'æ¦æ±' WHEN region_code LIKE '4202%' THEN 'é»ç³' |
| | | WHEN region_code LIKE '4203%' THEN 'åå °' WHEN region_code LIKE '4205%' THEN '宿' |
| | | WHEN region_code LIKE '4206%' THEN 'è¥é³' WHEN region_code LIKE '4207%' THEN 'éå·' |
| | | WHEN region_code LIKE '4208%' THEN 'èé¨' WHEN region_code LIKE '4209%' THEN 'åæ' |
| | | WHEN region_code LIKE '4210%' THEN 'èå·' WHEN region_code LIKE '4211%' THEN 'é»å' |
| | | WHEN region_code LIKE '4212%' THEN 'å¸å®' WHEN region_code LIKE '4213%' THEN 'éå·' |
| | | WHEN region_code LIKE '4228%' THEN 'æ©æ½' WHEN region_code LIKE '429004%' THEN '仿¡' |
| | | WHEN region_code LIKE '429005%' THEN 'æ½æ±' WHEN region_code LIKE '429006%' THEN '天é¨' |
| | | WHEN region_code LIKE '429021%' THEN 'æåº' ELSE 'å
¶ä»' END AS å¸å·, |
| | | COUNT(DISTINCT d.enterprise_name) AS ååä¼ä¸æ°, |
| | | ROUND(SUM(d.freight_2025) / 10000, 4) AS è´§è¿é2025_ä¸å¨, |
| | | ROUND(SUM(d.freight_2026) / 10000, 4) AS è´§è¿é2026_ä¸å¨, |
| | | ROUND(SUM(d.turnover_2025) / 10000, 4) AS å¨è½¬é2025_ä¸å¨å
Ž, |
| | | ROUND(SUM(d.turnover_2026) / 10000, 4) AS å¨è½¬é2026_ä¸å¨å
Ž |
| | | FROM ( |
| | | SELECT e.enterprise_name, |
| | | MAX(CASE WHEN e.report_period >= '2026-01' THEN e.region_code END) AS region_code, |
| | | SUM(CASE WHEN e.report_period <= '2025-08' THEN e.freight_total ELSE 0 END) AS freight_2025, |
| | | SUM(CASE WHEN e.report_period >= '2026-01' THEN e.freight_total ELSE 0 END) AS freight_2026, |
| | | SUM(CASE WHEN e.report_period <= '2025-08' THEN e.turnover_total ELSE 0 END) AS turnover_2025, |
| | | SUM(CASE WHEN e.report_period >= '2026-01' THEN e.turnover_total ELSE 0 END) AS turnover_2026 |
| | | FROM h2032_enterprise_monthly e |
| | | JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly |
| | | WHERE report_period BETWEEN '2025-01' AND '2025-08') a ON a.enterprise_name = e.enterprise_name |
| | | JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly |
| | | WHERE report_period BETWEEN '2026-01' AND '2026-08') b ON b.enterprise_name = e.enterprise_name |
| | | WHERE e.report_period BETWEEN '2025-01' AND '2026-08' |
| | | GROUP BY e.enterprise_name |
| | | ) d |
| | | GROUP BY å¸å· |
| | | ORDER BY è´§è¿é2026_ä¸å¨ DESC; |
| | | |
| | | |
| | | -- ===================================================================== |
| | | -- æ¥è¯¢ 6ï¼æ°æ®ä½æ£ ââ ååä¼ä¸éæä»½ä¸è¶³ 8 个æçï¼ç´¯è®¡æ°ä¼åå°ï¼æ¯å¯¹æ¶æ³¨æï¼ |
| | | -- æ£å¸¸ï¼2025 å¹´ 1-8 æ 8 æ¡ + 2026 å¹´ 1-8 æ 8 æ¡ |
| | | -- 宿µï¼æ å¼å¸¸ä¼ä¸ï¼å
¨é¨ 545 家两年å 8 个æé½å
¨ |
| | | -- ===================================================================== |
| | | SELECT e.enterprise_name AS ä¼ä¸åç§°, |
| | | SUM(CASE WHEN e.report_period BETWEEN '2025-01' AND '2025-08' THEN 1 ELSE 0 END) AS è®°å½æ°2025, |
| | | SUM(CASE WHEN e.report_period BETWEEN '2026-01' AND '2026-08' THEN 1 ELSE 0 END) AS è®°å½æ°2026 |
| | | FROM h2032_enterprise_monthly e |
| | | JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly |
| | | WHERE report_period BETWEEN '2025-01' AND '2025-08') a ON a.enterprise_name = e.enterprise_name |
| | | JOIN (SELECT DISTINCT enterprise_name FROM h2032_enterprise_monthly |
| | | WHERE report_period BETWEEN '2026-01' AND '2026-08') b ON b.enterprise_name = e.enterprise_name |
| | | WHERE e.report_period BETWEEN '2025-01' AND '2026-08' |
| | | GROUP BY e.enterprise_name |
| | | HAVING è®°å½æ°2025 <> 8 OR è®°å½æ°2026 <> 8; |
| | | -- ===================================================================== |
| | | -- æ¥è¯¢ 7ï¼ä¼ä¸æç»å¯¼åºï¼æ¨èç¨è¿çï¼546 å®¶ï¼ |
| | | -- 䏿¥è¯¢ 2 çåºå«ï¼å¹é
é®ç¨ãç»ä¸ç¤¾ä¼ä¿¡ç¨ä»£ç ãè䏿¯ä¼ä¸åç§°ï¼ |
| | | -- å¤è¦ç 1 å®¶æ¹åä¼ä¸ï¼91420112558443820Bï¼ |
| | | -- 2025-01~2025-09 å«ãæ¹åä¸å³¡å¯ç¨ç»¿çµä¾åºé¾æéå
¬å¸ãï¼ |
| | | -- 2025-10 èµ·å«ãæ¹åé¿å³¡å¯ç¨ç»¿çµä¾åºé¾æéå
¬å¸ãï¼ï¼ |
| | | -- æ¥è¯¢ 2 æåç§°å¹é
伿è¿å®¶ä¸¤å¹´é½æ¼æï¼ä¸åæ¶è®¡å
¥ä¸¤å¹´ãç¬æä¼ä¸ãååã |
| | | -- è¾åºåå·²æå¯¼åºä¹ æ¯æå¥½ï¼å¯ç´æ¥ç²è¿ Excelï¼æ 2026 å¹´è´§è¿ééåºã |
| | | -- æç¤ºï¼æç»åä¸å¥ ROUNDï¼å
¨ç²¾åº¦ï¼è´§è¿é/å¨è½¬éæå¤ 4 ä½å°æ°ï¼ï¼ |
| | | -- 䏿¥è¯¢ 8 ç 2 ä½åè®¡ä¼æ 0.01 级尾差ï¼å±æ£å¸¸ã |
| | | -- ===================================================================== |
| | | SELECT d.credit_code AS ç»ä¸ç¤¾ä¼ä¿¡ç¨ä»£ç , |
| | | d.name_2026 AS ä¼ä¸åç§°, |
| | | d.name_2025 AS åç§°2025, |
| | | IF(d.name_2025 <> d.name_2026, 'æ¯', '') AS æ¯å¦æ¹å, |
| | | CASE |
| | | WHEN d.region_code LIKE '4201%' THEN 'æ¦æ±' WHEN d.region_code LIKE '4202%' THEN 'é»ç³' |
| | | WHEN d.region_code LIKE '4203%' THEN 'åå °' WHEN d.region_code LIKE '4205%' THEN '宿' |
| | | WHEN d.region_code LIKE '4206%' THEN 'è¥é³' WHEN d.region_code LIKE '4207%' THEN 'éå·' |
| | | WHEN d.region_code LIKE '4208%' THEN 'èé¨' WHEN d.region_code LIKE '4209%' THEN 'åæ' |
| | | WHEN d.region_code LIKE '4210%' THEN 'èå·' WHEN d.region_code LIKE '4211%' THEN 'é»å' |
| | | WHEN d.region_code LIKE '4212%' THEN 'å¸å®' WHEN d.region_code LIKE '4213%' THEN 'éå·' |
| | | WHEN d.region_code LIKE '4228%' THEN 'æ©æ½' WHEN d.region_code LIKE '429004%' THEN '仿¡' |
| | | WHEN d.region_code LIKE '429005%' THEN 'æ½æ±' WHEN d.region_code LIKE '429006%' THEN '天é¨' |
| | | WHEN d.region_code LIKE '429021%' THEN 'æåº' ELSE 'å
¶ä»' END AS å¸å·, |
| | | d.region_code AS å°åºä»£ç , |
| | | d.freight_2025 / 10000 AS è´§è¿é2025_ä¸å¨, |
| | | d.freight_2026 / 10000 AS è´§è¿é2026_ä¸å¨, |
| | | (d.freight_2026 - d.freight_2025) / 10000 AS è´§è¿éå¢å_ä¸å¨, |
| | | (d.freight_2026 / NULLIF(d.freight_2025, 0) - 1) * 100 AS è´§è¿é忝_ç¾åæ¯, |
| | | d.turnover_2025 / 10000 AS å¨è½¬é2025_ä¸å¨å
Ž, |
| | | d.turnover_2026 / 10000 AS å¨è½¬é2026_ä¸å¨å
Ž, |
| | | (d.turnover_2026 - d.turnover_2025) / 10000 AS å¨è½¬éå¢å_ä¸å¨å
Ž, |
| | | (d.turnover_2026 / NULLIF(d.turnover_2025, 0) - 1) * 100 AS å¨è½¬é忝_ç¾åæ¯ |
| | | FROM ( |
| | | SELECT e.unified_credit_code AS credit_code, |
| | | -- 2026 å¹´ç¨çååï¼æ¹åååæ°åï¼ã2025 å¹´ç¨çååï¼ç¨äºæ è®°æ¹å |
| | | MAX(CASE WHEN e.report_period >= '2026-01' THEN e.enterprise_name END) AS name_2026, |
| | | MAX(CASE WHEN e.report_period <= '2025-08' THEN e.enterprise_name END) AS name_2025, |
| | | MAX(CASE WHEN e.report_period >= '2026-01' THEN e.region_code END) AS region_code, |
| | | SUM(CASE WHEN e.report_period <= '2025-08' THEN e.freight_total ELSE 0 END) AS freight_2025, |
| | | SUM(CASE WHEN e.report_period >= '2026-01' THEN e.freight_total ELSE 0 END) AS freight_2026, |
| | | SUM(CASE WHEN e.report_period <= '2025-08' THEN e.turnover_total ELSE 0 END) AS turnover_2025, |
| | | SUM(CASE WHEN e.report_period >= '2026-01' THEN e.turnover_total ELSE 0 END) AS turnover_2026 |
| | | FROM h2032_enterprise_monthly e |
| | | JOIN (SELECT DISTINCT unified_credit_code c FROM h2032_enterprise_monthly |
| | | WHERE report_period BETWEEN '2025-01' AND '2025-08') a ON a.c = e.unified_credit_code |
| | | JOIN (SELECT DISTINCT unified_credit_code c FROM h2032_enterprise_monthly |
| | | WHERE report_period BETWEEN '2026-01' AND '2026-08') b ON b.c = e.unified_credit_code |
| | | WHERE e.report_period BETWEEN '2025-01' AND '2026-08' |
| | | GROUP BY e.unified_credit_code |
| | | ) d |
| | | ORDER BY è´§è¿é2026_ä¸å¨ DESC; |
| | | |
| | | |
| | | -- ===================================================================== |
| | | -- æ¥è¯¢ 8ï¼æ¥è¯¢ 7 çå计è¡ï¼å¯¼åºæç»åç¨æ¥å¯¹æ»æ°ï¼546 å®¶å£å¾ï¼ |
| | | -- 2025 å¹´ 1-8 æï¼è´§è¿é 30162.9872 ä¸å¨ãå¨è½¬é 4637038.5803 ä¸å¨å
Ž |
| | | -- 2026 å¹´ 1-8 æï¼è´§è¿é 27764.8812 ä¸å¨ãå¨è½¬é 4392984.8116 ä¸å¨å
Ž |
| | | -- ===================================================================== |
| | | SELECT COUNT(DISTINCT e.unified_credit_code) AS ä¼ä¸æ°, |
| | | ROUND(SUM(CASE WHEN e.report_period <= '2025-08' THEN e.freight_total ELSE 0 END) / 10000, 4) AS è´§è¿é2025_ä¸å¨, |
| | | ROUND(SUM(CASE WHEN e.report_period >= '2026-01' THEN e.freight_total ELSE 0 END) / 10000, 4) AS è´§è¿é2026_ä¸å¨, |
| | | ROUND(SUM(CASE WHEN e.report_period <= '2025-08' THEN e.turnover_total ELSE 0 END) / 10000, 4) AS å¨è½¬é2025_ä¸å¨å
Ž, |
| | | ROUND(SUM(CASE WHEN e.report_period >= '2026-01' THEN e.turnover_total ELSE 0 END) / 10000, 4) AS å¨è½¬é2026_ä¸å¨å
Ž |
| | | FROM h2032_enterprise_monthly e |
| | | JOIN (SELECT DISTINCT unified_credit_code c FROM h2032_enterprise_monthly |
| | | WHERE report_period BETWEEN '2025-01' AND '2025-08') a ON a.c = e.unified_credit_code |
| | | JOIN (SELECT DISTINCT unified_credit_code c FROM h2032_enterprise_monthly |
| | | WHERE report_period BETWEEN '2026-01' AND '2026-08') b ON b.c = e.unified_credit_code |
| | | WHERE e.report_period BETWEEN '2025-01' AND '2026-08'; |
| | | |
| | | |
| | | -- ===================================================================== |
| | | -- ä¸ãæä¹ææ¥è¯¢ 7 çç»æå¯¼åºæ¥ |
| | | -- --------------------------------------------------------------------- |
| | | -- æ¹å¼ä¸ï¼å½ä»¤è¡å¯¼åºï¼è¾åºå¶è¡¨ç¬¦åéç .tsvï¼Excel åå»å³å¯ååï¼æçäºï¼ |
| | | -- mysql --host=127.0.0.1 --port=3308 --user=root --password=123456 ^ |
| | | -- --database=traffic_audit --default-character-set=utf8mb4 --batch --raw ^ |
| | | -- --execute="è¿éæ´æ®µç²è´´æ¥è¯¢ 7 ç SQLï¼å«æå¤å±åå·ä¹åçå
¨é¨å
容ï¼" ^ |
| | | -- > D:\临æ¶\ä¼ä¸æç»_546å®¶_2025-2026å¹´1-8æ.tsv |
| | | -- 注æ 1ï¼ä¸å®è¦å¸¦ --default-character-set=utf8mb4ï¼å¦å䏿åå/ä¼ä¸åä¼åä¹±ç ã |
| | | -- 注æ 2ï¼å¯¼åºç .tsv æ¯ãUTF-8 æ BOMãï¼é¨å人ç Excel ç´æ¥åå»ä¼æ¾ç¤ºä¹±ç ï¼ |
| | | -- 请æ¹ç¨ Excel çãæ°æ® â 仿æ¬/CSVã导å
¥å¹¶é UTF-8 ç¼ç ï¼ |
| | | -- æç´æ¥ç¨ä¸é¢çæ¹å¼äºå¯¼åºæ xlsxï¼æä¸å®¹æåºé®é¢ï¼ã |
| | | |
| | | -- |
| | | -- æ¹å¼äºï¼æ¥è¯¢å·¥å
·å¯¼åºï¼æ¨èç»ä¸çå½ä»¤è¡çåºæ¯ï¼ |
| | | -- å¨ Navicat / MySQL Workbench / DBeaver éç´æ¥æ§è¡æ¥è¯¢ 7ï¼ |
| | | -- å³é®ç»æç½æ ¼ âã导åºç»æãâ é xlsx æ csv å³å¯ã |
| | | -- |
| | | -- æ¹å¼ä¸ï¼MySQL æå¡ç«¯ç´æ¥åæä»¶ï¼ä¸è¬ä¸ç¨ï¼ |
| | | -- éè¦æå¡ç«¯ secure_file_priv å
è®¸ç®æ ç®å½ï¼ä¸è·¯å¾æ¯ãæå¡å¨ä¸ãçè·¯å¾ï¼ |
| | | -- SELECT ... INTO OUTFILE 'D:/tmp/freight_detail.csv' |
| | | -- FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'; |
| | | -- å
æ¥ secure_file_privï¼SHOW VARIABLES LIKE 'secure_file_priv'; |
| New file |
| | |
| | | # ä¸å£å¾æåã忝ä¸å¯¹ã+ åå¸å®¢è¿é¡µåéä½ï¼æ ¹å ä¸é¿ææ¹æ¡ï¼2026-09-18ï¼ |
| | | |
| | | > ç»è®ºå
è¡ï¼ |
| | | > 1. **ä¸å£å¾æåçå¢ééï¼ä¸æ¯å
¬å¼éï¼æ¯ãå»å¹´åæåºæ°æ®ç¼ºä¹ç
§ç®ãã** 2025 å¹´ä¸å¤æ°æ®ç¼ºå¤±/污æï¼è¢«éé»å½æ 0 æéå¼ï¼å
¨ç 1-8 æåºæ°åªæ 18131.0ï¼åºä¸º 29796.71ï¼ï¼æä»¥ 2026 ç´¯è®¡åæ¯ç®åº **+73.89%**ï¼çå¼ **+5.81%**ï¼ï¼ãå¢éæåãæ´åä¸å¯ä¿¡ã |
| | | > 2. **æ¹æ¡ä¸ï¼æåå¸å®¢è¿ T å忝 AJ æ¹æ AKï¼é¿è¿ä¸å¯è¡**ï¼å®åªå¯¹ã8 æãè¿ä¸ä¸ªæ¥è¡¨ææç«ï¼9 ææ¥è¡¨æè¦ 1-9 æç´¯è®¡ï¼åæ¯è¿å¾åææ¹æ¯çââæ£æ¯è¦æ¶ççãæ¯ææ¹æ¨¡æ¿ãã |
| | | > 3. æ£ç¡®åæ³æ¯ä¸æ¡è
¿ä¸èµ·æ¹ï¼**æ°æ®è¡¥å
¨ï¼æ²»æ¬ï¼ï¼ åæ¯è®¡ç®å¸¦å®å¤æ§æ ¡éªï¼é²å¤åï¼ï¼ åå¸å®¢è¿é¡µç»æå½ä¸ï¼å»ç¹ä¾ï¼**ã |
| | | |
| | | è¯æ®æä»¶ï¼`_tmp\_qa_out\step3g_summary.xlsx`ã`step3g_midRank.xlsx`ã`step3g_midDetail.xlsx`ã`_now_rank.txt`ã`_ding_rank.txt`ã`_ding_mid_head.txt`ã`_mother_rank.txt`ã |
| | | ä¸å¡åºçº¿ï¼äººå·¥å®ç¨¿ï¼ï¼`D:\05_æ°æ®åç±»\æ±æ»è¡¨\8ææ±æ»å®ç¨¿\2026å¹´8æå®¢è¿éãè´§è¿éå®ç¨¿.xlsx`ã |
| | | |
| | | --- |
| | | |
| | | ## ä¸ãä¸å£å¾æååæ¯ä¸ºä»ä¹ä¸å¯¹ï¼å·²é项éªè¯ï¼ |
| | | |
| | | ### 1.1 ç°è±¡ï¼2026-08 æ¥è¡¨æï¼ |
| | | |
| | | | ä½ç½® | ç¨åºç®åº | å®ç¨¿/æ£ç¡®å¼ | åå·® | |
| | | |---|---|---|---| |
| | | | 累计å å
¨ç 忝ï¼M3ï¼ | **+73.89%** | **+5.81%** | å·® 68 个ç¾åç¹ | |
| | | | ç´¯è®¡å æ¦æ± 忝ï¼M4ï¼ | **+12.07%** | **+4.65%** | å·® 7.4 个ç¾åç¹ | |
| | | | 累计å é»ç³ | **+105.41%** | +7.85% | â | |
| | | | 累计å åå ° | **+192.30%** | +2.17% | â | |
| | | | 累计å è¥é³ | **+107.07%** | +5.63% | â | |
| | | | 累计å å¸å® | **+189.54%** | +17.00% | â | |
| | | | ç´¯è®¡å æ½æ± | **+766.85%** | â2.86% | â | |
| | | | 彿å å
¨ç 忝ï¼M24ï¼ | **+67.63%** | â0.67% | â | |
| | | |
| | | **弿¬èº«æ¯å¯¹ç**ï¼ç´¯è®¡ 31528.0607ã彿 4003.5701 ä¸å®ç¨¿å®å
¨ä¸è´ï¼ï¼**åªæåæ¯é** ââ è¿æ£æ¯ãåå对ã忝æ®ãçå
¸åç¹å¾ã |
| | | |
| | | ### 1.2 åºæ°è´¦ï¼å³å®æ§è¯æ®ï¼ |
| | | |
| | | å®ç¨¿ 2025 å¹´ 1-8 æä¸å£å¾ç´¯è®¡ = **29796.71**ï¼ä¸å
人次ï¼ï¼éé¡¹ï¼ |
| | | |
| | | | 维度 | 1æ | 2æ | 3æ | 4æ | 5æ | 6æ | 7æ | 8æ | 1-8æå计 | |
| | | |---|---|---|---|---|---|---|---|---|---| |
| | | | å
¬è·¯ç线 | 1688.1442 | 1719.8742 | 1721.8891 | 1824.67 | 1811.8188 | 1718.0442 | 1781.8881 | 1784.7773 | 14051.1159 | |
| | | | åé
å乡å
¬äº¤ | 1143.83 | 1146.53 | 1242.29 | 1288.71 | 1385.12 | 1377.95 | 1344.24 | 1350.08 | **10278.75** | |
| | | | åé
å乡巡游åºç§ | 409.54 | 448.64 | 417.98 | 429.77 | 494.11 | 438.88 | 566.86 | 603.64 | 3809.42 | |
| | | | åé
å乡ç½çº¦è½¦ | 142.54 | 152.48 | 167.08 | 194.78 | 230.58 | 206.93 | 271.02 | 292.02 | **1657.43** | |
| | | | **å计** | 3384.0542 | 3467.5242 | 3549.2391 | 3737.93 | 3921.6288 | 3741.8042 | 3964.0081 | 4030.5173 | **29796.71** | |
| | | |
| | | ç¨åºå®é
ç¨å°çåºæ° = 31528.0606 / 1.7389 = **18131.0**ã |
| | | |
| | | å·®é¢ 11665.7 = 10278.75ï¼å
¬äº¤ï¼+ 1514.89ï¼ç½çº¦è½¦ 2-8 æï¼â 127.98ï¼åºç§ 6 æå¤ç®ï¼â å®å
¨å¯¹å¾ä¸ã |
| | | |
| | | ### 1.3 ä¸å¤æ°æ®ç¼ºé·ï¼éæ¡å·²æ¥å®ï¼ |
| | | |
| | | **缺é·â `city_bus_monthly.passenger_chengxiang` å¨ 2025 å¹´å
¨é¨ä¸º 0/è´** |
| | | |
| | | ```sql |
| | | SELECT report_period, SUM(passenger_chengxiang), SUM(passenger_volume-passenger_city) |
| | | FROM city_bus_monthly WHERE report_period LIKE '2025-%' GROUP BY report_period; |
| | | -- 2025-01: -0.341 vs 1143.83 â åå¨åæ¯ 0ï¼å®é
åºä¸º 1143.83 |
| | | -- 2025-08: -0.114 vs 1350.08 |
| | | -- 2026-01: 1391.19 vs 1391.19 â 2026 æ£å¸¸ |
| | | ``` |
| | | |
| | | - åæï¼ä¸å£å¾å
¬äº¤ç»´åº¦ 2025 å
¨å¹´ä¸º 0 â 1-8 æå° 10278.75 ä¸äººæ¬¡ï¼å¯¼åºçãä¸å£å¾æç»ãå
¬äº¤ç´¯è®¡åæ¯ç´æ¥ç®æ **â28577.71%**ï¼åæ¯ â0.407ï¼ã |
| | | - å
åºå
³ç³»å·²éªè¯éæä¸å®ç¨¿ä¸è´ï¼**åé
å乡 = æ»å®¢è¿é â åå¸å
客è¿é**ï¼ä¾ï¼2025-01 15079.24â13935.41=1143.83 âï¼ã |
| | | |
| | | **缺é·â¡ `wyc_order_monthly.pin_*` å¨ 2025-02~08 为 NULL** |
| | | |
| | | ```sql |
| | | SELECT report_period, pin_k FROM wyc_order_monthly WHERE report_period LIKE '2025%'; |
| | | -- 2025-01: 2467.79 |
| | | -- 2025-02 .. 2025-08: NULL â 缺 |
| | | -- 2025-09 .. 2025-12: æå¼ |
| | | -- 2025-01 ç 2467.79 ä¸ wyc_total_monthly å®å
¨ç¸åï¼åæºï¼ |
| | | ``` |
| | | |
| | | - `WycSplitCalc.loadMonthlyInputFromDb()` åªè¯»è®¢å表ç pin åï¼`WycSplitCalc.java:258-261`ï¼ï¼pin 读æ 0 â `calc()` å¨ `WycSplitCalc.java:100-102` æå¼å¸¸ â `loadMidClassMap()` ç `catch` ç´æ¥ `continue`ï¼`ReportExportService.java:2429-2431`ï¼â 该æç½çº¦è½¦ç»´åº¦æ´æä¸¢å¤±ã |
| | | - åæï¼ç½çº¦è½¦å乡 2025 åªç®äº 1 æï¼142.54ï¼ï¼2-8 æç¼ºå¤± 1514.89 ä¸äººæ¬¡ã |
| | | - 妿³¨ï¼`wyc_total_monthly`ï¼pin ä¸è¡¨ï¼é 2025-02~08 **æ°æ®æ¯å
¨ç**ï¼åªæ¯æ²¡åæ¥å°è®¢å表ã |
| | | |
| | | **缺é·â¢ `city_taxi_monthly` 2025-06 æ¯ 2025-07 ç坿¬** |
| | | |
| | | ```sql |
| | | -- éå¸å·æ¯å¯¹ 2025-06 ä¸ 2025-07ï¼17 个å¸å·å®¢è¿é/å¨è½¬é å®å
¨éå¼ç¸å |
| | | -- å
¨ç 2025-06 ç¨åºå¼ 566.86ï¼å®ç¨¿ 438.88ï¼å¤ç® 127.98 |
| | | ``` |
| | | |
| | | - å±äºéå¤å¯¼å
¥/éæå¯¼å
¥ï¼éè¦ç¨æ£ç¡®ç 6 ææºæä»¶é导ã |
| | | |
| | | ### 1.4 å·²æé¤çè¯¯å¤ |
| | | |
| | | - æ¯ç/å®ç¨¿çä¸å£å¾å
¬å¼**没æé**ï¼æ©åãå¼éé¡µãæ¯æ§å¶å°ä¸æä¹±ç 误å¤ï¼ã |
| | | - `loadMidClassMap()` ç®å**åç»´é½å¨**ï¼ç线 / å
¬äº¤ / 巡游åºç§ / ç½çº¦è½¦ï¼`ReportExportService.java:2351-2437`ï¼ï¼ä»æ¥ãæ±æ»è¡¨ä¸æ¡ä¸»çº¿ä¿®å¤æ¹æ¡ãéãåªè£
äºç线+å
¬äº¤ä¸¤ç»´ãç说æ³å·²è¿æã |
| | | - `ä¸å£å¾æå` çåå¼å£å¾ï¼ç»´åº¦ 0 = åç»´å计ï¼**ä¸å®ç¨¿ä¸è´**ï¼æ éæ¹å£å¾ã |
| | | |
| | | --- |
| | | |
| | | ## äºãåå¸å®¢è¿é¡µåéä½ï¼ä¸æ¹æ¡ä¸ç¸å
³ï¼ |
| | | |
| | | ### 2.1 æ¯çç°ç¶ï¼`docs\çææ±æ»å¤§è¡¨\2026å¹´8æéè·¯è¿è¾éæ±æ»è¡¨.xlsx` â åå¸å®¢è¿é¡µï¼ç¬¬ 2 è¡è¡¨å¤´ï¼ |
| | | |
| | | | å | 表头 | 说æ | |
| | | |---|---|---| |
| | | | V/X/Z/AB | 2025å¹´1æ/2æ/3æ/4æ | æåæ£å¸¸ | |
| | | | **AD / AF / AH** | **45778 / 45809 / 45839** | **æ¥æåºåå·**ï¼ä¸æ¯ã2025å¹´5/6/7æã | |
| | | | **AJ** | **2025å¹´1-7æç´¯è®¡** | **夹å±è¾
å©åï¼æå¨äº 2025 æåº¦åä¸é´** | |
| | | | **AK** | **45870** | **æ¥æåºåå·**ï¼ææ¯çæ£çã2025å¹´8æã | |
| | | | AL | 8æåæ¯ | å¯¹åº AK | |
| | | |
| | | 2026 ä¾§åæ ·èï¼G/I/K/M/O/Q = 46082 / 46113 / 46143 / 46174 / 46204 / 46235ï¼æ¥æåºåå·ï¼ã |
| | | |
| | | ç´¯è®¡åæ¯å
¬å¼ï¼ |
| | | |
| | | ``` |
| | | åå¸å®¢è¿!T4 = S4/(V4+X4+Z4+AB4+AD4+AF4+AH4+AJ4)-1 â 忝 = (1-7æ) + (1-7æç´¯è®¡) = 2Ã(1-7æ) |
| | | å
¶å® 8 页!T4 = S4/SUM(V4+X4+Z4+AB4+AD4+AF4+AH4+AJ4)-1 â 忝 = 1-8æç´¯è®¡ï¼æ£ç¡® |
| | | ``` |
| | | |
| | | å³ï¼**åªæåå¸å®¢è¿é¡µ**å 为 AJ 夹å±åï¼åæ¯å°äºã2025å¹´8æãã |
| | | |
| | | ### 2.2 为ä»ä¹ãæ¹æ¡ä¸ãé¿è¿ä¸è¡ |
| | | |
| | | | # | é®é¢ | 说æ | |
| | | |---|---|---| |
| | | | 1 | **åªå¯¹ 8 ææç«** | 9 ææ¥è¡¨æè¦ 1-9 æç´¯è®¡ï¼åæ¯éåå AMï¼çæ£ 2025å¹´9æï¼ï¼10 æåå â¦â¦æ¯ä¸ªæé½è¦ææ¹æ¯çå
¬å¼ãè¿å°±æ¯ãæ¯ä¸ªæå模æ¿ãçåä½ã | |
| | | | 2 | **夹å±åä¼è®©ææãæååºå·ãçå¤çæ´ä½éä½ 1 å** | `applySummaryReferenceLayout()`ï¼`ReportExportService.java:3535`ï¼æ¯æ**ååºå·**å¥ç¨å宽/éèæ è®°çãä½ å·²ç»å¨åç
§ä»¶éå æ AJ â çæä»¶ä» AJ ä¹åææåçå宽/éèæ è®°é½éä½ã | |
| | | | 3 | **表头æ¬èº«ä¸æ¯æå** | AD/AF/AH/AK æ¯æ¥æåºåå·ï¼ä»»ä½ãæè¡¨å¤´æåå¹é
åãçé¿ææ¹æ¡å¨è¿ä¸ªé¡µä¼ç´æ¥å¤±æãæä»¥å¿
é¡»å
è§è表头ã | |
| | | | 4 | **åç
§ä»¶ä¸æ¯çç»æä¸ä¸è´** | å AJ åï¼åç
§ä»¶ 36 个 `#REF!`ï¼T4:T39ï¼ï¼å宽æ å°åºåä¹åäºã | |
| | | |
| | | --- |
| | | |
| | | ## ä¸ãé¿ææ¹æ¡ |
| | | |
| | | ### A. æ°æ®ä¾§ï¼æ²»æ¬ï¼ä¸æ¬¡åå®ï¼ |
| | | |
| | | | # | å¨ä½ | å
·ä½åæ³ | éªæ¶ | |
| | | |---|---|---|---| |
| | | | A1 | åå¡« 2025 å
¨å¹´å
¬äº¤ãåé
å乡ã | `UPDATE city_bus_monthly SET passenger_chengxiang = passenger_volume - passenger_city WHERE report_period LIKE '2025-%' AND (passenger_chengxiang IS NULL OR passenger_chengxiang <= 0)`ï¼å¨è½¬éåæ³ | 2025 åæå
¨ç = 1143.83/1146.53/1242.29/1288.71/1385.12/1377.95/1344.24/1350.08⦠| |
| | | | A2 | åå¡« 2025-02~08 ç½çº¦è½¦ pin | ä» `wyc_total_monthly` 忥 pin_k/pin_ck/pin_z/pin_cz å° `wyc_order_monthly` åæ | 2025 å
¨å¹´ pin é½å
¨ | |
| | | | A3 | é导 2025-06 åºç§ | ç¨æ£ç¡®ç 6 ææºæä»¶é导 `city_taxi_monthly` 2025-06 | å
¨ç = 438.88ï¼ç° 566.86ï¼ | |
| | | |
| | | ### B. 代ç ä¾§ï¼é²å¤åï¼æ ¸å¿æ¯ãä¸é½å
¨å°±ä¸ç®ãï¼ |
| | | |
| | | | # | æ¹å¨ç¹ | å
容 | |
| | | |---|---|---| |
| | | | B1 | `loadMidClassMap()` dim2 | åå¨çãåé
å乡ãâ¤0 æ¶ï¼ç¨ `æ»é â åå¸å
` å
åºï¼`city_bus_monthly` ä¸è¡å
ç¸åååç´¯å ï¼ | |
| | | | B2 | `WycSplitCalc.loadMonthlyInputFromDb()` | 订å表 pin å
¨ç©ºæ¶åè½ `wyc_total_monthly`ï¼æ¬ä¾ 2025-02~08 å³å¯èªå¨ä¿®å¥½ï¼ï¼ä¸¤è¾¹é½ç¼ºææå¼å¸¸ | |
| | | | B3 | `midCumClass()` / `midClassVal()` | è¿å弿¹ä¸ºãå¼ + å½ä¸æä»½æ°ãï¼**忝åªå¨ãå»å¹´åæé½å
¨ãæ¶è®¡ç®**ï¼ä¸é½å
¨ä¸å¾ç空ï¼ç°å¨ç¼ºæè¢«éé»å½ 0 â åºæ°åå° â 忝èé«ï¼ | |
| | | | B4 | 导åºåç½®ãåºæ°ä½æ£ã | 䏿¡è§åï¼â å»å¹´åæè¯¥ç»´åº¦=0ï¼â¡ææéå¸å·å¼ä¸ç¸é»æå®å
¨ç¸åï¼éå¤å¯¼å
¥ç¹å¾ï¼ï¼â¢å»å¹´åæå¸å·è¡æ° < 17ãå½ä¸åï¼åå端æ¥å¿ + 页é¢å¼¹çª + çæä»¶éä¸å¼ ãæ°æ®ç¼ºå¤±æ¸
åã页 | |
| | | | B5 | æ¥å¿ | `loadMidClassMap()` é `catch â continue` æ¹æè®°å½ãæ + å¼å¸¸åå ãæ¸
åï¼éå¯¼åºæ¥å¿è¾åºï¼ç°å¨å®å
¨éé»ï¼ | |
| | | |
| | | ### C. ç»æä¾§ï¼åå¸å®¢è¿é¡µå½ä¸ï¼æ¶é¤ç¹ä¾ï¼ |
| | | |
| | | | # | å¨ä½ | |
| | | |---|---| |
| | | | C1 | æ AJï¼2025å¹´1-7æç´¯è®¡ï¼**ç§»åº 2025 æåº¦å**ï¼å U åè¿ç±»è¾
å©åæ¾ä¸èµ·ï¼æç´æ¥å é¤ï¼ï¼ä½¿åå¸å®¢è¿é¡µ V..AJ = 2025å¹´1æâ¦8æï¼ä¸å
¶å® 8 页å®å
¨åæã**å¨ WPS/Excel éæ´åå **ï¼è®©å
¨è¡¨å¼ç¨èªå¨è°æ´ã | |
| | | | C2 | 表头æååï¼G/I/K/M/O/QãAD/AF/AH/AK ç±æ¥æåºåå·æ¹æã2026å¹´3æâ¦ãã2025å¹´5æ/6æ/7æ/8æã | |
| | | | C3 | ç´¯è®¡åæ¯åæ¯ä¸åæ»åæ¸
åï¼ç±ç¨åº**æ¯æ¬¡æè¡¨å¤´å®ä½ãå»å¹´ M æãå**åéåå
¬å¼ï¼`=S4/SUM(V4:å»å¹´Mæå4)-1`ï¼æ³¨æåªç´¯å 奿°åï¼ï¼9 æ/10 æèªå¨è·çèµ°ï¼æ¯çä¸ç¨åå¨ | |
| | | | C4 | `applySummaryReferenceLayout()` æ¹ä¸º**æè¡¨å¤´æåå¹é
å**åå¥å宽/éèï¼åç
§ä»¶å ååä¸åéä½ | |
| | | |
| | | ### D. æ¥è¡¨ä¾§ |
| | | |
| | | | # | å¨ä½ | |
| | | |---|---| |
| | | | D1 | ãå¢éæåãåªå¨åæ¯é½å
¨æ¶æåï¼å¦åè¯¥åæ æ³¨ãå»å¹´åæåºæ°ç¼ºå¤±ï¼æä¸æåãï¼é¿å
ç¨åå¢éæåºå忬¡ | |
| | | |
| | | --- |
| | | |
| | | ## åãéªæ¶åºçº¿ï¼2026-08 æ¥è¡¨æï¼ä¸å£å¾æå累计åï¼ |
| | | |
| | | | å¸å· | åºä¸ºï¼å®ç¨¿ï¼ | ç°å¨ï¼ç¨åºï¼ | |
| | | |---|---|---| |
| | | | å
¨ç | +5.81% | **+73.89%** | |
| | | | æ¦æ± | +4.65% | **+12.07%** | |
| | | | é»ç³ | +7.85% | **+105.41%** | |
| | | | åå ° | +2.17% | **+192.30%** | |
| | | | 宿 | â15.62% | +4.28% | |
| | | | è¥é³ | +5.63% | **+107.07%** | |
| | | | èå· | +36.30% | +42.74% | |
| | | | é»å | +7.64% | **+147.99%** | |
| | | | å¸å® | +17.00% | **+189.54%** | |
| | | | æ©æ½ | +13.78% | +55.88% | |
| | | | 仿¡ | +17.23% | **+241.89%** | |
| | | | æ½æ± | â2.86% | **+766.85%** | |
| | | | å¤©é¨ | +8.99% | **+282.34%** | |
| | | | æåº | â34.87% | â32.18% | |
| | | |
| | | å
¶ä½éªæ¶ç¹ï¼ |
| | | - `ä¸å£å¾æç»` å
¬äº¤è¡ç´¯è®¡åæ¯ä¸ååºç° â28577% è¿ç§æ°ï¼ |
| | | - `åå¸å®¢è¿` é¡µç´¯è®¡åæ¯ä¸è¯¥é¡µãå叿±æ»ãå£å¾ä¸è´ï¼ä¸åæ¯ â43% 对 +0.12%ï¼ï¼ |
| | | - ç¬ç«å¯¼åºçãçæ_ä¸å£å¾æåã䏿±æ»å¤§è¡¨ãä¸å£å¾æåãé¡µéæ ¼ä¸è´ã |
| | | |
| | | --- |
| | | |
| | | ## äºã建议æ§è¡é¡ºåº |
| | | |
| | | 1. **A1/A2/A3 æ°æ®åå¡«**ï¼åå°æ¶å
å¯å®æï¼åå®ä¸å£å¾æå忝ç«å³æ£ç¡®ï¼ï¼ |
| | | 2. **B2ãB1 代ç å
åº**ï¼é²æ¢åç±»ç¼ºå¤±åæ¬¡éé»çæï¼ï¼ |
| | | 3. **B3ãB4ãB5 å®å¤æ§æ ¡éª**ï¼é¿æé²å¤å + æ¥å¿å¯è§ï¼ï¼ |
| | | 4. **C1~C4 åå¸å®¢è¿é¡µå½ä¸**ï¼æ¹äºæ¯çï¼éè¦åä¸å¡ç¡®è®¤å䏿¬¡æ§åï¼æ¹å® 9 ææ¥è¡¨æä¸ç¨åææ¹ï¼ï¼ |
| | | 5. **D1 æ¥è¡¨æªè¾**ã |
| New file |
| | |
| | | <# |
| | | ä¸é®åæ¢åå端ï¼ä¸ start-dev.ps1 é
å¥ï¼ |
| | | ç¨æ³ï¼powershell -NoProfile -ExecutionPolicy Bypass -File stop-dev.ps1 |
| | | |
| | | 说æï¼ |
| | | - åªåæ¬é¡¹ç®ç¸å
³è¿ç¨ï¼cmd.exe /c mvn.cmd ... spring-boot:runãcmd.exe /c npm.cmd run serveï¼ |
| | | 以åå®ä»¬çåè¿ç¨ï¼java / node / vue-cli-serviceï¼ï¼æè¿ç¨æ taskkill /T /Fï¼ |
| | | - å
åºåæå½ä»¤è¡ç¹å¾ç²¾ç¡®å¹é
java(TrafficAuditApplication) ä¸ node(vue-cli-service) çå¤å¿è¿ç¨ï¼ |
| | | - ä¸ç¢°å
¶å® node/java è¿ç¨ï¼ä¾å¦ Codex ç node_replï¼ä¸ç¨æ·èªå·±å¼ç cmd çªå£ï¼ |
| | | - ç»æåæ£æ¥ 8090/8080 æ¯å¦å·²éæ¾ã |
| | | #> |
| | | $ErrorActionPreference = 'Continue' |
| | | |
| | | function Test-PortListening($port) { |
| | | try { return [bool](Get-NetTCPConnection -LocalPort $port -State Listen -ErrorAction Stop) } |
| | | catch { return $false } |
| | | } |
| | | |
| | | function Stop-Tree($label, $procId) { |
| | | Write-Host ("{0}ï¼åæ¢è¿ç¨æ PID={1}" -f $label, $procId) |
| | | & taskkill.exe /T /F /PID $procId 2>&1 | ForEach-Object { if ($_ -and $_ -notmatch '^SUCCESS') { " $_" } } |
| | | } |
| | | |
| | | # ---------- 1) æãå¯å¨ç¨ç cmd ç¶è¿ç¨ãæ´æ ç»æ ---------- |
| | | $roots = @( |
| | | @{ Label = 'å端'; Pattern = 'spring-boot:run' }, |
| | | @{ Label = 'å端'; Pattern = 'npm.cmd run serve' } |
| | | ) |
| | | $found = $false |
| | | $cmdProcs = Get-CimInstance Win32_Process -Filter "Name='cmd.exe'" -ErrorAction SilentlyContinue |
| | | foreach ($r in $roots) { |
| | | $hits = @($cmdProcs | Where-Object { $_.CommandLine -and $_.CommandLine -like ('*' + $r.Pattern + '*') }) |
| | | if ($hits.Count -eq 0) { Write-Host ("{0}ï¼æªåç°å¯å¨è¿ç¨ï¼å¯è½å·²åæ¢ï¼" -f $r.Label); continue } |
| | | $found = $true |
| | | foreach ($h in $hits) { Stop-Tree $r.Label $h.ProcessId } |
| | | } |
| | | |
| | | # ---------- 2) å
åºï¼å¤å¿ java / node ---------- |
| | | $orphans = @( |
| | | @{ Label = 'å端(java å
åº)'; Name = 'java.exe'; Pattern = 'TrafficAuditApplication' }, |
| | | @{ Label = 'å端(node å
åº)'; Name = 'node.exe'; Pattern = 'vue-cli-service' }, |
| | | @{ Label = 'å端(inner cmd å
åº)'; Name = 'cmd.exe'; Pattern = 'vue-cli-service serve' } |
| | | ) |
| | | foreach ($o in $orphans) { |
| | | $hits = @(Get-CimInstance Win32_Process -Filter ("Name='" + $o.Name + "'") -ErrorAction SilentlyContinue | |
| | | Where-Object { $_.CommandLine -and $_.CommandLine -like ('*' + $o.Pattern + '*') }) |
| | | foreach ($h in $hits) { $found = $true; Stop-Tree $o.Label $h.ProcessId } |
| | | } |
| | | |
| | | if (-not $found) { Write-Host '没æåç°éè¦åæ¢çåå端è¿ç¨ã' } |
| | | |
| | | # ---------- 3) æ ¡éªç«¯å£ ---------- |
| | | Start-Sleep -Seconds 4 |
| | | foreach ($port in 8090, 8080) { |
| | | if (Test-PortListening $port) { Write-Host ("ç«¯å£ {0}ï¼ä»å¨çå¬ï¼æªå®å
¨åæ¢ï¼è¯·éè·ä¸æ¬¡ï¼" -f $port) } |
| | | else { Write-Host ("ç«¯å£ {0}ï¼å·²éæ¾" -f $port) } |
| | | } |
| | |
| | | } |
| | | if (name == null || name.trim().isEmpty()) continue; |
| | | String nt = name.trim().replaceAll("[\r\n]+", ""); |
| | | if (nt.contains("å计") || nt.contains("æ»è®¡")) continue; |
| | | String ntFlat = nt.replaceAll("\\s+", ""); |
| | | if (ntFlat.contains("å计") || ntFlat.contains("æ»è®¡") || ntFlat.contains("å°è®¡")) continue; |
| | | if (nt.matches("^[ä¸äºä¸åäºå
ä¸å
«ä¹å]+ã.*")) continue; |
| | | if (nt.matches("^ï¼[ä¸äºä¸åäºå
ä¸å
«ä¹å]+ï¼.*")) continue; |
| | | if (nt.replace(" ", "").matches(".*å°\\s*计.*")) continue; |
| | | if (nt.startsWith("å¡«æ¥") || nt.startsWith("åä½è´è´£äºº") || nt.matches("^\\d+ã.*")) continue; |
| | | if (hasSeq) { |
| | | if (seq == null || seq.trim().isEmpty()) { |
| | |
| | | } |
| | | if (!hasName) continue; |
| | | Map<Integer, String> colTexts = new HashMap<>(); |
| | | for (int rr = r; rr <= Math.min(r + 3, sh.getLastRowNum()); rr++) { |
| | | int scanEnd = investHeaderScanEnd(sh, r, row); |
| | | for (int rr = r; rr <= scanEnd; rr++) { |
| | | Row rr2 = sh.getRow(rr); |
| | | if (rr2 == null) continue; |
| | | for (int c = 0; c <= rr2.getLastCellNum(); 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("形象è¿åº¦")) col.putIfAbsent("desc", 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); |
| | |
| | | int md = col.get("yearcum") + 1; |
| | | if (md <= row.getLastCellNum()) col.put("monthdone", md); |
| | | } |
| | | // desc ç¼ºå¤±æ¶æ stage+1 å
åºï¼çæ ã项ç®å»ºè®¾é¶æ®µãè¿åº¦æ
åµãæ¯ L/M åå¹¶è¡¨å¤´ï¼ |
| | | // åæ/æ©æ½/æåº/éå·çå¸å·åªå¨ L åãå»ºè®¾é¶æ®µããM ç´æ¥åè¿åº¦æåèä¸åæ é¢ |
| | | if (!col.containsKey("desc") && col.containsKey("stage") && col.get("stage") >= 0) { |
| | | int dc = col.get("stage") + 1; |
| | | 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"}) { |
| | | col.putIfAbsent(k, -1); |
| | |
| | | return col; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** è¡¨å¤´ææ¬æ«æä¸çï¼é»è®¤è¡¨å¤´è¡ +3ï¼è¥ã项ç®åç§°ãåé¦ä¸ªæ°æ®è¡æ´é ä¸ï¼åæ©å±å°æ°æ®è¡åä¸è¡ï¼ä¸é +12ï¼ã |
| | | * èæ¯ï¼å¸å®/åå °çå¸å·æãå»ºè®¾é¶æ®µ/形象è¿åº¦ãæ ç¾åå¨è¡¨å¤´ä¸ç¬¬ 4~8 è¡ï¼åºå® +3 伿¼åï¼å½¢è±¡è¿åº¦è¯»ä¸å°ï¼ã */ |
| | | private int investHeaderScanEnd(Sheet sh, int headerRow, Row headerRowObj) { |
| | | int hardEnd = Math.min(headerRow + 12, sh.getLastRowNum()); |
| | | int nameCol = -1; |
| | | if (headerRowObj != null) { |
| | | for (int c = 0; c <= headerRowObj.getLastCellNum(); c++) { |
| | | String v = cellStr(headerRowObj, c); |
| | | if (v != null && v.contains("项ç®åç§°")) { nameCol = c; break; } |
| | | } |
| | | } |
| | | int firstData = findFirstInvestDataRow(sh, headerRow, nameCol); |
| | | int scanEnd = (firstData > headerRow) |
| | | ? Math.min(hardEnd, firstData - 1) |
| | | : Math.min(headerRow + 3, sh.getLastRowNum()); |
| | | if (scanEnd < headerRow) scanEnd = headerRow; |
| | | return scanEnd; |
| | | } |
| | | |
| | | /** ã项ç®åç§°ãåé¦ä¸ªæ°æ®è¡ä¸æ ï¼è·³è¿è¡¨å¤´ç»è¡ä¸ç©ºè¡ï¼ï¼æ¾ä¸å°è¿å -1 */ |
| | | private int findFirstInvestDataRow(Sheet sh, int headerRow, int nameCol) { |
| | | if (nameCol < 0) return -1; |
| | | for (int r = headerRow + 1; r <= sh.getLastRowNum(); r++) { |
| | | Row row = sh.getRow(r); |
| | | if (row == null) continue; |
| | | String name = cellStr(row, nameCol); |
| | | if (name == null || name.trim().isEmpty()) continue; |
| | | String nt = name.trim().replaceAll("[\r\n]+", ""); |
| | | if (nt.contains("项ç®åç§°")) continue; |
| | | String flat = nt.replaceAll("\\s+", ""); |
| | | if (flat.contains("å计") || flat.contains("æ»è®¡") || flat.contains("å°è®¡")) continue; |
| | | if (nt.matches("^[ä¸äºä¸åäºå
ä¸å
«ä¹å]+ã.*")) continue; |
| | | if (nt.matches("^ï¼[ä¸äºä¸åäºå
ä¸å
«ä¹å]+ï¼.*")) continue; |
| | | if (nt.startsWith("å¡«æ¥") || nt.startsWith("åä½è´è´£äºº") || nt.matches("^\\d+ã.*")) continue; |
| | | if (investmentCity(nt) != null) continue; |
| | | return r; |
| | | } |
| | | return -1; |
| | | } |
| | | |
| | | /** ç»è®¡ sheet å
é¡¹ç®æ°æ®è¡æ°ï¼ç¨äºå¤ sheet å岿件é彿 sheetï¼ */ |
| | |
| | | String name = cellStr(row, nameCol); |
| | | if (name == null || name.trim().isEmpty()) continue; |
| | | String nt = name.trim().replaceAll("[\r\n]+", ""); |
| | | if (nt.contains("å计") || nt.contains("æ»è®¡")) continue; |
| | | String ntFlat = nt.replaceAll("\\s+", ""); |
| | | if (ntFlat.contains("å计") || ntFlat.contains("æ»è®¡") || ntFlat.contains("å°è®¡")) continue; |
| | | if (nt.matches("^[ä¸äºä¸åäºå
ä¸å
«ä¹å]+ã.*")) continue; |
| | | if (nt.replace(" ", "").matches(".*å°\\s*计.*")) continue; |
| | | if (nt.startsWith("å¡«æ¥") || nt.startsWith("åä½è´è´£äºº") || nt.matches("^\\d+ã.*")) continue; |
| | | if (!hasSeq) { |
| | | if (nt.length() > 4) count++; |
| | |
| | | import com.trafficaudit.common.util.RegionUtil; |
| | | import com.trafficaudit.dataimport.entity.CityTaxiMonthly; |
| | | import com.trafficaudit.dataimport.entity.WycOrderMonthly; |
| | | import com.trafficaudit.dataimport.entity.WycTotalMonthly; |
| | | import com.trafficaudit.dataimport.mapper.CityTaxiMonthlyMapper; |
| | | import com.trafficaudit.dataimport.mapper.WycOrderMonthlyMapper; |
| | | import com.trafficaudit.dataimport.mapper.WycTotalMonthlyMapper; |
| | | import org.apache.poi.ss.usermodel.Cell; |
| | | import org.apache.poi.ss.usermodel.CellType; |
| | | import org.apache.poi.ss.usermodel.DataFormatter; |
| | |
| | | private CityTaxiMonthlyMapper cityTaxiMapper; |
| | | @Resource |
| | | private WycOrderMonthlyMapper wycOrderMapper; |
| | | @Resource |
| | | private WycTotalMonthlyMapper wycTotalMapper; |
| | | @Value("${city-passenger.template-dir:docs/åå¸å®¢è¿}") |
| | | private String templateDir; |
| | | |
| | |
| | | if (sum <= 0) return null; |
| | | double orderSum = sum; |
| | | if (row.getOrderSum() != null && row.getOrderSum() > 0) orderSum = row.getOrderSum(); |
| | | double pinK = row.getPinK() == null ? 0.0 : row.getPinK(); |
| | | double pinCK = row.getPinCK() == null ? 0.0 : row.getPinCK(); |
| | | double pinZ = row.getPinZ() == null ? 0.0 : row.getPinZ(); |
| | | double pinCZ = row.getPinCZ() == null ? 0.0 : row.getPinCZ(); |
| | | boolean pinFix = false; |
| | | // pin å
åºï¼è®¢å表 pin å为空/为 0 æ¶åè½ wyc_total_monthlyï¼pin ä¸è¡¨ï¼ |
| | | if (pinK <= 0 || pinCK <= 0 || pinZ <= 0 || pinCZ <= 0) { |
| | | WycTotalMonthly tot = wycTotalMapper.selectOne(new LambdaQueryWrapper<WycTotalMonthly>() |
| | | .eq(WycTotalMonthly::getReportPeriod, period).last("LIMIT 1")); |
| | | if (tot != null) { |
| | | if (pinK <= 0 && tot.getPinK() != null && tot.getPinK() > 0) { pinK = tot.getPinK(); pinFix = true; } |
| | | if (pinCK <= 0 && tot.getPinCK() != null && tot.getPinCK() > 0) { pinCK = tot.getPinCK(); pinFix = true; } |
| | | if (pinZ <= 0 && tot.getPinZ() != null && tot.getPinZ() > 0) { pinZ = tot.getPinZ(); pinFix = true; } |
| | | if (pinCZ <= 0 && tot.getPinCZ() != null && tot.getPinCZ() > 0) { pinCZ = tot.getPinCZ(); pinFix = true; } |
| | | } |
| | | } |
| | | Map<String, Object> map = new LinkedHashMap<>(); |
| | | map.put("pinK", row.getPinK() == null ? 0.0 : row.getPinK()); |
| | | map.put("pinCK", row.getPinCK() == null ? 0.0 : row.getPinCK()); |
| | | map.put("pinZ", row.getPinZ() == null ? 0.0 : row.getPinZ()); |
| | | map.put("pinCZ", row.getPinCZ() == null ? 0.0 : row.getPinCZ()); |
| | | map.put("pinK", pinK); |
| | | map.put("pinCK", pinCK); |
| | | map.put("pinZ", pinZ); |
| | | map.put("pinCZ", pinCZ); |
| | | map.put("orders", orders); |
| | | map.put("orderSum", orderSum); |
| | | map.put("source", "db"); |
| | | map.put("source", pinFix ? "db+wyc_total" : "db"); |
| | | return map; |
| | | } |
| | | private File findInput() throws Exception { |
| | |
| | | return buildResponse(reportService.investCounty(period, mode), "çæ_ç»æµå¼ºå¿äº¤éç©æµåºç¡è®¾æ½æèµç»è®¡æ¥è¡¨.xls"); |
| | | } |
| | | |
| | | /** çæ_Xæå®¢è¿ç«æèµæç»è¡¨.xlsxï¼æèµæ¨¡åæç»è¡¨1ï¼å®¢è¿ç«åºï¼ */ |
| | | @GetMapping("/export/investPassengerDetail") |
| | | public ResponseEntity<byte[]> exportInvestPassengerDetail(@RequestParam("period") String period, |
| | | @RequestParam(value = "mode", defaultValue = "month") String mode) throws Exception { |
| | | logExport("çæ_Xæå®¢è¿ç«æèµæç»è¡¨.xlsx", period); |
| | | return buildResponse(reportService.exportInvestPassengerDetail(period, mode), "çæ_客è¿ç«æèµæç»è¡¨.xlsx"); |
| | | } |
| | | |
| | | /** çæ_Xæç©æµç«åºæèµæç».xlsï¼æèµæ¨¡åæç»è¡¨2ï¼ç©æµååºï¼ */ |
| | | @GetMapping("/export/investLogisticsDetail") |
| | | public ResponseEntity<byte[]> exportInvestLogisticsDetail(@RequestParam("period") String period, |
| | | @RequestParam(value = "mode", defaultValue = "month") String mode) throws Exception { |
| | | logExport("çæ_Xæç©æµç«åºæèµæç».xls", period); |
| | | return buildResponse(reportService.exportInvestLogisticsDetail(period, mode), "çæ_ç©æµç«åºæèµæç».xls"); |
| | | } |
| | | |
| | | /** çæ_轨é轮渡客è¿éåå¸å·æç».xlsxï¼åå¸å®¢è¿ï¼è½¨é/轮渡åèªå
¬äº¤æºæä»¶ï¼ */ |
| | | @GetMapping("/export/cityRailFerryDetail") |
| | | public ResponseEntity<byte[]> exportCityRailFerryDetail(@RequestParam("period") String period, |
| | |
| | | /** ä¸å£å¾æåæ¯ï¼k=-1 表示æ»è¡ï¼ç线+å
¬äº¤+åºç§å乡+ç½çº¦è½¦å乡 å项ä¹åï¼ï¼æ å»å¹´æ°æ®ç空 */ |
| | | private void fillMidYoyCell(Cell c, Map<Integer, Map<String, double[][]>> mid, int year, int month, |
| | | String area, int k, boolean volume) { |
| | | double v = 0.0, lv = 0.0; |
| | | if (k == -1) { |
| | | for (int kk = 1; kk <= 4; kk++) { |
| | | v += midClassVal(mid, year, month, area, kk, volume); |
| | | lv += midClassVal(mid, year - 1, month, area, kk, volume); |
| | | } |
| | | } else { |
| | | v = midClassVal(mid, year, month, area, k, volume); |
| | | lv = midClassVal(mid, year - 1, month, area, k, volume); |
| | | } |
| | | Double y = midMonthYoy(mid, year, month, area, k, volume); |
| | | c.setBlank(); |
| | | if (v != 0.0 && lv != 0.0) c.setCellValue(round((v - lv) / lv, 4)); |
| | | if (y != null) c.setCellValue(y); |
| | | } |
| | | |
| | | /** ä¸å£å¾ç´¯è®¡åæ¯åï¼1..months æç´¯è®¡ï¼åç»´é½å
¨ï¼ */ |
| | |
| | | if (blockOffset < 0 || blockOffset % 5 == 0) continue; |
| | | int k = blockOffset % 5; |
| | | String area = areas.get(blockOffset / 5); |
| | | double v = 0.0, lv = 0.0; |
| | | for (int m = 1; m <= months; m++) { |
| | | { |
| | | v += midClassVal(mid, year, m, area, k, volume); |
| | | lv += midClassVal(mid, year - 1, m, area, k, volume); |
| | | } |
| | | } |
| | | Double y = midCumYoy(mid, year, area, months, k, volume); |
| | | Row row = sheet.getRow(r0); |
| | | if (row == null) continue; |
| | | Cell c = row.getCell(colIdx); |
| | | if (c == null) c = row.createCell(colIdx); |
| | | c.setBlank(); |
| | | if (v != 0.0 && lv != 0.0) c.setCellValue(round((v - lv) / lv, 4)); |
| | | if (y != null) c.setCellValue(y); |
| | | } |
| | | } |
| | | |
| | |
| | | return volume ? arr[k][0] : arr[k][1]; |
| | | } |
| | | |
| | | /** B3ï¼ç»è®°ã该æè¯¥å¸å·è¯¥ç»´åº¦ææºè¡ãã夿®æ¯æºè¡¨ææ²¡æè¿ä¸è¡ï¼è䏿¯ç®åºæ¥ç弿¯å¦é 0 |
| | | * ââå 为ãå¼ä¸º 0ãå¯è½æ¯çå®ä¸å¡ï¼å¦æ¦æ±å¸å·¡æ¸¸åºç§å
¨é¨ä¸ºåå¸å
ï¼åé
å乡æä¸º 0ï¼ã */ |
| | | private void markMid(Map<Integer, Map<String, boolean[]>> pres, int key, String city, int k) { |
| | | pres.computeIfAbsent(key, kk -> new HashMap<>()) |
| | | .computeIfAbsent(city, kk -> new boolean[5])[k] = true; |
| | | } |
| | | |
| | | /** |
| | | * B3ï¼è¯¥æè¯¥ç»´åº¦æ¯å¦ãææºãï¼åæ¯å®å¤æ§æ ¡éªç¨ï¼ã |
| | | * k <= 0 è¡¨ç¤ºãæ»éè¡ãï¼è¦æ±åç»´ï¼ç线/å
¬äº¤/åºç§/ç½çº¦è½¦ï¼é½ææºæç®é½å
¨ã |
| | | */ |
| | | private boolean midMonthHas(Map<Integer, Map<String, double[][]>> mid, int year, int month, String area, int k, boolean volume) { |
| | | Map<String, boolean[]> pm = midPresence.get().get(year * 100 + month); |
| | | if (pm == null) return false; |
| | | boolean[] b = pm.get(area); |
| | | if (b == null) return false; |
| | | if (k <= 0) { |
| | | for (int kk = 1; kk <= 4; kk++) { |
| | | if (!b[kk]) return false; |
| | | } |
| | | return true; |
| | | } |
| | | return k < b.length && b[k]; |
| | | } |
| | | |
| | | /** B3ï¼å»å¹´ 1..monthCount æçå½ä¸æä»½æ°ï¼ç¨äºå¤å®åæ¯åºæ°æ¯å¦é½å
¨ï¼ */ |
| | | private int midCumHitMonths(Map<Integer, Map<String, double[][]>> mid, int year, String area, int monthCount, int k, boolean volume) { |
| | | int n = 0; |
| | | for (int m = 1; m <= monthCount; m++) { |
| | | if (midMonthHas(mid, year, m, area, k, volume)) n++; |
| | | } |
| | | return n; |
| | | } |
| | | |
| | | /** B3ï¼å½æåæ¯ââå»å¹´åæåºæ°ç¼ºå¤±åç空ï¼ç¼ºæ°æ®ä¸åå½ 0 计ç®ï¼ */ |
| | | private Double midMonthYoy(Map<Integer, Map<String, double[][]>> mid, int year, int month, String area, int k, boolean volume) { |
| | | if (!midMonthHas(mid, year - 1, month, area, k, volume)) return null; |
| | | double v = midClassVal(mid, year, month, area, k, volume); |
| | | if (v == 0.0) return null; |
| | | return yoyOf(v, midClassVal(mid, year - 1, month, area, k, volume)); |
| | | } |
| | | |
| | | /** B3ï¼ç´¯è®¡åæ¯ââå»å¹´ 1..monthCount åæé½å
¨æè®¡ç®ï¼ç¼ºä»»ä½ä¸æä¸å¾ç空 */ |
| | | private Double midCumYoy(Map<Integer, Map<String, double[][]>> mid, int year, String area, int monthCount, int k, boolean volume) { |
| | | if (midCumHitMonths(mid, year - 1, area, monthCount, k, volume) < monthCount) return null; |
| | | double v = midCumClass(mid, year, area, monthCount, k, volume); |
| | | if (v == 0.0) return null; |
| | | return yoyOf(v, midCumClass(mid, year - 1, area, monthCount, k, volume)); |
| | | } |
| | | |
| | | /** å
¬å¼åå
æ ¼æ¿æ¢ä¸ºç¼åæ°å¼ï¼é¿å
跨簿å¼ç¨æé¾ï¼éæ°å¼ç¼åç½®ç©ºï¼ */ |
| | | private void keepCached(Cell c) { |
| | | try { |
| | |
| | | * ä¸å£å¾åç±»æåº¦æ°æ®ï¼å¹´*100+æ -> (å¸å·/å
¨ç -> double[5][2]) |
| | | * 维度 0=æ»é 1=å
¬è·¯ç线(h2031+个ä½) 2=åé
å乡å
¬äº¤(cityBus) 3=巡游åºç§ 4=ç½çº¦è½¦ï¼[客è¿é(ä¸äºº), å¨è½¬é(ä¸äººå
Ž)] |
| | | */ |
| | | /** B3ï¼æè¿ä¸æ¬¡ loadMidClassMap çã维度æ¯å¦ææºè¡ãç»è®°è¡¨ï¼key -> city -> boolean[5]ï¼ï¼ç¨äºåæ¯å®å¤æ§æ ¡éª */ |
| | | private final ThreadLocal<Map<Integer, Map<String, boolean[]>>> midPresence = |
| | | ThreadLocal.withInitial(HashMap::new); |
| | | |
| | | /** B4/B5ï¼æè¿ä¸æ¬¡ loadMidClassMap çæ°æ®é®é¢æ¸
åï¼çº¿ç¨å
ï¼é导åºä½æ£è¾åº/åçæä»¶ï¼ */ |
| | | private final ThreadLocal<java.util.List<String>> midIssues = ThreadLocal.withInitial(java.util.ArrayList::new); |
| | | |
| | | /** B4/B5ï¼åæè¿ä¸æ¬¡ä¸å£å¾æ°æ®å è½½çé®é¢æ¸
åï¼åªè¯»å¯æ¬ï¼ */ |
| | | public java.util.List<String> getLastMidIssues() { return new java.util.ArrayList<>(midIssues.get()); } |
| | | |
| | | private Map<Integer, Map<String, double[][]>> loadMidClassMap() { |
| | | midIssues.get().clear(); // B5ï¼æ¬æ¬¡å è½½çé®é¢æ¸
å |
| | | Map<Integer, Map<String, boolean[]>> pres = new HashMap<>(); |
| | | midPresence.set(pres); // B3ï¼æ¬æ¬¡å è½½çç»´åº¦ææºç»è®° |
| | | Map<Integer, Map<String, double[][]>> mid = new HashMap<>(); |
| | | for (PassengerEnterpriseMonthly e : passengerMapper.selectList(null)) { |
| | | if (e.getReportPeriod() == null) continue; |
| | |
| | | + nz(e.getTurnoverClass4()) + nz(e.getTurnoverCharter())) / 10000.0; |
| | | addMidClass(mid, key, city, 1, pass, turn); |
| | | addMidClass(mid, key, "æ¹åç", 1, pass, turn); |
| | | markMid(pres, key, city, 1); |
| | | markMid(pres, key, "æ¹åç", 1); |
| | | } |
| | | for (PassengerIndividualMonthly e : passengerIndividualMapper.selectList(null)) { // 个ä½å¹¶å
¥å
¬è·¯ç线/æ»éï¼09-03 å£å¾ï¼ |
| | | if (e.getReportPeriod() == null) continue; |
| | |
| | | double turn = nz(e.getTurnover()) / 10000.0; |
| | | addMidClass(mid, key, city, 1, pass, turn); |
| | | addMidClass(mid, key, "æ¹åç", 1, pass, turn); |
| | | markMid(pres, key, city, 1); |
| | | markMid(pres, key, "æ¹åç", 1); |
| | | } |
| | | for (CityBusMonthly b : cityBusMapper.selectList(null)) { |
| | | if (b.getReportPeriod() == null || b.getCity() == null) continue; |
| | |
| | | String city = RegionUtil.normalizeCityName(b.getCity()); |
| | | if (city == null) continue; |
| | | int key = y * 100 + m; |
| | | addMidClass(mid, key, city, 2, nz(b.getPassengerChengxiang()), nz(b.getTurnoverChengxiang())); |
| | | addMidClass(mid, key, "æ¹åç", 2, nz(b.getPassengerChengxiang()), nz(b.getTurnoverChengxiang())); |
| | | // å£å¾ç»ä¸ï¼2026-09-19ï¼ç¨æ·æ ¸å¯¹ãä¸å£å¾æåãå¨è½¬é vs 人工åï¼ï¼åé
å乡ä¸å¾ç¨ãæ»é â åå¸å
ãç°ç®ã |
| | | // åé»è¾ãåå¨çåé
å乡 > 0 å°±ä¼å
ååæ®µå¼ï¼<=0 æåéå°å·®é¢æ³ãä¼å¨ä¸ªå«ä¼ä¸è¡ä¸ä¸å·®é¢æ³å·® ±0.01 |
| | | // ï¼æºæ¥è¡¨éæ»é/åå¸å
/åé
å乡åèªä¸¤ä½å°æ°èå
¥ï¼2026 å¹´ 1-8 æå
¨çå
± 72 è¡ï¼ï¼ç´¯å å |
| | | // ãä¸å£å¾æåã页æ¯ãä¸å£å¾æç»ã/人工å£å¾å¤ 0.32 ä¸äººå
¬éãæ¹ä¸ºå·®é¢æ³åä¸å°è´¦é¡µãæç»é¡µãå页åæå£å¾ä¸è´ã |
| | | double cxPass = nz(b.getPassengerVolume()) - nz(b.getPassengerCity()); |
| | | double cxTurn = nz(b.getTurnover()) - nz(b.getTurnoverCity()); |
| | | if (cxPass < 0) cxPass = 0.0; |
| | | if (cxTurn < 0) cxTurn = 0.0; |
| | | addMidClass(mid, key, city, 2, cxPass, cxTurn); |
| | | addMidClass(mid, key, "æ¹åç", 2, cxPass, cxTurn); |
| | | markMid(pres, key, city, 2); |
| | | markMid(pres, key, "æ¹åç", 2); |
| | | } |
| | | // 维度3ï¼åé
å乡巡游åºç§ = å°è´¦é¡µãåºç§!æ»é â åºç§!åå¸å
ãï¼æº city_taxi_monthlyï¼ |
| | | for (CityTaxiMonthly t : cityTaxiMapper.selectList(null)) { |
| | |
| | | double turn = nz(t.getTurnover()) - nz(t.getTurnoverCity()); |
| | | addMidClass(mid, key, city, 3, pass, turn); |
| | | addMidClass(mid, key, "æ¹åç", 3, pass, turn); |
| | | markMid(pres, key, city, 3); |
| | | markMid(pres, key, "æ¹åç", 3); |
| | | } |
| | | // 维度4ï¼åé
å乡ç½çº¦è½¦ = ç½çº¦è½¦æåç»æï¼ä¸å°è´¦ãç½çº¦è½¦ãé¡µåæºåæ³ï¼ |
| | | for (WycOrderMonthly o : wycOrderMapper.selectList(null)) { |
| | |
| | | try { |
| | | wr = wycSplitCalc.calc(per); |
| | | } catch (Exception e) { |
| | | continue; // 该æç¼ºè®¢å/pin æåºç§æºæ°æ®ï¼è·³è¿ï¼ä¸å½±åå
¶å®æï¼ |
| | | // B5ï¼ä¸åéé»è·³è¿ââè®°å½ãæ + åå ã并忥å¿ï¼é导åºä½æ£ä¸å¹¶è¾åº |
| | | String msg = per + " ç½çº¦è½¦åé
å乡维度缺失ï¼" + e.getMessage(); |
| | | midIssues.get().add(msg); |
| | | log.warn("loadMidClassMap {}", msg); |
| | | continue; |
| | | } |
| | | for (Map.Entry<String, WycSplitCalc.WycMetrics> en : wr.getByCity().entrySet()) { |
| | | WycSplitCalc.WycMetrics wm = en.getValue(); |
| | | addMidClass(mid, key, en.getKey(), 4, wm.getSuburbanPax(), wm.getSuburbanTurnover()); |
| | | addMidClass(mid, key, "æ¹åç", 4, wm.getSuburbanPax(), wm.getSuburbanTurnover()); |
| | | markMid(pres, key, en.getKey(), 4); |
| | | markMid(pres, key, "æ¹åç", 4); |
| | | } |
| | | } |
| | | return mid; |
| | |
| | | title.getCell(10).setCellValue(currentYear + "å¹´" + maxMonth + "æå
¨çåå¸å·å®æé路客è¿ç产æ
åµ"); |
| | | } |
| | | // å
¨çè¡ r3ï¼B3/F3 为 SUM å
¬å¼ä¿çï¼D3/H3 忝填å¼ï¼0-based å 3/7ï¼ |
| | | setValOrBlank(sheet, 2, 3, yoyOf(midCumClass(mid, currentYear, "æ¹åç", maxMonth, 0, true), |
| | | midCumClass(mid, currentYear - 1, "æ¹åç", maxMonth, 0, true))); |
| | | setValOrBlank(sheet, 2, 7, yoyOf(midCumClass(mid, currentYear, "æ¹åç", maxMonth, 0, false), |
| | | midCumClass(mid, currentYear - 1, "æ¹åç", maxMonth, 0, false))); |
| | | setValOrBlank(sheet, 2, 3, midCumYoy(mid, currentYear, "æ¹åç", maxMonth, 0, true)); |
| | | setValOrBlank(sheet, 2, 7, midCumYoy(mid, currentYear, "æ¹åç", maxMonth, 0, false)); |
| | | // å³åå
¨çè¡ N3/R3ï¼å½æåæ¯ï¼L3/P3 为 SUM å
¬å¼ä¿çï¼ |
| | | setValOrBlank(sheet, 2, 13, yoyOf(midClassVal(mid, currentYear, maxMonth, "æ¹åç", 0, true), |
| | | midClassVal(mid, currentYear - 1, maxMonth, "æ¹åç", 0, true))); |
| | | setValOrBlank(sheet, 2, 17, yoyOf(midClassVal(mid, currentYear, maxMonth, "æ¹åç", 0, false), |
| | | midClassVal(mid, currentYear - 1, maxMonth, "æ¹åç", 0, false))); |
| | | setValOrBlank(sheet, 2, 13, midMonthYoy(mid, currentYear, maxMonth, "æ¹åç", 0, true)); |
| | | setValOrBlank(sheet, 2, 17, midMonthYoy(mid, currentYear, maxMonth, "æ¹åç", 0, false)); |
| | | // å¸å·è¡ r4-20ï¼B/F 累计å¼ãD/H 忝ï¼C/E/G/I æåå
¬å¼ä¿ç |
| | | List<String> cities = RegionUtil.CITY_LIST; |
| | | for (int i = 0; i < cities.size(); i++) { |
| | |
| | | double lastPass = midCumClass(mid, currentYear - 1, city, maxMonth, 0, true); |
| | | double lastTurn = midCumClass(mid, currentYear - 1, city, maxMonth, 0, false); |
| | | setValOrBlank(sheet, r0, 1, pass == 0 ? null : round(pass, 4)); |
| | | setValOrBlank(sheet, r0, 3, yoyOf(pass, lastPass)); |
| | | setValOrBlank(sheet, r0, 3, midCumYoy(mid, currentYear, city, maxMonth, 0, true)); |
| | | setValOrBlank(sheet, r0, 5, turn == 0 ? null : round(turn, 4)); |
| | | setValOrBlank(sheet, r0, 7, yoyOf(turn, lastTurn)); |
| | | setValOrBlank(sheet, r0, 7, midCumYoy(mid, currentYear, city, maxMonth, 0, false)); |
| | | // å³å彿ï¼L/P å¼ãN/R 彿忝ï¼M/O/Q/S æåå
¬å¼ä¿çï¼ |
| | | double mPass = midClassVal(mid, currentYear, maxMonth, city, 0, true); |
| | | double mTurn = midClassVal(mid, currentYear, maxMonth, city, 0, false); |
| | | double mLastPass = midClassVal(mid, currentYear - 1, maxMonth, city, 0, true); |
| | | double mLastTurn = midClassVal(mid, currentYear - 1, maxMonth, city, 0, false); |
| | | setValOrBlank(sheet, r0, 11, mPass == 0 ? null : round(mPass, 4)); |
| | | setValOrBlank(sheet, r0, 13, mPass == 0 ? null : yoyOf(mPass, mLastPass)); |
| | | setValOrBlank(sheet, r0, 13, mPass == 0 ? null : midMonthYoy(mid, currentYear, maxMonth, city, 0, true)); |
| | | setValOrBlank(sheet, r0, 15, mTurn == 0 ? null : round(mTurn, 4)); |
| | | setValOrBlank(sheet, r0, 17, mTurn == 0 ? null : yoyOf(mTurn, mLastTurn)); |
| | | setValOrBlank(sheet, r0, 17, mTurn == 0 ? null : midMonthYoy(mid, currentYear, maxMonth, city, 0, false)); |
| | | } |
| | | recalc(wb); |
| | | return toBytes(wb); |
| | |
| | | double lastPass = midCumClass(mid, currentYear - 1, "æ¹åç", maxMonth, dims[i], true); |
| | | double lastTurn = midCumClass(mid, currentYear - 1, "æ¹åç", maxMonth, dims[i], false); |
| | | setValOrBlank(sheet, r0, 1, pass == 0 ? null : round(pass, 4)); |
| | | setValOrBlank(sheet, r0, 2, yoyOf(pass, lastPass)); |
| | | setValOrBlank(sheet, r0, 2, midCumYoy(mid, currentYear, "æ¹åç", maxMonth, dims[i], true)); |
| | | setValOrBlank(sheet, r0, 5, turn == 0 ? null : round(turn, 4)); |
| | | setValOrBlank(sheet, r0, 6, yoyOf(turn, lastTurn)); |
| | | setValOrBlank(sheet, r0, 6, midCumYoy(mid, currentYear, "æ¹åç", maxMonth, dims[i], false)); |
| | | } |
| | | // ä¸ååï¼å½æï¼ï¼æ é¢è¡9ãæ°æ®è¡11-15ï¼0-based 8ã10-14ï¼ |
| | | Row bottomTitle = sheet.getRow(8); |
| | |
| | | double lastPass = midClassVal(mid, currentYear - 1, maxMonth, "æ¹åç", dims[i], true); |
| | | double lastTurn = midClassVal(mid, currentYear - 1, maxMonth, "æ¹åç", dims[i], false); |
| | | setValOrBlank(sheet, r0, 1, pass == 0 ? null : round(pass, 4)); |
| | | setValOrBlank(sheet, r0, 2, pass == 0 ? null : yoyOf(pass, lastPass)); |
| | | setValOrBlank(sheet, r0, 2, pass == 0 ? null : midMonthYoy(mid, currentYear, maxMonth, "æ¹åç", dims[i], true)); |
| | | setValOrBlank(sheet, r0, 5, turn == 0 ? null : round(turn, 4)); |
| | | setValOrBlank(sheet, r0, 6, turn == 0 ? null : yoyOf(turn, lastTurn)); |
| | | setValOrBlank(sheet, r0, 6, turn == 0 ? null : midMonthYoy(mid, currentYear, maxMonth, "æ¹åç", dims[i], false)); |
| | | } |
| | | // ä¸ååå æ¯å
¬å¼ç±æ ·ä¾æåä¸ååï¼B$3/F$3ï¼ï¼æ¹å为æ¬åæ»è¡ï¼B$11/F$11ï¼ï¼è¡12-15 |
| | | for (int i = 1; i < names.length; i++) { |
| | |
| | | case "investFiveYearLogistics": return investFiveYearLogistics(period, mode); |
| | | case "investBillion": return investBillion(period, mode); |
| | | case "investCounty": return investCounty(period, mode); |
| | | case "investPassengerDetail": return exportInvestPassengerDetail(period, mode); |
| | | case "investLogisticsDetail": return exportInvestLogisticsDetail(period, mode); |
| | | case "cityBusDetail": return exportCityBusDetail(period, mode); |
| | | case "cityTaxiDetail": return exportCityTaxiDetail(period, mode); |
| | | case "cityRailFerryDetail": return exportCityRailFerryDetail(period, mode); |
| | |
| | | REPORT_FILE_NAMES.put("investFiveYearLogistics", "çæ_åäºäºè§åç©æµé¡¹ç®è¿å±æ
åµ.xls"); |
| | | REPORT_FILE_NAMES.put("investBillion", "çæ_æ¹åçï¼å®¢è´§ç«åºï¼äº¿å
æèµé¡¹ç®.xls"); |
| | | REPORT_FILE_NAMES.put("investCounty", "çæ_ç»æµå¼ºå¿äº¤éç©æµåºç¡è®¾æ½æèµç»è®¡æ¥è¡¨.xls"); |
| | | REPORT_FILE_NAMES.put("investPassengerDetail", "çæ_客è¿ç«æèµæç»è¡¨.xlsx"); |
| | | REPORT_FILE_NAMES.put("investLogisticsDetail", "çæ_ç©æµç«åºæèµæç».xls"); |
| | | REPORT_FILE_NAMES.put("cityBusDetail", "çæ_åå¸å
¬äº¤å®¢è¿éåå¸å·æç».xlsx"); |
| | | REPORT_FILE_NAMES.put("cityTaxiDetail", "çæ_巡游åºç§å®¢è¿éåå¸å·æç».xlsx"); |
| | | REPORT_FILE_NAMES.put("cityRailFerryDetail", "çæ_轨é轮渡客è¿éåå¸å·æç».xlsx"); |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | // ==================== æèµæ¨¡åï¼å®¢è¿ç«æèµæç»è¡¨ / ç©æµç«åºæèµæç»ï¼æ¨¡æ¿åºç¨¿å使¿æ¢ï¼ ==================== |
| | | |
| | | /** ç©æµç«åºæç»è¡¨æ¨¡æ¿ä¸çå¸å·å°èçå -> åºå
è§èå
¨å */ |
| | | private static final Map<String, String> LOGI_CITY_LABELS = new LinkedHashMap<>(); |
| | | static { |
| | | LOGI_CITY_LABELS.put("æ¦æ±", "æ¦æ±å¸"); |
| | | LOGI_CITY_LABELS.put("é»ç³", "é»ç³å¸"); |
| | | LOGI_CITY_LABELS.put("åå °", "åå °å¸"); |
| | | LOGI_CITY_LABELS.put("宿", "宿å¸"); |
| | | LOGI_CITY_LABELS.put("è¥é³", "è¥é³å¸"); |
| | | LOGI_CITY_LABELS.put("éå·", "éå·å¸"); |
| | | LOGI_CITY_LABELS.put("èé¨", "èé¨å¸"); |
| | | LOGI_CITY_LABELS.put("åæ", "åæå¸"); |
| | | LOGI_CITY_LABELS.put("èå·", "èå·å¸"); |
| | | LOGI_CITY_LABELS.put("é»å", "é»åå¸"); |
| | | LOGI_CITY_LABELS.put("å¸å®", "å¸å®å¸"); |
| | | LOGI_CITY_LABELS.put("éå·", "éå·å¸"); |
| | | LOGI_CITY_LABELS.put("æ©æ½", "æ©æ½å·"); |
| | | LOGI_CITY_LABELS.put("仿¡", "仿¡å¸"); |
| | | LOGI_CITY_LABELS.put("æ½æ±", "æ½æ±å¸"); |
| | | LOGI_CITY_LABELS.put("天é¨", "天é¨å¸"); |
| | | LOGI_CITY_LABELS.put("æåº", "ç¥åæ¶æåº"); |
| | | } |
| | | |
| | | /** 该æåé¡¹ç®æåº¦æ°æ®ï¼projectId -> InvestmentMonthly */ |
| | | private Map<Long, InvestmentMonthly> investMonthlyOf(String period) { |
| | | Map<Long, InvestmentMonthly> map = new HashMap<>(); |
| | | for (InvestmentMonthly m : investMonthlyMapper.selectList( |
| | | new LambdaQueryWrapper<InvestmentMonthly>().eq(InvestmentMonthly::getReportPeriod, period))) { |
| | | map.put(m.getProjectId(), m); |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | /** ååå
æ ¼æ°å¼ï¼ä¿çæ ·å¼/åå¹¶ï¼ï¼null æ¸
空 */ |
| | | private void putNum(Row row, int idx, Double v) { |
| | | if (row == null) return; |
| | | Cell c = row.getCell(idx); |
| | | if (c == null) c = row.createCell(idx); |
| | | c.setBlank(); |
| | | if (v != null) c.setCellValue(v); |
| | | } |
| | | |
| | | /** ååå
æ ¼ææ¬ï¼ä¿çæ ·å¼/åå¹¶ï¼ï¼ç©ºä¸²æ¸
空 */ |
| | | private void putText(Row row, int idx, String v) { |
| | | if (row == null) return; |
| | | Cell c = row.getCell(idx); |
| | | if (c == null) c = row.createCell(idx); |
| | | c.setBlank(); |
| | | if (v != null && !v.trim().isEmpty()) c.setCellValue(v.trim()); |
| | | } |
| | | |
| | | /** 读åå
æ ¼æ°å¼ï¼ç©º/éæ°å¼/å
¬å¼æ ç¼åä¸å¾ 0ï¼ */ |
| | | private double numOf(Cell c) { |
| | | if (c == null) return 0.0; |
| | | try { |
| | | if (c.getCellType() == CellType.NUMERIC || c.getCellType() == CellType.FORMULA) { |
| | | return c.getNumericCellValue(); |
| | | } |
| | | String s = cellText(c); |
| | | if (s == null) return 0.0; |
| | | s = s.replace(",", "").trim(); |
| | | return s.isEmpty() ? 0.0 : Double.parseDouble(s); |
| | | } catch (Exception e) { |
| | | return 0.0; |
| | | } |
| | | } |
| | | |
| | | /** æ¨¡æ¿æ é¢éçãï¼Næææ¥ï¼ããï¼Næï¼ãæ¹ä¸ºæ¥è¡¨ææä»½ */ |
| | | private void fixInvestMonthTitle(Sheet sheet, int rowIdx, int colIdx, int month) { |
| | | Row row = sheet.getRow(rowIdx); |
| | | if (row == null) return; |
| | | String t = cellText(row.getCell(colIdx)); |
| | | if (t == null) return; |
| | | String nv = t.replaceAll("ï¼\\d+æææ¥ï¼", "ï¼" + month + "æææ¥ï¼") |
| | | .replaceAll("ï¼\\d+æï¼", "ï¼" + month + "æï¼"); |
| | | if (!nv.equals(t)) putText(row, colIdx, nv); |
| | | } |
| | | |
| | | /** 模æ¿è¡ A 忝å¦ä¸ºãä¸äºä¸åããæ¸ éåç»æ é¢ */ |
| | | private boolean isInvestChannelLabel(String a) { |
| | | return a != null && a.matches("^[ä¸äºä¸åäºå
ä¸å
«ä¹å]+ã.*"); |
| | | } |
| | | |
| | | /** |
| | | * çæ_Xæå®¢è¿ç«æèµæç»è¡¨.xlsxï¼æ¨¡æ¿ï¼docs/æèµ/模æ¿/模æ¿_Xæå®¢è¿ç«æèµæç»è¡¨.xlsxï¼sheetï¼æç» + æ±æ»ï¼ã |
| | | * å£å¾ï¼æ¨¡æ¿å³ä¸æå°è´¦åºç¨¿ï¼æ¬æåªè¦çãåºå
æè¯¥ææ°æ®ãç项ç®è¡ |
| | | * ï¼Hèªå¼å§å»ºè®¾ç´¯è®¡ / Iæ¬å¹´è®¡å / Jèªå¹´å累计 / Kæ¬æå®æ / Lå»ºè®¾é¶æ®µ / M形象è¿åº¦ï¼ï¼ |
| | | * åºå
æ 该æç项ç®è¡ä¿çæ¯çåå¼ï¼çå人工ã䏿ç»è½¬ + æ¬ææ´æ°ãï¼ï¼ |
| | | * åå¸/æ¸ é/åè®¡è¡æ²¿ç¨æ¨¡æ¿ SUM å
¬å¼ï¼é表å
æ°å¼èªå¨éç®ã |
| | | */ |
| | | public byte[] exportInvestPassengerDetail(String period, String mode) throws Exception { |
| | | int year = Integer.parseInt(period.split("-")[0]); |
| | | int month = monthOf(period, mode); |
| | | List<InvestmentProject> projects = investProjectMapper.selectList( |
| | | new LambdaQueryWrapper<InvestmentProject>().eq(InvestmentProject::getCategory, "客è¿ç«åº")); |
| | | Map<Long, InvestmentMonthly> mByProject = investMonthlyOf(period); |
| | | File tpl = resolveAnyTemplate(investTemplateDir, "模æ¿_Xæå®¢è¿ç«æèµæç»è¡¨.xlsx"); |
| | | try (InputStream in = new FileInputStream(tpl); |
| | | XSSFWorkbook wb = new XSSFWorkbook(in)) { |
| | | Sheet sheet = wb.getSheet("æç»"); |
| | | if (sheet == null) throw new RuntimeException("模æ¿ã模æ¿_Xæå®¢è¿ç«æèµæç»è¡¨.xlsxã缺å°ãæç»ãå·¥ä½è¡¨"); |
| | | fixInvestMonthTitle(sheet, 0, 1, month); |
| | | String curCity = null; |
| | | Set<Long> used = new HashSet<>(); |
| | | int filled = 0, kept = 0, dup = 0; |
| | | for (int r = 8; r <= sheet.getLastRowNum(); r++) { |
| | | Row row = sheet.getRow(r); |
| | | if (row == null) continue; |
| | | String a = nvl(cellText(row.getCell(0))); |
| | | String b = nvl(cellText(row.getCell(1))); |
| | | if (isCityLabel(a)) { curCity = templateCityFull(a); continue; } |
| | | if (isInvestChannelLabel(a)) continue; |
| | | if (a.contains("å计") || a.contains("æ»è®¡")) continue; |
| | | if (!a.matches("\\d+(\\.\\d+)?")) continue; |
| | | if (b.isEmpty() || curCity == null) continue; |
| | | InvestmentProject p = matchInvest(projects, b, curCity, "客è¿ç«åº", used); |
| | | InvestmentMonthly m = p == null ? null : mByProject.get(p.getId()); |
| | | if (p == null || m == null) { |
| | | kept++; |
| | | // æåºå
项ç®ä½å½ææ æ°æ® â 记为å¾
æ ¸å¯¹ï¼æ å¹é
é¡¹ç® â ç»è½¬ä¸æ |
| | | if (p != null) dup++; |
| | | continue; |
| | | } |
| | | used.add(p.getId()); |
| | | // å£å¾ï¼ç¨æ· 2026-09-18 确认ï¼ï¼åªè¦ç人工ä¼éææ¥æ´æ°çååââ |
| | | // H èªå¼å§å»ºè®¾ç´¯è®¡ / J èªå¹´å累计 / K æ¬æå®æ / M 形象è¿åº¦ï¼ |
| | | // I æ¬å¹´è®¡åæèµãL å»ºè®¾é¶æ®µãG è®¡åæ»æèµä¸ºçå®/æ¯çå£å¾ï¼ä¸å¾ä¸å¨ï¼åºå
为空åä¿çæ¯çåå¼ |
| | | if (m.getStartCum() != null) putNum(row, 7, m.getStartCum()); |
| | | if (m.getYearCum() != null) putNum(row, 9, m.getYearCum()); |
| | | if (m.getMonthDone() != null) putNum(row, 10, m.getMonthDone()); |
| | | if (m.getProgressDesc() != null && !m.getProgressDesc().trim().isEmpty()) putText(row, 12, m.getProgressDesc()); |
| | | filled++; |
| | | } |
| | | Sheet sumSheet = wb.getSheet("æ±æ»"); |
| | | if (sumSheet != null) { |
| | | Row r2 = sumSheet.getRow(1); |
| | | if (r2 != null) { |
| | | Cell c = r2.getCell(0); |
| | | if (c == null) c = r2.createCell(0); |
| | | c.setBlank(); |
| | | c.setCellValue(java.time.LocalDate.of(year, month, 1).atStartOfDay()); |
| | | } |
| | | } |
| | | try { |
| | | wb.getCreationHelper().createFormulaEvaluator().evaluateAll(); |
| | | } catch (Exception e) { |
| | | log.warn("客è¿ç«æèµæç»è¡¨å
¬å¼æ±å¼å¤±è´¥: {}", e.getMessage()); |
| | | } |
| | | log.info("客è¿ç«æèµæç»è¡¨ {}ï¼åå
¥ {} è¡ï¼ç»è½¬æ¯çåå¼ {} è¡ï¼å
¶ä¸åºå
æé¡¹ç®ä½å½ææ æ°æ® {} è¡ï¼", |
| | | period, filled, kept, dup); |
| | | return toBytes(wb); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * çæ_Xæç©æµç«åºæèµæç».xlsï¼æ¨¡æ¿ï¼docs/æèµ/模æ¿/模æ¿_Xæç©æµç«åºæèµæç».xlsï¼ã |
| | | * è¦çã åé¡¹ç®æèµå®ææ
åµã项ç®è¡ï¼å£å¾å客è¿ç«æç»è¡¨ï¼ï¼å¹¶æè¡¨å
æ°å¼éç® |
| | | * æ¸ éè¡ / å¸å·è¡ / å计è¡ï¼åæ¥å·æ°ãåå¸å·è§åå
å¤é¡¹ç®å®ææ
åµããå¸å·æ±æ»ãä¸¤å¼ æ±æ»é¡µã |
| | | */ |
| | | public byte[] exportInvestLogisticsDetail(String period, String mode) throws Exception { |
| | | int year = Integer.parseInt(period.split("-")[0]); |
| | | int month = monthOf(period, mode); |
| | | List<InvestmentProject> projects = investProjectMapper.selectList( |
| | | new LambdaQueryWrapper<InvestmentProject>().eq(InvestmentProject::getCategory, "ç©æµååº")); |
| | | Map<Long, InvestmentMonthly> mByProject = investMonthlyOf(period); |
| | | HSSFWorkbook wb = loadInvestTemplate("模æ¿_Xæç©æµç«åºæèµæç».xls"); |
| | | HSSFSheet sheet = wb.getSheet(" åé¡¹ç®æèµå®ææ
åµ"); |
| | | if (sheet == null) throw new RuntimeException("模æ¿ã模æ¿_Xæç©æµç«åºæèµæç».xlsã缺å°ã åé¡¹ç®æèµå®ææ
åµãå·¥ä½è¡¨"); |
| | | fixInvestMonthTitle(sheet, 0, 0, month); |
| | | Row head = sheet.getRow(3); |
| | | if (head != null) { |
| | | String t = cellText(head.getCell(0)); |
| | | if (t != null) { |
| | | String nv = t.replaceAll("\\d{4}å¹´\\d+æ", year + "å¹´" + month + "æ"); |
| | | if (!nv.equals(t)) putText(head, 0, nv); |
| | | } |
| | | } |
| | | // 1) ç»ææ«æï¼å¸å·å°èè¡ |
| | | List<Integer> cityRows = new ArrayList<>(); |
| | | for (int r = 7; r <= sheet.getLastRowNum(); r++) { |
| | | HSSFRow row = sheet.getRow(r); |
| | | if (row == null) continue; |
| | | String a = nvl(cellText(row.getCell(0))); |
| | | String b = nvl(cellText(row.getCell(1))); |
| | | if (LOGI_CITY_LABELS.containsKey(a) && b.isEmpty()) cityRows.add(r); |
| | | } |
| | | Map<String, double[]> citySums = new LinkedHashMap<>(); // å
¨å -> G,H,I,J,K |
| | | Map<String, double[]> cityStats = new LinkedHashMap<>(); // å
¨å -> {æ»æ°, 累计, è§åå
æ°, è§åå
累计, è§å夿°, è§åå¤ç´¯è®¡} |
| | | Set<Long> used = new HashSet<>(); |
| | | int filled = 0, kept = 0; |
| | | for (int i = 0; i < cityRows.size(); i++) { |
| | | int cr = cityRows.get(i); |
| | | String cityLabel = nvl(cellText(sheet.getRow(cr).getCell(0))); |
| | | String city = LOGI_CITY_LABELS.getOrDefault(cityLabel, cityLabel); |
| | | int start = cr + 1; |
| | | int end = (i + 1 < cityRows.size() ? cityRows.get(i + 1) : sheet.getLastRowNum() + 1) - 1; |
| | | List<Integer> chRows = new ArrayList<>(); |
| | | for (int r = start; r <= end; r++) { |
| | | HSSFRow row = sheet.getRow(r); |
| | | if (row == null) continue; |
| | | if (isInvestChannelLabel(nvl(cellText(row.getCell(0))))) chRows.add(r); |
| | | } |
| | | // (1) å
æé¡¹ç®å+å¸å· è¦çæåºå
å½ææ°æ®ç项ç®è¡ |
| | | for (int r = start; r <= end; r++) { |
| | | HSSFRow row = sheet.getRow(r); |
| | | if (row == null) continue; |
| | | String a = nvl(cellText(row.getCell(0))); |
| | | String b = nvl(cellText(row.getCell(1))); |
| | | if (isInvestChannelLabel(a)) continue; |
| | | if (!a.matches("\\d+(\\.\\d+)?")) continue; |
| | | if (b.isEmpty()) continue; |
| | | InvestmentProject p = matchInvest(projects, b, city, "ç©æµååº", used); |
| | | InvestmentMonthly m = p == null ? null : mByProject.get(p.getId()); |
| | | if (p == null || m == null) { kept++; continue; } |
| | | used.add(p.getId()); |
| | | // å£å¾å客è¿ç«æç»è¡¨ï¼åªè¦ç H èªå¼å§å»ºè®¾ç´¯è®¡ / J èªå¹´å累计 / K æ¬æå®æ / M 形象è¿åº¦ |
| | | if (m.getStartCum() != null) putNum(row, 7, m.getStartCum()); |
| | | if (m.getYearCum() != null) putNum(row, 9, m.getYearCum()); |
| | | if (m.getMonthDone() != null) putNum(row, 10, m.getMonthDone()); |
| | | if (m.getProgressDesc() != null && !m.getProgressDesc().trim().isEmpty()) putText(row, 12, m.getProgressDesc()); |
| | | filled++; |
| | | } |
| | | // (2) åææ¸ éåæ±æ»ï¼å¹¶å忏 éè¡ / å¸å·è¡ |
| | | double[] citySum = new double[5]; |
| | | double[] stat = new double[6]; |
| | | for (int j = 0; j < chRows.size(); j++) { |
| | | int r0 = chRows.get(j); |
| | | int r1 = (j + 1 < chRows.size() ? chRows.get(j + 1) : end + 1) - 1; |
| | | boolean planned = !nvl(cellText(sheet.getRow(r0).getCell(0))).startsWith("åã"); |
| | | double[] s = new double[5]; |
| | | for (int r = r0 + 1; r <= r1; r++) { |
| | | HSSFRow row = sheet.getRow(r); |
| | | if (row == null) continue; |
| | | String a = nvl(cellText(row.getCell(0))); |
| | | String b = nvl(cellText(row.getCell(1))); |
| | | if (isInvestChannelLabel(a) || !a.matches("\\d+(\\.\\d+)?")) continue; |
| | | if (b.isEmpty()) continue; |
| | | for (int k = 0; k < 5; k++) s[k] += numOf(row.getCell(6 + k)); |
| | | stat[0] += 1; |
| | | stat[1] += numOf(row.getCell(9)); |
| | | if (planned) { stat[2] += 1; stat[3] += numOf(row.getCell(9)); } |
| | | else { stat[4] += 1; stat[5] += numOf(row.getCell(9)); } |
| | | } |
| | | HSSFRow crow = sheet.getRow(r0); |
| | | for (int k = 0; k < 5; k++) putNum(crow, 6 + k, s[k] == 0 ? null : s[k]); |
| | | for (int k = 0; k < 5; k++) citySum[k] += s[k]; |
| | | } |
| | | // æ¸ éåä¹å¤ç游离项ç®è¡ï¼æ¨¡æ¿æªåç»æ¶ï¼ä¹è®¡å
¥å¸å·å计 |
| | | for (int r = start; r <= end; r++) { |
| | | HSSFRow row = sheet.getRow(r); |
| | | if (row == null) continue; |
| | | String a = nvl(cellText(row.getCell(0))); |
| | | String b = nvl(cellText(row.getCell(1))); |
| | | if (isInvestChannelLabel(a) || !a.matches("\\d+(\\.\\d+)?")) continue; |
| | | if (b.isEmpty()) continue; |
| | | boolean inChannel = false; |
| | | for (int j = 0; j < chRows.size(); j++) { |
| | | int r0 = chRows.get(j); |
| | | int r1 = (j + 1 < chRows.size() ? chRows.get(j + 1) : end + 1) - 1; |
| | | if (r > r0 && r <= r1) { inChannel = true; break; } |
| | | } |
| | | if (inChannel) continue; |
| | | for (int k = 0; k < 5; k++) citySum[k] += numOf(row.getCell(6 + k)); |
| | | stat[0] += 1; |
| | | stat[1] += numOf(row.getCell(9)); |
| | | } |
| | | HSSFRow cityRow = sheet.getRow(cr); |
| | | for (int k = 0; k < 5; k++) putNum(cityRow, 6 + k, citySum[k] == 0 ? null : citySum[k]); |
| | | citySums.put(city, citySum); |
| | | cityStats.put(city, stat); |
| | | } |
| | | // 2) å计è¡ï¼ç¬¬ 7 è¡ï¼ |
| | | double[] total = new double[5]; |
| | | for (double[] s : citySums.values()) { |
| | | for (int k = 0; k < 5; k++) total[k] += s[k]; |
| | | } |
| | | for (int k = 0; k < 5; k++) putNum(sheet.getRow(6), 6 + k, total[k] == 0 ? null : total[k]); |
| | | |
| | | // 3) åå¸å·è§åå
å¤é¡¹ç®å®ææ
åµ |
| | | HSSFSheet citySheet = wb.getSheet("åå¸å·è§åå
å¤é¡¹ç®å®ææ
åµ"); |
| | | if (citySheet != null) { |
| | | Row t1 = citySheet.getRow(0); |
| | | if (t1 != null) { |
| | | String t = cellText(t1.getCell(0)); |
| | | if (t != null) { |
| | | String nv = t.replaceAll("\\d{4}å¹´", year + "å¹´"); |
| | | if (!nv.equals(t)) putText(t1, 0, nv); |
| | | } |
| | | } |
| | | double[] st = new double[6]; |
| | | for (int r = 3; r <= citySheet.getLastRowNum(); r++) { |
| | | HSSFRow row = citySheet.getRow(r); |
| | | if (row == null) continue; |
| | | String a = nvl(cellText(row.getCell(0))); |
| | | String b = nvl(cellText(row.getCell(1))); |
| | | if (a.contains("å计") || b.contains("å计")) { |
| | | for (int k = 0; k < 6; k++) putNum(row, 2 + k, st[k] == 0 ? null : st[k]); |
| | | continue; |
| | | } |
| | | double[] s = cityStats.get(LOGI_CITY_LABELS.getOrDefault(b, b)); |
| | | if (s == null) continue; |
| | | for (int k = 0; k < 6; k++) { |
| | | putNum(row, 2 + k, s[k] == 0 ? null : s[k]); |
| | | st[k] += s[k]; |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 4) å¸å·æ±æ»ï¼B 年度计åæèµä¸ºå®æ¹å£å¾ï¼ä¿ææ¨¡æ¿åå¼ï¼C/D/E æå项ç®é¡µéç®ï¼ |
| | | HSSFSheet sumSheet = wb.getSheet("å¸å·æ±æ»"); |
| | | if (sumSheet != null) { |
| | | HSSFRow r2 = sumSheet.getRow(1); |
| | | if (r2 != null) { |
| | | putNum(r2, 0, (double) org.apache.poi.ss.usermodel.DateUtil.getExcelDate( |
| | | java.time.LocalDate.of(year, month, 1).atStartOfDay())); |
| | | } |
| | | double cT = 0.0, dT = 0.0; |
| | | for (int r = 7; r <= 23; r++) { |
| | | HSSFRow row = sumSheet.getRow(r); |
| | | if (row == null) continue; |
| | | String a = nvl(cellText(row.getCell(0))); |
| | | double[] s = citySums.get(LOGI_CITY_LABELS.getOrDefault(a, a)); |
| | | if (s == null) continue; |
| | | putNum(row, 2, s[3] == 0 ? null : s[3]); |
| | | putNum(row, 3, s[4] == 0 ? null : s[4]); |
| | | double b = numOf(row.getCell(1)); |
| | | putNum(row, 4, b > 0 ? round(s[3] / b * 100, 4) : null); |
| | | cT += s[3]; |
| | | dT += s[4]; |
| | | } |
| | | HSSFRow tot = sumSheet.getRow(6); |
| | | if (tot != null) { |
| | | putNum(tot, 2, cT == 0 ? null : cT); |
| | | putNum(tot, 3, dT == 0 ? null : dT); |
| | | double b = numOf(tot.getCell(1)); |
| | | putNum(tot, 4, b > 0 ? round(cT / b * 100, 4) : null); |
| | | } |
| | | } |
| | | try { |
| | | wb.getCreationHelper().createFormulaEvaluator().evaluateAll(); |
| | | } catch (Exception e) { |
| | | log.warn("ç©æµç«åºæèµæç»å
¬å¼æ±å¼å¤±è´¥: {}", e.getMessage()); |
| | | } |
| | | log.info("ç©æµç«åºæèµæç» {}ï¼åå
¥ {} è¡ï¼ç»è½¬æ¯çåå¼ {} è¡", period, filled, kept); |
| | | return toBytesHssf(wb); |
| | | } |
| | | |
| | | private static class InvestAgg { |
| | | double total, startCum, yearPlan, yearCum; |
| | | |
| | |
| | | <div class="module-sel-row"> |
| | | <el-select v-model="moduleSel[g.key]" placeholder="éæ©æ°æ®ç±»å" style="width:260px" |
| | | @change="onModuleChange(g.key)" clearable> |
| | | <el-option v-for="t in g.types" :key="t.value" :label="t.label" :value="t.value"></el-option> |
| | | <el-option v-for="t in typeList(g)" :key="t.value" :label="t.label" :value="t.value"></el-option> |
| | | </el-select> |
| | | <div v-if="importType" class="tpl-box"> |
| | | <span class="tpl-name">模æ¿ï¼{{ templateName }}</span> |
| | |
| | | <div v-else class="overview-grid"> |
| | | <div class="ov-row" v-for="g in visibleGroups" :key="g.key"> |
| | | <div class="ov-group">{{ g.name }}</div> |
| | | <div class="ov-item" v-for="t in g.types" :key="t.value" :class="overviewState(t.value).cls"> |
| | | <div class="ov-item" v-for="t in typeList(g)" :key="t.value" :class="overviewState(t.value).cls"> |
| | | <div class="ov-name">{{ t.label }}</div> |
| | | <div class="ov-status">{{ overviewState(t.value).text }}</div> |
| | | </div> |
| | |
| | | <div v-if="clearScope === 'types'" class="clear-types"> |
| | | <el-select v-model="clearTypes" multiple filterable collapse-tags placeholder="éæ©è¦æ¸
ç©ºçæ°æ®ç±»å" style="width:100%"> |
| | | <el-option-group v-for="g in clearableGroups()" :key="g.key" :label="g.name"> |
| | | <el-option v-for="t in g.types" :key="t.value" :value="t.value" |
| | | <el-option v-for="t in typeList(g)" :key="t.value" :value="t.value" |
| | | :label="t.label + 'ï¼' + overviewState(t.value).text + 'ï¼'"></el-option> |
| | | </el-option-group> |
| | | </el-select> |
| | |
| | | { value: 'cityTaxi', label: '巡游åºç§æ±½è½¦è¿è¥æå¡æ
嵿æ¥' }, |
| | | { value: 'cityTaxiAuth', label: 'åºç§è½¦è¿æ¿è½¦è¾' }, |
| | | { value: 'wycTotal', label: 'ç½çº¦è½¦æ»æ°' }, |
| | | { value: 'wycOrder', label: 'ç½çº¦è½¦è®¢ååå
¨çæ»é' }, |
| | | { value: 'wycOrder', label: 'ç½çº¦è½¦è®¢ååå
¨çæ»é', hidden: true }, |
| | | { value: 'wycOrderReport', label: 'ç½çº¦è½¦è®¢åæ¥å' } |
| | | ] |
| | | }, |
| | |
| | | clearableGroups() { |
| | | return this.groups.filter(g => !g.hidden) |
| | | }, |
| | | // åä¸ªæ°æ®ç±»åä¹å¯éèï¼hidden: trueï¼ï¼å
¥å£ãæ¦è§ãæ¸
ç©ºä¸æç»ä¸è¿æ»¤ |
| | | typeList(g) { |
| | | return (g && g.types ? g.types : []).filter(t => !t.hidden) |
| | | }, |
| | | confirmClear() { |
| | | if (!this.period) { this.$message.warning('请å
éæ©æ¥è¡¨æ'); return } |
| | | if (this.clearing) return |
| | |
| | | { key: 'investPlan', label: 'å
¨çé¢å®æè®¡åè¿åº¦æ±æ»', fileName: 'çæ_å
¨çé¢å®æè®¡åè¿åº¦æ
嵿±æ».xls', status: null, statusNote: '' }, |
| | | { key: 'investFiveYearLogistics', label: 'åäºäºè§åç©æµé¡¹ç®è¿å±', fileName: 'çæ_åäºäºè§åç©æµé¡¹ç®è¿å±æ
åµ.xls', status: null, statusNote: '' }, |
| | | { key: 'investBillion', label: '亿å
æèµé¡¹ç®', fileName: 'çæ_æ¹åçï¼å®¢è´§ç«åºï¼äº¿å
æèµé¡¹ç®.xls', status: null, statusNote: '' }, |
| | | { key: 'investCounty', label: 'ç»æµå¼ºå¿é¡¹ç®æèµç»è®¡', fileName: 'çæ_ç»æµå¼ºå¿äº¤éç©æµåºç¡è®¾æ½æèµç»è®¡æ¥è¡¨.xls', status: null, statusNote: '' } |
| | | { key: 'investCounty', label: 'ç»æµå¼ºå¿é¡¹ç®æèµç»è®¡', fileName: 'çæ_ç»æµå¼ºå¿äº¤éç©æµåºç¡è®¾æ½æèµç»è®¡æ¥è¡¨.xls', status: null, statusNote: '' }, |
| | | { key: 'investPassengerDetail', label: '客è¿ç«æèµæç»è¡¨', fileName: 'çæ_Xæå®¢è¿ç«æèµæç»è¡¨.xlsx', status: null, statusNote: '' }, |
| | | { key: 'investLogisticsDetail', label: 'ç©æµç«åºæèµæç»', fileName: 'çæ_Xæç©æµç«åºæèµæç».xls', status: null, statusNote: '' } |
| | | ], checked: [] |
| | | }, |
| | | { |
| | |
| | | const doExport = () => { |
| | | if (items.length === 1) { |
| | | api.get('/report/export/' + items[0].key, { params, responseType: 'blob', timeout: 120000 }) |
| | | .then(res => { this.downloadBlob(res, items[0].fileName); this.$message.success('æ¥è¡¨å¯¼åºæå'); this.loading = '' }) |
| | | .then(res => { this.downloadBlob(res, this.fileNameOf(items[0])); this.$message.success('æ¥è¡¨å¯¼åºæå'); this.loading = '' }) |
| | | .catch(err => this.failWith(err)) |
| | | return |
| | | } |
| | |
| | | } |
| | | return text.length > 200 ? text.slice(0, 200) + 'â¦' : text |
| | | }, |
| | | // æä»¶åå ä½ç¬¦ Xæ -> å½åæ¥è¡¨ææä»½ï¼å¦ãçæ_Xæå®¢è¿ç«æèµæç»è¡¨.xlsxã->ãçæ_8æå®¢è¿ç«æèµæç»è¡¨.xlsxãï¼ |
| | | fileNameOf(item) { |
| | | const name = (item && item.fileName) || '' |
| | | const mm = parseInt((this.period || '').split('-')[1], 10) |
| | | if (!mm) return name |
| | | return name.replace(/Xæ/g, mm + 'æ') |
| | | }, |
| | | downloadBlob(res, fileName) { |
| | | const isZip = /\.zip$/.test(fileName) |
| | | const isXls = /\.xls$/.test(fileName) |