xyc
2026-09-21 ceaa5f2895b71b9dedfe543ae3a0927f912556ab
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-17.md
@@ -200,3 +200,132 @@
《功能测试报告_投资月报匹配与校验引擎_2026-09-17.md》—— M01–M09 **全部通过**。
## ä¹ã€è¿½åŠ ï¼ˆç”¨æˆ·æ ¸å®žã€Œä¹å·žé€šæ²ƒç”°ã€+ ä¸Šçº¿ã€Šå¼¹çª—提示》机制)
### 9.1 ç”¨æˆ·æ ¸å®ž â†’ å®šä½å‡ºä¸€ä¸ªçœŸ bug
- ç”¨æˆ·ï¼šã€Œ`九州通沃田国际供应链中心项目` çš„æœ¬å¹´è®¡åˆ’投资也是 8000,这个是对的」。
- å¤æ ¸åŽç¡®è®¤ï¼š**用户是对的,我错了**。源文件 `2026å¹´7月企业月报汇总(鄂州).xls` R15:
  `G=36000(总投资) H=23504(自开始建设累计) I=8000(本年计划投资) J=4200(自年初累计) K=200(本月完成)`;
  æŠ•资系统 R97 åŒæ ·æ˜¯ `F=8000 / G=4200`。原报告里「8000 vs 4200」是**取列错位**造成的假异常。
- **根因**:该表是**两级表头**——R5 ç»„表头「自年初累计完成投资(万元)」是**合并单元格 I5:K5**,
  R6 å­è¡¨å¤´ I=本年计划投资、J=合计、K=其中:本月完成投资。原解析规则「命中最靠上、命中词最短」→ æŠŠã€Œè‡ªå¹´åˆç´¯è®¡ã€å®šåˆ°äº† I åˆ—。
- åŒä¸€æ¨¡æ¿è¿˜å½±å“ï¼šå¤©é—¨ç‰©æµï¼ˆI=36835 æ˜¯æœ¬å¹´è®¡åˆ’投资,J=16177.7 æ‰æ˜¯è‡ªå¹´åˆç´¯è®¡ï¼‰ã€‚
### 9.2 ä¿®å¤ï¼šåˆå¹¶åŒºæ„ŸçŸ¥å–列
- `格式探测.py` æ–°å¢ž `sheet_merges(path)` / `merge_span(merges, row, col)`;
- `市州月报解析.py` çš„ `pick_columns` æ”¹ä¸ºï¼šå‘½ä¸­è½åœ¨è·¨å¤šåˆ—合并区时,在该区内**排除其它字段更深的子表头所占列**,只剩唯一一列才采用。
- **影响面收敛**:全量复跑 2026-07,`解析结果` ä¸Ž `变更清单` **各只有 4 è¡Œå˜åŒ–**(鄂州 3 + å¤©é—¨ 1),其余逐字不变;项目行仍是 151 è¡Œ / 27 ä¸ªæ–‡ä»¶ã€‚
### 9.3 æ–°å¢žã€Šå¼¹çª—提示》机制(用户要求:只要有不对的地方就弹窗提示)
- æ–°å¢ž `解析校验_<月>.tsv`(源文件自洽性:项目行求和 vs åˆè®¡/小计/市州行、解析状态)。
- `匹配与校验.py` å†…ç½® **14 æ¡æ£€æŸ¥è§„则**,产出 **`弹窗提示_<月>.tsv`**(级别/类型/品类/市州/项目名称/来源/详情/建议动作),并把清单置顶到《匹配校验报告》。
- çº§åˆ«ï¼š**阻断**(不能写表)/**警告**(人工确认后再写)/**提示**(仅告知)。
- è§„则文档:`docs\投资\弹窗提示规则_2026-09-17.md`(将来搬进 Java åŽç«¯æŒ‰æ­¤é€æ¡å¼¹çª—,规则不改)。
- é¡ºå¸¦ä¿®å¥½ 3 ä¸ªæ£€æŸ¥é¡¹ç¼ºé™·ï¼šã€ŒæŠ•资系统名称写法不同」漏报、「疑似同一项目」漏报(中国供销.公安)、0.05 èˆå…¥è¢«è¯¯æŠ¥ä¸ºä¸ä¸€è‡´ã€‚
### 9.4 æœ¬æœŸï¼ˆ2026-07)弹窗结果
| çº§åˆ« | æ¡æ•° | ä¸»è¦å†…容 |
| --- | --- | --- |
| é˜»æ–­ | 0 | â€” |
| è­¦å‘Š | 9 | æºæ–‡ä»¶ vs æŠ•资系统不一致 4、疑似同一项目 4、缺上月投资系统表 1 |
| æç¤º | 36 | å°†æ–°å¢žé¡¹ç›® 5、名称写法不同 5、投资系统查无此项目 15、无该市州数据 2、源文件没报的项目 2 ç­‰ |
- **回归验证(负向)**:把修复前的解析结果喂给程序,会自动弹出 **5 æ¡ã€Œç–‘似取列错位」**,命中的正是 4 ä¸ªå—影响项目 â†’ è¿™ç±» bug ä»¥åŽä¸ä¼šå†ã€Œé™é»˜é€šè¿‡ã€ã€‚
- **确定性**:连跑两次,5 ä¸ªäº§å‡ºæ–‡ä»¶ SHA256 å®Œå…¨ä¸€è‡´ã€‚
### 9.5 å¾…办
1. éœ€ä¸šåŠ¡ç¡®è®¤çš„ 9 æ¡è­¦å‘Šï¼ˆå°¤å…¶æ˜¯ `宜都供销商贸物流园` æœ¬å¹´è®¡åˆ’投资 12000 vs 1013、`麻城市农产品综合物流园` æ€»æŠ•资 35000 vs 33000)。
2. è¯·æ¯æœˆæŠŠ**上月**的投资系统查询结果也放进 `docs\投资\输入\`,否则月度等式校验一直跳过。
3. ä»å¾…确认:客运缺 8 ä¸ªå¸‚州(真没项目 / æ¼æŠ¥ï¼‰ï¼›3 å¤„名称写法不同是否同一项目。
4. Step1 å†™å…¥ä¾§ï¼ˆExcel COM å†™ä¸¤å¼ æ˜Žç»†è¡¨ï¼‰å°šæœªå¼€è·‘。
## åã€è¿½åŠ ï¼ˆç”¨æˆ·è¿½é—®ï¼šã€Œæ˜¯ä¸æ˜¯åªè·Ÿåˆ—å–æ•°æ®ï¼Œè€Œä¸æ˜¯æŒ‰è¡¨å¤´å®šä½ï¼Ÿã€ï¼‰
### 10.1 æ ¸æŸ¥ç»“论:源文件本来就是按表头,但确实还有几处「认列号」,已全部改掉
| ä½ç½® | åŽŸå®žçŽ° | çŽ°çŠ¶ |
| --- | --- | --- |
| å¸‚州月报 27 ä»½æºæ–‡ä»¶çš„字段 | æŒ‰è¡¨å¤´å…³é”®å­—定位(`FIELD_PAT`) | ä¸å˜ï¼ˆæœ¬æ¥å°±æ˜¯æŒ‰è¡¨å¤´ï¼‰ |
| æºæ–‡ä»¶ã€Œåºå·/分类/小计合计」 | è®¤ A åˆ— | ä¿ç•™ï¼ˆæ¨¡æ¿å¦‚此),已写进规则文档 |
| æºæ–‡ä»¶ã€Œå¸‚州行」 | åªçœ‹å‰ 5 åˆ— | ä¿ç•™ï¼ˆæ¨¡æ¿å¦‚此),已写进规则文档 |
| **目标明细表(客运/物流两张)** | **列号写死 B/C/D/E/F/G/H/I/J/K/L/M** | **改为按表头定位**,母版默认列位仅作兜底;列位与预期不符会弹窗 |
| åŒåå­—段命中多列 | å–「命中词最短」→ æ­¦æ±‰ç‰©æµæŠŠã€Œè‡ªå¼€å§‹å»ºè®¾ç´¯è®¡æ–°å¢žå»ºç­‘面积」P å½“成了「自开始建设累计完成投资」 | æ”¹ä¸º**优先取表头下方真的有数字的那一列** |
- **证据可视化**:`解析报告_2026-07.md` æ–°å¢žã€Œå„源文件识别到的列位」一节;`解析校验_2026-07.tsv` æ–°å¢žã€Œåˆ—位」列。
  åŒä¸€æ‰¹æ–‡ä»¶è¯†åˆ«å‡ºçš„列号并不相同(襄阳 `.et` æ˜¯ B/H/I/J/K;随州物流名称在 A åˆ—;武汉客运总投资在 F åˆ—且没有「自年初累计」列表头),
  è¯´æ˜Žç¡®å®žæ˜¯**按表头**而不是按固定列号。
- **武汉物流修正**:该字段项目行求和 = **146313.9**,与目标表武汉市场州行 H åˆ— 146313.9 å®Œå…¨ä¸€è‡´ï¼ˆä¿®å¤å‰è¯¯å– P åˆ—,求和为 0 å´æ²¡æŠ¥é”™ï¼‰ã€‚
- **新增 2 æ¡å¼¹çª—规则**:16 ç›®æ ‡è¡¨åˆ—位置与预期不符(警告)、17 ç›®æ ‡è¡¨ä¸ªåˆ«åˆ—按母版默认(提示);规则文档已更新为 17 æ¡ã€‚
### 10.2 å›žå½’与产出
- å˜æ›´æ¸…单 147 æ¡ä¸­ä»… **6 è¡Œ**变化(武汉物流「自开始建设累计」由空→实值),其余逐字不变。
- å¼¹çª—提示 **47 é¡¹**(阻断 0 / è­¦å‘Š 10 / æç¤º 37);新增的 1 æ¡è­¦å‘Šæ˜¯ã€Œæ­¦æ±‰å®¢è¿ç¼ºã€Žè‡ªå¹´åˆç´¯è®¡ã€åˆ—表头」,与用户 Q5 å£å¾„一致。
- è¿žè·‘两次,7 ä¸ªäº§å‡ºæ–‡ä»¶ SHA256 å®Œå…¨ä¸€è‡´ï¼ˆç¡®å®šæ€§ OK)。
- æµ‹è¯•报告已补第二轮 C11–C17、P06–P08。
### 10.3 ä»æœªæŒ‰è¡¨å¤´çš„两处(有意保留,供确认)
1. æºæ–‡ä»¶ã€Œåºå·/分类行/小计合计行」的文字位置(假定 A åˆ—);
2. ã€Œå¸‚州行」判定只看前 5 åˆ—。
如果需要改成「按表头关键字找市州列」,可以做,但会引入新的误判风险,建议保持现状。
---
## åä¸€ã€ä¸‹åˆè¿½åŠ ï¼ˆç”¨æˆ·ç¬¬ 5 æ‰¹éœ€æ±‚)
### 11.1 æ±‡æ€»è¡¨é—®é¢˜æŽ’查(问题 1、2、5)
- **问题 5(投资《全省预安排计划进度情况汇总》指标为空)**:查清是两层原因。
  1. ç”¨æˆ·æ¡Œé¢é‚£ä»½ `生成_全省预安排计划进度情况汇总 (1).xls` ä¸Žæœ¬åœ° `period=2026-07` çš„导出件**字节完全相同**
     ï¼ˆSHA256 `B38F90F3…`),说明导出时选的是 **7 æœˆ**;表头写 `1-7月累计完成投资`,合计行等于库内 7 æœˆåˆè®¡ã€‚
  2. å³ä½¿æœˆä»½é€‰å¯¹ï¼ŒK/L/M(部资金/省资金/企业自筹)、O–T(2026/2027 å»ºè®®è®¡åˆ’)、Y/Z(省补资金/备注)
     **数据库建表起就没有这些字段**,永远填不上;C åˆ—(县市区)是导入没抓(184 ä¸ªé¡¹ç›® county å…¨ NULL)。
  3. å¦å‘现 N/X ä¸¤åˆ—语义错位(N å†™å½¢è±¡è¿›åº¦é•¿æ–‡æœ¬ã€X é¡¹ç›®è¡Œå†™å»ºè®¾é˜¶æ®µã€åˆè®¡è¡Œå†™å®ŒæˆçŽ‡æ¯”ä¾‹ï¼‰ï¼Œä¸Žæ¯ç‰ˆä¸ä¸€è‡´ã€‚
- **问题 2(城市客运 / ä¸­å£å¾„明细无 8 æœˆï¼Œä¸­å£å¾„排名不对)**:确认库里 8 æœˆæºæ•°æ®é½å…¨ï¼ˆh2031 767 è¡Œã€åŸŽå¸‚公交 142 è¡Œï¼‰ï¼Œ
  æ˜¯ç”Ÿæˆé€»è¾‘问题:
  - `SummaryWorkbookFiller.fillMonthlyLedger()` åªå›žå¡« 6 é¡µä¸”只填市州行(`cityOf()` è®¤ä¸å‡ºã€Œå…¨çœã€è¡Œï¼‰â†’ å¤šä¸ªé¡µç­¾**全省行停在上一期**;
  - ã€ŒåŸŽå¸‚客运」「中口径明细」两页根本不在回填清单里 â†’ æ²¿ç”¨ 8 æœˆæ¯ç‰ˆï¼ˆ8 æœˆåˆ—本来就空);
  - `exportPassengerMidRank()` å…¨çœè¡Œæ˜¯ `=SUM(B4:B20)` å…¬å¼ï¼Œ`setValOrBlank()` é‡å…¬å¼ return ä¸”**不 recalc** â†’ å…¨çœè¡Œæ°¸è¿œæ˜¯æ¨¡æ¿æ—§ç¼“存值;
  - ç‹¬ç«‹å¯¼å‡ºçš„《生成_公路旅客中口径明细》口径少了巡游出租+网约车(`loadMidClassMap()` åªè£…班线+公交两维)。
- **问题 1(汇总表问题总结)**:以上内容 + é€åˆ—/逐页证据,已汇总到 `docs/问题汇总/汇总表问题汇总_2026-09-17.md`。
### 11.2 å·²å®Œæˆå¹¶æµ‹è¯•:数据查看页调整(问题 4)
- `DataView.vue`:报表期前置、新增「投资」「能耗」两组;`DataViewController.java`:新增 5 ç±»æŸ¥è¯¢ä¸Žåˆ—定义。
- `mvn -o compile` é€šè¿‡ï¼›åœæ—§åŽç«¯ï¼ˆ7508/25852/19768)后用 `start-dev.ps1` é‡å¯ï¼ˆæ–°åŽç«¯ PID 21448),
  å‰ç«¯ webpack 15:35:41 `Compiled successfully`。
- æŽ¥å£å®žæµ‹ 18 æ¡ç”¨ä¾‹å…¨é€šè¿‡ï¼›æµ‹è¯•报告见
  `docs/功能测试报告/功能测试报告_数据查看投资能耗与报表期排序_2026-09-17.md`。
### 11.3 æœªå®Œæˆï¼šæŠ¥è¡¨ç”Ÿæˆæ–°å¢žä¸¤å¼ æŠ•资明细表(问题 3)
- æ¨¡æ¿å·²åœ¨ `docs/投资/模板/`(`模板_X月客运站投资明细表.xlsx`、`模板_X月物流站场投资明细.xls`)。
- **阻断点**:这两张表要按「一、部车购税/二、省燃油税/三、农村综合运输服务站/四、候车亭」和「规划内/规划外」分块放项目,
  è€Œ `DataImportService` :2465 ä¸»åŠ¨è·³è¿‡ `^[一二三四五六七八九十]+、.*` åˆ†ç»„行,分组信息没入库。
- è®¡åˆ’(待用户确认后做):① `investment_project` å¢ž `fund_channel` å­—段 â‘¡ å¯¼å…¥è®°å½•当前分组并写入项目
  â‘¢ é‡å¯¼ 7/8 æœˆ â‘£ å†å†™ä¸¤å¼ è¡¨çš„生成器(按市州+分组动态插行、重连汇总页公式)。
### 11.4 å¾…确认
1. ä¸­å£å¾„「全省」到底按什么口径取(库内全省 27524.49 â‰  17 å¸‚州之和 24481.74);
2. `h204_auth_vehicle`、`investment_system` æ˜¯å¦éœ€è¦è¡¥ 2026-08 æ•°æ®ï¼›
3. é—®é¢˜ 3 æ˜¯å¦æŒ‰ 11.3 çš„四步推进。
## 12. æ”¶å°¾ï¼šæ ¹ç›®å½•临时文件归档 + .gitignore åŠ å›ºï¼ˆ16:40)
- èƒŒæ™¯ï¼šä»“库根目录长期堆着 175 æ¡æœªè·Ÿè¸ªçš„临时脚本/导出(含 `_vfy_dump.sql` 43.4 MB、`_backup_h2032_import_batch_before_import.sql` 13.8 MB ç­‰çœŸå®žåº“导出),
  è€Œ `.gitignore` åªå¿½ç•¥äº† `_*.py/_*.txt/_*.xlsx/_*.png/_*.json`,一旦有人执行 `git add -A`,这些真实业务数据会被提交进公司仓库。
- å¤„置(用户选择「归档整理」):把仓库根目录全部未跟踪条目移入 `_tmp/`,**文件全部保留、未删除任何内容**;
  æ¸…单见 `_tmp/_MOVE_MANIFEST_20260917.txt`(168 æ¡ï¼Œåˆè®¡çº¦ 112 MB)。
  `outputs/`(Codex åº”用产物目录)与 `docs/生成汇总大表/_bak_202608母版修改前_20260916/` åŽŸåœ°ä¿ç•™ï¼Œåªå¢žåŠ å¿½ç•¥è§„åˆ™ã€‚
- `.gitignore` å¢žè¡¥ï¼š`_tmp/`、`_*.sql`、`_*.tsv`、`_*.csv`、`_*.ps1`、`_*.patch`、`_*.pkl`、`_*.xml`、`_*.zip`、`_bak_*`、`outputs/`。
- éªŒè¯ï¼š`git check-ignore` å‘½ä¸­ä¸Šè¿°è§„则;归档后 `git status` æ˜¾ç¤ºæ— ä»»ä½•已跟踪文件被改动;前后端仍正常(8090 `/api/auth/captcha` 200、8080 é¦–页 200)。
- Git:公司 Gitea æœåŠ¡å·²æ¢å¤ï¼ˆé¦–é¡µ 200、`git fetch`/`ls-remote` æ­£å¸¸ã€å‡­æ®æ— éœ€å†è¾“),14:54 å·²è¡¥æŽ¨ `d1cfd84..7b6bc7c`(26 ä¸ªæäº¤ï¼‰ï¼›
  æœ¬æ¬¡æäº¤ .gitignore æ”¹åŠ¨å¹¶è¿žåŒæœ¬åœ°é¢†å…ˆçš„ `b3e2176` ä¸€å¹¶æŽ¨é€åˆ°å…¬å¸ Gitea。