zhizhijie
5 天以前 f2056aa286179f5d29f3fb6fce1479035cca856a
docs/»ã×Ü´ó±íM0°æÊ½Öؽ¨Æ÷¹æ¸ñ_2026-10-06.md
@@ -99,7 +99,7 @@
## åã€é£Žé™©ä¸Žå¾…确认
1. **待确认:以哪本作扩列蓝本。** å»ºè®®ä»¥ç”¨æˆ·æ‰‹å·¥çš„ 9 æœˆæ¯ç‰ˆä¸ºå‡†ï¼ˆç‰ˆå¼å·²ç”±ç”¨æˆ·å›ºåŒ–)。
2. **待确认:是否一次建成 12 æœˆæ»¡ç‰ˆå¼ã€‚** æ–¹æ¡ˆ v1 å»ºè®®æ»¡ç‰ˆå¼ã€åŽç»­æœˆä»½åªåšã€Œéšè—/置灰未到月份 + ç´¯è®¡é‡ç®— + å¡«å½“月」,可显著降低后续风险;若坚持逐月插入,复杂度与回归成本更高。
2. ~~待确认:是否一次建成 12 æœˆæ»¡ç‰ˆå¼ã€‚~~ **已裁定(2026-10-09):采用 F10「按月按需扩列」、不预留空列;本项作废,见第十三/十四节。**
3. **母版历史坑要一并覆盖**:母版由 openpyxl å†™å‡ºï¼Œå­˜åœ¨é«˜åŽ‹ç¼©ï¼ˆå·²ç”¨ `ZipSecureFile.setMinInflateRatio` ç»•过)与残留 `<is>` éžæ³•格(`normalizeStaleInlineStrings` æ¸…理)两类问题,逐列克隆时需保持这两处处理。
4. **城市客运页参照组是压缩结构**(同比 + 1-X æœˆç´¯è®¡ï¼‰ï¼Œä¸Žå…¶å®ƒé•¿è¡¨é¡µä¸åŒï¼Œéœ€å•独规则。
5. **跨年开新本(2027)不在 M0 èŒƒå›´**,需另定"新年块"规则。
@@ -110,7 +110,7 @@
| åŒäº‹ä¸“项统计的做法 | ä»–为什么能成立 | æ±‡æ€»å¤§è¡¨çš„对应做法 |
|---|---|---|
| ä¸€ä»½æ¯ç‰ˆï¼ˆ`2026年十一数据.xlsx`),**天为行、年为列** | å¢žé•¿ç»´åº¦æ˜¯ã€Œå¹´ã€ï¼Œä¸€å¹´åŠ ä¸€ç»„åˆ—ï¼›å¤©æ•°å›ºå®š 8 | å†»ç»“《道路运输量汇总表_标准母版.xlsx》:**12 ä¸ªæœˆæ»¡ç‰ˆå¼ä¸€æ¬¡åˆ°ä½**,只读 |
| ä¸€ä»½æ¯ç‰ˆï¼ˆ`2026年十一数据.xlsx`),**天为行、年为列** | å¢žé•¿ç»´åº¦æ˜¯ã€Œå¹´ã€ï¼Œä¸€å¹´åŠ ä¸€ç»„åˆ—ï¼›å¤©æ•°å›ºå®š 8 | æŒ‰ **F10**「按月按需扩列」:读 N æœˆæ¯ç‰ˆè‡ªåŠ¨äº§å‡º N+1 æœˆç‰ˆå¼ï¼ˆä¸é¢„留空列),母版只当版式来源 |
| æ¯ç‰ˆåŒæ—¶æ˜¯æ•°æ®å®¹å™¨ï¼ˆåŽ†å²å¹´ä»½çš„å€¼å°±åœ¨å¹¶æŽ’å¹´åˆ—é‡Œï¼‰ | åŽ†å²å€¼éšæ¨¡æ¿ä¸€èµ·èµ° | **反过来做**:历史参照值入库,母版只留版式,参照组由 DB å›žå¡« |
| è¡¨å¤´/行标签语义定位(`findYearColumn` / `parseDayIndex`) | åˆ—序变了也能导 | æ–°å¢žé¡µè§„则表 `SummarySheetRule`:按表头认月份组、按行标签认市州/指标,不用硬编码列锚点 |
| æ˜“漂移口径外置成表(`holiday_calendar` / `passenger_coefficient` / `vehicle_adjustment`) | è§„则不散在代码与单元格里 | å‚照年保留组数、排名口径(全省不排名)、周转量系数 B=G+L/2+Q/10、缺数置空规则 å¤–ç½® |
@@ -120,7 +120,7 @@
### 11.2 è½åœ°è·¯çº¿ï¼ˆå››é˜¶æ®µï¼‰
- **阶段 1(= M0,3.5–5 å¤©ï¼‰**:标准母版冻结 + æ»¡ç‰ˆå¼ + è·¨å¹´é‡å»º + é¡µè§„则表。
- **阶段 1(= M0,3.5–5 å¤©ï¼‰**:实现**按月按需扩列器**(读 N æœˆæ¯ç‰ˆ â†’ äº§å‡º N+1 æœˆç‰ˆå¼ï¼Œä¸é¢„留空列)+ é¡µè§„则表(对齐 F10 / D1)。
  æ–°å¢ž `SummaryLayoutRebuilder` / `SummarySheetRule` / å•测。
  å‡ºå£ï¼š7 æœˆå›žå½’ diff=0;9 æœˆå¯¹ç…§æ‰‹å·¥ç‰ˆ diff=0;10 æœˆèµ·å¯ç›´æŽ¥å‡ºè¡¨ã€‚
- **阶段 2(+1–2 å¤©ï¼‰**:把现有三份文件依赖合并为一份。
@@ -183,7 +183,7 @@
- æ—©æœŸ"库里没有 2025 å¹´åŸŽå¸‚客运数据"的注释与提示文案(`ReportExportService.java:499 / 558 / 561`)**已过期**,触发条件不再成立;同比取数走的是库内去年同期(`aggOf(data, year-1, m, "湖北省")`,约 540 è¡Œï¼‰ã€‚
- **真正遗留的是口径问题,不是缺数据**:中口径排名/明细的 2025 åˆ—仍以**母版静态定稿值**为准(`readMidDetailLastYearCumulative`,`ReportExportService.java:2745` èµ·ï¼‰ï¼Œä»£ç æ³¨é‡Šï¼ˆ2686-2689 è¡Œï¼‰è¯´æ˜ŽåŽŸå› â€”â€”"排名页原先查库现算,两者在 **2025-03/04 ç½‘约车拆分**上不同"。
- å¤„置:先做「库内 2025 vs æ¯ç‰ˆ 2025」逐项 diff(中口径 4 ç»„ä»¶ Ã— 17 å¸‚å·ž Ã— 12 æœˆ + ç´¯è®¡ï¼‰ï¼Œäº¤ä¸šåŠ¡ç¡®è®¤ä»¥å“ªè¾¹ä¸ºå‡†ï¼Œå†å†³å®šæ˜¯å¦åˆ‡æ¢è¯»åº“ã€‚
- å¤„置(**2026-10-09 ä¿®æ­£**):该"待确认"判断有误——同比基准已在 2026-09-07 æ‹æ¿ä¸ºã€Œ**母版缓存优先,库仅作校验**」(`docs/要求与验收基线清单.md` F8、确认回执 Q1);库内 2025 çŽ°ç®—å€¼**不得**直接替代母版静态定稿值,仅当人工核对并重导一致后才切库值。详见第十三节。
### 12.5 ç»“果层(比同事更进一步,可选)
@@ -201,4 +201,82 @@
### 12.7 ä¸Ž M0 çš„关系(依赖顺序)
- 12.4 çš„口径核对不阻塞 M0 é˜¶æ®µ 1(版式重建)。
- M0 é˜¶æ®µ 2「停用 `_备份_` donor è¿˜åŽŸã€çš„æ•°æ®å‰æ**已基本满足**(2025 å·²åœ¨åº“);但仍需先关闭 12.4 çš„差异,否则切换取数来源会让数字变动、无法通过 diff=0 å›žå½’。
- M0 é˜¶æ®µ 2「停用 `_备份_` donor è¿˜åŽŸã€çš„æ•°æ®å‰æ**已基本满足**(2025 å·²åœ¨åº“);但仍需先关闭 12.4 çš„差异,否则切换取数来源会让数字变动、无法通过 diff=0 å›žå½’。
## åä¸‰ã€æ—¢æœ‰æ‹æ¿æ ¸éªŒï¼ˆ2026-10-09 æŸ¥è¯ï¼‰â€”—本节优先级高于前述各节,冲突以本节为准
### 13.1 åŒæ¯”基准:以母版缓存为准(已确认,不是待定项)
| å‡ºå¤„ | åŽŸæ–‡è¦ç‚¹ | çŠ¶æ€ |
|---|---|---|
| `docs/要求与验收基线清单.md` F8 | 2025 å¹´å‰æ•°æ®ä»¥æ¯ç‰ˆç¼“存为准;**母版缓存优先作同比基准,库只做校验**,人工核对重导一致后才切库值(Q1) | âœ… å£å¾„确认 |
| `docs/确认回执汇总与剩余疑问_汇总大表数据驱动改造_2026-09-07.md` Q1 | ä»¥æ¯ç‰ˆç¼“存为同比基准并仅提示;待人工核对后重导一致再切换为库值("母版缓存优先,库仅作校验参考") | å·²ç¡®è®¤ |
| `docs/汇总大表数据驱动改造方案_2026-09-07.md` ç¬¬ä¹èŠ‚ | 2025 å®šç¨¿æ•°æ®"前台导入校验"另立任务;**本期同比一律以母版缓存为基准** | â€” |
| `docs/待确认_汇总大表数据驱动改造问题清单_2026-09-07.md` A1 | 2025 åŠä»¥å‰åŽ†å²åˆ—ä¸€å¾‹**保留母版缓存、不重算** | â€” |
| `docs/问题汇总/汇总大表问题交接_2026-09-21.md` æ–¹æ¡ˆ A | ä¸­å£å¾„排名取去年同期累计改用母版 2025 é™æ€åˆ—(与中口径明细同源),已实施 | å·²å®žæ–½ |
结论:**库内 2025 çŽ°ç®—å€¼ä¸èƒ½ç›´æŽ¥æ›¿ä»£æ¯ç‰ˆ 2025 é™æ€å®šç¨¿å€¼**;切换的唯一前提是"人工核对并重导一致"。第十二节 12.4 ä¸­"交业务确认以哪边为准"的表述据此修正(见该节 2026-10-09 ä¿®æ­£è¡Œï¼‰ã€‚
### 13.2 æ‰©åˆ—方式:按月按需(已拍板)——与本文档"满版式"建议冲突
| å‡ºå¤„ | åŽŸæ–‡è¦ç‚¹ | çŠ¶æ€ |
|---|---|---|
| `docs/要求与验收基线清单.md` F10 | **扩列按月按需(加月份才扩列,不预做 12 æœˆæ»¡ç‰ˆï¼‰**;新增列"当月/同比"标题为两行合并单元格,扩列须保留 | âœ… M0 v4 |
| `docs/汇总大表数据驱动改造方案_2026-09-07.md` v1.1 ä¿®è®¢ï¼ˆ2026-09-08 ç”¨æˆ·æ‹æ¿ï¼‰ | æ­£æ–‡"12 æœˆæ»¡ç‰ˆåˆ—版式"建议**作废**;扩列按"每月需增月份时再扩列"执行(=D1 åŽŸå£å¾„ï¼‰ | å·²æ‹æ¿ |
→ **已裁定(2026-10-09 ç”¨æˆ·ç¡®è®¤ï¼‰**:沿用既有口径 F10「按月按需」,本文档第九/十一节的"满版式"建议**作废**(上文已就地标注)。
### 13.3 å·²æœ‰çš„ 09-29 æ‰©åˆ—工作产物(本地未入库;`docs/问题汇总/_*.md` å·²è¢« gitignore å‘½ä¸­ï¼‰
- `docs/问题汇总/_扩列规格表_2026-09-29.md` / `.csv`:19 é¡µé€é¡µè§„格——类型(A æœˆä»½å¯¹+累计 / B éƒ¨åˆ†æœˆä»½å¯¹ / C æœªè¯†åˆ«æœˆä»½å¯¹ï¼‰ã€å„页月份对列位、累计列、建议插入位置、数据行范围、标题写法。
- `docs/问题汇总/_扩列配置初稿_20260929.md` / `.csv`、`_扩列计划_v3..v10.json`:配置与计划迭代(v10 ä»…剩 `轨道、轮渡` ä¸€é¡µï¼‰ã€‚
- `docs/问题汇总/_扩列进度_20260929.md`:8 æœˆâ†’9 æœˆæ‰©åˆ—进度——8 é¡µå·²æ’列;6 é¡¹å¾…修(表头显示/合并区/累计只到 8 æœˆä¸”多写 +Q/累计同比去年基数只到 8 æœˆ/标题月份未 +1/轨道轮渡需按块分别插列);若干页插入位置待确认。
- è¯•做件 `docs/生成汇总大表/2026å¹´9月道路运输量汇总表_试做_20260929.xlsx`(结构可看、数值未修完,勿用于出表)。
→ æœ¬è§„格应与上述产物对齐推进,不再另行设计。
### 13.4 æ¯ç‰ˆç»´æŠ¤ç›®æ ‡ï¼ˆæ—¢æœ‰å£å¾„)
- `docs/待确认_汇总大表数据驱动改造问题清单_2026-09-07.md` A4:**"稳定后母版只当版式模板,月度数据一律程序填"**——与本文档目标一致。
## åå››ã€æœ€ç»ˆæ‰§è¡Œå£å¾„(2026-10-09 ç”¨æˆ·ç¡®è®¤ï¼Œå–代前述冲突表述)
**做法**:本次只做一件事——**把"扩列"变成程序的常规能力**,其余已确认口径一律不动。
| # | åŠ¨ä½œ | ä¾æ® |
|---|---|---|
| 1 | å®žçް**按月按需扩列器**:读 N æœˆæ¯ç‰ˆ â†’ å…‹éš† N+1 æœˆ"值列+同比列"一对 â†’ ç´¯è®¡åˆ—后移 â†’ æ˜¾å¼é‡å†™ç´¯è®¡/累计同比 â†’ åŒæ­¥è¡¨å¤´ï¼ˆä¸¤è¡Œçºµå‘合并标题)与页面标题 â†’ è¾“出(**只到当月、不预留空列**);同时把结果落盘为下期母版 | F10 / D1 / D2 / ç¡®è®¤å›žæ‰§å…­.4 |
| 2 | ä¸‰æ¡å¿…改点做全:① æ–°æœˆä»½åŒæ¯”公式;② ç´¯è®¡åˆ—枚举补当月;③ **插列右侧 2025/2024/2023 åŽ†å²åŒºå‡ åƒæ¡å…¬å¼å¼•ç”¨ +2** | 09-21 äº¤æŽ¥ Â§5.2 |
| 3 | **先修两处写死的列位置**:`SM_CUR_COL0=2`(2026å¹´1月=C)、`SM_LAST_COL0=21`(2025å¹´1月=V)改为**按表头动态定位**;否则 2025 å—一右移,四张跨页合成页会读错去年基数 | `docs/汇总大表母版扩列配置初稿_2026-09-29.md` ç¬¬äº”节 |
| 4 | ç´¯è®¡åŒæ¯”分母**按表头定位"去年 M æœˆ"列**重写公式(只累加奇数列),不写死列清单;版式对齐改为按表头文字匹配列 | C3 / C4(09-18 é•¿æ•ˆæ–¹æ¡ˆï¼‰ |
| 5 | **同比基准不动**:2025 åˆ—原样保留;库只做校验(B4 åŸºæ•°ä½“检可作校验位),**不切库值**;`_备份_` donor è¿˜åŽŸå…ˆä¿ç•™ä½œå›žå½’å¯¹ç…§ | F8 / Q1 / A3 / 09-21 æ–¹æ¡ˆ A |
| 6 | æ¯é¡µè§„则用配置钉死、不靠自动识别;识别不了的页跳过并报告 | é…ç½®åˆç¨¿ Â§å…­.3 |
**验收(沿用既有 E1 / Â§5.4)**
1. 7 æœˆæ¯ç‰ˆæ‰©å‡º 8 æœˆ â†’ ä¸ŽçœŸå®žã€Š2026å¹´8月道路运输量汇总表.xlsx》逐格 diff=0;
2. 8 æœˆæ¯ç‰ˆæ‰©å‡º 9 æœˆ â†’ ä¸Žç”¨æˆ·æ‰‹å·¥ã€Š2026å¹´9月道路运输量汇总表.xlsx》diff=0(`_试做_20260929.xlsx` åªä½œç»“构参考,不作数值真值);
3. è‡ªæ£€ï¼š`#REF!`=0、8 æœˆåŠä»¥å‰åˆ—逐格未变、累计=1~M æœˆã€ç´¯è®¡åŒæ¯”含 2025 å¹´ç¬¬ M æœˆã€ä¸¤è¡Œåˆå¹¶æ ‡é¢˜ä¿ç•™ã€é”™è¯¯å€¼ä¸å¢žã€‚
**规格来源(2026-10-09 ç”±æœ¬åœ°è¿‡ç¨‹äº§ç‰©è½¬æ­£å…¥åº“)**
- `docs/汇总大表母版扩列规格_2026-09-29.md` / `.csv` â€”— 19 é¡µé€é¡µè§„格(A/B/C ç±»åž‹ã€æœˆä»½å¯¹åˆ—位、累计列、插入位置、数据行范围、标题)
- `docs/汇总大表母版扩列配置初稿_2026-09-29.md` â€”— é€é¡µåˆ—位配置 + ç¡¬å‰æï¼ˆå†™æ­»åˆ—位置)+ å»ºè®®æ–¹æ¡ˆ
**已定(2026-10-09 ç”¨æˆ·ç¡®è®¤ï¼‰**
- **扩列方式:程序扩列**(09-28/09-29 å·²é€‰ï¼Œ2026-10-09 ç”¨æˆ·å†æ¬¡ç¡®è®¤ï¼‰ã€‚⚠️ å­—母陷阱:09-21 äº¤æŽ¥ Â§5.3 çš„"方案 B=Excel å°å·¥å…·"与 09-28/09-29 å·¥ä½œæ—¥ç»“çš„"方案 B=扩列器"**字母相反**,后续统一写"**扩列器(程序)**",不再使用 A/B å­—母。
- **扩列范围 = 8 ä¸ªå¯è§å°è´¦é¡µ**:` è´§è¿`、`班线包车`、`城市客运`、`公交`、`出租`、`网约车`、`轨道、轮渡`、`中口径明细`。
- **4 ä¸ªéšè—é¡µä¿ç•™å¹¶ç»§ç»­éšè—ã€ä¸çº³å…¥æ•°æ®åŠ å·¥**:`公路总客运`、`2025年城市客运量`、`中口径客运量`、`中口径计算过程`(用户 2026-10-09 æ‹æ¿ï¼›ä¾æ® 09-03《自动生成汇总工作簿落地方案》§1)。**不插列、不改公式**(独立 sheet,别的页插列不会带错它们)。本拍板同时消解 09-29 è§„格表把 `中口径客运量` æ ‡ä¸º A ç±»ã€é…ç½®åˆç¨¿æ ‡ä¸º"无 2026 æœˆä»½å¯¹"的矛盾。
- C ç±»**可见**页不扩列:`城市汇总`/`城市分市州`/`中口径分析`/`道路运输周转量` ç”±ç¨‹åºåˆ·æ–°ï¼ˆ`refreshSummaryCumulativeSheets`);`货运量排名`/`货运周转量排名`/`中口径排名` æŒ‰æ¨¡æ¿å¡«æ•°ã€‚
- æ¯ç‰ˆå®žé™…构成实测(2026-10-09):**15 ä¸ªå¯è§é¡µç­¾ + 4 ä¸ªéšè—é¡µç­¾**(XML `state="hidden"`,非 veryHidden,右键标签可取消隐藏)。
**落盘与文件管理(2026-10-09 ç”¨æˆ·ç¡®è®¤ï¼›éžå¾…确认项)**
- è½ç›˜ï¼šæ‰©åˆ—产物**先落 `docs/生成汇总大表/输出/`**(命名 `_扩列_YYYYå¹´M月_待确认.xlsx`),**人工确认后**才重命名落盘为当期母版 `{å¹´}å¹´{月}月道路运输量汇总表.xlsx`。
- ç›®å½•只保留**当期一本母版**;历史期移入 `docs/生成汇总大表/归档/`;`2026å¹´8月…_版式原型.xlsx` ä¸€å¹¶å½’档。
- ç‰ˆå¼å‚ç…§ä»¶ `生成_道路运输量汇总表.xlsx`:**扩列器跑通后归档**;归档前完成 C4 ä¸¤æ­¥â€”—① æŠŠå‚照件的列宽/隐藏一次性固化进当期母版;② `applySummaryReferenceLayout`(`:3785`)改按**表头文字匹配列**(现为按列序号,一插列即错位)。
- `_备份_*` / `_bak_*`:按 A3 ä¿ç•™åˆ°å›žå½’验证通过后再清理。
**实施要点(实测得出,非决策项)**
- æ¯ç‰ˆ vs å‚照件实测差异:**列宽 320 å¤„、隐藏标记 31 å¤„**不同(` è´§è¿` 77+8、班线包车 109、中口径明细 32+14、中口径排名 17+9 ç­‰ï¼‰â†’ å›ºåŒ–不是空操作。
- `copyColumnWidth`(`ReportExportService.java:1186`)**只复制宽度、不复制 hidden** â†’ æ‰©åˆ—器克隆月份列时须补 hidden,否则新列永远要靠参照件补版式。