docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-16.md
@@ -77,4 +77,306 @@
1. ä¸Žç”¨æˆ·ç¡®è®¤ `2021-12` / `2022-12` ç­‰ã€Œæ•´å¹´æŠ¥è¡¨æœŸã€çš„业务口径,以及是否需要把年度数据拆成逐月报表期。
2. ç¡®è®¤æ˜¯å¦éœ€è¦è¡¥ 2023 å¹´æ•°æ®ã€ä»¥åŠ `2026-01`~`2026-07` çš„上年同期是否需要补齐。
3. è§†ç”¨æˆ·æ„è§å¤„理预览弹窗「共 0 è¡Œã€æ–‡æ¡ˆã€‚
4. ç½‘络恢复后补推公司 gitea。
4. ç½‘络恢复后补推公司 gitea。
---
## åã€å‚æ™šè¿½åŠ ï¼ˆç¬¬ 3 è½®ç”¨æˆ·åé¦ˆ 6 æ¡ï¼Œ2026-09-16)
用户本轮提出 6 æ¡åé¦ˆï¼Œé€æ¡å¤„理结果如下:
| # | ç”¨æˆ·åé¦ˆ | å¤„理结果 |
|---|----------|----------|
| 1 | 21–26 å¹´è´§è¿é‡å‘¨è½¬é‡è¡¨æ•°æ®å…¥åº“ | ä¸Šè½®å·²å®Œæˆï¼ˆ`0cfd6e0`),本轮补齐 2023 å¹´ï¼ˆè§ #2) |
| 2 | ç”¨æˆ·æ ¸å®žã€Œ23 å¹´æœ‰ 12 æœˆçš„æ•°æ®ã€ | **属实**。8 æœˆæºæ–‡ä»¶ç¡®å®žæ²¡æœ‰ 2023 å¹´ Sheet,但 7 æœˆæ–‡ä»¶ `D:\05_数据分类\货运\7月\定稿-湖北省各市州运输量数据(2026å¹´1-7月).xlsx` é‡Œæœ‰ä¸€ä¸ªåä¸º `2023` çš„ Sheet。已另存 `_2023_import_tmp.xlsx`(`2023` + `2022å¹´` ä¸¤ä¸ª Sheet)导入,生成 `2023-12`(18 è¡Œï¼‰ï¼Œ**432 é¡¹é€æ ¼æ¯”对零差异** |
| 3 | è¦ä¸€ä»½ã€Œæ‰€æœ‰è¦æ³¨æ„çš„点」的汇总文档 | æ–°å»º `docs/问题汇总/问题与注意事项汇总_2026-09-16.md`(11 ç«  + é€ŸæŸ¥è¡¨ï¼Œå«å¯åЍ/进程、日志验证、数据库、导入路径与期次约定、报表、验证码、文件编码、浏览器取证、git åŒä»“库、遗留问题) |
| 4 | æ¢ WiFi åŽç™»å½•页出现验证码白框 + ã€ŒéªŒè¯ç åŠ è½½å¤±è´¥ã€ | å·²ä¿®å¤ï¼ˆå‰ç«¯é»˜è®¤å€¼ + fail-safe),本轮浏览器复测通过 |
| 5 | é¢„览点一下弹「导出失败,请确认导入数据」 | å·²ä¿®å¤æç¤ºé€»è¾‘(区分网络/后端原因);另外两小项(指标错位、弹窗拖动圆角)本轮浏览器实测通过 |
| 6 | å…¬è·¯æ—…客 H203-1 æ¨¡æ¿è¢«ä¿®æ”¹ | å·²é€‚配并验证:新增 `统一社会信用代码` / `填报单位` ä¸¤åˆ—入库,新老格式双向兼容 |
### 1. 2023 å¹´è´§è¿æ•°æ®è¡¥å½•(用户第 2 æ¡ï¼‰
- **排查过程**:先确认 8 æœˆæºæ–‡ä»¶ 5 ä¸ª Sheet å…¨ä¸ºå¯è§ã€æ—  2023;再全盘搜索 `*运输量*`、`*23å¹´*`、`*货运量*` æ–‡ä»¶åï¼›æœ€åŽæ‰«æ `D:\05_数据分类` ä¸Ž `D:\桌面` ä¸‹æ‰€æœ‰ `.xlsx` çš„ **Sheet å**,命中 7 æœˆæ–‡ä»¶çš„ `2023` Sheet。
- **一致性预检**:7 æœˆä¸Ž 8 æœˆæ–‡ä»¶çš„ `2021å¹´ / 2022å¹´ / 2024å¹´` ä¸‰å¹´æ•°æ®é€æ ¼æ¯”对,`onlyJuly / onlyAug / differ` å…¨ä¸ºç©º â†’ ä¸‰å¹´**零差异**,可安全用 7 æœˆæ–‡ä»¶è¡¥ 2022(作为 2023 çš„上年同期来源)。
- **导入**:`POST /api/import/freightTurnover?period=2023-12`,返回「共 36 æ¡è®°å½•」。
- **验证**:`2023-12` 18 è¡Œï¼›è´§è¿é‡ + å‘¨è½¬é‡å…± 432 é¡¹ä¸Ž Excel é€æ ¼æ¯”对 **mismatches=0**;`last_*` ä¸Ž `2022-12` é€å€¼ç›¸åŒï¼›å…¨éƒ¨æŠ¥è¡¨æœŸ 2021-12 â†’ 2026-08 å…± 13 æœŸã€æ¯æœŸ 18 è¡Œã€‚
- è¯¦è§ã€ŠåŠŸèƒ½æµ‹è¯•æŠ¥å‘Š_货运量周转量2023年数据补录_2026-09-16.md》。
### 2. H203-1 æ¨¡æ¿æ–°å¢žåˆ—适配(用户第 6 æ¡ï¼‰
- **模板 diff ç»“论**:Sheet1 ç”± 773×50 â†’ 816×52;在「企业名称」后插入 `统一社会信用代码`、`填报单位` ä¸¤åˆ—,其余 48 åˆ—整体右移。
- **改动 6 å¤„**:库 DDL、`docs/init.sql`、`docs/database.md`、`PassengerEnterpriseMonthly.java`、`DataImportService.java`、`DataViewController.java`(数据查看页列)。
- **验证**:新模板导入 814 æ¡ 0 å¤±è´¥ï¼Œå››é¡¹æ±‡æ€»ï¼ˆå®¢è¿è½¦è¾† 24584 / æ ¸å®šè½½å®¢ä½ 711018 / å®¢è¿é‡ 16371625 / å‘¨è½¬é‡ 1023386179)与源文件全等;老格式 `.xls` å¯¼å…¥ 767 æ¡ 0 å¤±è´¥ä¸”新列有值(**老文件其实也带这两列**),数值与既有 2026-08 å®Œå…¨ä¸€è‡´ï¼›è´Ÿå‘用例(选错类型)报错清晰。
- **过程中的失误**:`docs/database.md` é‡Œ `| enterprise_name | varchar(200) | ä¼ä¸šåç§° |` å‡ºçް 4 æ¬¡ï¼Œé¦–次批量替换误改 3 å¼ è¡¨ï¼Œå·² `git checkout` å›žé€€åŽæ”¹ä¸ºã€Œæˆªå–章节再替换」。
- è¯¦è§ã€ŠåŠŸèƒ½æµ‹è¯•æŠ¥å‘Š_H2031模板新增列适配_2026-09-16.md》。
### 3. ç™»å½•验证码容错 + æŠ¥è¡¨é¢„览整改(用户第 4、5 æ¡ï¼‰
- **验证码**:`Login.vue` é»˜è®¤ `captchaRequired=false`,改为 fail-safe(仅后端明确返回 `required===true` æ‰æ˜¾ç¤ºï¼‰ï¼›æ¢ WiFi/后端不可达时不再残留验证码白框。
- **失败提示**:`failWith(err, action)` + `errReason(raw)` é‡å†™ï¼ŒåŒºåˆ†ã€Œè¿žä¸ä¸ŠæœåŠ¡å™¨ã€ä¸Žã€ŒåŽç«¯çœŸå®žåŽŸå› ã€ï¼›é¢„è§ˆè°ƒç”¨å¸¦ `action='预览'`;Blob é”™è¯¯å…ˆ `text()` å†è§£æžã€‚
- **指标错位**:预览表头由 3 åˆ—补为 4 åˆ—(分类/指标/数据/同比),实测 x åæ ‡ 35 / 118 / 394 / 587,`16888.76` è½åœ¨ã€Œæ•°æ®ã€åˆ—。
- **弹窗拖动 + åœ†è§’**:新增 `dialogDrag.js` æŒ‡ä»¤ï¼ˆElement UI 2.15.14 æ—  `draggable`),`border-radius:10px`;实测拖动 `(0,40) â†’ (120,200)`,`transform=matrix(1,0,0,1,120,160)`,关闭后复位 `none`。
- ã€Œä¸­å£å¾„之后不再渲染表格」上轮已修,本轮复核弹窗内**有且仅有一张表**。
- è¯¦è§ã€ŠåŠŸèƒ½æµ‹è¯•æŠ¥å‘Š_登录验证码容错与报表预览整改_2026-09-16.md》。
### 4. æ³¨æ„äº‹é¡¹æ±‡æ€»æ–‡æ¡£ï¼ˆç”¨æˆ·ç¬¬ 3 æ¡ï¼‰
新建 `docs/问题汇总/问题与注意事项汇总_2026-09-16.md`,共 11 ç« ï¼š
速查表(10 æ¡ï¼‰ã€å¯åŠ¨ä¸Žè¿›ç¨‹ç®¡ç†ã€æœåŠ¡çŠ¶æ€éªŒè¯ã€æ•°æ®åº“ã€æ•°æ®å¯¼å…¥ï¼ˆè·¯å¾„ + æœŸæ¬¡çº¦å®š + å¤šå¹´åº¦å·¥ä½œç°¿è¯†åˆ«è§„则)、报表生成、登录与验证码、文件写入与文本处理的坑、浏览器自动化取证的坑、Git åŒä»“库工作流、当前已知遗留问题。
## åä¸€ã€æµ‹è¯•结果摘要(傍晚追加部分)
- **2023 è¡¥å½•**(5 æ¡ç”¨ä¾‹ï¼‰ï¼šæ­£å‘入库、432 é¡¹é€æ ¼æ¯”对零差异、上年同期取自 2022、报表期清单无重复/无残留、2022-12 é‡å†™åŽé€å€¼ä¸å˜ â€”— å…¨éƒ¨é€šè¿‡ã€‚
- **H203-1 æ–°å¢žåˆ—**(9 æ¡ç”¨ä¾‹ï¼‰ï¼šæ–°æ¨¡æ¿ 814 æ¡ 0 å¤±è´¥ã€ä¸¤åˆ— 814/814 æœ‰å€¼ã€é¦–行与汇总四项与源文件全等、老格式 767 æ¡ 0 å¤±è´¥ä¸”数值与 2026-08 å…¨ç­‰ã€Excel COM æŠ½æŸ¥é¦–行一致、负向选错类型报错清晰、列右移不影响旧字段 â€”— å…¨éƒ¨é€šè¿‡ã€‚
- **登录验证码 + é¢„览整改**(10 æ¡ç”¨ä¾‹ï¼‰ï¼šæ— éªŒè¯ç ç™½æ¡†ã€æŽ¥å£ `required=false`、表头 4 åˆ—且 x åæ ‡å¯¹é½ã€åœ†è§’ 10px、拖动位移 120/160、关闭复位、弹窗内仅 1 å¼ è¡¨ã€å¤±è´¥æç¤ºå·²ç»†åˆ†ã€å¯¼å‡ºæˆåŠŸ â€”— å…¨éƒ¨é€šè¿‡ã€‚
- **测试数据清理**:H203-1 å¯¼å…¥éªŒè¯äº§ç”Ÿçš„ `2099-06 / 2099-07 / 2099-09` ä¸‰ä¸ªæµ‹è¯•期(共 2395 è¡Œï¼‰åŠå…¶ `import_batch` è®°å½•已删除,`h2031_enterprise_monthly` æ¢å¤ä¸º 2026-01 ~ 2026-08 å…± 8 æœŸï¼›`freight_turnover_import` ä¸º 13 æœŸ Ã— 18 è¡Œã€‚
## åäºŒã€é—留问题与待办(傍晚更新)
| # | é—®é¢˜ | çŠ¶æ€ |
|---|------|------|
| 1 | 8 æœˆæºæ–‡ä»¶ç¼º 2023 å¹´ Sheet | **已解决**(用 7 æœˆæ–‡ä»¶è¡¥å½• `2023-12`) |
| 2 | `2026-01` ~ `2026-07` çš„ `last_*` ä¸ºç©º | å¾…用户确认是否补 |
| 3 | `2026-01` ~ `2026-08` çš„ H203-1 `unified_credit_code` / `report_unit` ä¸ºç©ºï¼ˆæ­¤å‰ä»£ç æœªè¯»è¿™ä¸¤åˆ—) | **待用户确认是否重导历史文件回填** |
| 4 | `2024-12` çš„上年同期未回填(需重导 2024 å¹´æ•°æ®ï¼‰ | å¾…用户确认 |
| 5 | é¢„览弹窗「共 0 è¡Œã€ä¸Žã€Œæœˆåº¦è¦†ç›–:1~8月均有数据」口径文案不同 | å¾…用户确认改文案 |
| 6 | `2021-12` ç­‰ã€Œæ•´å¹´æŠ¥è¡¨æœŸã€çš„业务口径 | å¾…用户确认 |
| 7 | å…¬å¸ gitea æŽ¨é€ï¼ˆç½‘络无响应) | å¾…补推,**禁强推** |
| 8 | ä»“库根目录大量 `_*.*` ä¸´æ—¶æ–‡ä»¶ | ç»ç”¨æˆ·åŒæ„åŽå†æ¸…理 |
## åä¸‰ã€ä¸‹ä¸€æ­¥è®¡åˆ’(傍晚更新)
1. ç­‰ç”¨æˆ·ç¡®è®¤ 3 ä»¶äº‹ï¼šæ˜¯å¦é‡å¯¼ 2026 å¹´åŽ†å² H203-1 æ–‡ä»¶å›žå¡«ä¸¤åˆ—、是否补 `last_*` / `2024-12` ä¸Šå¹´åŒæœŸã€é¢„览弹窗文案是否调整。
2. ç½‘络恢复后补推公司 gitea(先 fetch åˆå¹¶ï¼Œç¦å¼ºæŽ¨ï¼‰ã€‚
3. è§†ç”¨æˆ·æ„è§æ¸…理仓库根目录 `_*.*` ä¸´æ—¶æ–‡ä»¶ã€‚
## åå››ã€git å®žé™…结果(傍晚补记)
1. `git fetch origin`(个人 gitee,`master`):远端与本地一致(`HEAD...origin/master = 0 0`),**无同事/用户新提交**,无需合并。
2. æäº¤ `24b4c28`:`feat(h2031): é€‚配模板新增「统一社会信用代码/填报单位」两列并入库;fix(import): è¡¥å½• 2023 å¹´è´§è¿é‡å‘¨è½¬é‡ï¼›fix(login/report): éªŒè¯ç å®¹é”™ã€é¢„览指标对齐、弹窗可拖动圆角、失败提示细分;docs: æ–°å¢žé—®é¢˜ä¸Žæ³¨æ„äº‹é¡¹æ±‡æ€»`(10 ä¸ªæ”¹åЍ + 4 ä¸ªæ–°å¢žï¼Œå…± 14 ä¸ªæ–‡ä»¶ï¼‰ã€‚
3. æŽ¨ä¸ªäººä»“库 `origin`:`git push origin main:master` æˆåŠŸï¼ˆ`0cfd6e0..24b4c28`)。
4. æŽ¨å…¬å¸ `gitea`:`git fetch gitea` æŠ¥ `Operation too slow. Less than 1000 bytes/sec transferred the last 15 seconds`;`curl --max-time 20 http://61.183.254.94:3000/` è¿”回 `http_code=000 time=20.01`,确认**公司内网不可达**(网络问题,非凭据),本次未推送成功,已列为遗留问题;补推前先 `git fetch gitea` ä¸Žè¿œç«¯ `main` åˆå¹¶ï¼Œ**禁强推**。
## åäº”、用户 4 æ¡ç¡®è®¤çš„落实(2026-09-16 æ”¶å°¾ï¼‰
| ç”¨æˆ·åé¦ˆ | ç»“论与处置 |
|---|---|
| 1-2「我导入的货运量周转量表里有 23 å¹´æ•°æ®ã€ | å·²é€æ ¼å¤æ ¸ï¼š8 æœˆæºæ–‡ä»¶åªæœ‰ `2026å¹´ / 2025å¹´ / 2024å¹´ / 2022å¹´ / 2021å¹´` äº”个 Sheet,内文无任何 2023 æ ‡è¯†ï¼ˆå‘½ä¸­é¡¹å‡ä¸ºæµ®ç‚¹æ•°é‡Œçš„æ•°å­—巧合);`2023` Sheet å‡ºçŽ°åœ¨**7 æœˆ**文件里。已用 7 æœˆæ–‡ä»¶çš„ `2023` Sheet è¡¥å½• `2023-12`,无需再导。 |
| 1「让他空着吧」 | 2026-01~08 çš„ H203-1 `unified_credit_code` / `report_unit` ä¿æŒç©ºï¼Œ**不重导**历史文件。 |
| 2「是不是把 23 å¹´ä¹Ÿå¯¼è¿›åŽ»ã€ | æ˜¯ï¼Œå·²å¯¼å…¥ `2023-12`(18 è¡Œï¼‰ã€‚若要回填 `2024-12` çš„上年同期值,需再重导一次 2024 å¹´æ•°æ®ï¼ˆå¾…用户确认)。 |
| 3「可以」 | é¢„览弹窗文案已按确认修改(汇总大表「指标 N é¡¹ã€ï¼å…¶å®ƒæŠ¥è¡¨ã€Œå…± N è¡Œæ˜Žç»†ã€ï¼‰ï¼Œå¹¶å·²åœ¨æµè§ˆå™¨å®žæµ‹ã€‚ |
| 4「什么时候开始连不上的」 | å…¬å¸ gitea **自 2026-09-15 èµ·ä¸å¯ç”¨**:09-15 ä¸ºå‡­æ®å¼¹çª—未推成功;09-16 èµ·å˜ä¸º TCP 3000 å¯è¿žä½† HTTP æ— å“åº”。今日复测 `Test-NetConnection` ä¸º True、`curl` 25s è¶…æ—¶ `code=000`。 |
## åå…­ã€git å®žé™…结果(收尾补记)
- `git fetch origin`(个人 gitee):`HEAD...origin/master = 0 0`,无新提交,无需合并。
- æäº¤ `e7cddc4`:`fix(report): é¢„览弹窗行数文案按报表类型区分`(4 ä¸ªæ–‡ä»¶ï¼Œ+25/-1)。
- æŽ¨ä¸ªäººä»“库 `origin`:`git push origin main:master` æˆåŠŸï¼ˆ`b0c8b4f..e7cddc4`)。
- æŽ¨å…¬å¸ `gitea`:`git fetch gitea` ä»å¤±è´¥ï¼ŒæŠ¥ `fatal: unable to access ... Recv failure: Connection was reset`(`fetch_exit=128`),本次**未推送成功**,继续列为遗留问题;补推前先 `git fetch gitea` ä¸Žè¿œç«¯ `main` åˆå¹¶ï¼Œ**禁强推**。
## åä¸ƒã€ç”¨æˆ·ç¬¬ 5 æ¡ï¼šæ±‡æ€»å¤§è¡¨ä¸Ž 8 æœˆå®šç¨¿é€è¡¨æ¯”对
**比对对象**:`D:\桌面\生成_道路运输量汇总表.xlsx`(用户 14:39 å¯¼å‡ºï¼‰ vs `D:\05_数据分类\汇总表\8月汇总定稿\2026å¹´8月客运量、货运量定稿.xlsx`。重新导出一次(`GET /api/report/export/summaryWorkbook?period=2026-08&mode=month`)得到的文件与桌面那份**字节数完全一致(950,186)**,排除“文件过期”。
**踩的坑(重要)**:
1. ä¸¤è¾¹**行块高度不同**(导出每市州 6 è¡Œã€å®šç¨¿ 4 è¡Œï¼›å¯¼å‡º 118 è¡Œ vs å®šç¨¿ 84 è¡Œï¼‰ï¼Œç›´æŽ¥æŒ‰å•元格坐标比会得出 4.6 ä¸‡ä¸ªâ€œå·®å¼‚”,全是错位噪声 â†’ æ”¹ç”¨ã€Œåœ°åŒº+指标+列标题」**语义键**对齐。
2. å¯¼å‡ºç«¯æœ‰ **39,939 ä¸ªå…¬å¼æ ¼**(`=C7+C9`、`=C5/V5-1`、`RANK(...)`),`openpyxl(data_only=True)` è¯»å‡ºæ¥å…¨æ˜¯ None â†’ è¯¯åˆ¤æˆâ€œæ•´è¡¨æ²¡æ•°æ®â€ã€‚Excel COM æ‰“不开(用户已开着 Excel,不能乱动),最后**自己写公式求值器**(SUM/RANK/ROUND+四则+跨表引用)算出 61,972 ä¸ªæ•°å€¼æ ¼å†æ¯”。
**结论**:语义键一致 28,567 ä¸ªï¼Œä¸ä¸€è‡´ 4,742 ä¸ªã€‚
* ` è´§è¿` è¡¨ï¼šå¯¼å‡ºæ¯å¸‚州比定稿**多两行**(「规上+规下货运量」「规下货运量」),同指标数值**零差异**;定稿还有「规上+规下周转量」行而导出该行为空。
* **最大差异来源**:`city_bus_monthly / city_taxi_monthly / wyc_order_monthly / wyc_total_monthly` **只有 2026-01~08,没有 2025 å¹´** â†’ å…¬äº¤/出租/网约车/中口径几张表的「与去年同比」被算成 `0`/`-1`、2025 å¹´ç´¯è®¡åå°ã€‚
* `h2031_enterprise_monthly` ç¼º `2025-01`(源文件本身没有 1 æœˆï¼‰ã€‚
* å¯¼å‡ºç«¯ã€Œä¸­å£å¾„分析」多一段当月块、缺 4 è¡Œâ€œå æ¯””。
详见《功能测试报告/汇总大表与定稿比对_2026-09-16.md》。
## åå…«ã€ç”¨æˆ·ç¬¬ 2 æ¡ï¼š2024 å¹´æ•°æ®é‡å¯¼ï¼ˆå›žå¡«ä¸Šå¹´åŒæœŸï¼‰
**背景**:`last_*`(上年同期)只从**同一个工作簿的上一年 Sheet** å–,8 æœˆæ–‡ä»¶æ²¡æœ‰ `2023` Sheet,所以 `2024-12` çš„ `last_*` ä¸€ç›´æ˜¯ NULL。
**过程**:先用 7 æœˆæ–‡ä»¶ï¼ˆå« `2023` Sheet)另存只留 4 ä¸ªå¹´åº¦ Sheet çš„临时文件导入 â†’ `2024-12` çš„ `last_*` å¡«ä¸Šäº†ï¼Œä½† **`2021-12` çš„「湖北省」行 1 æœˆå€¼ä»Ž 14945.34 å˜æˆäº† 0**。排查发现「湖北省」行是 `=SUM()` **公式**,openpyxl å¦å­˜ä¼š**丢掉公式的缓存值**,POI è¯»åˆ°ç©ºå…¬å¼å°±å†™ 0。
**修正**:改用**原始 7 æœˆæ–‡ä»¶**整份重导(`POST /api/import/freightTurnover?period=2026-07`,返回「共 108 æ¡è®°å½•」= 6 æœŸ Ã— 18 è¡Œï¼‰ã€‚
**复核**:7 æœˆ/8 æœˆä¸¤ä¸ªæ–‡ä»¶çš„ 11 ä¸ªå¹´åº¦ Sheet ä¸Žåº“逐格比对 **4,752 æ ¼å…¨éƒ¨ 0 ä¸ä¸€è‡´**;上年同期链条 2022→2021、2023→2022、2024→2023、2025→2024、2026-07/08→2025 **全部 0 ä¸ä¸€è‡´**。
**教训**:以后不能用 openpyxl å¦å­˜ Excel å†å–‚给后端,公式缓存会丢;要么用原始文件,要么用 Excel COM å¦å­˜ã€‚
## åä¹ã€ç”¨æˆ·ç¬¬ 3 è½®æé—®ï¼šè´§è¿é¡µç­¾ã€Œç´¯è®¡ã€ä¸ºä»€ä¹ˆåªæœ‰å‰å››ä¸ªå¯¹å¾—上 + æ–°å¯¼å…¥æ•°æ®ä½“检
### 19.1 å®šä½è¿‡ç¨‹
1. è§£å‰–导出件「 è´§è¿ã€é¡µç­¾ï¼šå…± 6 ä¸ªç´¯è®¡åˆ— â€”— `S`(2026 1-8月)、`AT`(2025)、`BV`(2024)、`CW`(2023)、`DZ`(2022)、`EO`(2021)。
2. è¯»æ¯ç‰ˆ `docs/生成汇总大表/生成_道路运输量汇总表.xlsx` çš„同名页:`S5/AT5/BV5/CW5` æ˜¯ **Σ公式**,`DZ5` æ˜¯ **数值常量 144979.285376043**,`EO5/EP5` **为空**。2021 å¹´ `EC5:EN5` åäºŒä¸ªæœˆéƒ½æœ‰å€¼ï¼ˆåˆè®¡ 161309.5316),只是累计列漏了。
3. ç”¨æºæ–‡ä»¶ï¼ˆ`D:\05_数据分类\高速\定稿-湖北省各市州运输量数据(2026å¹´1-8月).xlsx`,另有 7 æœˆæ–‡ä»¶å« 2023 é¡µï¼‰å¤ç®—全省行:
| å¹´åº¦ | åˆ— | æ±‡æ€»è¡¨ | æºæ–‡ä»¶æ ¸ç®— | å·®å¼‚ |
|---|---|---|---|---|
| 2026(1-8月) | S | 130311.8927 | 130311.8927 | 0 |
| 2025 | AT | 195433.2232 | 195433.2232 | 0 |
| 2024 | BV | 184938.5780 | 184938.5780 | 0 |
| 2023 | CW | 173045.2932 | 173045.2964 | âˆ’0.0033 |
| 2022 | DZ | 144979.2854 | 144979.2825 | +0.0029 |
| 2021 | EO | ç©º | 161309.5316 | æ•´åˆ—缺失 |
周转量行同理(2023 âˆ’0.0017、2022 +0.0025、2021 ç©ºï¼‰ã€‚市州行 2026~2022 é€æ ¼ä¸€è‡´ï¼Œå·®å¼‚只在「全省」行和 2021 åˆ—。
### 19.2 åŽŸå› 
* **2021 ç´¯è®¡åˆ—(EO)在母版里就是空的** â€”— æ¼å¡«ç´¯è®¡å…¬å¼ï¼›8 æœˆå®šç¨¿åŒæ ·ä¸ºç©ºï¼Œå±žåŽ†å²é—ç•™ã€‚
* **2022 ç´¯è®¡åˆ—(DZ)是写死常量**,不会随导入数据刷新;其各月值也是当年手工录入的旧精度(1 æœˆ 10709.5265 vs æºæ–‡ä»¶ 10709.5234)。
* **2023 ç´¯è®¡åˆ—(CW)是公式,但输入来自母版**:母版 2023 å…¨çœè¡Œ = è§„上+规下两行相加,与源文件 `2023` é¡µæ¹–北省行精度不同,差 0.0033。
* ä»£ç æ¯æ¬¡å¯¼å‡ºåªå›žå¡«ã€Œç›®æ ‡å½“月」一列(`SummaryWorkbookFiller.fillFreightSheet`),历史月份全部沿用母版 â†’ æ¯ç‰ˆå¯¹ä¸ä¸Šå°±æ•´ä½“对不上。
### 19.3 æ–°å¯¼å…¥æ•°æ®ä½“检(问题清单)
| # | ä¸¥é‡åº¦ | é—®é¢˜ |
|---|---|---|
| 1 | é«˜ | `h2032_enterprise_monthly` å¤šå‡ºä¸€ä¸ª **2026-09 æœŸ**,源文件名是「道路货物运输月度生产情况(2026å¹´8月).xls」(batch 302)。与 2026-08 æœŸé€ä¼ä¸šæ¯”:636 æ¡ä¼ä¸šå®Œå…¨åŒé›†ã€90 ä¸ªåŒºåˆ’,仅 38 å®¶ä¼ä¸šæ•°å€¼ä¸åŒ â†’ æ˜¯ 8 æœˆæ•°æ®çš„另一版本被存成 9 æœˆ |
| 2 | é«˜ | `h2031_enterprise_monthly` **缺 2025-01**(今天只导了 02~12),2025 å¹´ç´¯è®¡ä¼šå°‘ 1 ä¸ªæœˆ |
| 3 | ä¸­ | `passenger_individual_monthly` 2026-08 **缺黄冈市**(7 æ¡å˜ 6 æ¡ï¼‰ |
| 4 | ä½Ž | PASSENGER_AUTH 11 æœŸå…¨ 0 è¡Œï¼Œéœ€ç¡®è®¤æ˜¯å¦æ­£å¸¸ |
| 5 | æç¤º | 2025-04 çš„ H2032 æ­¤å‰ç¼ºå¤±ï¼Œæœ¬æ¬¡å·²è¡¥é½ï¼ˆbatch 382,664 è¡Œï¼‰ï¼›h2032 åŒºåˆ’æ•° 2025=87 / 2026=90,属企业进退规正常变动 |
入库抽查:H2032 2025 å…¨å¹´è§„上 50117.0940 ä¸‡å¨ / 7435040.9971 ä¸‡å¨å…¬é‡Œã€2026 å¹´ 1-8 æœˆè§„上 31399.8248 ä¸‡å¨ï¼Œé€å¸‚å·ž 17/17 ä¸Žå¯¼å‡ºä»¶ã€Œè´§è¿é‡æŽ’名」累计表一致。
详见《功能测试报告/货运累计列核对与导入数据体检_2026-09-16.md》。
### 19.4 git ç»“果(本轮)
- æäº¤ `27574bc`(功能测试报告 + æœ¬èŠ‚ + .gitignore è¡¥ `_pylibs/`、修正 `~$*` å‰å¯¼ç©ºæ ¼ï¼‰â†’ **已推 origin(gitee master)**:`559e937..27574bc`。
- **公司 gitea ä»ä¸å¯ç”¨**:`Test-NetConnection 61.183.254.94:3000` è¿”回 True(TCP é€šï¼‰ï¼Œä½† `GET /r/trafficAudit.git/info/refs?service=git-upload-pack` 25 ç§’无任何响应(HTTP 000),`git fetch gitea` æŠ¥ `Operation too slow. Less than 1000 bytes/sec`。判断为服务端未正常提供 HTTP å“åº”,待恢复后补推,**禁强推**。
## äºŒåã€ç”¨æˆ·ã€Œå¯ä»¥ã€æŽˆæƒé¡¹è½å®žï¼šè´§è¿é¡µç­¾ç´¯è®¡åˆ—修复 + H2032 è„æœŸæ¸…理
### 20.1 å…³é”®å‘现:根因不是累计公式,而是「全省规下」行
上一节我判定为「2021 ç´¯è®¡åˆ—空 + 2022 å†™æ­»å¸¸é‡ + 2023 ç²¾åº¦å·®ã€ï¼Œæœ¬è½®ç”¨ Excel COM é€æœˆå®žæµ‹åŽ**修正了结论**。对 6 ä¸ªå¹´åº¦å—逐月比较「全省行」与「17 å¸‚州行之和」:
| å¹´åº¦ | åˆè®¡å·® | è§„上差 | è§„下差 |
|---|---|---|---|
| 2026(1-8) | 2.8e-5 | 1.8e-12 | 2.8e-5 |
| 2025 | 3.3e-11 | 9.1e-13 | 3.5e-11 |
| 2024 | 1.5e-11 | 9.1e-13 | 1.3e-11 |
| 2023 | **4.6e-3** | 4.5e-13 | **4.6e-3** |
| 2022 | **3.1e-3** | 2.3e-13 | **3.1e-3** |
| 2021 | 4.0e-5 | 4.0e-5 | 1.5e-4 |
- ã€Œè§„上」全省行永远是 17 å¸‚州之和(公式),**一处不差**;
- å·®å¼‚ 100% æ¥è‡ªã€Œå…¨çœè§„下」行 â€”— å®ƒæ˜¯**写死的常量**,与 17 å¸‚州规下之和不等;
- è€Œã€Œ17 å¸‚州行之和」恰好等于源文件湖北省行(2022 = 144979.2825、2023 = 173045.2964),正是用户人工核算的那个数。
所以只要把「全省 è§„上/规下」两行都改成 17 å¸‚州求和公式,全省行自然等于市州之和,累计列随之自动对上。
### 20.2 æ¯ç‰ˆæ”¹åŠ¨ï¼ˆdocs/生成汇总大表/2026å¹´8月道路运输量汇总表.xlsx çš„「 è´§è¿ã€é¡µï¼‰
| ä½ç½® | æ”¹å‰ | æ”¹åŽ |
|---|---|---|
| r7/r8/r9/r10(全省 è§„上/规下 è´§è¿é‡Â·å‘¨è½¬é‡ï¼Œ2021-2025 å„月) | å†™æ­»å¸¸é‡ | SUM(17 å¸‚州对应行) |
| r5/r6(全省 è´§è¿é‡/周转量,2021-2025 å„月) | å¸¸é‡ | m7+m9 / m8+m10 |
| DZ(2022 ç´¯è®¡ï¼Œè¡Œ 5-112) | å†™æ­»å¸¸é‡ | SUM(DM:DX) |
| EO(2021 ç´¯è®¡ï¼Œè¡Œ 5-112) | ç©º | SUM(EC:EN) |
| EA(2022 ç´¯è®¡åŒæ¯”,行 5-112) | å†™æ­»å¸¸é‡ | IFERROR(DZ/SUM(EC:EN)-1,"") |
共 360 + 324 ä¸ªå•元。2026 å¹´å—不动(当月值由导出代码回填);EP(2021 ç´¯è®¡åŒæ¯”)保持为空(页内没有 2020 å—,无同比基期)。改前备份 docs/生成汇总大表/_bak_202608母版修改前_20260916/。
**只改母版这一个文件**:生成_道路运输量汇总表.xlsx æ˜¯åˆ—宽参照件(代码只读列宽/隐藏标记),_版式原型.xlsx è¿è¡Œæ—¶æ— ä»»ä½•代码引用;同期备份母版 resolveSummaryDonor(2026,8) è¦æ±‚文件名以 _备份_ å¼€å¤´ä¸”含「2026å¹´8月」,目录下无匹配(导出日志确认「未找到同期备份母版」),不会冲掉改动。
### 20.3 æ•°æ®åº“清理
- DELETE FROM h2032_enterprise_monthly WHERE report_period='2026-09' â†’ 636 è¡Œï¼ˆROW_COUNT() å®žæµ‹ï¼‰
- DELETE FROM import_batch WHERE id=302 â†’ 1 è¡Œ
- å¤‡ä»½ï¼š_backup_h2032_2026-09_rows_20260916.sql(636 å…ƒç»„)、_backup_h2032_2026-09_batch302_20260916.sql
### 20.4 ä¿®å¤åŽå®žæµ‹ï¼ˆé‡å¯¼å‡º 2026-08,Excel é‡ç®—)
| å¹´åº¦ | åˆ— | ä¿®å¤å‰ | ä¿®å¤åŽ | æºæ–‡ä»¶æ ¸ç®— |
|---|---|---|---|---|
| 2026(1-8月) | S | 130311.8927 | 130311.8927 | 130311.8927 |
| 2025 | AT | 195433.2232 | 195433.2232 | 195433.2232 |
| 2024 | BV | 184938.5780 | 184938.5780 | 184938.5780 |
| 2023 | CW | 173045.2932 | **173045.2964** | 173045.2964 |
| 2022 | DZ | 144979.2854 | **144979.2825** | 144979.2825 |
| 2021 | EO | ç©º | **161309.5316** | 161309.5316 |
全部 4 ä½å°æ•°ä¸€è‡´ï¼ˆæœ€å¤§æ®‹å·® 4.1e-5,为浮点累加噪声)。导出件「全省行」vs「17 å¸‚州行之和」逐月 å°äºŽç­‰äºŽ 9.3e-10。预览接口 types=summaryWorkbook è¿”回 ready=true、20 é¡¹æŒ‡æ ‡ï¼ˆå½“月货运量 16888.76、累计 130311.89)。2026-07 å¯¼å‡ºå›žå½’通过。
### 20.5 è¸©å‘
1. **PowerShell åŒå¼•号里的 "$m7" ä¼šè¢«å½“成变量 m7**:公式串 "=SUM(DM$r:DX$r)" ä¸­çš„ $r:DX è¢«å½“成「驱动器 r:」而吞掉,公式被写成 =SUM(DM5) â€”— é¦–次脚本已把母版改坏,靠备份还原后改用 ${m}/${r} å®šç•Œé‡è·‘。
2. **嵌套的单引号 here-string ä¼šæå‰ç»ˆæ­¢å¤–层 here-string** â†’ æ”¹ä¸ºã€Œå…ˆ Out-File å†™è¡¥ä¸æ–‡ä»¶ï¼Œå† Get-Content -Raw ä¼ ç»™ codex.exe --codex-run-as-apply-patch」。
3. æ¯ç‰ˆè¢« Excel é‡å­˜åŽä½“积 959,706 â†’ 1,480,392 å­—节,导出件 950,186 â†’ 1,331,599(Excel è‡ªèº«æ ¼å¼å¼€é”€ï¼Œä¸å½±å“æ•°æ®ï¼‰ã€‚
4. 2026å¹´8月道路运输量汇总表_版式原型.xlsx çš„ S åˆ—漏了 8 æœˆï¼ˆ=C+E+G+I+K+M+O,缺 Q5),但它运行时不被引用,本次未改。
### 20.6 é—ç•™
- 2026-09 æœŸåœ¨ h204_vehicle_quarterly(1284 è¡Œï¼Œbatch 142/144 åŒæ–‡ä»¶ï¼‰ã€investment_monthly(31 è¡Œï¼Œbatch 107/108 åŒæºï¼‰ã€audit_result(2061 è¡Œï¼‰ã€audit_run(3 è¡Œï¼‰ä¸­ä»åœ¨ï¼Œæœ¬æ¬¡æœªåŠ¨ï¼Œå¾…ç”¨æˆ·ç¡®è®¤æ˜¯å¦æ¸…ç†ã€‚
- 2026-07 æœŸå¯¼å‡ºä»¶ã€Œ è´§è¿ã€é¡µä¸º 118x145(比 8 æœˆå°‘ 2 åˆ—),因 7 æœˆæ¯ç‰ˆæ˜¯ã€Œ1-4 æœˆéª¨æž¶ã€ã€‚
详见《功能测试报告/功能测试报告_货运页签累计列修复与脏期清理_2026-09-16.md》。
---
## äºŒåä¸€ã€2026-07 æ¯ç‰ˆè¡¥é½ + å¯¼å‡ºä»¶ã€ŒExcel æ‰“不开」根因修复
日期:2026-09-16(第 9 è½®ï¼ŒæŽ¥äºŒåèŠ‚ï¼‰
### 21.1 ä»Šå¤©åšäº†ä»€ä¹ˆ
| # | äº‹é¡¹ | ç»“æžœ |
|---|---|---|
| 1 | æ¸…理 2026-09 æ®‹ç•™æ•°æ®ï¼ˆç”¨æˆ·ç¬¬ 1 æ¡ï¼‰ | **完成**:h204_vehicle_quarterly 1284 / investment_monthly 31 / audit_result 2061 / audit_run 3 / import_batch 5 / h2032 636,全部复核为 0 æ®‹ç•™ï¼›å·²ç•™å¯è¿˜åŽŸ SQL å¤‡ä»½ `_backup_2026-09_residual_all_20260916.sql` |
| 2 | ä¿® 2026-07 å¯¼å‡ºä»¶ã€ŒExcel æ‰“不开」 | **完成**(P0,见 21.2) |
| 3 | è¡¥é½ 2026-07 æ¯ç‰ˆï¼ˆç”¨æˆ·ç¬¬ 3 æ¡ã€Œå¯ä»¥è¡¥é½ã€ï¼‰ | **完成**(见 21.3) |
| 4 | ä¿®å¤‡ä»½æ¯ç‰ˆå›žå¡«æŠŠè¡¥é½ã€Œæ‰“回原形」 | **完成**(见 21.4) |
### 21.2 æ ¹å› ï¼šopenpyxl æ¯ç‰ˆ + å¤‡ä»½å›žå¡« â†’ æ®‹ç•™ <is> éžæ³•æ ¼
- åä»¶é‡Œ 19 ä¸ªæ ¼å­å½¢å¦‚ `<c r="E15" s="111" t="n"><v>67.0</v><is><t>67.00</t></is></c>`:`t="n"` å´å¸¦ `<is>`,模式非法,Excel ç›´æŽ¥æ‹’开(COM æŠ¥ã€Œä¸èƒ½å–å¾—ç±» Workbooks çš„ Open å±žæ€§ã€ï¼Œè¿žä¿®å¤æ¨¡å¼ `CorruptLoad=1` ä¹Ÿæ‰“不开)。
- 7 æœˆæ¯ç‰ˆæ˜¯ **openpyxl å†™å‡º**(文本存 `<is>`),8 æœˆæ¯ç‰ˆæ˜¯ **Excel åŽŸç”Ÿ**(文本走 sharedStrings)→ åŒä»£ç ä¸‹åªæœ‰ 7 æœˆåã€‚
- è§¦å‘者是 `restoreSummaryMonthlyBlocks`:7 æœˆæœ‰ `_备份_2026å¹´7月…清理前…xlsx`,整格回填时往 inlineStr æ ¼é‡Œå†™å€¼ï¼Œç•™ä¸‹æ—§ `<is>`;8 æœˆæ²¡æœ‰ `_备份_*`,不走回填,所以一直是好的。
- å®šä½æ‰‹æ³•(值得记住):坏件/好件**除 worksheets/styles/sharedStrings å¤–全部部件逐字节相同** â†’ zip æ‚交 + Excel é€ä¸€å¼€æ¡£ leave-one-out â†’ é”å®š **sheet9《公交》17 æ ¼ + sheet12《轨道、轮渡》2 æ ¼**。
### 21.3 ä¿®å¤
1. `ReportExportService.exportSummaryWorkbook`:落盘前新增 `normalizeStaleInlineStrings(wb)`,清掉所有「非 inlineStr å´æ®‹ç•™ `<is>`」的格子(幂等 + warn æ—¥å¿—)。
2. `ReportExportService.restoreSummaryMonthlyBlocks`:新增 `skipFreightHistoryBlocks`,《 è´§è¿ã€‹é¡µ **T åˆ—及以后**(2025..2021 äº”个年度块 + å„年累计列)永不从备份母版回填 â€”— ä¸Žæ—¢æœ‰ã€Œä¸­å£å¾„排名左块」保护同一思路,防「生成又复活」。
### 21.4 7 æœˆæ¯ç‰ˆè¡¥é½ï¼ˆExcel COM,360 + 324 æ ¼ï¼‰
按 `_fix_mother.ps1`(8 æœˆæ¯ç‰ˆé‚£ç‰ˆï¼‰**整体左移 2 åˆ—**改写:
- å¹´åº¦å—:2025 `T,V,X,Z,AB,AD,AF,AH,AJ,AL,AN,AP`;2024 `AV..BR` éš”列;2023 `BW..CS` éš”列;2022 `DK..DV` è¿žç»­ï¼›2021 `EA..EL` è¿žç»­ï¼›æ¯åˆ—写 `r7/r9/r8/r10 = SUM(17 å¸‚å·ž)`、`r5=r7+r9`、`r6=r8+r10` â†’ **360 æ ¼**;
- ç´¯è®¡åˆ—:`DX=SUM(DK:DV)`、`EM=SUM(EA:EL)`、`DY=IFERROR(DX/SUM(EA:EL)-1,"")`,行 5..112 â†’ **324 æ ¼**;
- `CalculateFullRebuild` åŽä¿å­˜ã€‚母版 921,559 â†’ 1,440,038 å­—节(转 Excel åŽŸç”Ÿï¼‰ã€‚
### 21.5 æµ‹è¯•结果摘要
| ç”¨ä¾‹ | ç»“æžœ |
|---|---|
| 2026-07 å¯¼å‡ºï¼ˆä¿®å¤å‰ï¼‰ | FAIL(复现) |
| çŽ¯å¢ƒ/路径排除(小件、两本母版、09-08 æ—§å¯¼å‡ºã€æ”¹åå¤åˆ¶ï¼‰ | å…¨éƒ¨ OK,确认非环境问题 |
| ä¿®å¤åŽ 2026-07 å¯¼å‡º | **OK sheets=19**,`DX5=144979.2825`、`DY5=-0.101235487797891`、`EM5=161309.53162`、`CU5=173045.296428512` |
| ä¿®å¤åŽ 2026-08 å¯¼å‡º | **OK sheets=19**,`DZ5=144979.2825`、`EO5=161309.53162`、`CW5=173045.296428512` |
| è·¨æœˆä¸€è‡´æ€§ | 7 æœˆä¸Ž 8 æœˆçš„ 2022/2021/2023 ç´¯è®¡**完全相等** |
| éžæ³•格复扫 | 0 ä¸ª |
| 2026-09 æ®‹ç•™å¤æ ¸ | 5 å¼ è¡¨å…¨ 0 |
> æ³¨ï¼š8 æœˆæ¯ç‰ˆè®¡ç®—后 `DZ5` ç”±æ—§çš„写死常量 `144979.285376043` å˜ä¸º `144979.2825`,差 0.0029 â€”— æ­£æ˜¯ç¬¬åäºŒèŠ‚è®°å½•çš„ã€Œå…¨çœè§„ä¸‹å¸¸é‡ â‰  17 å¸‚州之和」那笔差额,属**修正**而非回退。
### 21.6 è¸©å‘
1. **Excel COM å­¤å„¿è¿›ç¨‹ä¼šè®© `Workbooks.Open` é—´æ­‡æ€§å‡æŠ¥åŒä¸€ä¸ªé”™**:每例测完必须强杀本次新建的 `EXCEL` è¿›ç¨‹ã€‚排查初期就因孤儿进程误判「8 æœˆä»¶ä¹Ÿæ‰“不开」,浪费了一轮。
2. `CTWorksheet` **没有** `isSetSheetData()`(sheetData æ˜¯å¿…填),要用 `getSheetData() != null`。
3. æ¯ç‰ˆè¡¥é½çš„备份文件**不能**用 `_备份_` å‰ç¼€ï¼ˆä¼šè¢« `resolveSummaryDonor` å½“ donor å›žå¡«ï¼‰ï¼Œæœ¬æ¬¡ç”¨ `_bak_2026å¹´7月道路运输量汇总表_补齐前_20260916.xlsx`。
### 21.7 é—ç•™
- 2026-06 / 2026-09 æ— æ¯ç‰ˆ â†’ é¢„览 `ready=False`「未找到模板文件」,需先建母版。
- ç¬¬ 8 æ£’遗留未动:`h2031` ç¼º 2025-01、`passenger_individual_monthly` 2026-08 ç¼ºé»„冈、`PASSENGER_AUTH` 11 æœŸå…¨ 0。
- ä»“库根 `_*.*`(含本次 `_hyb_*` / `_loo_*` / `_v2_*` / `_final_*` / `_fixed_*` / `_t7_*` / `_poijar`)未删,待用户同意。
详见《功能测试报告/功能测试报告_2026-07母版补齐与导出件打不开修复_2026-09-16.md》。
### 21.8 æ”¶å·¥è®°å½•(2026-09-16)
- æœ¬è½®ä»£ç /文档已 commit `80e0879`,并 **push åˆ°ä¸ªäºº gitee `origin/master`**(`e29485b..80e0879`)。
- å…¬å¸ gitea ä»ä¸é€šï¼š`git fetch gitea` æŒ‚起约 5 åˆ†é’Ÿæ— å“åº”,已按约定**不强推**,待网络恢复后补推(本地现 `ahead 16`)。
- æ”¶å·¥æ—¶çŽ¯å¢ƒï¼šåŽç«¯ 8090、前端 8080 å‡åœ¨è·‘ï¼›Excel å­¤å„¿è¿›ç¨‹å·²æ¸…干净(只保留用户自己的 18564/25868)。
- æœªæäº¤å†…容(**有意保留,等用户确认**):`docs/投资/` ä¸‹çš„æ—¢æœ‰å¢žåˆ ï¼ˆ`X月…` æ”¹åç­‰ï¼Œéžæœ¬è½®æ”¹åŠ¨ï¼‰ã€ä»“åº“æ ¹ `_*.*` æŽ’查临时文件。
- æ˜Žå¤©å¯åšï¼šæ–°å»º 2026-09(及 2026-06)母版,让 9 æœˆæºæ•°æ®å¯¼å…¥åŽèƒ½ç›´æŽ¥å‡ºæ±‡æ€»å¤§è¡¨ï¼›å…¬å¸ gitea è¡¥æŽ¨ã€‚