| .gitignore | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| HANDOFF.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/交接文档_2026-09-21.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/功能测试报告/功能测试报告_导出缓存改用数据指纹_2026-09-22.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/功能测试报告/数据比对报告_投资明细表软件生成与人工版_2026-09-22.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/工作日结/工作日结_2026-09-22.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportTaskService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| traffic-audit-web/src/views/ReportExport.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
.gitignore
@@ -100,5 +100,6 @@ # æ±æ»å¤§è¡¨å¯¼åºç»æè½çç¼åï¼å¤ç¨ä¸ä¸æ¬¡çæç»æç¨ï¼ä¸å ¥åºï¼ docs/çææ±æ»å¤§è¡¨/_cache/ _tmp_codexhome/ # Codex åºç¨å¨æ¬ä»åºæ ¹ç®å½äº§çç产ç©ç®å½ï¼ä¿ç卿¬å°ï¼ä¸å ¥åºï¼ outputs/ HANDOFF.md
@@ -12,6 +12,26 @@ - **æ±æ»å¤§è¡¨å·®å¼å¤æ ¸ï¼2026-09-22ï¼**ï¼è½¯ä»¶è¾åºä¸æå·¥å®ç¨¿ç» Excel å ¨ééç®åéæ ¼æ¯å¯¹ï¼930 æ¡å·®å¼ä¸å®è´¨æ°å¼å·®å¼ 314 æ¡ï¼å ¶ä¸ 304 æ¡ä¸º 2025 累计åå°å 7ã8 æï¼ä¸å¡å·²ç¡®è®¤å¯æ¸ 空ï¼ï¼10 æ¡ ` è´§è¿` åå²åæ¯ä¸å¡å·²ç¡®è®¤è½¯ä»¶æ£ç¡®ãæ¥åè§ `docs/é®é¢æ±æ»/æ±æ»å¤§è¡¨_软件è¾åºä¸æå·¥å®ç¨¿å·®å¼æ¸ å_2026-08_20260922.md`ï¼æç»è§ååç®å½ CSVã - **æªå®æéç¹ä¸å**ï¼P0-2ãäº¿å æèµé¡¹ç®ãæ Q7 追åãP0-3 导åºååºæ°ä½æ£ãP0-4 2026-09 æ¯çï¼å ¶ä½è§ `docs/äº¤æ¥ææ¡£_2026-09-21.md` 第 4 ç« ã ### è¡¥å ï¼2026-09-22 ä¸åï¼æèµæç»è¡¨æ¯å¯¹ï¼ - **已宿**ï¼è½¯ä»¶ã客è¿ç«æèµæç»è¡¨ããç©æµç«åºæèµæç»ãä¸äººå·¥çéæ ¼æ¯å¯¹ï¼156 æ ¼å·®å¼ï¼ï¼æ¥å `docs/åè½æµè¯æ¥å/æ°æ®æ¯å¯¹æ¥å_æèµæç»è¡¨è½¯ä»¶çæä¸äººå·¥ç_2026-09-22.md`ã - **æåº 3 ç±»ãä¼éé»åºæ°ãçé®é¢**ï¼é½æååæ°èéç®æ¯ï¼ï¼ 1. 导åºç¨åºç¨¿æ¨¡æ¿ + **æé¡¹ç®åå¹é **åºå 彿æ°ï¼å¹é ä¸ä¸/åºå æ 彿æ°å°±æ²¿ç¨ä¸æå¼ ââ æ¦æ±ç©æµï¼åºå 0 æ¡æåº¦è®°å½ï¼æ´æ®µä¿ç 7 æå¼ï¼èå·ãä¸å½ä¾éå ¬å®åè´¸ç©æµåãå åºå åå¤ä¸ä¸ªç¹æªè¦çã 2. åºå **åååæ¡£**ï¼åå °ãå¿«éç©æµäº§ä¸åäºæã`id=154`(竣工2026)/`id=181`(竣工2029) å¹¶åï¼å¯¼åºåå°æ§æ¡£ã 3. **å¯¼å ¥ä¸¢æ°**ï¼å¤©é¨ã天é¨å¸ç©æµä¸å¿å»ºè®¾é¡¹ç®ãåºå 2026-08 累计/èªå¹´å/æ¬æå ¨ä¸º 0ï¼æºæä»¶æ¯ 16677.7/16677.7/500ï¼**P1-5 åè®°å½ãæºæä»¶ H/J/K å为空ãä¸ç°æä»¶ä¸ç¬¦ï¼éæ´æ£**ï¼ã - **å¦**ï¼å¯¼åºä¸è¦ç Lï¼å»ºè®¾é¶æ®µï¼åã忏 éå¸å·çåç»å°è®¡è¡å¡«æ³ã0/空ç½åæ³å·®å¼ï¼å已卿¥å第äºèç»åºå¤ç½®å»ºè®®ã ### è¡¥å ï¼2026-09-22 ä¸åï¼å¦ä¸ä¼è¯æ¶å°¾ï¼ - **æ¬ä¼è¯å·²å®æ**ï¼å·²æ¨éï¼ï¼æ±æ»å¤§è¡¨è¿åº¦å¼¹çªä¼åï¼å®æåä¸ååºç°éå¤ä¸è½½æé®ï¼ï¼å¯¼åºç»æ**è½çç¼å**ï¼`docs/çææ±æ»å¤§è¡¨/_cache/`ï¼å·² gitignoreï¼ï¼ ç¼åå®å«å级为**æ°æ®æçº¹**ï¼ä¾èµæºè¡¨ `CHECKSUM TABLE` + æ¯ççæä»¶èº«ä»½ï¼æé¤æèµ/è½è/å®¡æ ¸/ç³»ç»/å¯¼å ¥æ¥å¿ï¼ââæ å ³å¯¼å ¥ä¸å失æã**æ¢æ¯çå¿ å®å¤±æ**ï¼å¤±ææ¶è¿åº¦å¼¹çªç»åºè¯´æã - **å½åç¯å¢**ï¼å端 8090ãå端 8080 è¿è¡ä¸ï¼å¯¼åºç¼å对 2026-08 ææï¼æä»¶å带æçº¹ï¼ï¼ææ°æäº¤ `06b1cb7`ã - **å©ä½å¾ åï¼å·²éæ¡æ ¸æ¥ï¼åäºæªè§¦ç¢°ï¼**ï¼P0-2 亿å 表æ Q7 追åï¼`ReportExportService.java:6251` ä»åå䏿 ¼ï¼ãP0-3 åºæ°ä½æ£ï¼`getLastMidIssues()` æ è°ç¨æ¹ï¼ã P0-4 2026-06/09 æ¯ç缺失ãP1-7 æèµèµéæ¸ éåæ®µãP1-9 æèµå¯¼åºææåç®å½ + è¿è¡æ¥å¿ãP2-1 D ç»å¢éæåæªè¾ã - **å¾ æ ¸å®**ï¼`docs/äº¤æ¥ææ¡£_2026-09-21.md` ç P2-2ãåå¸å®¢è¿é¡µè¡¨å¤´ä»æ¯æ¥æåºåå·ãå¯è½è¿æ¶ââ代ç å·²æ `fixCityMonthHeaderText()`ï¼09-03 å å ¥ï¼ï¼ 建议è·ä¸æ¬¡ 2026-08 å¯¼åºæ ¸å¯¹ååæ¹ææ¡£ã - **å ¥å£**ï¼`HANDOFF.md`ï¼æ¬æä»¶ï¼â `AGENTS.md` â `docs/äº¤æ¥ææ¡£_2026-09-21.md` 第 4 ç« ï¼P0/P1/P2 å ¨ééçï¼ã ## ææ°ï¼2026-09-21ï¼ - **ææ°æ»å ¥å£**ï¼`docs/äº¤æ¥ææ¡£_2026-09-21.md`ï¼ç³»ç»ç°ç¶ãP0/P1/P2 éçãæä½æåï¼ï¼æ±æ»å¤§è¡¨ä¸é¡¹è§ `docs/é®é¢æ±æ»/æ±æ»å¤§è¡¨é®é¢äº¤æ¥_2026-09-21.md`ã docs/½»½ÓÎĵµ_2026-09-21.md
@@ -11,12 +11,13 @@ ## 0. å 读è¿ä¸é¡µï¼æ¥æç第 1 å°æ¶ï¼ 1. **å æç³»ç»è·èµ·æ¥**ï¼åè°æ¹ä»£ç ãè§ Â§7.1ï¼ä¸é®èæ¬ï¼å¿ 须卿²ç®±å¤æ§è¡ï¼ã 2. **å½åæç´§æ¥ç 4 ä»¶äº**ï¼è¯¦è§ §4 P0ï¼ï¼â ãäº¿å æèµé¡¹ç®ãæä»½åæ¯æè¦ç䏿ï¼ç¨æ· Q7 è¦çãå ä¸åãæªåï¼ï¼ ⡠导åºåãåºæ°ä½æ£ + å¼¹çª +ãæ°æ®ç¼ºå¤±æ¸ åã页ãåªåäºä¸åï¼â¢ 缺 2026-06 / 2026-09 æ¯çï¼é£ä¸¤æåºä¸äºè¡¨ï¼ â£ æ±æ»å¤§è¡¨ãä¸å£å¾æå vs ä¸å£å¾æç»ãåå²åæ¯åºæ°å轨å¶ï¼16 个å¸å·æå·®ï¼ã > åã8 æåå °ç©æµæºæä»¶å«éåå °æ®µãå·²äº 2026-09-21 éç¯ï¼è§ §4 P0-1ã 2. **å½åæç´§æ¥ç 3 ä»¶äº**ï¼è¯¦è§ §4 P0ï¼ï¼â ãäº¿å æèµé¡¹ç®ãæä»½åæ¯æè¦ç䏿ï¼ç¨æ· Q7 è¦çãå ä¸åãæªåï¼ï¼ ⡠导åºåãåºæ°ä½æ£ + å¼¹çª +ãæ°æ®ç¼ºå¤±æ¸ åã页ãåªåäºä¸åï¼â¢ 缺 2026-06 / 2026-09 æ¯çï¼é£ä¸¤æåºä¸äºè¡¨ã > å·²éç¯ï¼ä¸å¿ 忥ï¼ï¼**8 æåå °ç©æµæºæä»¶å«éåå °æ®µ**ï¼2026-09-21ï¼è§ §4 P0-1ï¼ï¼ > **ä¸å£å¾æååå²åæ¯åºæ°å轨å¶**ï¼2026-09-21 åäºææ¹æ¡ A å®ç°ï¼commit `abf468c`ï¼è§ §4 P1-1ï¼ï¼ > **导åºç¼å**ï¼2026-09-22 è½ç + æ°æ®æçº¹ + 失ææç¤ºï¼è§ §4 P2-6ï¼ã 3. **å«èªå·±ææ¿ä¸å¡å£å¾**ï¼ç¬¬ 5 ç« åçæ¯å¿ é¡»ä¸å¡ç¡®è®¤çäºã 4. æ¹å®å¿ é¡»ï¼åãåè½æµè¯æ¥åãâ æ´æ°ã工使¥ç»ãâ åä»åºæ¨éï¼Â§7.4ï¼ãè¿æ¯æ¬é¡¹ç®ç硬è§ç©ã 4. æ¹å®å¿ é¡»ï¼åãåè½æµè¯æ¥åãâ æ´æ°ã工使¥ç»ãâ æ¨éå°å ¬å¸ giteaï¼`origin`ï¼Â§7.4ï¼ãè¿æ¯æ¬é¡¹ç®ç硬è§ç©ã --- @@ -56,7 +57,7 @@ | --- | --- | | å·¥ä½åº | `D:\ææ¡£\ChatGPT\traffic-audit`ï¼åæ¯ `main` | | HEAD | `a08c70d feat(æèµ): å¸å·ææ¥ç»ä¸å¡«æ¥æ¨¡æ¿ + å¿(å¸ãåº)åè§£æ + 表头è¡å¤å®æ¶ç´§` | | 个人è¿ç«¯ | `origin` â `https://gitee.com/zhizhijie/traffic-audit.git`ï¼åæ¯ `master`ï¼ | | è¿ç«¯ï¼å¯ä¸ï¼ | `origin` â `http://61.183.254.94:3000/r/trafficAudit.git`ï¼åæ¯ `main`ï¼è´¦å· zyjï¼ââ2026-09-21 èµ·**åªç¨å ¬å¸ gitea åä»åº**ï¼ä¸ªäºº gitee å·²å¼ç¨ï¼æ§ç `gitea` å«åæååä¸å°åï¼å¯ç¨å¯å | | å ¬å¸è¿ç«¯ | `gitea` â `http://61.183.254.94:3000/r/trafficAudit.git`ï¼åæ¯ `main`ï¼è´¦å· zyjï¼ | | å·¥ä½åºç¶æ | å¹²åï¼äº¤æ¥ææ¡£ãæ±æ»å¤§è¡¨é®é¢äº¤æ¥ãæ¥ç»ãæèµç³»ç»æ°æ¨¡æ¿æ¯æåå·²æäº¤å¹¶æ¨éä¸¤ç«¯ï¼ | @@ -194,7 +195,7 @@ | # | äºé¡¹ | 说æ | ç¶æ | | --- | --- | --- | --- | | P1-1 | ä¸å£å¾æå vs ä¸å£å¾æç»ãåå²åæåºæ°å轨å¶ã | 餿¦æ±å¤ 16 个å¸å·ç´¯è®¡åæ¯é½æå·®ï¼é»å 7.74% vs 7.64%ï¼ï¼æ ¹å æ¯æ¯ç 2025 å¹´ 3ã4 æç½çº¦è½¦æåç¨äºä¸å¥ä¸åºç§åèªç¸çç¾çæ§è¾å ¥ã**æ¹æ¡ A 已宿½å¹¶åå½ï¼æå页æ¹ç¨æ¯ç 2025 éæå**ï¼é»å 1-8 æç´¯è®¡åæ¯ä¿®æ£ä¸º `7.641733%`ï¼17 å¸å· Ã ä¸¤ææ å ± 68 ä¸ªåæ¯/ç´¯è®¡æ ¼å ¨é¨ä¸è´ï¼æå¤§å·® `2.91e-11`ï¼ï¼å½æåæ¯æ åå½ | â ï¼2026-09-21ï¼è¯¦è§æ±æ»å¤§è¡¨äº¤æ¥ç¬¬ 4 ç« ï¼ | | P1-1 | ä¸å£å¾æå vs ä¸å£å¾æç»ãåå²åæåºæ°å轨å¶ã | 餿¦æ±å¤ 16 个å¸å·ç´¯è®¡åæ¯é½æå·®ï¼é»å 7.74% vs 7.64%ï¼ï¼æ ¹å æ¯æ¯ç 2025 å¹´ 3ã4 æç½çº¦è½¦æåç¨äºä¸å¥ä¸åºç§åèªç¸çç¾çæ§è¾å ¥ã**æ¹æ¡ A 已宿½å¹¶åå½ï¼æå页æ¹ç¨æ¯ç 2025 éæå**ï¼é»å 1-8 æç´¯è®¡åæ¯ä¿®æ£ä¸º `7.641733%`ï¼17 å¸å· Ã ä¸¤ææ å ± 68 ä¸ªåæ¯/ç´¯è®¡æ ¼å ¨é¨ä¸è´ï¼æå¤§å·® `2.91e-11`ï¼ï¼å½æåæ¯æ åå½ | â ï¼2026-09-21 ç±åäº xyc ææ¹æ¡ A å®ç°ï¼commit `abf468c`ï¼æ¥åãåè½æµè¯æ¥å_ä¸å£å¾æååæ¯åºæ°æ¹æ¡A_2026-09-21.mdãï¼è¯¦è§æ±æ»å¤§è¡¨äº¤æ¥ç¬¬ 4 ç« ï¼ | | P1-2 | ä¸å£å¾æåå ¨çè¡å·® 0.0002 ä¸äººå ¬é | æ¯çå ¬å¼ `=SUM(O4:O20)` å åèäºå ¥åæ±åçç»ææ§å·®å¼ï¼æ¯å¦æ¹å ¨ç²¾åº¦åå¼éææ¿ | ⸠| | P1-3 | ä¸å£å¾æç» 4 æ ¼ `#DIV/0!` | 2025 å¹´ 8 æåºæ°ä¸º 0ï¼ä¸å¯æ¯ï¼ï¼æ¯å¦æ¹ç©ºç½éä¸å¡ç¡®è®¤ | ⸠| | P1-4 | å ¨ç h2031 1-8 æ 27524.49 vs Σ17 å¸å· 24481.74 | å·® **3042.75**ï¼ä¼ä¸ä¸æ¥çãå ¨çãå«å¸å·æç»å¤çæ°æ®ï¼ææå¸å·æ¼æ¥ï¼ãç¨åºä¸å¾ææ¯çå£å¾ï¼Î£å¸å·ï¼èµ° â 建议ä¸å¡ä¾§æ ¸ä¸æ¬¡ | ⸠| @@ -217,7 +218,7 @@ | P2-3 | `applySummaryReferenceLayout()` æ**ååºå·**å¥å宽/éè | åç §ä»¶ä¸å ååå°±æ´ä½éä½ï¼åºæ¹ä¸ºæè¡¨å¤´æåå¹é | â | | P2-4 | 缺æ¯çæç¤ºï¼T08ï¼æªå®æµ | ææµè¯å¯æ¬æ¶è¡¥æµ | â | | P2-5 | é¨ç½²å å æ¯**带 AJ åçæ§æ¯ç** | `deploy/traffic-audit-deploy-20260913/backend/docs/çææ±æ»å¤§è¡¨/`ã`_deploytest/`ï¼ç¨æ· 09-20 æç¡®ãé¨ç½²å å ä¸ç®¡ãï¼åå åå¿ é¡»åæ¥ | ⸠| | P2-6 | ~~导åºç¼åæ¯å åæ~~ | **已解å³ï¼2026-09-22ï¼**ï¼ç»æè½çå° `docs/çææ±æ»å¤§è¡¨/_cache/`ï¼æä»¶åå¸¦æ°æ®çæ¬ `MAX(import_batch.id)`ï¼ï¼å å â è½ç â çç®é级å½ä¸ï¼éå¯å端åä»å¯ç§åå¤ç¨ï¼ææ°å¯¼å ¥å³å¤±æï¼7 天ä¸éå¹¶èªå¨æ¸ çãéçï¼æ°æ®çæ¬æ¯å ¨å±çï¼ä¸æ±æ»æ å ³çå¯¼å ¥ä¹ä¼è®©ç¼å失æï¼ï¼å¦éæå¯¼å ¥ç±»åç»åå¾ ææ | â ï¼å¯ä¼å项è§å³ï¼| | P2-6 | ~~导åºç¼åæ¯å åæ~~ | **已解å³ï¼2026-09-22ï¼**ï¼ç»æè½çå° `docs/çææ±æ»å¤§è¡¨/_cache/`ï¼æä»¶åå¸¦æ°æ®çæ¬ `MAX(import_batch.id)`ï¼ï¼å å â è½ç â çç®é级å½ä¸ï¼éå¯å端åä»å¯ç§åå¤ç¨ï¼ææ°å¯¼å ¥å³å¤±æï¼7 天ä¸éå¹¶èªå¨æ¸ çãéç项已éç¯ï¼2026-09-22 ä¸åï¼ï¼çæ¬å·å级为**æ°æ®æçº¹**ï¼ä¾èµæºè¡¨ `CHECKSUM TABLE` + æ¯ççæä»¶èº«ä»½ï¼æé¤æèµ/è½è/å®¡æ ¸/ç³»ç»/å¯¼å ¥æ¥å¿ï¼ï¼æ å ³å¯¼å ¥ä¸å失æãæ¢æ¯çå¿ å®å¤±æï¼å¤±ææ¶è¿åº¦å¼¹çªä¼è¯´æåå | â | | P2-7 | å¸å·å表ãå¤å¸å·åãå åºæç¤º | æ¯å¦å¨è¯å«å°ä¸ä»½æä»¶å«å¤ä¸ªå¸å·åæ¶å¼¹çªæç¤º/è·³è¿ï¼å¾ 确认ï¼ä¸ P0-1 å䏿 ¹å ï¼ | ⸠| | P2-8 | ä»åºæ ¹ç®å½ `_*.*` ä¸´æ¶æä»¶å¢å¤ | `_chk_*`ï¼æ¬æ¬¡æ±æ»å¤§è¡¨ææ¥äº§çï¼è§æ±æ»å¤§è¡¨äº¤æ¥ç¬¬ 10 èï¼ã`_hyb_*`ã`_loo_*` çï¼**ç»ç¨æ·åæå忏 ** | ⸠| | P2-9 | `2026å¹´8æéè·¯è¿è¾éæ±æ»è¡¨_çå¼åå.xlsx` å»ç | è¿è¡æ¶æªè¢«å¼ç¨ | ⸠| @@ -250,6 +251,8 @@ | `docs/é®é¢æ±æ»/æ±æ»è¡¨ä¸æ¡ä¸»çº¿ä¿®å¤æ¹æ¡_2026-09-18.md` | ãå ¬å¼ä¸éç®ãç»ä¸æ ¹å + 页èå´æ¼é¡¹ + å£å¾ç¼ºå£ | | `docs/é®é¢æ±æ»/ä¸å£å¾æå忝ä¸åå¸å®¢è¿åéä½_æ ¹å ä¸é¿ææ¹æ¡_2026-09-18.md` | 2025 åºæ°ä¸å¤ç¼ºé·ï¼å ¬äº¤åé å乡=0ãç½çº¦è½¦ pin 缺失ãåºç§ 6 æéå¤ï¼ä¸ A/B/C/D åç»æ¹æ¡ | | `docs/é®é¢æ±æ»/æ±æ»å¤§è¡¨é®é¢äº¤æ¥_2026-09-21.md` | æ±æ»å¤§è¡¨**éè¡ä»£ç å°å¾**ä¸ P0-1/P0-2 详ç»è®ºè¯ï¼æ¥æå¿ è¯»ï¼ | | `docs/åè½æµè¯æ¥å/åè½æµè¯æ¥å_ä¸å£å¾æååæ¯åºæ°æ¹æ¡A_2026-09-21.md` | åäºå®ç°æ¹æ¡ A çå彿¥åï¼é»å 7.744917%â7.641733%ï¼68 个æ°å¼å¯¹ä¸è´ï¼ | | `docs/åè½æµè¯æ¥å/åè½æµè¯æ¥å_æ±æ»å¤§è¡¨è½¯ä»¶è¾åºä¸æå·¥å®ç¨¿å·®å¼_2026-09-21.md`ã`docs/é®é¢æ±æ»/æ±æ»å¤§è¡¨å·®å¼æ ¸å¯¹åæ§_2026-09-21.md` | 软件è¾åº vs æå·¥å®ç¨¿çéæ ¼å·®å¼æ¸ åä¸åæ§ | **æå®¹æè¢«æ¹åå»ç 6 个ç¹**ï¼åèªæ±æ»å¤§è¡¨äº¤æ¥ç¬¬ 6 èï¼ï¼ @@ -298,7 +301,7 @@ ### 7.4 交ä»è§ç©ï¼ç¡¬æ§ï¼ 1. æ¯åå®ä¸ä¸ªåè½ï¼**å æµè¯ â åãåè½æµè¯æ¥åã**ï¼`docs/åè½æµè¯æ¥å/åè½æµè¯æ¥å_<åè½å>_<æ¥æ>.md`ï¼å«æ£å/è´å/å ¥åºæ½æ¥ï¼â **æ´æ°ã工使¥ç»ã**ï¼`docs/工使¥ç»/工使¥ç»_<æ¥æ>.md`ï¼ã 2. ç¶å `git fetch origin`ï¼ä¸ªäºº giteeï¼åæ¯ `master`ï¼ä¸ `git fetch gitea`ï¼å ¬å¸ï¼åæ¯ `main`ï¼æ¯å¯¹åå¹¶ï¼**ç¦æ¢å¼ºæ¨**ï¼å commit + pushã 2. ç¶å `git fetch origin`ï¼å ¬å¸ giteaï¼åæ¯ `main`ï¼ä¸è¿ç«¯æ¯å¯¹åå¹¶ï¼**ç¦æ¢å¼ºæ¨**ï¼å commit + pushã 3. å ¬å¸è´¦å·å¯ç åªèµ°æ¬æº git åæ®ï¼**ç¦æ¢åè¿ä»åºä»»ä½æä»¶**ã --- @@ -311,7 +314,7 @@ - [ ] çæä¸æ¬¡ 2026-08 æ±æ»å¤§è¡¨ï¼æ¥è¡¨çæé¡µæ §2.4 æ¥å£ï¼ï¼ç¡®è®¤è½äº§åºãè½æå¼ã - [ ] 读 `docs/é®é¢æ±æ»/æ±æ»å¤§è¡¨é®é¢äº¤æ¥_2026-09-21.md`ï¼éç¹ç¬¬ 3ã4ã5 ç« ï¼ã - [ ] è¯»æ¬æ §4ï¼æ P0 顺åºåç¨æ·ç¡®è®¤å 4 ä»¶äºæä¹æ¨è¿ã - [ ] 确认èªå·±ç¥éãæ¹å®è¦åæµè¯æ¥å + 工使¥ç» + åä»åºæ¨éãã - [ ] 确认èªå·±ç¥éãæ¹å®è¦åæµè¯æ¥å + 工使¥ç» + æ¨éå ¬å¸ giteaï¼origin/mainï¼ãã --- @@ -321,4 +324,5 @@ | --- | --- | | 2026-09-21 | 馿¬¡ææï¼æ´åæ±æ»å¤§è¡¨äº¤æ¥ï¼`docs/é®é¢æ±æ»/æ±æ»å¤§è¡¨é®é¢äº¤æ¥_2026-09-21.md`ï¼ä¸æèµ/è´§è¿/客è¿å线éç | | 2026-09-21ï¼ä¸åï¼ | P0-1 éç¯ï¼åå °æºæä»¶å·²å æ®µ + é导éªè¯ï¼ï¼æ°å¢ P1-13ï¼æèµç³»ç»æ°æ¨¡æ¿æ¯æï¼ï¼æ°æ®å¿«ç §è¡¥ `investment_system` è¡ | | 2026-09-22ï¼ä¸åï¼ | 导åºç¼åï¼ç»æè½ç + æ°æ®æçº¹å®å« + 失ææç¤ºï¼P2-6 éç¯ï¼ï¼/ 忥åäºè¿å±ï¼`abf468c` P1-1 æ¹æ¡ Aã`47a8734` 差弿¥åã`a5a9545` 09-22 è®°å½ï¼ï¼/ ä»åºçº¦å®æ¹ä¸ºå ¬å¸ gitea åä»åºã§0 æ¸ åæ´æ° | | 2026-09-21ï¼ä¸åï¼ | P1-1 éç¯ï¼ç¨æ·éç¨æ¹æ¡ Aï¼ä¸å£å¾æåç 2025 ç´¯è®¡åºæ°æ¹è¯»æ¯çãä¸å£å¾æç»ãéæåï¼é»åç´¯è®¡åæ¯ç± 7.74% ä¿®æ£ä¸º 7.641733%ï¼å页ä¸è´æ§åå½éè¿ | docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_µ¼³ö»º´æ¸ÄÓÃÊý¾ÝÖ¸ÎÆ_2026-09-22.md
New file @@ -0,0 +1,61 @@ # åè½æµè¯æ¥å_导åºç¼åæ¹ç¨æ°æ®æçº¹_2026-09-22 ## ä¸ãåè½è¯´æ ç¨æ·è¯æ±ï¼ä¸è½½è¿ä¸æ¬¡ãæé´æ²¡ææ°å¯¼å ¥æ°æ®å°±åºç´æ¥æ²¿ç¨ä¸æ¬¡ç»æï¼å·²å®ç°è½çç¼åï¼ï¼éåç¨æ·è®¤å¯ãææè¯´çåãï¼è¦æ±ç»§ç»è§£å³ç¼åå®å«ç两个é®é¢ï¼ 1. **误失æ**ï¼åæ¥ç¨å ¨å± `MAX(import_batch.id)` å½çæ¬å·ï¼å¯¼å ¥æèµ/è½èè¿ç±»ä¸æ±æ»å¤§è¡¨æ å ³çæ°æ®ä¹ä¼è®©ç¼å失æï¼ç½çåå ç§ï¼ 2. **æ¼å¤±æï¼æ£ç¡®æ§æ¼æ´ï¼**ï¼çæ¬å·åªåæ æ°æ®åºå¯¼å ¥è®°å½ï¼**ä¸å«æ¯çæä»¶**ââæ¢æ¯ç/æ¹åç §ä»¶æ¶çæ¬å·ä¸åï¼ä¼ææ§ç»æå½æ°è¡¨ååºã **æ¹å¨**ï¼ | # | æ¹å¨ | 说æ | | --- | --- | --- | | 1 | ç¨**æ°æ®æçº¹**æ¿ä»£å ¨å±çæ¬ | æçº¹ = ãä¾èµæºè¡¨çå å®¹æ ¡éªåã+ãæ¯ççæä»¶èº«ä»½ãï¼SHA-256 åå 8 åèï¼16 ä½åå è¿å¶ï¼ï¼åè¿ç¼åæä»¶å | | 2 | æºè¡¨èå´ï¼**æé¤æ³** | åºå ææåºè¡¨ï¼**æé¤**æèµ(3)/è½è(2)/å®¡æ ¸(4)/ç³»ç»(6)/`import_batch`(1) å ± 16 å¼ ï¼å ¶ä½ä¸å¾çº³å ¥ï¼å®å¯å¤ç®ä¸å¯åºéï¼ | | 3 | ç¨ `CHECKSUM TABLE` åæ ¡éªå | è½ææ**åå° UPDATE**ï¼è¡æ°ãmax(id) é½ä¸åçæ åµï¼ï¼æ¯ `count+max(id)` æ´ä¸¥æ ¼ | | 4 | æä»¶èº«ä»½ | æ¯çç®å½ä¸å ¨é¨æä»¶ï¼æ¯ç / åç §ä»¶ / `_å¤ä»½_` åå¡«ä»¶ï¼+ãç½çº¦è½¦è®¢ååå ¨çæ»é.xlsxãï¼åãåç§°+大å°+ä¿®æ¹æ¶é´ã | | 5 | æ°å¢**失ææç¤º**ï¼ç¬¬ 3 æ¥çæç¤ºçï¼ | 没å½ä¸ä¸å卿§ç»ææ¶ï¼è¿åº¦å¼¹çªæ¾ç¤ºã䏿¬¡çæçç»æå·²å æ°æ®ææ¯çåå失æï¼æ¬æ¬¡æææ°æ°æ®éç®ãã | > æç¤ºæ¾å¨**å¯¼åºæ¶çè¿åº¦å¼¹çª**ï¼è䏿¯å¯¼å ¥ç»æå¼¹çªï¼ï¼â æ£å¥½åºç°å¨ç¨æ·çå¾ çæ¶åï¼â¡ å å»ãæ¯æ¬¡å¯¼å ¥é½è·ä¸éå ¨è¡¨æ ¡éªåãçå¼éã ## äºãæµè¯ç¯å¢ - å端 Spring Boot 8090ï¼éå¯å è½½æ°ä»£ç ï¼ï¼å端 8080ï¼MySQL 3308 / `traffic_audit` - æ¥è¡¨æ 2026-08ï¼ææ¥ï¼ï¼ç¼åç®å½ `docs/çææ±æ»å¤§è¡¨/_cache/` - éªè¯æé´å¦ä¸ä¸ªä¼è¯éå¯è¿å端两次ï¼ä¸ªå«æ¥éª¤ä¸æåéè·ï¼ä¸å½±åç»è®ºï¼ ## ä¸ãç¨ä¾è¡¨ | # | ç¨ä¾ | æä½ | 颿 | å®é | ç»è®º | | --- | --- | --- | --- | --- | --- | | T01 | 馿¬¡çæï¼æ°æçº¹ï¼ | æäº¤å¯¼åº | çç®å¹¶è½çï¼æ§çæ¬æä»¶è¢«æ¸ ç | `DONE` 21 sï¼çæ `â¦_v227060ce99767ced.xlsx`ï¼å `â¦_v541.xlsx` å·²å | éè¿ | | T02 | 忬¡æäº¤ | å䏿¥ | å åå½ä¸ | **241 ms**ï¼`fromCache=true` | éè¿ | | T03 | **æ å ³å¯¼å ¥ä¸å½±åç¼åï¼æ ¸å¿ï¼** | å¾ `investment_project`ã`import_batch` åæ 1 è¡åæäº¤ | ä»å½ä¸ | `fromCache=true`ï¼æ¹é åå¿ ç¶å¤±æï¼ | éè¿ | | T04 | å é¤ä¸è¿°ä¸¤è¡åæäº¤ | åä¸ | ä»å½ä¸ | `fromCache=true` | éè¿ | | T05 | **ç¸å ³æºè¡¨åå° UPDATE** | `wyc_order_monthly.pin_k +0.001`ï¼è¡æ°/`max(id)` ä¸åï¼åæäº¤ | å¿ é¡»å¤±æ | `fromCache=false`ã`RUNNING`ï¼ç¼åæä»¶åæ¢ææ°æçº¹ `â¦_v68b6bc0câ¦` | éè¿ | | T06 | è¿å该å¼åæäº¤ | åä¸ | ä»ä¸å½ä¸ï¼ç¼åæ¯æ¹åæçº¹ï¼ | `fromCache=false` â éç®ï¼æçº¹åå° `227060ce99767ced` | éè¿ | | T07 | **æ¢æ¯çå¿ é¡»å¤±æï¼åæ¼æ´ï¼** | æ¹æ¯çæä»¶ä¿®æ¹æ¶é´ï¼å 容ä¸åï¼åæäº¤ | å¿ é¡»å¤±æ | `fromCache=false`ã`RUNNING`ï¼æçº¹å `â¦_v7d65cbb6â¦` | éè¿ | | T08 | æ¢å¤æ¯çæ¶é´åæäº¤ | åä¸ | 失æâéç®âåæäº¤å½ä¸ | éç®å `fromCache=true` | éè¿ | | T09 | 失ææç¤ºï¼æ¥å£ï¼ | å卿§ç»æä¸æçº¹ä¸ç¬¦æ¶æäº¤ | `staleCache=true` | `status=RUNNING fromCache=false staleCache=true` | éè¿ | | T10 | å½ä¸ç¼åæ æç¤ºï¼åå½ä¿®å¤ï¼ | å½ä¸æ¶æäº¤ | `staleCache=false` | ä¿®å¤åå½ä¸ä»å¸¦ `staleCache=true` â 已修为å½ä¸å³æ¸ é¶ | éè¿ | | T11 | **æµè§å¨å®æµæç¤ºè¡** | admin/123456 â æ¥è¡¨çæ â æ±æ»å¤§è¡¨ â 2026-08 â 导åºï¼å æ¹æ¯ç mtime å¶é 失æï¼ | å¼¹çªåºç°å¤±ææç¤º | å¼¹çªæ¾ç¤ºã䏿¬¡çæçç»æå·²å æ°æ®ææ¯çåå失æï¼æ¬æ¬¡æææ°æ°æ®éç®ããï¼çæ 13.2 sãèªå¨ä¸è½½ 1.15 MBãæé®ãéæ°çæ/å ³éããæ§å¶å° 0 æ¥é | éè¿ | | T12 | æ°æ®è¿åæ ¸å¯¹ | æ¥åº | æ æµè¯æ®ç | `import_batch` 419ã`investment_project` 152ã`wyc_order_monthly.2025-12 pin_k=3492.63`ãæ ã_æçº¹æµè¯é¡¹ç®ã | éè¿ | ## åãåç°çé®é¢ä¸å¤ç½® | # | é®é¢ | å¤ç½® | | --- | --- | --- | | P1 | å½ä¸ç¼åæ¶æ®çä¸ä¸æ¬¡çã已失æãæç¤ºæ è®° | 已修ï¼å½ä¸åæ¯æ¸ é¶ `staleCache` | | P2 | æä»¶èº«ä»½ç¨æ¯«ç§çº§ mtimeï¼ææ¯ç mtimeãæ¢å¤æåä¸ç§ãæ¶ï¼äºç§å·®å¼ä»ä¼äº§çæ°æçº¹ï¼éªè¯ä¸å®é éå°ï¼ | å±**颿è¡ä¸º**ï¼ä¿å®ä¼å ï¼å®å¯å¤ç®ä¸æ¬¡ï¼ãè¥å°æ¥è§å¾å¤ªææï¼å¯æ¹ä¸ºãç§çº§ mtimeãæå¯¹æ¯çåå 容åå¸ | | P3 | æµè¯ç¨çä¸´æ¶æ°æ®ï¼1 个æèµé¡¹ç®ã1 æ¡å¯¼å ¥è®°å½ã`wyc pin ±0.001`ï¼ | å·²å ¨é¨è¿å/å é¤ï¼T12 å·²æ ¸å¯¹ | | P4 | æ°æ®æçº¹è®¡ç®ææ¬ | 约 11 å¼ è¡¨ CHECKSUM + 13 个æä»¶ statï¼å®æµå¯ä¸ºæ¯«ç§çº§ï¼3 å¼ è¡¨ 48 msï¼ï¼ä» å¨æäº¤å¯¼åºæ¶ç®ä¸æ¬¡ | ## äºãç»è®º - ç¼åå®å«ä»ãå ¨å±å¯¼å ¥çæ¬ãå级为ã**æ°æ®æçº¹**ãåï¼**æ å ³å¯¼å ¥ä¸å让ç¼å失æ**ï¼T03/T04ï¼ï¼**æ¢æ¯çãæ¹æºè¡¨ï¼å«åå° UPDATEï¼å¿ å®å¤±æ**ï¼T05/T07ï¼ï¼ä¸¤ä¸ªæ¹åé½å®æµéè¿ï¼ - çæä¸æ¬¡çææ¬åªè±å¨çæ£éè¦éç®çæ¶åï¼æ£å¸¸ãä¸è½½è¿åç䏿¬¡ã仿¯æ¯«ç§çº§å½ä¸ï¼ - å¤±ææ¶ä¼å¨è¿åº¦å¼¹çªæç¡®è¯´æåå ï¼ç¨æ·ä¸ä¼è¯¯ä»¥ä¸ºç¼ååäºï¼ - æµè¯æ°æ®å·²å ¨é¨è¿åï¼åºå ç¶æä¸éªè¯åä¸è´ã æµè¯äººï¼Codexï¼AIï¼ãæµè¯æ¥æï¼2026-09-22 docs/¹¦ÄܲâÊÔ±¨¸æ/Êý¾Ý±È¶Ô±¨¸æ_Ͷ×ÊÃ÷ϸ±íÈí¼þÉú³ÉÓëÈ˹¤°æ_2026-09-22.md
New file @@ -0,0 +1,342 @@ # æ°æ®æ¯å¯¹æ¥å â æèµæç»è¡¨ã软件çæãvsã人工çãï¼2026-08ï¼ > æ¯å¯¹æ¥æï¼2026-09-22 > èå´ï¼æ¥è¡¨çæ â æèµ âã客è¿ç«æèµæç»è¡¨ããç©æµç«åºæèµæç»ã > æ¹æ³ï¼é页ç¾ãéè¡ãéæ ¼æ°å¼æ¯å¯¹ï¼èæ¬ `_tmp_diff_invest_0922.py`ï¼ï¼å¹¶å溯å°ãæºæä»¶ / æ°æ®åº / åºç¨¿æ¨¡æ¿ã䏿¹å®ä½æ ¹å > ååï¼æãé¡µç¾ + è¡ + åãä¸¥æ ¼å¯¹é½ï¼åªåçå®å·®å¼ï¼æµ®ç¹è¡¨ç¤ºå·®å¼ï¼å¦ `783078.1665` ä¸ `783078.1664999999`ï¼ä¸è®¡ ## ä¸ãæ¯å¯¹æºæä»¶ | ç±»å | æä»¶ | åè | SHA256(å16) | ä¿®æ¹æ¶é´ | | --- | --- | --- | --- | --- | | 人工ç-å®¢è¿ | `D:\05_æ°æ®åç±»\æèµ\8æ\8æå®¢è¿ç«æèµæç»è¡¨.xlsx` | 34226 | `0C2150B97B87F860` | 2026-09-01 10:53:39 | | 人工ç-ç©æµ | `D:\05_æ°æ®åç±»\æèµ\8æ\8æç©æµç«åºæèµæç».xls` | 122368 | `1B768D2341CADC41` | 2026-09-01 10:53:38 | | 软件ç-å®¢è¿ | `D:\æ¡é¢\çææ°æ®\çæ_æéæ¥è¡¨_2026-08 (1)\çæ_客è¿ç«æèµæç»è¡¨.xlsx` | 29462 | `4A2EA9C915E5D107` | 2026-09-22 14:16:28 | | 软件ç-ç©æµ | `D:\æ¡é¢\çææ°æ®\çæ_æéæ¥è¡¨_2026-08 (1)\çæ_ç©æµç«åºæèµæç».xls` | 134144 | `F21481D62F680366` | 2026-09-22 14:16:28 | | åºç¨¿ï¼å®¢è¿ï¼ | `docs\æèµ\模æ¿\模æ¿_Xæå®¢è¿ç«æèµæç»è¡¨.xlsx` | 34311 | `1926A91E7C416529` | 2026-08-10 15:44:18 | | åºç¨¿ï¼ç©æµï¼ | `docs\æèµ\模æ¿\模æ¿_Xæç©æµç«åºæèµæç».xls` | 121856 | `12A61A27B9438E19` | 2026-08-10 15:44:10 | ç»æå®å ¨ä¸è´ï¼å®¢è¿ãæç»ã121Ã20 +ãæ±æ»ã24Ã5ï¼ç©æµãæ2ã32Ã24ãã åé¡¹ç®æèµå®ææ åµã192Ã20ããåå¸å·è§åå å¤é¡¹ç®å®ææ åµã21Ã8ããå¸å·æ±æ»ã24Ã5ã **éè¡æ ¸å¯¹ B åï¼é¡¹ç®åç§°ï¼ï¼ä¸¤ä»½æä»¶ 192/121 è¡å ¨é¨ä¸ä¸å¯¹åºï¼æ å¢è¡ãæ å è¡ãæ éä½**ï¼å æ¤éæ ¼æ¯å¯¹ç»æå¯ç´æ¥ä½¿ç¨ã ## äºãç»è®ºæè¦ | æä»¶ | é¡µç¾ | 差弿 ¼æ° | | --- | --- | --- | | 客è¿ç«æèµæç»è¡¨ | æç» | 12 | | 客è¿ç«æèµæç»è¡¨ | æ±æ» | 4 | | ç©æµç«åºæèµæç» | æ2 | 0 | | ç©æµç«åºæèµæç» | åé¡¹ç®æèµå®ææ åµ | 108 | | ç©æµç«åºæèµæç» | åå¸å·è§åå å¤é¡¹ç®å®ææ åµ | 15 | | ç©æµç«åºæèµæç» | å¸å·æ±æ» | 17 | | **å计** | | **156** | ### æ ¹å ï¼å·²ç¨æºæä»¶ / æ°æ®åº / åºç¨¿ä¸æ¹è¯æ®éå®ï¼ **A. è½¯ä»¶å¯¼åº = å¨åºç¨¿ã模æ¿_Xæâ¦æèµæç»ãä¸ï¼æåºå å½ææ°æ®æã项ç®åç§°ãå¹é è¦ç H/J/Kï¼ç´¯è®¡/èªå¹´å/æ¬æï¼ä¸ Mï¼å½¢è±¡è¿åº¦ï¼ãå¡å¹é ä¸ä¸ãæåºå 没æå½ææ°çè¡ï¼ä¸å¾æ²¿ç¨åºç¨¿ï¼ä¸ä¸æï¼æ§å¼ã** ç±æ¤äº§ç 4 ç±»ç©æµå·®å¼ï¼ 1. **åºå 没æå½ææ°æ® â æ´æ®µä¿ç䏿å¼**ï¼æ¦æ±å¸ 6 ä¸ªç©æµé¡¹ç®å¨åºå **䏿¡æåº¦è®°å½é½æ²¡æ**ï¼`investment_monthly` æ¦æ±ç©æµååº 0 è¡ï¼å 为 8 ææ¦æ±æ å表ï¼ï¼æä»¥è½¯ä»¶çæ¦æ± 8 è¡å ¨æ¯åºç¨¿ç 7 ææ°ï¼å计 146313.9/72166/10116ï¼ï¼äººå·¥çæ¯ 155513.9/81366/9200ã 2. **项ç®åç§°ä¸ä¸è´ â 该è¡ä¸è¦ç**ï¼åºå 项ç®åæ¯ãä¸å½ä¾é**.**å ¬å®åè´¸ç©æµåãï¼ä¸é´å¤ä¸ä¸ªç¹ï¼ï¼æç»è¡¨è¡åæ¯ãä¸å½ä¾éå ¬å®åè´¸ç©æµåï¼å ¬å®å¿åéééé ä¸å¿ï¼ãâ å¹é 失败ï¼è½¯ä»¶çä¿çåºç¨¿æ§å¼ 7758.5/7758.5/1600.1ï¼åºå 2026-08 å®é æ¯ **15986/15986/8227.5**ï¼= æºæä»¶ãèå·ç©æµæèµï¼2026å¹´8ææ¥çï¼ãR21 åå¼ï¼ï¼äººå·¥çæ£ç¡®ã 3. **åºå åååæ¡£ â åå°æ§æ¡£**ï¼åå °ãå¿«éç©æµäº§ä¸åäºæãå¨åºå æä¸¤æ¡£ ââ `id=154`ãåå °å¸å¿«éç©æµäº§ä¸å**äºæ**ï¼â¦ï¼ã竣工 2026ï¼`id=181`ãåå °å¸å¿«éç©æµäº§ä¸åï¼**äºæ**â¦ï¼ã竣工 2029ãæç»è¡¨è¡åå¯¹åº `id=154`ï¼å ¶ææ°æåº¦åªå° **2026-07**ï¼20081/2900/214ï¼ï¼äºæ¯è½¯ä»¶çåäº 7 æå¼ + 竣工 2026ï¼äººå·¥çç¨çæ¯ `id=181` ç 2026-08ï¼20377/3196/296ï¼ç«£å·¥ 2029ï¼= æºæä»¶ R71 åå¼ã 4. **åºå 彿æ°ä¸º 0 â ååº 0**ï¼å¤©é¨ã天é¨å¸ç©æµä¸å¿å»ºè®¾é¡¹ç®ãåºå 2026-08 ç `start_cum/year_cum/month_done` **齿¯ 0**ï¼èæºæä»¶ã8æä»½ç©æµåä¸å¿å»ºè®¾é¡¹ç®(天é¨).xlsxãR13 æææ¯ **16677.7 / 16677.7 / 500**ï¼è¯´ææ¯**å¯¼å ¥ç¯èæè¿ 3 个æ°ä¸¢äº**ï¼äººå·¥çæ£ç¡®ï¼ã **B. 软件ä¼åãåç»å°è®¡è¡ãã人工çä¸å**ï¼éå·/æ©æ½/仿¡/æ½æ±/æåº/天é¨è¿äºãåªæä¸ä¸ªèµéæ¸ éãçå¸å·ï¼è½¯ä»¶ææ¸ éæå¸å·å计æè¿è¯¥æ¸ éè¡ï¼äººå·¥ç沿ç¨åºç¨¿ç空ç½ãéé¢ä¸å¸å·å计ä¸è´ï¼ä¸å½±åæ»æ°ï¼åªæ¯å¡«è¡¨ä¹ æ¯å·®å¼ã **C. 软件导åºä¸è¦ç Lï¼å»ºè®¾é¶æ®µï¼çééé¢å**ï¼`D/E/F/I/L` ä¿çåºç¨¿å¼ãæä»¥é»ç³å¤§å¶æ¹å·é¾ L=æåãåå °æ¢çº½ L=åæãè¥é³å·é¾ä¸å¿ L=å¨å»ºãéå·æ°çç©èµ M çã2026å¹´07æâ¦ãç齿¯**ä¸ä¸æåºç¨¿çæ®ç**ï¼äººå·¥çè¿å å¤åèæ¯å¯¹çï¼ã **D. 客è¿é¨åçå·®å¼ä¸»è¦æ¯ã人工çæååèäºå ¥ã**ï¼åºç¨¿é 203 / 203 è¿ç±»æåæ´æ°ï¼äººå·¥ç沿ç¨äºï¼è½¯ä»¶ææºè¡¨åå¼å 202.9565ã ## ä¸ã客è¿ç«æèµæç»è¡¨å·®å¼ï¼16 æ ¼ï¼ ### 3.1 éé¢å·®å¼ 12 æ ¼ï¼æç» 8 æ ¼ + æ±æ» 4 æ ¼ï¼å®è´¨åå¼ï¼äººå·¥çåæ´ï¼ | è¡ | å | ä½ç½® | 人工ç | 软件ç | 说æ | | --- | --- | --- | --- | --- | --- | | R9 | H9 | å 计ï¼èªå¼å§å»ºè®¾ç´¯è®¡ï¼ | 622591.3 | 622591.2565 | 人工çåèäºå ¥å° 1 ä½ | | R9 | J9 | å 计ï¼èªå¹´åç´¯è®¡ï¼ | 43225.9 | 43225.8565 | åä¸ | | R42 | H42 | è¥é³å¸ï¼å¸å·è¡ï¼ | 27985.3 | 27985.2565 | åä¸ | | R42 | J42 | è¥é³å¸ï¼å¸å·è¡ï¼ | 2531 | 2530.9565 | åä¸ | | R49 | H49 | ä¸ãåæç»¼åè¿è¾æå¡ç« | 203 | 202.9565 | åºç¨¿æåå¼ 203 | | R49 | J49 | ä¸ãåæç»¼åè¿è¾æå¡ç« | 203 | 202.9565 | åºç¨¿æåå¼ 203 | | R50 | H50 | è¥å·åºç¨æ²³éå å£ç»¼åè¿è¾æå¡ç« | 203 | 202.9565 | åºç¨¿æåå¼ 203 | | R50 | J50 | è¥å·åºç¨æ²³éå å£ç»¼åè¿è¾æå¡ç« | 203 | 202.9565 | åºç¨¿æåå¼ 203 | | R7 | C7 | æ±æ»-å计ï¼èªå¹´åç´¯è®¡ï¼ | 43225.9 | 43225.8565 | é H/J åæ´ | | R7 | E7 | æ±æ»-å计ï¼å 年度计å%ï¼ | 59.2307223257 | 59.2306627194 | ç±åæ´æ´¾ç | | R12 | C12 | æ±æ»-è¥é³ï¼èªå¹´åç´¯è®¡ï¼ | 2531 | 2530.9565 | ç±åæ´æ´¾ç | | R12 | E12 | æ±æ»-è¥é³ï¼å 年度计å%ï¼ | 125.6927752726 | 125.6906150057 | ç±åæ´æ´¾ç | ### 3.2 ææ¬å·®å¼ 4 æ ¼ | è¡ | å | ä½ç½® | 人工ç | 软件ç | æ ¸å¯¹ç»è®º | | --- | --- | --- | --- | --- | --- | | R26 | M26 | é§è¥¿å¿å®¢è¿æ¢ä¹ä¸å¿ï¼å½¢è±¡è¿åº¦ï¼ | ï¼ç©ºï¼ | æ¢ä¹ä¸å¿ç»æå°é¡¶ï¼å å¢å®æï¼é å¥è®¾æ½å·²å®å | **软件对**ï¼æºæä»¶ãåå °å¸2026å¹´8æåºå®èµäº§ææ¥çµåçæèµè¡¨æ ¼.xlsxãR12 Mãåºå 2026-08 `progress_desc` å为该æåï¼äººå·¥ç沿ç¨åºç¨¿ç空 | | R85 | M85 | éå±±å¿çå¦å®¢è¿ç«ï¼ä¸çº§ç«ï¼ | ï¼ç©ºï¼ | å建工ç¨åºç¡ | **软件对**ï¼æºæä»¶ã2026å¹´8æå¸å®å¸å®¢è¿ç«åºæèµç»è®¡ææ¥è¡¨(1)ç表.xlsãR15 Mãåºå 2026-08 å为ãå建工ç¨åºç¡ãï¼äººå·¥ç空 | | R91 | L91 | 大å¹ä¹¡ç»¼åè¿è¾æå¡ç«ï¼å»ºè®¾é¶æ®µï¼ | å¨å»º | æåæ½å·¥ | **äººå·¥çæ´æ¥è¿**ï¼æºè¡¨ R20 L=䏻使½å·¥ãåºå 8 æ `progress_stage`=䏻使½å·¥ï¼è½¯ä»¶çãæåæ½å·¥ãæ¥èªåºç¨¿ R91 çæ§å¼ï¼å¯¼åºä¸è¦ç L åï¼ | | R116 | M116 | ç¥åæ¶æ¢çº½ç« | 建ææäº§ | 建ææäº§ã | ä» å¤ä¸ä¸ªå¥å·ï¼è½¯ä»¶=åºå å¼ï¼ï¼æ å®è´¨å·®å¼ | > 注ï¼M26/M85 两å¤äººå·¥çä¸ºç©ºï¼æ¯ãäººå·¥çæ²¡ææºè¡¨ç形象è¿åº¦è¡¥è¿å»ãï¼L91 æ¯ã软件çæåºç¨¿æ§çå»ºè®¾é¶æ®µç䏿¥äºãã ## åãç©æµç«åºæèµæç»å·®å¼ï¼140 æ ¼ï¼ ### 4.1 éé¢å·®å¼æå¸å·æ±æ»ï¼è¿æ¯è¦å¤ççéç¹ï¼ | å¸å· | é¡¹ç® | 人工ç | 软件ç | å·® | æ ¸å¯¹ç»è®º | | --- | --- | --- | --- | --- | --- | | æ¦æ± | å¸å·è¡ 累计/èªå¹´å/æ¬æ | 155513.9 / 81366 / 9200 | 146313.9 / 72166 / 10116 | â9200 / â9200 / +916 | **人工ç对**ï¼åºå æ æ¦æ±ç©æµå½ææ°ï¼è½¯ä»¶çæ¯åºç¨¿ 7 æå¼ | | åå ° | å¸å·è¡ 累计/èªå¹´å/æ¬æ | 81182 / 29482 / 1671 | 80888 / 29188 / 1591 | â294 / â294 / â80 | å·® 294 å ¨é¨æ¥èªãå¿«éç©æµäº§ä¸åäºæãï¼è¯¦è§ 4.2ï¼ | | èå· | å¸å·è¡ 累计/èªå¹´å/æ¬æ | 311700.5 / 46548 / 8606 | 303473 / 38320.5 / 1978.6 | â8227.5 / â8227.5 / â6627.4 | **人工ç对**ï¼å·® 8227.5 æ¥èªãä¸å½ä¾éå ¬å®åè´¸ç©æµåãï¼è¯¦è§ 4.2ï¼ | | å¤©é¨ | å¸å·è¡ 累计/èªå¹´å/æ¬æ | 16677.7 / 16677.7 / 500 | ï¼ç©ºï¼ | | **人工ç对**ï¼æºæä»¶æå¼ï¼åºå è¢«åæ 0 | | éå·/æ©æ½/仿¡/æ½æ±/æåº | ä» åç»å°è®¡è¡ | ï¼ç©ºï¼ | = å¸å·å计 | 0 | å¡«è¡¨ä¹ æ¯å·®å¼ï¼éé¢ä¸å²çª | | å计 | 累计/èªå¹´å/æ¬æ | 2064669.55 / 789311.6 / 89644.1 | 2030270.35 / 754912.4 / 83352.7 | â34399.2 / â34399.2 / â6291.4 | æ±æ»ä»¥ä¸å项 | ### 4.2 ä¸ä¸ªãæéæ°ãçè¡ï¼å¿ é¡»ä¿®ï¼ | é¡¹ç® | åæ®µ | 人工ç | 软件ç | åºå 2026-08 | æºæä»¶ | ç»è®º | | --- | --- | --- | --- | --- | --- | --- | | åå °å¸å¿«éç©æµäº§ä¸åäºæï¼åå °å¸ç©æµæ¢çº½éçè¿åºå°ï¼ | 竣工/累计/èªå¹´å/æ¬æ/形象è¿åº¦ | 2029 / 20377 / 3196 / 296 /ãâ¦B3æ°å»ºåºç¡æ½å·¥ãB4åæ¿å¤ç«é¢è£ é¥°è£ ä¿®æ½å·¥ãã | 2026 / 20081 / 2900 / 214 /ãâ¦B3ãB7æ°å»ºåºç¡æ½å·¥ãã | `id=181` = 20377/3196/296ï¼`id=154` ææ°åªå° 2026-07 = 20081/2900/214 | åå °æ±æ»è¡¨ R71 = 2029/20377/3196/296 | **软件çæäºæ§æ¡£ `id=154`**ï¼åºå åå¹¶/å éå¤é¡¹ç®ä¸»æ¡£ | | ä¸å½ä¾éå ¬å®åè´¸ç©æµåï¼å ¬å®å¿åéééé ä¸å¿ï¼ | 累计/èªå¹´å/æ¬æ/形象è¿åº¦ | 15986 / 15986 / 8227.5 /ãæ¯ä»åå°æ¬¾ï¼å®æå建â¦ã | 7758.5 / 7758.5 / 1600.1 /ã宿å建ãè£ é¥°â¦ã | 15986 / 15986 / 8227.5 /ãæ¯ä»åå°æ¬¾ï¼å®æå建â¦ã | èå· 8 ææ¥ç R21 åä¸ | **软件çå 项ç®åä¸å¹é æªè¦ç**ï¼åºå åå¤ä¸ä¸ªç¹ï¼ï¼ç¨äºåºç¨¿ 7 æå¼ | | 天é¨å¸ç©æµä¸å¿å»ºè®¾é¡¹ç® | 累计/èªå¹´å/æ¬æ | 16677.7 / 16677.7 / 500 | 0 / 0 / 0 | 0 / 0 / 0ï¼å¯¼å ¥åæ 0ï¼ | å¤©é¨ 8 ææºæä»¶ R13 = 16677.7 / 16677.7 / 500 | **å¯¼å ¥ä¸¢æ°**ï¼ä¸æ¯å¯¼åºé®é¢ï¼ï¼éä¿®å¯¼å ¥ + éå¯¼å¤©é¨ | ### 4.3 ææ¬ä¸å段差å¼ï¼å»ºè®¾æ§è´¨ / å»ºè®¾é¶æ®µ / 形象è¿åº¦ / å·¥æï¼ | è¡ | å | é¡¹ç® / ä½ç½® | 人工ç | 软件ç | æ ¸å¯¹ç»è®º | | --- | --- | --- | --- | --- | --- | | R27 | L27 | é»ç³å¤§å¶æ¹é«æ°åºæºæ §å·é¾ç©æµå | å¨å»º | æå | æºè¡¨/åºå =å¨å»ºï¼è½¯ä»¶=åºç¨¿æ§å¼ãæåã | | R35 | L35 | åå °ç产æå¡åå½å®¶ç©æµæ¢çº½å·¥ç¨é¡¹ç® | å¨å»º | åæ | æºè¡¨/åºå =å¨å»ºï¼è½¯ä»¶=åºç¨¿æ§å¼ãåæã | | R75 | L75 | è¥é³é«æ°åºç©æµåå±ä¸å¿é¡¹ç®âå·é¾äº§ä¸éæä¸å¿ | å®å·¥ | å¨å»º | æºè¡¨ R17 L=å®å·¥ï¼è½¯ä»¶=åºç¨¿æ§å¼ | | R47 | M47 | ç§å½å¿èæ©äº§ä¸ç»¼åç©æµä¸å¿ | å®å·¥ | äºæä¸»ä½å·¥ç¨å®æï¼æ£å¨è¿è¡é å¥å·¥ç¨æ½å·¥ã | 软件=æºè¡¨/åºå åæï¼äººå·¥çåäºç®å | | R48 | D48 | å®é½ä¾éåè´¸ç©æµåï¼å»ºè®¾æ§è´¨ï¼ | ç»å»º | æ°å»º | æºè¡¨ R7 D=ç»å»º â 人工ç对 | | R49 | D49 | é¿é³å¿å乡å·é¾ç©æµååå ¶é å¥è®¾æ½å»ºè®¾é¡¹ç® | ç»å»º | æ°å»º | æºè¡¨ R8 D=ç»å»º â 人工ç对 | | R51 | D51 | æ¨å®¶å±ç«ç©æµè®¾å¤æ´æ°æ¹é é¡¹ç® | æ¹å»º | æ°å»º | æºè¡¨ R10 D=æ°å»º â 软件对 | | R67 | F67 | ä¼ åéè¥¿åæºæ §ç©æµä¸å¿é¡¹ç®ï¼ç«£å·¥æ¶é´ï¼ | 46539ï¼æ¥æ 2027-06-01ï¼ | 2026å¹´10æ | æºè¡¨ R7 F=ã2027å¹´6æãâ 人工ç对ï¼è½¯ä»¶ç弿¥æºä¸æ | | R75 | E75/F75 | è¥é³é«æ°åºç©æµåå±ä¸å¿é¡¹ç® | 45292 / 46600ï¼æ¥ææ ¼å¼ï¼ | 2024 / 2027 | æ°å¼åä¹ï¼2024å¹´1æ / 2027å¹´8æï¼ï¼å±æ ¼å¼å·®å¼ | | R51âR54 | M51âM54 | 宿 4 个项ç®å½¢è±¡è¿åº¦ | 䏻使½å·¥ | 䏻使½å·¥ã | ä» å¥å·ï¼æºè¡¨å¸¦å¥å·ï¼ | | R82 | M82 | æ¦æ±ä¸å¨Â·åä¸å·é¾æ¸¯ | ï¼ç©ºï¼ | å·åºä¸»ä½æ½å·¥ | 软件=æºè¡¨/åºå ï¼äººå·¥ç空ï¼åºç¨¿ç©ºï¼ | | R94 | M94 | æ¹åæå³°å½é ç©æµå | â¦æ£å¼æå ¥è¿è¥ | â¦æ£å¼æå ¥è¿è¥ã | ä» å¥å· | | R119 | M119 | ä¸å½ä¾éå ¬å®åè´¸ç©æµå | æ¯ä»åå°æ¬¾ï¼å®æå建⦠| 宿å建ãè£ é¥°â¦ | è§ 4.2 | | R136 | M136 | æ¦æ±åä¼ ååå¸ç©æµä¸å¿ | 建设é å¥åå ¬åé£å ï¼ä¸æå·²å®å·¥ | 建设é å¥åå ¬åé£å | 人工çå¤ã䏿已å®å·¥ãï¼åºç¨¿ L ååæ ·åçã䏿已å®å·¥ãï¼ | | R145 | M145 | åº·åæºæ §ç©æµå | æ¬ææ 建设å 容 | æ¬ææ 建设è¿å± | æªè¾ä¸åï¼éä¸å¡å®ç¨¿ | | R156 | M156 | æ°çç©èµåå¸é éåä»å¨ç©æµå»ºè®¾é¡¹ç® | 2026å¹´07æâ¦7ææèµé¢ï¼53ä¸å æ´ | 2026å¹´08æâ¦ | **软件对**ï¼åºå 8 æåæï¼ï¼äººå·¥çæ¯ 7 ææåæªæ´æ° | | R184 | M184 | 天é¨å¸ç©æµä¸å¿å»ºè®¾é¡¹ç® | 1.2.3#åæ¿å¨å´éè·¯ç ¼æµçå®æâ¦ | 4æ åæ¿åå ¬å®¤ï¼å«çé´â¦ | 两份åå«åèªæºè¡¨ç两个ä¸åä½ç½®ï¼æºè¡¨åæ¶å«ä¸¤æ®µï¼ | | R92 | M92 | æ²æ´å¤å¼èè¿ç°ä»£ç©æµå | é¿ææ¬ | é¿ææ¬ | å 容æå¢å ï¼æºè¡¨ 8 æä¸ºè½¯ä»¶çï¼ | ### 4.4 ã0ãä¸ã空ç½ãç忳差å¼ï¼ä¸å½±åéé¢ï¼ | è¡ | å | ä½ç½® | 人工ç | 软件ç | | --- | --- | --- | --- | --- | | R41 | I41 / K41 | åå ° åã使ç¨ç¤¾ä¼èµéå»ºè®¾é¡¹ç® | 0 / 0 | ï¼ç©ºï¼ | | R96 | K96 | èé¨ åã使ç¨ç¤¾ä¼èµéå»ºè®¾é¡¹ç® | 0 | ï¼ç©ºï¼ | | R175 | K175 | æ½æ±ï¼å¸å·è¡ï¼ | 0 | ï¼ç©ºï¼ | | R187 | K187 | æåºï¼å¸å·è¡ï¼ | 0 | ï¼ç©ºï¼ | | R8 | G8 / H8 | åå¸å·è§åå å¤-è¥é³ï¼è§åå¤é¡¹ç®ä¸ªæ°/æèµï¼ | 0 / 0 | ï¼ç©ºï¼ | | R18 | E18 | åå¸å·è§åå å¤-æ½æ± | 0 | ï¼ç©ºï¼ | | R22 / R24 | D22 / D24 | å¸å·æ±æ»-æ½æ± / æåºï¼æ¬æå®æï¼ | 0 | ï¼ç©ºï¼ | ### 4.5 å ¨é差弿¸ åï¼156 æ ¼ï¼ #### 客è¿-æç»ï¼é¡µç¾ãæç»ãï¼ | è¡ | å | ä½ç½® | 人工ç | 软件ç | | --- | --- | --- | --- | --- | | R9 | H9 | å 计 | 622591.3 | 622591.2565 | | R9 | J9 | å 计 | 43225.9 | 43225.8565 | | R26 | M26 | é§è¥¿å¿å®¢è¿æ¢ä¹ä¸å¿ | (空) | æ¢ä¹ä¸å¿ç»æå°é¡¶ï¼å å¢å®æï¼é å¥è®¾æ½å·²å®å | | R42 | H42 | è¥é³å¸ï¼å¸å·è¡ï¼ | 27985.3 | 27985.2565 | | R42 | J42 | è¥é³å¸ï¼å¸å·è¡ï¼ | 2531 | 2530.9565 | | R49 | H49 | ä¸ãåæç»¼åè¿è¾æå¡ç« | 203 | 202.9565 | | R49 | J49 | ä¸ãåæç»¼åè¿è¾æå¡ç« | 203 | 202.9565 | | R50 | H50 | è¥å·åºç¨æ²³éå å£ç»¼åè¿è¾æå¡ç« | 203 | 202.9565 | | R50 | J50 | è¥å·åºç¨æ²³éå å£ç»¼åè¿è¾æå¡ç« | 203 | 202.9565 | | R85 | M85 | éå±±å¿çå¦å®¢è¿ç«ï¼ä¸çº§ç«ï¼ | (空) | å建工ç¨åºç¡ | | R91 | L91 | 大å¹ä¹¡ç»¼åè¿è¾æå¡ç« | å¨å»º | æåæ½å·¥ | | R116 | M116 | ç¥åæ¶æ¢çº½ç« | 建ææäº§ | 建ææäº§ã | #### 客è¿-æ±æ»ï¼é¡µç¾ãæ±æ»ãï¼ | è¡ | å | ä½ç½® | 人工ç | 软件ç | | --- | --- | --- | --- | --- | | R7 | C7 | å计 | 43225.9 | 43225.8565 | | R7 | E7 | å计 | 59.2307223257 | 59.2306627194 | | R12 | C12 | è¥é³ | 2531 | 2530.9565 | | R12 | E12 | è¥é³ | 125.6927752726 | 125.6906150057 | #### ç©æµ-åé¡¹ç®æèµå®ææ åµï¼é¡µç¾ã åé¡¹ç®æèµå®ææ åµãï¼å ± 108 æ ¼ï¼ | è¡ | å | ä½ç½® | 人工ç | 软件ç | | --- | --- | --- | --- | --- | | R7 | H7 | å计 | 2064669.55 | 2030270.35 | | R7 | J7 | å计 | 789311.6 | 754912.4 | | R7 | K7 | å计 | 89644.1 | 83352.7 | | R8 | H8 | æ¦æ±ï¼å¸å·è¡ï¼ | 155513.9 | 146313.9 | | R8 | J8 | æ¦æ±ï¼å¸å·è¡ï¼ | 81366 | 72166 | | R8 | K8 | æ¦æ±ï¼å¸å·è¡ï¼ | 9200 | 10116 | | R11 | H11 | æ¦æ± ä¸ãçº³å ¥è§åæªä½¿ç¨çé¨çº§èµéå»ºè®¾é¡¹ç® | 129483.9 | 122383.9 | | R11 | J11 | æ¦æ± ä¸ãçº³å ¥è§åæªä½¿ç¨çé¨çº§èµéå»ºè®¾é¡¹ç® | 55336 | 48236 | | R11 | K11 | æ¦æ± ä¸ãçº³å ¥è§åæªä½¿ç¨çé¨çº§èµéå»ºè®¾é¡¹ç® | 7100 | 6716 | | R12 | H12 | æ¦æ± èªåæºæ §ç©æµå | 62081.8 | 59081.8 | | R12 | J12 | æ¦æ± èªåæºæ §ç©æµå | 17475 | 14475 | | R12 | K12 | æ¦æ± èªåæºæ §ç©æµå | 3000 | 2500 | | R13 | K13 | æ¦æ± ä¸éä¾åºé¾æ¹å管çä¸å¿é¡¹ç® | 0 | 416 | | R14 | H14 | æ¦æ± é³é»æ¸¯éæ°´èè¿äºæä¸æ¬§çåéç»ä¸å¿ | 6400 | 6100 | | R14 | J14 | æ¦æ± é³é»æ¸¯éæ°´èè¿äºæä¸æ¬§çåéç»ä¸å¿ | 6400 | 6100 | | R15 | H15 | æ¦æ± æå ééåä¸ç©æµæ¢çº½åºå°é¡¹ç® | 27746 | 23946 | | R15 | J15 | æ¦æ± æå ééåä¸ç©æµæ¢çº½åºå°é¡¹ç® | 27746 | 23946 | | R15 | K15 | æ¦æ± æå ééåä¸ç©æµæ¢çº½åºå°é¡¹ç® | 3800 | 3500 | | R16 | H16 | æ¦æ± åã使ç¨ç¤¾ä¼èµéå»ºè®¾é¡¹ç® | 26030 | 23930 | | R16 | J16 | æ¦æ± åã使ç¨ç¤¾ä¼èµéå»ºè®¾é¡¹ç® | 26030 | 23930 | | R16 | K16 | æ¦æ± åã使ç¨ç¤¾ä¼èµéå»ºè®¾é¡¹ç® | 2100 | 3400 | | R17 | H17 | æ¦æ± æ¹åè¿ç¿è¾¾ä¾åºé¾æ»é¨ç ååç产åºå°é¡¹ç® | 17730 | 16630 | | R17 | J17 | æ¦æ± æ¹åè¿ç¿è¾¾ä¾åºé¾æ»é¨ç ååç产åºå°é¡¹ç® | 17730 | 16630 | | R17 | K17 | æ¦æ± æ¹åè¿ç¿è¾¾ä¾åºé¾æ»é¨ç ååç产åºå°é¡¹ç® | 1100 | 2900 | | R18 | H18 | æ¦æ± åä¸å°åºåå¦åä»åºé¡¹ç® | 8300 | 7300 | | R18 | J18 | æ¦æ± åä¸å°åºåå¦åä»åºé¡¹ç® | 8300 | 7300 | | R18 | K18 | æ¦æ± åä¸å°åºåå¦åä»åºé¡¹ç® | 1000 | 500 | | R27 | L27 | é»ç³ é»ç³å¤§å¶æ¹é«æ°åºæºæ §å·é¾ç©æµå | å¨å»º | æå | | R31 | H31 | åå °ï¼å¸å·è¡ï¼ | 81182 | 80888 | | R31 | J31 | åå °ï¼å¸å·è¡ï¼ | 29482 | 29188 | | R31 | K31 | åå °ï¼å¸å·è¡ï¼ | 1671 | 1591 | | R34 | H34 | åå ° ä¸ãçº³å ¥è§åæªä½¿ç¨çé¨çº§èµéå»ºè®¾é¡¹ç® | 80152 | 79858 | | R34 | J34 | åå ° ä¸ãçº³å ¥è§åæªä½¿ç¨çé¨çº§èµéå»ºè®¾é¡¹ç® | 28452 | 28158 | | R34 | K34 | åå ° ä¸ãçº³å ¥è§åæªä½¿ç¨çé¨çº§èµéå»ºè®¾é¡¹ç® | 1671 | 1591 | | R35 | H35 | åå ° åå °ç产æå¡åå½å®¶ç©æµæ¢çº½å·¥ç¨é¡¹ç® | 11047 | 11049 | | R35 | J35 | åå ° åå °ç产æå¡åå½å®¶ç©æµæ¢çº½å·¥ç¨é¡¹ç® | 589 | 591 | | R35 | K35 | åå ° åå °ç产æå¡åå½å®¶ç©æµæ¢çº½å·¥ç¨é¡¹ç® | 0 | 2 | | R35 | L35 | åå ° åå °ç产æå¡åå½å®¶ç©æµæ¢çº½å·¥ç¨é¡¹ç® | å¨å»º | åæ | | R36 | F36 | åå ° åå °å¸å¿«éç©æµäº§ä¸åäºæï¼åå °å¸ç©æµæ¢çº½éçè¿åºå°ï¼ | 2029 | 2026 | | R36 | H36 | åå ° åå °å¸å¿«éç©æµäº§ä¸åäºæï¼åå °å¸ç©æµæ¢çº½éçè¿åºå°ï¼ | 20377 | 20081 | | R36 | J36 | åå ° åå °å¸å¿«éç©æµäº§ä¸åäºæï¼åå °å¸ç©æµæ¢çº½éçè¿åºå°ï¼ | 3196 | 2900 | | R36 | K36 | åå ° åå °å¸å¿«éç©æµäº§ä¸åäºæï¼åå °å¸ç©æµæ¢çº½éçè¿åºå°ï¼ | 296 | 214 | | R36 | M36 | åå ° åå °å¸å¿«éç©æµäº§ä¸åäºæï¼åå °å¸ç©æµæ¢çº½éçè¿åºå°ï¼ | â¦B3æ°å»ºåºç¡æ½å·¥ãB4åæ¿å¤ç«é¢è£ é¥°è£ ä¿®æ½å·¥ã | â¦B3ãB7æ°å»ºåºç¡æ½å·¥ã | | R41 | I41 | åå ° åã使ç¨ç¤¾ä¼èµéå»ºè®¾é¡¹ç® | 0 | (空) | | R41 | K41 | åå ° åã使ç¨ç¤¾ä¼èµéå»ºè®¾é¡¹ç® | 0 | (空) | | R47 | M47 | 宿 ç§å½å¿èæ©äº§ä¸ç»¼åç©æµä¸å¿ | å®å·¥ | äºæä¸»ä½å·¥ç¨å®æï¼æ£å¨è¿è¡é å¥å·¥ç¨æ½å·¥ã | | R48 | D48 | 宿 å®é½ä¾éåè´¸ç©æµå | ç»å»º | æ°å»º | | R49 | D49 | 宿 é¿é³å¿å乡å·é¾ç©æµååå ¶é å¥è®¾æ½å»ºè®¾é¡¹ç® | ç»å»º | æ°å»º | | R51 | D51 | 宿 æ¨å®¶å±ç«ç©æµè®¾å¤æ´æ°æ¹é é¡¹ç® | æ¹å»º | æ°å»º | | R51 | M51 | 宿 æ¨å®¶å±ç«ç©æµè®¾å¤æ´æ°æ¹é é¡¹ç® | 䏻使½å·¥ | 䏻使½å·¥ã | | R52 | M52 | 宿 ä¸å³¡ä¸´ç©ºåè´¸ç©æµå | 䏻使½å·¥ | 䏻使½å·¥ã | | R53 | M53 | 宿 æ¹åç¦æ»æºé£åæéå ¬å¸æ°´ææ·±å å·¥åæºæ §å·é¾ç©æµä»å¨é¡¹ç® | 䏻使½å·¥ | 䏻使½å·¥ã | | R54 | M54 | 宿 ææ±å¸é¡¾å®¶åºä»å¨ç©æµä¸å¿ï¼ä¸æï¼ | 䏻使½å·¥ | 䏻使½å·¥ã | | R67 | F67 | è¥é³ ä¼ åéè¥¿åæºæ §ç©æµä¸å¿é¡¹ç® | 46539ï¼2027-06-01ï¼ | 2026å¹´10æ | | R75 | E75 | è¥é³ è¥é³é«æ°åºç©æµåå±ä¸å¿é¡¹ç®âå·é¾äº§ä¸éæä¸å¿ | 45292ï¼2024-01-01ï¼ | 2024 | | R75 | F75 | è¥é³ è¥é³é«æ°åºç©æµåå±ä¸å¿é¡¹ç®âå·é¾äº§ä¸éæä¸å¿ | 46600ï¼2027-08-01ï¼ | 2027 | | R75 | L75 | è¥é³ è¥é³é«æ°åºç©æµåå±ä¸å¿é¡¹ç®âå·é¾äº§ä¸éæä¸å¿ | å®å·¥ | å¨å»º | | R80 | G80 | éå· ä¸ãçº³å ¥è§åæªä½¿ç¨çé¨çº§èµéå»ºè®¾é¡¹ç® | (空) | 270490 | | R80 | H80 | éå· ä¸ãçº³å ¥è§åæªä½¿ç¨çé¨çº§èµéå»ºè®¾é¡¹ç® | (空) | 169345.2 | | R80 | I80 | éå· ä¸ãçº³å ¥è§åæªä½¿ç¨çé¨çº§èµéå»ºè®¾é¡¹ç® | (空) | 21000 | | R80 | J80 | éå· ä¸ãçº³å ¥è§åæªä½¿ç¨çé¨çº§èµéå»ºè®¾é¡¹ç® | (空) | 12289.1 | | R80 | K80 | éå· ä¸ãçº³å ¥è§åæªä½¿ç¨çé¨çº§èµéå»ºè®¾é¡¹ç® | (空) | 1250 | | R82 | M82 | éå· æ¦æ±ä¸å¨Â·åä¸å·é¾æ¸¯ | (空) | å·åºä¸»ä½æ½å·¥ | | R92 | M92 | èé¨ æ²æ´å¤å¼èè¿ç°ä»£ç©æµå | ï¼é¿ææ¬ï¼è§æºæä»¶å·®å¼ï¼ | ï¼é¿ææ¬ï¼ | | R94 | M94 | èé¨ æ¹åæå³°å½é ç©æµå | â¦æ£å¼æå ¥è¿è¥ | â¦æ£å¼æå ¥è¿è¥ã | | R96 | K96 | èé¨ åã使ç¨ç¤¾ä¼èµéå»ºè®¾é¡¹ç® | 0 | (空) | | R110 | H110 | èå·ï¼å¸å·è¡ï¼ | 311700.5 | 303473 | | R110 | J110 | èå·ï¼å¸å·è¡ï¼ | 46548 | 38320.5 | | R110 | K110 | èå·ï¼å¸å·è¡ï¼ | 8606 | 1978.6 | | R113 | H113 | èå· ä¸ãçº³å ¥è§åæªä½¿ç¨çé¨çº§èµéå»ºè®¾é¡¹ç® | 84799.7 | 76572.2 | | R113 | J113 | èå· ä¸ãçº³å ¥è§åæªä½¿ç¨çé¨çº§èµéå»ºè®¾é¡¹ç® | 22044.6 | 13817.1 | | R113 | K113 | èå· ä¸ãçº³å ¥è§åæªä½¿ç¨çé¨çº§èµéå»ºè®¾é¡¹ç® | 8441 | 1813.6 | | R119 | H119 | èå· ä¸å½ä¾éå ¬å®åè´¸ç©æµåï¼å ¬å®å¿åéééé ä¸å¿ï¼ | 15986 | 7758.5 | | R119 | J119 | èå· ä¸å½ä¾éå ¬å®åè´¸ç©æµåï¼å ¬å®å¿åéééé ä¸å¿ï¼ | 15986 | 7758.5 | | R119 | K119 | èå· ä¸å½ä¾éå ¬å®åè´¸ç©æµåï¼å ¬å®å¿åéééé ä¸å¿ï¼ | 8227.5 | 1600.1 | | R119 | M119 | èå· ä¸å½ä¾éå ¬å®åè´¸ç©æµåï¼å ¬å®å¿åéééé ä¸å¿ï¼ | æ¯ä»åå°æ¬¾ï¼å®æå建ãè£ é¥°ãæºçµãæ¶é²ã叿¿çå·¥ç¨ | 宿å建ãè£ é¥°ãæºçµãæ¶é²ã叿¿çå·¥ç¨ | | R136 | M136 | é»å æ¦æ±åä¼ ååå¸ç©æµä¸å¿ | 建设é å¥åå ¬åé£å ï¼ä¸æå·²å®å·¥ | 建设é å¥åå ¬åé£å | | R145 | M145 | å¸å® åº·åæºæ §ç©æµå | æ¬ææ 建设å 容 | æ¬ææ 建设è¿å± | | R156 | M156 | éå· æ°çç©èµåå¸é éåä»å¨ç©æµå»ºè®¾é¡¹ç® | 2026å¹´07æâ¦ï¼7 ææåï¼ | 2026å¹´08æâ¦ï¼8 ææåï¼ | | R160 | G160 | æ©æ½ ä¸ãçº³å ¥è§åæªä½¿ç¨çé¨çº§èµéå»ºè®¾é¡¹ç® | (空) | 308255 | | R160 | H160 | æ©æ½ ä¸ãçº³å ¥è§åæªä½¿ç¨çé¨çº§èµéå»ºè®¾é¡¹ç® | (空) | 126741 | | R160 | I160 | æ©æ½ ä¸ãçº³å ¥è§åæªä½¿ç¨çé¨çº§èµéå»ºè®¾é¡¹ç® | (空) | 49800 | | R160 | J160 | æ©æ½ ä¸ãçº³å ¥è§åæªä½¿ç¨çé¨çº§èµéå»ºè®¾é¡¹ç® | (空) | 41574 | | R160 | K160 | æ©æ½ ä¸ãçº³å ¥è§åæªä½¿ç¨çé¨çº§èµéå»ºè®¾é¡¹ç® | (空) | 2116 | | R170 | G170 | 仿¡ äºã使ç¨ççæ²¹ç¨è¿è¿èµéå»ºè®¾é¡¹ç® | (空) | 123710.5 | | R170 | H170 | 仿¡ äºã使ç¨ççæ²¹ç¨è¿è¿èµéå»ºè®¾é¡¹ç® | (空) | 29403 | | R170 | I170 | 仿¡ äºã使ç¨ççæ²¹ç¨è¿è¿èµéå»ºè®¾é¡¹ç® | (空) | 39200 | | R170 | J170 | 仿¡ äºã使ç¨ççæ²¹ç¨è¿è¿èµéå»ºè®¾é¡¹ç® | (空) | 29403 | | R170 | K170 | 仿¡ äºã使ç¨ççæ²¹ç¨è¿è¿èµéå»ºè®¾é¡¹ç® | (空) | 3782 | | R175 | K175 | æ½æ±ï¼å¸å·è¡ï¼ | 0 | (空) | | R179 | G179 | æ½æ± åã使ç¨ç¤¾ä¼èµéå»ºè®¾é¡¹ç® | (空) | 22000 | | R179 | H179 | æ½æ± åã使ç¨ç¤¾ä¼èµéå»ºè®¾é¡¹ç® | (空) | 11947.9 | | R179 | I179 | æ½æ± åã使ç¨ç¤¾ä¼èµéå»ºè®¾é¡¹ç® | (空) | 12000 | | R179 | J179 | æ½æ± åã使ç¨ç¤¾ä¼èµéå»ºè®¾é¡¹ç® | (空) | 1135 | | R181 | H181 | 天é¨ï¼å¸å·è¡ï¼ | 16677.7 | (空) | | R181 | J181 | 天é¨ï¼å¸å·è¡ï¼ | 16677.7 | (空) | | R181 | K181 | 天é¨ï¼å¸å·è¡ï¼ | 500 | (空) | | R183 | G183 | å¤©é¨ äºã使ç¨ççæ²¹ç¨è¿è¿èµéå»ºè®¾é¡¹ç® | (空) | 36835 | | R183 | I183 | å¤©é¨ äºã使ç¨ççæ²¹ç¨è¿è¿èµéå»ºè®¾é¡¹ç® | (空) | 30635 | | R184 | H184 | å¤©é¨ å¤©é¨å¸ç©æµä¸å¿å»ºè®¾é¡¹ç® | 16677.7 | 0 | | R184 | J184 | å¤©é¨ å¤©é¨å¸ç©æµä¸å¿å»ºè®¾é¡¹ç® | 16677.7 | 0 | | R184 | K184 | å¤©é¨ å¤©é¨å¸ç©æµä¸å¿å»ºè®¾é¡¹ç® | 500 | 0 | | R184 | M184 | å¤©é¨ å¤©é¨å¸ç©æµä¸å¿å»ºè®¾é¡¹ç® | 1.2.3#åæ¿å¨å´éè·¯ç ¼æµçå®æâ¦æ¥å ¥å¸æ¿é¨æ±¡æ°´å£ç®¡é | 4æ åæ¿åå ¬å®¤â¦åå·åæ¿ç ä½å¢å®æäºæç»æå®æã | | R187 | K187 | æåºï¼å¸å·è¡ï¼ | 0 | (空) | | R189 | G189 | æåº äºã使ç¨ççæ²¹ç¨è¿è¿èµéå»ºè®¾é¡¹ç® | (空) | 7440.35 | | R189 | H189 | æåº äºã使ç¨ççæ²¹ç¨è¿è¿èµéå»ºè®¾é¡¹ç® | (空) | 7535.45 | | R189 | I189 | æåº äºã使ç¨ççæ²¹ç¨è¿è¿èµéå»ºè®¾é¡¹ç® | (空) | 31 | | R189 | J189 | æåº äºã使ç¨ççæ²¹ç¨è¿è¿èµéå»ºè®¾é¡¹ç® | (空) | 26.1 | #### ç©æµ-åå¸å·è§åå å¤é¡¹ç®å®ææ åµï¼15 æ ¼ï¼ | è¡ | å | ä½ç½® | 人工ç | 软件ç | | --- | --- | --- | --- | --- | | R4 | D4 | æ¦æ± | 81366 | 72166 | | R4 | F4 | æ¦æ± | 55336 | 48236 | | R4 | H4 | æ¦æ± | 26030 | 23930 | | R6 | D6 | åå ° | 29482 | 29188 | | R6 | F6 | åå ° | 28452 | 28158 | | R8 | G8 | è¥é³ | 0 | (空) | | R8 | H8 | è¥é³ | 0 | (空) | | R12 | D12 | èå· | 46548 | 38320.5 | | R12 | F12 | èå· | 22044.6 | 13817.1 | | R18 | E18 | æ½æ± | 0 | (空) | | R19 | D19 | å¤©é¨ | 16677.7 | (空) | | R19 | F19 | å¤©é¨ | 16677.7 | (空) | | R21 | D21 | å计 | 789311.6 | 754912.4 | | R21 | F21 | å计 | 661947 | 629647.8 | | R21 | H21 | å计 | 127364.6 | 125264.6 | #### ç©æµ-å¸å·æ±æ»ï¼17 æ ¼ï¼ | è¡ | å | ä½ç½® | 人工ç | 软件ç | | --- | --- | --- | --- | --- | | R7 | C7 | å计 | 789311.6 | 754912.4 | | R7 | D7 | å计 | 89644.1 | 83352.7 | | R7 | E7 | å计 | 79.4316061253 | 75.9698760489 | | R8 | C8 | æ¦æ± | 81366 | 72166 | | R8 | D8 | æ¦æ± | 9200 | 10116 | | R8 | E8 | æ¦æ± | 76.5437441204 | 67.8889934149 | | R10 | C10 | åå ° | 29482 | 29188 | | R10 | D10 | åå ° | 1671 | 1591 | | R10 | E10 | åå ° | 139.0660377358 | 137.679245283 | | R16 | C16 | èå· | 46548 | 38320.5 | | R16 | D16 | èå· | 8606 | 1978.6 | | R16 | E16 | èå· | 78.2319327731 | 64.4042016807 | | R22 | D22 | æ½æ± | 0 | (空) | | R23 | C23 | å¤©é¨ | 16677.7 | (空) | | R23 | D23 | å¤©é¨ | 500 | (空) | | R23 | E23 | å¤©é¨ | 54.4400195854 | 0 | | R24 | D24 | æåº | 0 | (空) | #### ç©æµ-æ2ï¼0 æ ¼ï¼ å®å ¨ä¸è´ï¼æ å·®å¼ã ## äºãå¤ç½®å»ºè®®ï¼æä¼å çº§ï¼ 1. **ãP0ãä¿®ãæé¡¹ç®åå¹é ãçèå¼±æ§**ï¼æç»è¡¨è¡åä¸åºå 项ç®åä¸ä¸è´ï¼å¤ç¹/å°æ¬å·/æ°æ§åå¹¶åï¼å°±æ´è¡ä¸è¦çã建议æ¹ä¸ºæãå¸å· + åºå·/项ç®åå½ä¸åï¼å»æ ç¹ç©ºæ ¼ï¼+ å»ºåºæ¶é´ãå¹é ï¼å¹é ä¸å°æ¶**å¿ é¡»å¨è¿è¡æ¥å¿/æ ¡éªæ¥éä¸ååºè¡å·**ï¼ç¬¦åç¨æ·ãå¯¼å ¥å¤±è´¥è¦æ¾ç¤ºè¡å·ãçè¦æ±ï¼ã 2. **ãP0ãä¿®å¯¼å ¥ä¸¢æ°ï¼å¤©é¨ï¼**ï¼æ ¸å¯¹ã8æä»½ç©æµåä¸å¿é¡¹ç®(天é¨).xlsxãç H/J/K ä¸åæ å°ï¼ä¿®å¤åé导ï¼å¤æ¥ `investment_monthly` 2026-08ã 3. **ãP0ãæ¸ çéå¤é¡¹ç®ä¸»æ¡£**ï¼åå °ãå¿«éç©æµäº§ä¸åäºæã`id=154`ï¼2026 竣工ï¼ä¸ `id=181`ï¼2029 竣工ï¼å¹¶åï¼åºå åå¹¶ååå¯¼åºæ¯å¯¹ï¼åç±»åå²éå项ç®å»ºè®®å ¨è¡¨æ«ä¸éã 4. **ãP1ã导åºè¡¥å Lï¼å»ºè®¾é¶æ®µï¼**ï¼ç®å L 沿ç¨åºç¨¿ï¼å¯¼è´ãæå/åæ/å¨å»ºãè¿ç±»é¶æ®µä¿¡æ¯å¯è½æ¯ä¸ä¸æçï¼å»ºè®®ä¸ M 䏿 ·æå½ææ°æ®è¦çã 5. **ãP1ãæ¦æ±ç©æµæ æºè¡¨**ï¼å¯¹åºäº¤æ¥ææ¡£ P1-8ï¼ï¼åºå 0 æ¡å½æè®°å½ï¼å¯¼åºåªè½æ²¿ç¨æ§å¼ï¼è¦ä¹è¡¥æ¦æ±å表ï¼è¦ä¹å¨å¯¼åºæ¶æç¤ºã该å¸å·æ å½ææ°æ®ãã 6. **ãP2ãåç»å°è®¡è¡ä¸ 0/空ç½åæ³**ï¼ä¸ä¸å¡ç¡®è®¤ç»ä¸ï¼äººå·¥çä¸å¡«åæ¸ éåç»è¡ã0 å 0ï¼è½¯ä»¶å¡«ã0 å空ï¼ã 7. **ãP2ãå£å¾ææ¡**ï¼åº·å M145ãæ¬ææ å»ºè®¾å 容/æ¬ææ 建设è¿å±ãã宿 4 å¤å¥å·çï¼å»ºè®®ææºè¡¨åæç»ä¸ï¼é¿å äººå·¥åæ¹ï¼ã ## å ãç»è®º æ¬æ¬¡æ¯å¯¹å ±åç° **156 æ ¼å·®å¼**ï¼å ¶ä¸ï¼ - **ä¼å½±åæ¥çæ°åç**ï¼ç©æµ 3 个项ç®è¡ï¼åå °å¿«é产ä¸åäºæãèå·ä¸å½ä¾éå ¬å®ã天é¨ç©æµä¸å¿ï¼+ æ¦æ±æ´æ®µï¼6 è¡ï¼ï¼å计使软件çç©æµãèªå¼å§ç´¯è®¡ãå° **34399.2 ä¸å **ããèªå¹´å累计ãå° **34399.2 ä¸å **ããæ¬æå®æãå° **6291.4 ä¸å **ï¼ - **ä¸å½±åæ°åãåªå½±åçå¼/å£å¾ç**ï¼åç»å°è®¡è¡å¡«æ³ã0/空ç½åæ³ãå¥å·ãæ¥ææ°åæ ¼å¼çï¼ - **è°å¯¹è°éï¼å·²åæº¯æºæä»¶/åºå ï¼**ï¼ç©æµç 3 个ãæéæ°ãå¤å ¨é¨æ¯**人工ç对**ï¼å®¢è¿ç M26/M85 æ¯**软件ç对**ï¼äººå·¥ç缺形象è¿åº¦ï¼ï¼L91 æ¯**软件çåäºåºç¨¿æ§å¼**ï¼éå· M156 æ¯**软件ç对**ï¼äººå·¥çè¿æ¯ 7 ææåï¼ã 软件çè¦ä¿®çæ¯ãåæ°ãè䏿¯ãç®æ¯ãââåºç¨¿+åç§°å¹é çæºå¶å¨æ°æ®é½å ¨æ¶ç»ææ£ç¡®ï¼ä¸æ¦ã项ç®åä¸ä¸è´ / éååæ¡£ / å½æç¼ºæ°ãå°±ä¼é黿²¿ç¨ä¸æå¼ï¼å±äº**ä¼éé»åºé**çç±»åï¼å»ºè®®æç¬¬äºè 1~3 项ä¼å ä¿®ã docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-22.md
@@ -70,7 +70,7 @@ - ä¸æå·¥æ ¸ç®ä¸è´ï¼å ¬äº¤ 1-8 æ 110776.34 ä¸äººæ¬¡ãè´§è¿ä¼ä¸ 313,998,248 å¨ãè´§è¿éå¨è½¬é 130,311.89 ä¸å¨ã - æ¶å°¾ï¼æç¨æ·è¦æ±æãå ¨çå计ãè¡æå°æåé¢ï¼æ¦æ±å¸ä¹ä¸ï¼ï¼å¯¼åº Excel ä¸å计è¡å ç²ã ### 5. æ±æ»å¤§è¡¨å¯¼åºç»æè½çç¼åï¼ç¨æ·ï¼"ä¸è½½è¿å°±ä¸è¯¥åçå¾ä¹ ï¼è½ä¸è½è®°ä½ä¸æ¬¡ç»æ"ï¼ ### 9. æ±æ»å¤§è¡¨å¯¼åºç»æè½çç¼åï¼ç¨æ·ï¼"ä¸è½½è¿å°±ä¸è¯¥åçå¾ä¹ ï¼è½ä¸è½è®°ä½ä¸æ¬¡ç»æ"ï¼ - **èæ¯**ï¼åæ¥åªæã10 åéå + æé´æ æ°å¯¼å ¥ãç**å å**ç¼åï¼çªå£çãéå¯å³å¤±æ â ç¬¬äºæ¬¡ä¸è½½è¿è¦ç 13~17 ç§ã - **æ¹å¨**ï¼`ReportExportTaskService.java` 为主ï¼ï¼ @@ -79,6 +79,32 @@ 3. åç«¯ææ¡ï¼å½ä¸ç¼åæ¾ç¤ºãæ¬æ¬¡ç´æ¥æ²¿ç¨ <æ¶é´> çæçç»æï¼æé´æ²¡ææ°çæ°æ®å¯¼å ¥ï¼ãï¼å ä¿¡æ¯æ¹ä¸ºã䏿¬¡çæäº â¦ãã - **顺带修 bug**ï¼è½çå½ä¸æ¶ `elapsedMs` ä¸ºè´æ°ï¼ä»»å¡èµ·ç¹ç¨ç°å¨ãç»ææ¶é´æ¯åå²çææ¶é´ï¼â å·²æ¹ä¸ºä»¥çææ¶é´ä½èµ·ç¹ã - **宿µ**ï¼é¦æ¬¡ 12.4 s åç¼åï¼å次æäº¤ **164 ms** å½ä¸å åï¼**éå¯å端åæäº¤ 1.19 s å½ä¸è½ç**ï¼ä¸´æ¶æä¸æ¡å¯¼å ¥è®°å½å `fromCache=false` éæ°çæï¼éªè¯ãææ°å¯¼å ¥å³å¤±æãï¼ï¼æµè§å¨ç¹å¯¼åºç§åºãææ¡ä¸æé®æ£ç¡®ãæ§å¶å° 0 æ¥éã ### 10. 导åºç¼åå®å«åçº§ä¸ºãæ°æ®æçº¹ã+ 失ææç¤ºï¼ç¨æ·ï¼æä½ 说çåï¼ - **èæ¯**ï¼ä¸ä¸çç¼åå®å«ç¨å ¨å± `MAX(import_batch.id)`ï¼â å¯¼å ¥æèµ/è½èçæ å ³æ°æ®ä¼ç½å¤±æï¼â¡**ä¸å«æ¯çæä»¶**ï¼æ¢æ¯çæ¶ä¼é误å½ä¸æ§ç»æï¼æ£ç¡®æ§æ¼æ´ï¼ã - **æ¹å¨**ï¼`ReportExportTaskService.java`ï¼ï¼ 1. æçº¹ =ãä¾èµæºè¡¨ `CHECKSUM TABLE` æ ¡éªåï¼è½ææåå° UPDATEï¼ã+ãæ¯çç®å½å ¨é¨æä»¶ + ç½çº¦è½¦è®¢å xlsx çåç§°/大å°/ä¿®æ¹æ¶é´ãï¼SHA-256 å 8 åèåè¿ç¼åæä»¶åï¼ 2. æºè¡¨èå´ç¨**æé¤æ³**ï¼æé¤æèµ 3 / è½è 2 / å®¡æ ¸ 4 / ç³»ç» 6 / `import_batch`ï¼å ¶ä½å ¨çº³å ¥ï¼å®å¯å¤ç®ä¸å¯åºéï¼ï¼ 3. 失ææç¤ºï¼ç¬¬ 3 æ¥æç¤ºçï¼ï¼æ²¡å½ä¸ä¸ææ§ç»ææ¶ï¼è¿åº¦å¼¹çªæ¾ç¤ºã䏿¬¡çæçç»æå·²å æ°æ®ææ¯çåå失æï¼æ¬æ¬¡æææ°æ°æ®éç®ãã - **宿µ**ï¼æ å ³å¯¼å ¥ï¼æèµé¡¹ç® + å¯¼å ¥è®°å½åæä¸è¡ï¼**ä»å½ä¸**ç¼åï¼ç¸å ³æºè¡¨åå° UPDATEãæ¹æ¯ç mtime **å¿ å®å¤±æ**å¹¶éç®ï¼å½ä¸ç¼åæ¶ä¸åæ®çæç¤ºï¼æµè§å¨å®æµæç¤ºè¡æ¾ç¤ºæ£å¸¸ãæ§å¶å° 0 æ¥éï¼æµè¯æ°æ®å·²å ¨é¨è¿åï¼419 æ¹æ¬¡ / 152 项ç®ï¼ã ### 11. äº¤æ¥æ¶å°¾ï¼åæ¥åäºè¿å± + å©ä½é¡¹æ ¸æ¥ï¼ç¨æ·åå¤å¼æ°ä¼è¯ï¼ - **åäºè¿å±æ ¸å®**ï¼è¿ä¸å¤© xyc / zyj è´¦å·çæäº¤ï¼ï¼æ¹å¨**å ¨é¨éä¸å¨æ±æ»å¤§è¡¨çº¿**ââ `abf468c` ä¸å£å¾æåç´¯è®¡åæ¯åºæ°æ¹ç¨æ¯ç 2025 éæåï¼æ¹æ¡ Aï¼`ReportExportService.java`ï¼ã`47a8734` 软件è¾åºä¸æå·¥å®ç¨¿å·®å¼æ¥åã `ceaa5f2` AGENTS æ¹å ¬å¸ gitea åä»åºã`a5a9545` 09-22 è®°å½ä¸ Codex å¡é¡¿å¤æ ¸ã`zyj` ç 8 ææ¯ç 196 æ ¼ææ¬è½¬æ°å¼ + 差弿¸ åã - **å©ä½å¾ åéæ¡æ ¸æ¥ï¼åäºåæªè§¦ç¢°**ï¼æè¯æ®ï¼ï¼ 1. P0-2ãäº¿å æèµé¡¹ç®ãæ Q7 追å ââ `ReportExportService.java:6251` ä»åå䏿 ¼ï¼ç¬¬ 24 åï¼ï¼æ 追åé»è¾ï¼ 2. P0-3 导åºååºæ°ä½æ£ +ãæ°æ®ç¼ºå¤±æ¸ åã页 ââ `getLastMidIssues()` å ¨ä»åºæ è°ç¨æ¹ï¼ 3. P0-4 缺 2026-06 / 2026-09 æ¯ç ââ æ¯çç®å½æ è¿ä¸¤ä¸ªææä»¶ï¼ 4. P1-7 æèµèµéæ¸ éåç» ââ æ `fund_channel` åæ®µï¼ 5. P1-9 æèµå¯¼åºææåç®å½ + è¿è¡æ¥å¿/æ ¡éªæ¥é ââ æ å®ç°ï¼ 6. P2-1 D ç»ãå¢éæåãæªè¾ ââ æ ãæä¸æåãé»è¾ã - **äº¤æ¥ææ¡£å·²åæ¥**ï¼commit `06b1cb7`ï¼ï¼Â§0 æç´§æ¥æ¸ å 4â3 ä»¶å¹¶ååºä¸é¡¹å·²éç¯ï¼åå °æºæä»¶ / ä¸å£å¾åºæ°åè½¨å¶ / 导åºç¼åï¼ï¼ P1-1 è¡¥æäº¤å· `abf468c`ï¼Â§1.3 ä¸ Â§7.4 ä»ãåä»åºãæ¹ä¸º**å ¬å¸ gitea åä»åº**ï¼Â§6 ç´¢å¼è¡¥åäºä¸¤ä»½ææ¡£ã - **å¾ æ ¸å®ï¼çç»æ°ä¼è¯ï¼**ï¼P2-2ãåå¸å®¢è¿é¡µè¡¨å¤´ä»æ¯æ¥æåºåå·ãå¯è½å·²è¿æ¶ââ代ç éæ `fixCityMonthHeaderText()`ï¼09-03 å å ¥ï¼ ä¼æåå¸å®¢è¿ç±»è¡¨å¤´åºåå·æ¹åæãYYYYå¹´Mæãï¼å»ºè®®è·ä¸æ¬¡ 2026-08 å¯¼åºæ ¸å¯¹å®é 表头ååæ´æ°äº¤æ¥ææ¡£ã ## äºãæµè¯ç»ææè¦ @@ -89,6 +115,7 @@ - æ¥åï¼`docs/åè½æµè¯æ¥å/åè½æµè¯æ¥å_æ°æ®æ¥çæå¸å·æ±æ»ä¸å¯¼åº_2026-09-22.md`ï¼æ¥å£ 10 æ¡ + çæº 4 æ¡å ¨éè¿ï¼ - æ¥åï¼`docs/åè½æµè¯æ¥å/åè½æµè¯æ¥å_æ±æ»å¤§è¡¨è¿åº¦å¼¹çªä¼å_2026-09-22.md`ï¼6 æ¡ç¨ä¾éè¿ï¼çæä¸ç¶æ / 宿æç¤º / 忬¡ä¸è½½èµ°ç¼å / å ³é / æ æ§å¶å°æ¥é / å ¶å®å¯¼åºæªåå½±åï¼ - æ¥åï¼`docs/åè½æµè¯æ¥å/åè½æµè¯æ¥å_æ±æ»å¤§è¡¨å¯¼åºç»æè½çç¼åå¤ç¨_2026-09-22.md`ï¼10 æ¡ç¨ä¾éè¿ï¼é¦æ¬¡çæåç¼å / å åå½ä¸ 164ms / **éå¯åè½çå½ä¸ 1.19s** / ææ°å¯¼å ¥å³å¤±æ / å key åªçææ°çæ¬ / æ¶é¿æ¾ç¤ºä¿®å¤ / æµè§å¨ç«¯å°ç«¯ï¼ - æ¥åï¼`docs/åè½æµè¯æ¥å/åè½æµè¯æ¥å_导åºç¼åæ¹ç¨æ°æ®æçº¹_2026-09-22.md`ï¼12 æ¡ç¨ä¾éè¿ï¼æ å ³å¯¼å ¥ä»å½ä¸ / ç¸å ³æºè¡¨åå° UPDATE å¿ å¤±æ / **æ¢æ¯çå¿ å¤±æ** / 失ææç¤ºæ¾ç¤º / å½ä¸æ æç¤º / æ°æ®è¿åæ ¸å¯¹ï¼ - ç¯å¢ï¼å端 `mvn spring-boot:run`ï¼8090ï¼`Started TrafficAuditApplication`ï¼ï¼å端 `npm run serve`ï¼8080ï¼`Compiled successfully in 4769ms`ï¼ï¼MySQL `localhost:3308/traffic_audit`ï¼ç»å½ admin/123456 å JWTã - ç»æï¼3 个æ°ç±»åæ£åï¼å«æé´/å ³é®åçéï¼ãè´åï¼æªç¥ç±»åãæ æ°æ®æãæ tokenï¼å ¨é¨éè¿ï¼å ¥åºæ½æ¥æ¡æ°ä¸åºå ä¸è´ï¼20 / 20 / 139ï¼ï¼åæ 15 ç±»å彿£å¸¸ã @@ -114,7 +141,27 @@ - å®å«ï¼è°è¯ç«¯å£ 9229 读å `window.__codexPlusRetryTimerGuardInstalled=true`ï¼æ¬æ¬¡ä¼è¯ `window.__codexPlusRetryTimerGuardDropped=16`ã - ç»è®ºï¼è¾å ¥å¡é¡¿ä¿®å¤å¨éå¯åä»çæï¼é®é¢å·²è§£å³ã ## å ãæ±æ»å¤§è¡¨è½¯ä»¶è¾åºä¸æå·¥å®ç¨¿å·®å¼å¤æ ¸ï¼2026-08ï¼ ## å ãæèµæç»è¡¨ãè½¯ä»¶çæ vs 人工çãæ°æ®æ¯å¯¹ï¼2026-08ï¼ ç¨æ·è¦æ±ï¼æè½¯ä»¶çæçã客è¿ç«æèµæç»è¡¨ããç©æµç«åºæèµæç»ãä¸äººå·¥ç»´æ¤ç两份å®ç¨¿éæ ¼æ¯å¯¹ï¼ååºææä¸åã - **æ¯å¯¹æä»¶**ï¼äººå·¥ç `D:\05_æ°æ®åç±»\æèµ\8æ\8æå®¢è¿ç«æèµæç»è¡¨.xlsx`ã`8æç©æµç«åºæèµæç».xls` vs 软件ç `D:\æ¡é¢\çææ°æ®\çæ_æéæ¥è¡¨_2026-08 (1)\çæ_客è¿ç«æèµæç»è¡¨.xlsx`ã`çæ_ç©æµç«åºæèµæç».xls`ã - **æ¯å¯¹æ¹æ³**ï¼èæ¬é页ç¾éæ ¼æ¯å¯¹ï¼`_tmp_diff_invest_0922.py`ï¼ï¼å æ ¸å¯¹ B å项ç®åéè¡å¯¹é½ï¼192/121 è¡å ¨é¨ä¸è´ï¼æ éä½ï¼ï¼åç»è®¡å·®å¼ï¼æååæº¯æºæä»¶ / æ°æ®åº / åºç¨¿æ¨¡æ¿å®ä½æ ¹å ã - **ç»æ**ï¼å ± **156 æ ¼å·®å¼** ââ 客è¿ãæç»ã12 +ãæ±æ»ã4ï¼ç©æµãåé¡¹ç®æèµå®ææ åµã108 +ãåå¸å·è§åå å¤ã15 +ãå¸å·æ±æ»ã17ï¼ãæ2ãæ å·®å¼ã - **æ ¹å ï¼ä¸æ¹è¯æ®éå®ï¼**ï¼ 1. è½¯ä»¶å¯¼åº = å¨åºç¨¿ã模æ¿_Xæâ¦æèµæç»ãä¸ï¼æåºå å½ææ°æ®**æé¡¹ç®åç§°å¹é **è¦ç H/J/K ä¸ Mï¼**å¹é ä¸ä¸æåºå æ 彿æ°å°±é黿²¿ç¨ä¸æå¼** ââ æ¦æ±å¸ç©æµï¼åºå 0 æ¡æåº¦è®°å½ï¼æ´æ®µä¿ç 7 æå¼ï¼èå·ãä¸å½ä¾éå ¬å®åè´¸ç©æµåãï¼åºå åå¤ä¸ä¸ªç¹ï¼å¹é 失败ï¼ä¿ç 7 æå¼ 7758.5/1600.1ï¼åºå /æºè¡¨å®é 15986/8227.5ï¼ã 2. åºå **åååæ¡£**ï¼åå °ãå¿«éç©æµäº§ä¸åäºæãæ `id=154`ï¼ç«£å·¥ 2026ï¼ä¸ `id=181`ï¼ç«£å·¥ 2029ï¼ä¸¤æ¡£ï¼å¯¼åºåå°æ§æ¡£ï¼åäº 7 æå¼ 20081/2900/214ï¼åº 20377/3196/296ï¼ã 3. **å¯¼å ¥ä¸¢æ°**ï¼å¤©é¨ã天é¨å¸ç©æµä¸å¿å»ºè®¾é¡¹ç®ãåºå 2026-08 ç累计/èªå¹´å/æ¬æå ¨æ¯ 0ï¼æºæä»¶æ¯ 16677.7/16677.7/500ï¼P1-5 åè®°å½ãæºæä»¶ H/J/K å为空ãä¸ç°æä»¶ä¸ç¬¦ï¼ã 4. 导åº**ä¸è¦ç Lï¼å»ºè®¾é¶æ®µï¼çééé¢å** â é»ç³å¤§å¶æ¹å·é¾ L=æåãåå °æ¢çº½ L=åæãè¥é³å·é¾ä¸å¿ L=å¨å»ºãéå·æ°çç©èµ M ç 7 ææåï¼é½æ¯åºç¨¿æ®çã 5. 忏 éå¸å·ç**åç»å°è®¡è¡**ï¼è½¯ä»¶å¡«=å¸å·å计ï¼äººå·¥çä¸å¡«ï¼0 ä¸ç©ºç½çåæ³ä¸¤è¾¹ä¸åï¼ä¸å½±åéé¢ï¼ã 6. 客è¿é¨åå·®å¼ä¸»è¦æ¯**人工çæååèäºå ¥**ï¼203 / 2531 / 43225.9 çï¼ï¼ä»¥å 3 å¤å½¢è±¡è¿åº¦/å»ºè®¾é¶æ®µï¼M26ãM85 人工ç空ï¼è½¯ä»¶çåèªæºè¡¨ä¸åºå ãæ¯å¯¹çï¼ï¼L91 人工çãå¨å»ºãæ£ç¡®ãè½¯ä»¶çæ¯åºç¨¿æ§å¼ãæåæ½å·¥ãã - **å½±åéé¢**ï¼è½¯ä»¶çç©æµãèªå¼å§ç´¯è®¡ããèªå¹´å累计ãåå° **34399.2 ä¸å **ããæ¬æå®æãå° **6291.4 ä¸å **ã - **æ¥å**ï¼`docs/åè½æµè¯æ¥å/æ°æ®æ¯å¯¹æ¥å_æèµæç»è¡¨è½¯ä»¶çæä¸äººå·¥ç_2026-09-22.md`ï¼å« 156 æ ¼å ¨éæ¸ å + éæ¡æ ¸å¯¹ç»è®º + å¤ç½®å»ºè®®ï¼ã - **临æ¶èæ¬ï¼ä¿çï¼**ï¼`_tmp_diff_invest_0922.py`ã`_tmp_dump_invest_full_0922.py`ã`_tmp_diff_invest_annot_0922.py`ã`_tmp_diff_tables_0922.py`ã`_tmp_src_spotcheck_0922.py`ã`_tmp_src_spotcheck2_0922.py`ã`_tmp_db_probe*_0922.py`ã`_tmp_tpl_*_0922.py` åå¯¹åº `_*.txt` è¾åºã ## ä¸ãæ±æ»å¤§è¡¨è½¯ä»¶è¾åºä¸æå·¥å®ç¨¿å·®å¼å¤æ ¸ï¼2026-08ï¼ - æ¯å¯¹æä»¶ï¼è½¯ä»¶è¾åº `çæ_éè·¯è¿è¾éæ±æ»è¡¨_2026-08 (5).xlsx`ï¼æå·¥å®ç¨¿ `2026å¹´8æå®¢è¿éãè´§è¿éå®ç¨¿.xlsx`ã - æ¹æ³ï¼å ç¨ Excel COM 坹䏤份坿¬å ¨ééç®ï¼åæé¡µç¾ãæ°æ®åãè¡æ ç¾ãå头åè¯ä¹å¯¹é½åéæ ¼æ¯å¯¹ï¼é¿å 读å XLSX æ§ç¼åé æ `#VALUE!` åå·®å¼ã traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportTaskService.java
@@ -1,19 +1,27 @@ package com.trafficaudit.reportexport.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.trafficaudit.dataimport.entity.ImportBatch; import com.trafficaudit.dataimport.mapper.ImportBatchMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.PreDestroy; import javax.annotation.Resource; import javax.sql.DataSource; import java.io.File; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; @@ -29,9 +37,11 @@ * 2) çæè¿ç¨ä¸å ç¨ HTTP 请æ±çº¿ç¨ï¼é¿å å¤äººåæ¶ç¹æå®¹å¨ææ»ï¼å·¥ä½çº¿ç¨åºå® 1 个ï¼å¤ä½è¯·æ±æ¾ç¤ºãæéä¸ãï¼ï¼ * 3) å䏿¥è¡¨æçç»æå¯å¤ç¨ï¼**è½çä¿åï¼è¿ç¨éå¯åä¾ç¶ææ**ï¼ï¼é¿å æ¯æ¬¡éç®æ´æ¬çº¦ 4 䏿 ¼å ¬å¼ã * * ç¼åæ£ç¡®æ§å®å«ï¼åªæå½ãæé´æ²¡æä»»ä½æ°çæ°æ®å¯¼å ¥ï¼import_batch æå¤§ id æªåï¼ãä¸ãç»æä¸è¶ è¿ 7 å¤©ãæ¶æå¤ç¨ï¼ * å¯¼å ¥å³å¤±æï¼é¿å æè¿ææ¥è¡¨ç»ç¨æ·ãåç«¯ä»æä¾ãéæ°çæã强å¶éç®ï¼è·³è¿ç¼åï¼ã * è½çä½ç½®ï¼{summary.template-dir}/_cache/<key>_v<æ°æ®çæ¬>.xlsx * ç¼åæ£ç¡®æ§å®å«ï¼**æ°æ®æçº¹**ï¼æçº¹ç±ãæ±æ»å¤§è¡¨ä¾èµçæºè¡¨å å®¹æ ¡éªåã+ãæ¯ççæä»¶èº«ä»½ï¼å¤§å°/ä¿®æ¹æ¶é´ï¼ãç®åºï¼ * åªææçº¹ä¸è´ï¼ä¸ç»æä¸è¶ è¿ 7 å¤©ï¼æå¤ç¨ãå æ¤ï¼ * - æèµ/è½è/å®¡æ ¸ç**䏿±æ»å¤§è¡¨æ å ³**çå¯¼å ¥ä¸å让ç¼å失æï¼ * - æ¢æ¯çãæ¹åç §ä»¶ãå¨ç¸å ³æºè¡¨ï¼å«åå° UPDATEï¼é½ä¼è®©ç¼å失æï¼ä¸ä¼ææ§è¡¨å½æ°è¡¨ååºã * åç«¯ä»æä¾ãéæ°çæã强å¶éç®ï¼è·³è¿ç¼åï¼ãè½çä½ç½®ï¼{summary.template-dir}/_cache/<key>_v<æçº¹>.xlsx */ @Slf4j @Service @@ -50,11 +60,24 @@ @Resource private ReportExportService reportService; @Resource private ImportBatchMapper importBatchMapper; private DataSource dataSource; /** æ±æ»å·¥ä½ç°¿ç®å½ï¼ä¸ ReportExportService åé ç½®ï¼ï¼è½çç¼åæ¾å¨å ¶ _cache åç®å½ */ @org.springframework.beans.factory.annotation.Value("${summary.template-dir:docs/çææ±æ»å¤§è¡¨}") private String summaryTemplateDir; /** åå¸å®¢è¿ç®å½ï¼ç½çº¦è½¦è®¢ååå ¨çæ»é.xlsxï¼åºéç¼ºè¯¥ææ¶çå åºè¾å ¥ï¼ */ @org.springframework.beans.factory.annotation.Value("${city-passenger.template-dir:docs/åå¸å®¢è¿}") private String cityPassengerTemplateDir; /** è®¡ç®æçº¹æ¶**æé¤**çè¡¨ï¼æèµçº¿ãè½è线ãå®¡æ ¸çº¿ãç³»ç»è¡¨ãå¯¼å ¥æ¥å¿ã * è¿äºè¡¨ååä¸å½±åæ±æ»å¤§è¡¨å å®¹ï¼æ²¡å¿ è¦è®©ç¼å失æï¼å ¶ä½è¡¨ä¸å¾çº³å ¥ï¼å®å¯å¤ç®ä¸å¯åºéï¼ã */ private static final Set<String> FINGERPRINT_EXCLUDE = new HashSet<>(Arrays.asList( "investment_project", "investment_monthly", "investment_system", "h204_vehicle_quarterly", "h204_auth_vehicle", "audit_result", "audit_run", "audit_rule", "audit_explanation", "sys_user", "sys_role", "sys_user_role", "sys_dept", "sys_operation_log", "llm_desensitize_map", "import_batch")); /** è½çç¼åç®å½ï¼å®ä½çç¥ä¸æ¨¡æ¿ä¸è´ï¼é ç½®ç®å½ / user.dir ç¸å¯¹ / ä¸çº§ç®å½ï¼ */ private File cacheDir() { @@ -95,8 +118,8 @@ private final String mode; private final Integer toMonth; private volatile long createdAt = System.currentTimeMillis(); /** çææ¶çæ°æ®çæ¬ï¼import_batch æå¤§ idï¼ï¼ç¨äºå¤æç¼åæ¯å¦è¿æ */ private final long importVersion; /** çææ¶çæ°æ®æçº¹ï¼æºè¡¨æ ¡éªå + æ¯çæä»¶èº«ä»½ï¼ï¼ç¨äºå¤æç¼åæ¯å¦è¿æ */ private final String fingerprint; private volatile String status = "PENDING"; // PENDING/RUNNING/DONE/FAILED private volatile int percent = 0; private volatile String step = "æéä¸"; @@ -106,14 +129,16 @@ private volatile File cacheFile; private volatile String fileName; private volatile boolean fromCache; /** æ¬æ¬¡ã没å½ä¸ç¼åãæ¯å 为å卿§ç»æä½æ°æ®/æ¯çå·²åï¼ç¨äºç»ç¨æ·ä¸å¥è§£éï¼ */ private volatile boolean staleCache; private volatile long finishedAt; Task(String type, String period, String mode, Integer toMonth, long importVersion) { Task(String type, String period, String mode, Integer toMonth, String fingerprint) { this.type = type; this.period = period; this.mode = mode; this.toMonth = toMonth; this.importVersion = importVersion; this.fingerprint = fingerprint; } void progress(int pct, String stepText) { @@ -159,6 +184,7 @@ m.put("percent", "DONE".equals(status) ? 100 : percent); m.put("step", step); m.put("fromCache", fromCache); m.put("staleCache", staleCache); m.put("fileName", fileName); m.put("error", error); long end = finishedAt > 0 ? finishedAt : System.currentTimeMillis(); @@ -170,20 +196,22 @@ /** * æäº¤å¯¼åºä»»å¡ãforceRefresh=true æ¶å¿½ç¥ç¼åéæ°çæï¼ * å¦åå¨ãå䏿¥è¡¨æã10 åéå ãæé´æ æ°å¯¼å ¥ãçåæä¸ç´æ¥å¤ç¨ä¸æ¬¡ç»æã * å¦åå¨ãå䏿¥è¡¨æ + æ°æ®æçº¹ä¸è´ + 7 天å ãçåæä¸ç´æ¥å¤ç¨ä¸æ¬¡ç»æã * å䏿¥è¡¨æå·²æä»»å¡å¨è·æ¶ç´æ¥è¿å该任å¡ï¼é¿å é夿éã */ public Task submit(String type, String period, String mode, Integer toMonth, boolean forceRefresh) { cleanupExpired(); String key = cacheKey(type, period, mode, toMonth); String fingerprint = dataFingerprint(); if (!forceRefresh) { Task hit = cache.get(key); if (cacheUsable(hit)) { if (cacheUsable(hit, fingerprint)) { hit.fromCache = true; hit.staleCache = false; // å½ä¸ç¼åæ¶ä¸è½æ®çä¸ä¸æ¬¡ãç»æå·²å¤±æãçæç¤º log.info("æ¥è¡¨å¯¼åºä»»å¡å½ä¸å åç¼åï¼{} {}ï¼çæäº {}ï¼", type, period, new Date(hit.finishedAt)); return hit; } Task disk = loadFromDisk(key, type, period, mode, toMonth); Task disk = loadFromDisk(key, type, period, mode, toMonth, fingerprint); if (disk != null) { tasks.put(disk.id, disk); cache.put(key, disk); @@ -197,7 +225,9 @@ log.info("æ¥è¡¨å¯¼åºä»»å¡å·²å¨æ§è¡ï¼å¤ç¨è¿è¡ä¸çä»»å¡ï¼{} {}ï¼{}ï¼", type, period, running.id); return running; } Task task = new Task(type, period, mode, toMonth, importVersion()); Task task = new Task(type, period, mode, toMonth, fingerprint); // ææ§ç»æä½æ²¡å½ä¸ï¼æ°æ®ææ¯çåäºï¼â å端æç¤ºä¸å¥ï¼é¿å ç¨æ·ä»¥ä¸º"ç¼ååäº" task.staleCache = !forceRefresh && hasStaleCache(type, period, mode, toMonth, fingerprint); tasks.put(task.id, task); pool.submit(() -> run(task)); return task; @@ -240,23 +270,99 @@ return null; } private boolean cacheUsable(Task t) { if (t == null || !"DONE".equals(t.status) || t.data == null) return false; private boolean cacheUsable(Task t, String fingerprint) { if (t == null || !"DONE".equals(t.status)) return false; if (t.data == null && (t.cacheFile == null || !t.cacheFile.isFile())) return false; if (System.currentTimeMillis() - t.finishedAt > CACHE_MAX_AGE_MS) return false; long now = importVersion(); if (now < 0 || t.importVersion < 0) return false; // åä¸å°æ°æ®çæ¬æ¶ä¸åé£é©å¤ç¨ return now == t.importVersion; if (fingerprint == null || t.fingerprint == null) return false; // ç®ä¸åºæçº¹æ¶ä¸åé£é©å¤ç¨ return fingerprint.equals(t.fingerprint); } /** æ°æ®çæ¬ï¼import_batch æå¤§ idï¼ä»»ä½ä¸æ¬¡å¯¼å ¥é½ä¼è®©å®ååï¼åä¸å°è¿å -1ï¼æ¤æ¶ç¦ç¨ç¼åï¼ */ private long importVersion() { /** * æ±æ»å¤§è¡¨æ°æ®æçº¹ï¼ãä¾èµçæºè¡¨å å®¹æ ¡éªåã+ãæ¯ççæä»¶èº«ä»½ãã * - æºè¡¨ï¼åºå é¤ FINGERPRINT_EXCLUDEï¼æèµ/è½è/å®¡æ ¸/ç³»ç»/å¯¼å ¥æ¥å¿ï¼ä»¥å¤çå ¨é¨è¡¨ï¼ç¨ CHECKSUM TABLE åæ ¡éªåï¼ * è½ææè¡æ°ååãæ°å¢å é¤ã**åå° UPDATE**ï¼ * - æä»¶ï¼æ¯çç®å½ä¸å ¨é¨æä»¶ï¼æ¯ç / åç §ä»¶ / _å¤ä»½_ åå¡«ä»¶ï¼+ãç½çº¦è½¦è®¢ååå ¨çæ»é.xlsxãï¼åãåç§°+大å°+ä¿®æ¹æ¶é´ãã * ä»»ä¸é¡¹ååå³æçº¹åå â ç¼å失æã计ç®å¤±è´¥è¿å nullï¼æ¤æ¶ç¦ç¨ç¼åï¼åªéç®ä¸å¤ç¨ï¼ã */ private String dataFingerprint() { try { List<Object> v = importBatchMapper.selectObjs(new QueryWrapper<ImportBatch>().select("IFNULL(MAX(id),0)")); if (v == null || v.isEmpty() || v.get(0) == null) return 0L; return ((Number) v.get(0)).longValue(); List<String> parts = new ArrayList<>(); try (Connection conn = dataSource.getConnection()) { List<String> tables = new ArrayList<>(); try (Statement st = conn.createStatement(); ResultSet rs = st.executeQuery("SELECT table_name FROM information_schema.tables " + "WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE' ORDER BY table_name")) { while (rs.next()) tables.add(rs.getString(1)); } for (String t : tables) { if (FINGERPRINT_EXCLUDE.contains(t)) continue; try (Statement st = conn.createStatement(); ResultSet rs = st.executeQuery("CHECKSUM TABLE `" + t + "`")) { if (rs.next()) parts.add("T:" + t + ":" + rs.getString(2)); } } } for (File f : listIdentityFiles(resolveBaseDir(summaryTemplateDir))) { parts.add("F:" + f.getName() + ":" + f.length() + ":" + f.lastModified()); } File wyc = new File(resolveBaseDir(cityPassengerTemplateDir), "ç½çº¦è½¦è®¢ååå ¨çæ»é.xlsx"); if (wyc.isFile()) parts.add("F:" + wyc.getName() + ":" + wyc.length() + ":" + wyc.lastModified()); return sha256Hex(String.join("|", parts)).substring(0, 16); } catch (Exception e) { log.warn("读åå¯¼å ¥æ°æ®çæ¬å¤±è´¥ï¼æ¬æ¬¡ç¦ç¨å¯¼åºç¼åï¼{}", e.getMessage()); return -1L; log.warn("è®¡ç®æ°æ®æçº¹å¤±è´¥ï¼æ¬æ¬¡ç¦ç¨å¯¼åºç¼åï¼{}", e.getMessage()); return null; } } /** æ¯çç®å½çåºç¡ç®å½å®ä½ï¼ä¸æ¨¡æ¿è§£æåçç¥ï¼é ç½®ç®å½ / user.dir ç¸å¯¹ / ä¸çº§ç®å½ï¼ */ private File resolveBaseDir(String dir) { if (dir == null) return null; String rel = dir; while (rel.startsWith("./")) rel = rel.substring(2); String[] roots = {rel, System.getProperty("user.dir") + "/" + rel, System.getProperty("user.dir") + "/../" + rel}; for (String root : roots) { if (root == null || root.trim().isEmpty()) continue; File f = new File(root); if (f.isDirectory()) return f; } return null; } /** ç®å½ä¸çæä»¶ï¼æååæåºï¼æé¤åç®å½ï¼ä¿è¯æçº¹ç¨³å®ï¼ */ private List<File> listIdentityFiles(File dir) { List<File> out = new ArrayList<>(); if (dir == null) return out; File[] fs = dir.listFiles(File::isFile); if (fs == null) return out; Arrays.sort(fs, Comparator.comparing(File::getName)); out.addAll(Arrays.asList(fs)); return out; } private String sha256Hex(String text) throws Exception { MessageDigest md = MessageDigest.getInstance("SHA-256"); byte[] d = md.digest(text.getBytes(StandardCharsets.UTF_8)); StringBuilder sb = new StringBuilder(); for (int i = 0; i < 8; i++) sb.append(String.format("%02x", d[i])); // åå 8 åèï¼16 ä½åå è¿å¶ï¼å¤ç¨ä¸æä»¶åç return sb.toString(); } /** 该æ¥è¡¨ææ¯å¦åå¨ãä¸å½åæçº¹ä¸ä¸è´ãçæ§ç»æï¼ç¨äºæç¤ºã䏿¬¡ç»æå·²å¤±æï¼æ£å¨æææ°æ°æ®éç®ãï¼ */ private boolean hasStaleCache(String type, String period, String mode, Integer toMonth, String fingerprint) { try { File dir = cacheDir(); if (dir == null) return false; String prefix = cacheFilePrefix(type, period, mode, toMonth); File[] fs = dir.listFiles((d, n) -> n.startsWith(prefix + "_v") && n.endsWith(".xlsx")); if (fs == null || fs.length == 0) return false; String current = prefix + "_v" + fingerprint + ".xlsx"; for (File f : fs) { if (!f.getName().equals(current)) return true; } return false; } catch (Exception e) { return false; } } @@ -290,10 +396,10 @@ try { File dir = cacheDir(); if (dir == null) return; long version = t.importVersion; if (version < 0) return; String fingerprint = t.fingerprint; if (fingerprint == null) return; String prefix = cacheFilePrefix(t.type, t.period, t.mode, t.toMonth); File target = new File(dir, prefix + "_v" + version + ".xlsx"); File target = new File(dir, prefix + "_v" + fingerprint + ".xlsx"); java.nio.file.Files.write(target.toPath(), data); File[] siblings = dir.listFiles((d, n) -> n.startsWith(prefix + "_v") && n.endsWith(".xlsx")); if (siblings != null) { @@ -308,18 +414,17 @@ } } /** ä»è½çç¼åéæ¾ãå䏿¥è¡¨æ + å䏿°æ®çæ¬ + æªè¶ æãçç»æï¼æ²¡æè¿å null */ private Task loadFromDisk(String key, String type, String period, String mode, Integer toMonth) { /** ä»è½çç¼åéæ¾ãå䏿¥è¡¨æ + å䏿°æ®æçº¹ + æªè¶ æãçç»æï¼æ²¡æè¿å null */ private Task loadFromDisk(String key, String type, String period, String mode, Integer toMonth, String fingerprint) { try { if (fingerprint == null) return null; // ç®ä¸åºæçº¹æ¶ä¸åé£é©å¤ç¨ File dir = cacheDir(); if (dir == null) return null; long version = importVersion(); if (version < 0) return null; // åä¸å°æ°æ®çæ¬æ¶ä¸åé£é©å¤ç¨ File f = new File(dir, cacheFilePrefix(type, period, mode, toMonth) + "_v" + version + ".xlsx"); File f = new File(dir, cacheFilePrefix(type, period, mode, toMonth) + "_v" + fingerprint + ".xlsx"); if (!f.isFile()) return null; long finished = f.lastModified(); if (finished <= 0 || System.currentTimeMillis() - finished > CACHE_MAX_AGE_MS) return null; Task t = new Task(type, period, mode, toMonth, version); Task t = new Task(type, period, mode, toMonth, fingerprint); t.cacheFile = f; t.createdAt = finished; // å¤ç¨åå²ç»æï¼ä»¥çææ¶é´ä½ä¸ºèµ·ç¹ï¼é¿å elapsedMs åºç°è´æ° t.fileName = "çæ_éè·¯è¿è¾éæ±æ»è¡¨_" + period + ".xlsx"; traffic-audit-web/src/views/ReportExport.vue
@@ -170,6 +170,7 @@ <p class="task-step">{{ taskInfo.step || 'æéä¸' }}</p> <p class="task-meta" v-if="taskInfo.period && !taskInfo.fromCache">æ¥è¡¨æ {{ taskInfo.period }}ãå·²ç¨ {{ ((taskInfo.elapsedMs || 0) / 1000).toFixed(1) }} ç§</p> <p class="task-meta" v-else-if="taskInfo.period">æ¥è¡¨æ {{ taskInfo.period }}ã䏿¬¡çæäº {{ taskCacheTime }}</p> <p class="task-meta" v-if="taskInfo.staleCache">䏿¬¡çæçç»æå·²å æ°æ®ææ¯çåå失æï¼æ¬æ¬¡æææ°æ°æ®éç®ã</p> <p class="task-meta" v-if="taskInfo.fromCache">æ¬æ¬¡ç´æ¥æ²¿ç¨ {{ taskCacheTime }} çæçç»æï¼æé´æ²¡ææ°çæ°æ®å¯¼å ¥ï¼ãå¦éæææ°æ°æ®éç®ï¼è¯·ç¹ãéæ°çæãã</p> <p class="task-done" v-if="taskDownloaded"> å·²èªå¨ä¸è½½ï¼<b>{{ taskFileName }}</b><span v-if="taskFileSize">ï¼{{ taskFileSizeText }}ï¼</span>ï¼æä»¶å¨æµè§å¨é»è®¤ä¸è½½ç®å½ã