docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-16.md
@@ -43,3 +43,108 @@
  2. æäº¤ `0d2a5fc`:`fix(cors): æ”¾è¡Œå†…网网段来源,修复局域网 IP è®¿é—®æ—¶ç™»å½• 403`;
  3. æŽ¨ä¸ªäººä»“库 `origin`:`git push origin main:master` æˆåŠŸï¼ˆ`82100d6..0d2a5fc`);
  4. æŽ¨å…¬å¸ `gitea`:`git fetch gitea`、`git push gitea main:main` å‡å›  HTTP æ— å“åº”而挂起,未推送成功(详见遗留问题 5);本次为快进推送,不涉及强推。
---
## å…­ã€ä¸‹åˆè¿½åŠ ï¼ˆä¸¤æ¡ç”¨æˆ·éœ€æ±‚ï¼Œ2026-09-16)
### 1. æŠŠ 8 æœˆå¯¼å…¥çš„「货运量周转量表」中的 21–26 å¹´æ•°æ®å…¨éƒ¨è¯»å…¥æ•°æ®åº“
- **背景**:用户 8 æœˆå¯¼å…¥çš„ `定稿-湖北省各市州运输量数据(2026å¹´1-8月).xlsx` ä¸€ä¸ªå·¥ä½œç°¿å†…含 5 ä¸ªå¹´åº¦ Sheet(`2026å¹´ / 2025å¹´ / 2024å¹´ / 2022å¹´ / 2021å¹´`,源文件无 2023 å¹´ï¼‰ï¼Œè€Œè€é€»è¾‘只读第 1 ä¸ª Sheet å¹¶æŒ‰ã€Œå·¦åŠä»Šå¹´ 1–N æœˆ / å³åŠå޻年 1–12 æœˆã€çš„æœˆåº¦æ¨¡æ¿è§£æžï¼Œå…¶ä½™å¹´åº¦æ•°æ®è¢«ä¸¢å¼ƒã€‚
- **改动(后端 1 æ–‡ä»¶ï¼Œ+153/−19)**:`DataImportService.java` ä¸­ `importFreightTurnover` æ”¹ä¸ºåˆ†æµå…¥å£ï¼›åŽŸé€»è¾‘æŠ½ä¸º `importFreightTurnoverByMonth`(逐行不变);新增 `detectYearSheets`(识别多年度工作簿)、`importFreightTurnoverByYear`(按年入库 + ä¸Šå¹´åŒæœŸå–自上一年度 Sheet)、`parseWholeYearSheet`(整年 Sheet çš„货运量块/周转量块解析)、`persistFreightTurnover`(按报表期先删后插并记批次)。
- **结果**:源文件 5 ä¸ªå¹´åº¦å…¨éƒ¨å…¥åº“,返回「共 90 æ¡è®°å½•」,报表期为 `2021-12 / 2022-12 / 2024-12 / 2025-12 / 2026-08`,每期 18 è¡Œï¼›ä¸Žæºæ–‡ä»¶é€é¡¹æ¯”对 **1080 ä¸ªå•元格零差异**;重复导入幂等(全表 216 è¡Œ md5 å‰åŽä¸€è‡´ï¼‰ï¼›éžå¤šå¹´åº¦æ–‡ä»¶è‡ªåŠ¨å›žé€€åŽŸæœˆåº¦è·¯å¾„ã€‚
- è¯¦è§ã€ŠåŠŸèƒ½æµ‹è¯•æŠ¥å‘Š_货运量周转量多年度导入_2026-09-16.md》。
### 2. æŠ¥è¡¨ç”Ÿæˆ-汇总大表预览:删掉「中口径」之后的表格
- **改动(前端 1 æ–‡ä»¶ï¼Œå•行)**:`ReportExport.vue` ç¬¬ 133 è¡Œç”± `v-else-if="it.summary && it.summary.length"` æ”¹ä¸º `v-if="it.key !== 'summaryWorkbook' && it.summary && it.summary.length"`。根因是上面的汇总表用 `v-if`、第二张表用 `v-else-if`,对 `summaryWorkbook` ä¹Ÿç…§æ ·æ¸²æŸ“。
- **验证(推翻上一轮的无效取证)**:早期截图没拍到弹窗、AX æ ‘读到的是缓存,均为无效证据;本轮改用 `tab.playwright.evaluate` ç›´æŽ¥è¯» DOM â€”— å¼¹çª—内有且仅有 1 å¼ è¡¨ï¼ˆ`preview-summary wb-table`,12 è¡ŒæŒ‡æ ‡ï¼‰ï¼Œè¡¨æ ¼ä¸‹æ–¹åªæœ‰ä¸¤æ¡åŒæ¯”缺失提示与「关闭」按钮,**第二张表已彻底消失**。有效截图:`_qa_out/preview_summaryWorkbook_2026-08_verified_20260916.png`(本轮复核重拍 `..._verified2_20260916.png`,均 54006 å­—节)。
- è¯¦è§ã€ŠåŠŸèƒ½æµ‹è¯•æŠ¥å‘Š_汇总大表预览删除中口径后明细表_2026-09-16.md》。
## ä¸ƒã€æµ‹è¯•结果摘要(下午追加部分)
- å¤šå¹´åº¦å¯¼å…¥ï¼š12 æ¡ç”¨ä¾‹å…¨é€šè¿‡â€”—正向(多年度入库、1080 å•元格逐项抽查零差异、报表期语义、上年同期、批次记录)、负向(单 Sheet æœˆåº¦æ¨¡æ¿å›žé€€ã€éžå¹´åº¦å‘½ååŒ Sheet å›žé€€ã€æ··åˆå‘½åå›žé€€ã€éž Excel æ–‡ä»¶æŠ¥é”™ï¼‰ã€å¹‚等(重复导入全表 md5 ä¸€è‡´ï¼‰ã€å›žå½’(测试期清理干净、真实月份 216 è¡Œ / 12 æœŸå£å¾„不变)。
- é¢„览弹窗:7 æ¡ç”¨ä¾‹å…¨é€šè¿‡â€”—DOM å®žæµ‹å¼¹çª—内 `table` æ•°é‡ä¸º 1、类名与行数正确、12 è¡Œæ•°å€¼ä¸ŽåŒæ¯”完整、表格下方无第二张表、`git diff` ä»… 1 è¡Œæ”¹åŠ¨ä¸å›žå½’ã€‚
- æµ‹è¯•期清理:`2099-01` ~ `2099-04` å…¨éƒ¨ç”¨ `POST /api/import/clear?period=…` æ¸…空(各 dataRows=18、batchRows=1),当前库 **0 æ¡ 2099 æ®‹ç•™**、`freight_turnover_import` 216 è¡Œ / 12 ä¸ªæŠ¥è¡¨æœŸã€‚
## å…«ã€é—留问题与待办(更新)
1. **`2021-12` ç­‰æŠ¥è¡¨æœŸæ˜¯ã€Œæ•´å¹´ã€è¯­ä¹‰**:这些期承载该年 1–12 æœˆå…¨å¹´æ•°æ®ï¼Œè€Œéž 12 æœˆå•月;后续报表/审核若按单月口径取数需用户确认口径,必要时再改造。
2. **源文件缺 2023 å¹´ Sheet**:导致不生成 `2023-12`,`2024-12` æ— ä¸Šå¹´åŒæœŸã€‚属源数据缺口。
3. **`2026-01` ~ `2026-07` çš„ `last_*` ä¸ºç©º**:经比对改动前备份(`2026-04` çš„ INSERT)确认这几期改动前即为空,且本次导入未触碰这些报表期(批次只覆盖 5 ä¸ªæœŸï¼‰ï¼Œ**非本次改动引入**;如需补上年同期需重新导入对应年度数据。
4. **改动前的备份不完整**:`_backup_freight_turnover_before_multiyear_20260916.sql` ä»… 59642 å­—节、只解析出 `2026-04` ä¸€å¤„ INSERT,**不能作为完整回滚依据**。
5. å¼¹çª—内「共 0 è¡Œã€ä¸Žã€Œæœˆåº¦è¦†ç›–:1~8月均有数据」口径不同(前者是明细行数),易误解,可考虑改文案(未做,等用户确认)。
6. ä¸Šåˆé—留继续挂账:域名/公网访问的白名单补充、`Login.vue` é”™è¯¯æç¤ºç»†åˆ†ã€AI å¤–发脱敏补齐、4 å¼ æ˜Žç»†æŠ¥è¡¨æ¨¡æ¿æ‰©åˆ—、审核比对基准缺失保护、`sys_role` æƒé™è½åœ°ã€3D éªŒè¯ç ç”Ÿäº§å¼€å¯ã€`backend.log` åŽ†å²æ˜Žæ–‡æ¸…ç†ã€ä»“åº“æ ¹ç›®å½•ä¸´æ—¶æ–‡ä»¶æ¸…ç†ã€‚
7. **公司 gitea ä»å¾…补推**(网络问题,非凭据),补推前先 `git fetch gitea` ä¸Žè¿œç«¯ `main` å¯¹æ¯”合并,禁强推。
## ä¹ã€æ˜Žå¤©è®¡åˆ’
1. ä¸Žç”¨æˆ·ç¡®è®¤ `2021-12` / `2022-12` ç­‰ã€Œæ•´å¹´æŠ¥è¡¨æœŸã€çš„业务口径,以及是否需要把年度数据拆成逐月报表期。
2. ç¡®è®¤æ˜¯å¦éœ€è¦è¡¥ 2023 å¹´æ•°æ®ã€ä»¥åŠ `2026-01`~`2026-07` çš„上年同期是否需要补齐。
3. è§†ç”¨æˆ·æ„è§å¤„理预览弹窗「共 0 è¡Œã€æ–‡æ¡ˆã€‚
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. è§†ç”¨æˆ·æ„è§æ¸…理仓库根目录 `_*.*` ä¸´æ—¶æ–‡ä»¶ã€‚