docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-18.md
@@ -38,6 +38,28 @@
- ã€Šç”Ÿæˆ_中口径排名》全省累计 29464.6108 / åŒæ¯” 0.638,比中口径明细少 2063.45,差值正好是 2026 å¹´ 1-6 æœˆç»´åº¦ 4(网约车)→ æŽ’名件是 Java çŽ°ç®—ã€æ˜Žç»†é¡µèµ°æ¯ç‰ˆå…¬å¼é“¾ï¼Œä¸¤å¥—å£å¾„æ‰“æž¶ï¼ˆç¬¬ 3 æ­¥çš„真正收口点)。
- æ¯ç‰ˆã€Œä¸­å£å¾„明细」城市级「城际城乡巡游出租/网约车」行公式引错页(`=公交!C13-公交!C15`,应指向 `出租!`/`网约车!`),城市级恒 0、全省行靠缓存值 â†’ éœ€ä¿®æ¯ç‰ˆå…¬å¼ä¸€æ¬¡ã€‚
### 4. ç¬¬ 3 æ­¥æ”¶å°¾ï¼šç¼ºæ•°æ®ä¸å†è¦†ç›–定稿值(13:30)
用户反馈「独立《生成_中口径明细》8 æœˆæ²¡é—®é¢˜äº†ï¼Œä½† 1~6 æœˆåè€Œè¢«æ¸…空」后,追出**真正根因**:
- `exportPassengerMidDetail()` å¯¹æ‰©åˆ—月份(>6 æœˆï¼‰çš„æ€»è¡Œå€¼åˆ—是「直接写库内四维合计、写 0 å°± setBlank」;
  è€Œ 1~6 æœˆèµ° `keepCached()` æŠŠå…¬å¼æ¸…成空格 â†’ è¡¨é¢ä¸Š 7/8 æœˆä¿®å¥½äº†ï¼Œå®žé™…上把母版的定稿链路掐断了。
- `fillMidCell()` åŒæ ·ã€Œåº“内取值为 0 â†’ setBlank」,于是 2026-01~06 ç½‘约车城乡(库内该 6 ä¸ªæœˆæ— è®¢å•、维度 4 æ— æºï¼‰è¢«æ•´ç‰‡æ¸…空,
  è¿žå¸¦æ€»è¡Œã€ç´¯è®¡ã€åŒæ¯”全错。
**改动(`ReportExportService.java`,4 å¤„)**:
1. `exportPassengerMidDetail()` æ€»è¡Œå€¼åˆ—:删掉「扩列月份手写库内合计」与 `keepCached` æ¸…公式两条旁路,**一律保留模板公式**,由收尾重算写回缓存值。
2. `fillMidCell()`:库内取值为 0(该月该维无源)时**直接 return,保留母版/定稿原值**——绝不写空、也绝不写 0。
3. `recalcWorkbookFormulas()`:新增 `ev.setIgnoreMissingWorkbooks(true)`。跨簿公式(`[1]出租!C13`)在外部工作簿缺失时默认抛异常,
   ä¼šè®©å¼•用它的总行/累计连锁失败(表现为「公式在、没有缓存值」),置 true åŽæ”¹ç”¨è¯¥æ ¼è‡ªèº«ç¼“存值参与计算。
4. æ–°å¢ž `blankFutureMonthColumns()`:报表期之后的月份列(8 æœˆæŠ¥è¡¨é‡Œçš„ 9~12 æœˆï¼‰**清数据格、留表头**,避免克隆公式算出「9~12 æœˆå…¨æ˜¯ 0」的假数据。
**重要纠正(写进测试报告,也在此留痕)**:早前判断「母版中口径明细城市级公式引错页(`=公交!C13-公交!C15`)」是**误判**——
那是控制台中文乱码造成的误读;母版/模板真实公式是正确的 `=[1]出租!C13-[1]出租!C15` / `=[1]网约车!C13-[1]网约车!C15`,
台账页「总量−城市内」Σ17 å¸‚å·ž = 535.83 / 333.39,与母版定稿全省行完全一致。**母版公式不需要修,之前"待修母版"的结论作废。**
## äºŒã€æµ‹è¯•结果摘要
见 `docs/功能测试报告/功能测试报告_汇总表公式扩页与重算_2026-09-18.md`:8 æ¡æ­£å‘ + 4 æ¡è´Ÿå‘/边界 + 4 é¡¹å…¥åº“抽查,全部通过。
@@ -55,12 +77,26 @@
- 18 ä¸ªåœ°åŒº Ã—(7、8 æœˆï¼‰æ€»è¡Œ = Î£ è¯¥å— 4 ç»´è¡Œï¼›ç´¯è®¡åˆ—缓存值 = Î£1-8 æœˆï¼ˆå…¨çœ 31528.0607);
- å›žå½’:汇总大表 17 é¡µ 0 æ ¼å˜åŒ–、《生成_中口径排名》0 æ ¼å˜åŒ–、《生成_中口径明细》仅 36 æ ¼å˜åŒ–(全部是目标格)。
### ç¬¬ 3 æ­¥æ”¶å°¾ï¼ˆ13:30)验证
- ç‹¬ç«‹ã€Šç”Ÿæˆ_中口径明细》:18 åœ°åŒº Ã— 12 ä¸ªæœˆï¼Œ**总行 = Î£4 ç»´ã€ç´¯è®¡ = Î£1-8 æœˆï¼Œä¸ä¸€è‡´æ•° 0**;9~12 æœˆæ•°æ®æ ¼å…¨ç©ºã€è¡¨å¤´ä¿ç•™ã€‚
- ä¸Žæ±‡æ€»å¤§è¡¨ã€Œä¸­å£å¾„明细」页 1~8 æœˆ **704 å¯¹æ ¼ 0 å·®å¼‚**。
- å…¨çœ 1-8 æœˆæ€»å®¢è¿é‡ï¼š3733.79 / 3777.83 / 3874.44 / 3959.25 / 4115.87 / 4034.99 / 4028.32 / 4003.57;
  ç½‘约车城乡:333.39 / 294.49 / 347.23 / 335.39 / 369.27 / 383.68 / 421.46 / 426.56;累计 AA5 = 31528.0607、AA9 = 2911.47。
- åŸŽå¸‚级网约车城乡:武汉 0、黄石 13.599765541547697(沿用定稿,未被清空)。
- å›žå½’:汇总大表 17 é¡µ **0 æ ¼å·®å¼‚**、《生成_中口径排名》**0 æ ¼å·®å¼‚**;
  æ˜Žç»†ä»¶å·®å¼‚仅落在 æ€»è¡Œ / å‡ºç§ŸåŸŽä¹¡ / ç½‘约车城乡 è¡Œçš„æœˆä»½åˆ—与 AA ç´¯è®¡åˆ—(属预期)。
## ä¸‰ã€é—留问题与待办
1. ~~中口径排名同比仍是写死值~~ â†’ **已按新口径取值**(M3=0.638 / Q3=0.2247),但仍与中口径明细的 0.0581 ä¸è‡ªæ´½ï¼Œå·®å€¼ 2063.45 = ç½‘约车 1-6 æœˆæ— æºï¼›**收口办法见下方"第 3 æ­¥æ”¶å£å»ºè®®"**。
2. ~~`loadMidClassMap()` ç¼ºå·¡æ¸¸å‡ºç§Ÿ + ç½‘约车两维~~ â†’ **已补**(维度 3、4),独立中口径明细四维齐全。
3. **母版缺陷待修**:中口径明细城市级「城际城乡巡游出租/网约车」行公式引错页(指向 `公交!`),城市级恒 0、全省行靠缓存值。
4. **数据缺口**:2026-01~06 ç½‘约车订单未入库(`order_*` å…¨ NULL),模板《网约车订单及全省总量.xlsx》只有 2026-07 ä¸€è¡Œ â†’ ç»´åº¦ 4 è¯¥ 6 ä¸ªæœˆæ— æºï¼›éœ€ä¸šåŠ¡è¡¥æ•°æˆ–ç¡®è®¤ä¸é€‚ç”¨ã€‚
3. ~~**母版缺陷待修**:中口径明细城市级公式引错页~~ â†’ **误判,已作废**:真实公式是正确的跨簿引用,母版无需修改;当时的"引错页"是控制台中文乱码误读。
4. **数据缺口(已核实,属源头就没有)**:2026-01~06 ç½‘约车订单在**源文件**《模板_网约车订单及全省总量.xlsx》里就是空的(只有全省 pin、无订单列),
   ä¸æ˜¯å¯¼å…¥å¤±è´¥â€”—`wyc_order_monthly` è¯¥ 6 æœŸ `order_*` å…¨ NULL ä¸Žä¹‹å»åˆï¼ˆå¯¼å…¥æ‰¹æ¬¡ `WYC_ORDER`,09-04)。
   å½±å“é¢åªæœ‰ä¸€ä¸ªï¼š`WycSplitCalc.calc()` å›  `orderSum<=0` ç®—不出网约车拆分 â†’ ç»´åº¦ 4 è¯¥ 6 ä¸ªæœˆæ— æºï¼ˆçŽ°å·²ç”±ç¬¬ 4 æ¡æ”¹åŠ¨ä¿ç•™æ¯ç‰ˆå®šç¨¿å€¼å…œä½ï¼‰ã€‚
   **建议**:给网约车订单导入加一条「订单列全空」的显式提示(现在会静默成功),并请业务确认这 6 ä¸ªæœˆè®¢å•是否可补。
5. åº“内 h2031「全省」行 â‰  Î£17 å¸‚州(1-8 æœˆ 27524.49 vs 24481.74,差 3042.75):业务口径问题,建议业务侧核对。
6. æŠ•资:模板里没有的新项目不会自动插行;明细表资金渠道分组行未入库(需加 `fund_channel`);同名不同项目未弹窗。
7. æŠ•资两张明细表(`X月客运站投资明细表` / `X月物流站场投资明细`)生成器未做。
@@ -73,12 +109,13 @@
2. æ´¾ç”Ÿé¡µï¼ˆåŸŽå¸‚客运 / ä¸­å£å¾„明细 / å…¬è·¯æ€»å®¢è¿ / ä¸­å£å¾„客运量 / æŽ’名)**只补公式 + é‡ç®—,不单独写数**;
3. åªæœ‰æ¯ç‰ˆé‡Œæœ¬å°±æ˜¯ç¡¬ç¼–码数值的行(中口径明细的城市级"城际城乡出租/网约车"、全省行)按四维口径回填;
4. ç‹¬ç«‹å¯¼å‡ºä»¶ï¼ˆç”Ÿæˆ_中口径明细 / æŽ’名 / å…¬è·¯æ—…客分市州)改为直接取汇总表对应页的值,或共用同一口径函数;
5. æ¯ç‰ˆé‡Œå¼•错页的城市级公式修一次(第 3 æ¡ï¼‰ï¼›
6. ç”ŸæˆåŽè·‘"生成件 vs æ¯ç‰ˆé‡ç®—"逐格回归比对,差异清单落日志,作为验收基线。
5. ~~母版里引错页的城市级公式修一次~~ â†’ **无需**(误判,已作废);
6. ç”ŸæˆåŽè·‘"生成件 vs æ¯ç‰ˆé‡ç®—"逐格回归比对,差异清单落日志,作为验收基线;
7. åº“内缺失(该月该维无源)时**一律保留母版定稿值、不覆盖**——已在第 4 æ¡æ”¹åŠ¨ä¸­è½åœ°ã€‚
## å››ã€æ˜Žå¤©è®¡åˆ’
1. ç¬¬ 3 æ­¥æ”¶å£ï¼šæŒ‰ä¸Šé¢ 6 æ¡è½åœ°ï¼ˆå…ˆä¿®æ¯ç‰ˆå¼•错页的城市级公式 â†’ æŽ’名件改取同源 â†’ å»ºå›žå½’比对脚本)。
2. ç½‘约车 2026-01~06 è®¢å•数据缺口:向用户确认是补数还是留空。
3. æŠ•资"新增项目插行 + åˆ†ç»„行入库"方案落地(等用户对"模块"口径的最后确认)。
4. æŠ•资两张明细表生成器。
1. ç¬¬ 3 æ­¥æ”¶å£ï¼šæŽ’名件与明细件口径归一(差值 2063.45 = 2026 å¹´ 1-6 æœˆç½‘约车城乡)→ æŽ’名件改取汇总表同源值 â†’ å›ºåŒ–"生成件 vs æ¯ç‰ˆé‡ç®—"逐格回归脚本。
2. ç½‘约车订单导入空列提示(页面明确提示"该期订单列为空,未写入订单数")+ å‘用户确认 2026-01~06 æ˜¯å¦è¡¥æ•°ã€‚
3. æŠ•资"新增项目插行 + åˆ†ç»„行入库(`fund_channel`)"方案落地(等用户对"模块"口径的最后确认)。
4. æŠ•资两张明细表生成器(`X月客运站投资明细表` / `X月物流站场投资明细`)。