docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-18.md
@@ -38,6 +38,45 @@
- ã€Šç”Ÿæˆ_中口径排名》全省累计 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,与母版定稿全省行完全一致。**母版公式不需要修,之前"待修母版"的结论作废。**
### 5. ç½‘约车订单报告:Word 2003 XML(WordML)兼容导入(15:00)
**用户报障**:《湖北网络预约出租汽车2025年09月分析报告.docx》放在桌面导不进去。
**定位**:该文件根本不是 docx â€”— æ˜¯ **Word 2003 XML(WordML å¹³é“º XML)** è¢«æ”¹åæˆ `.docx`(文件头 `<?mso-application progid="Word.Document"?><w:wordDocument xmlns:w=".../word/2003/wordml">`,3.1MB çº¯ XML、不是 zip åŒ…),POI çš„ `XWPFDocument` åªèƒ½è¯» OPC(zip) åŒ… â†’ æŠ› `File is not a zip file`。监管平台/同事间流转的报告常是这种格式,会反复出现。
**改动(`DataImportService.java`)**:
- `importWycOrderReport()` å…¥å£æŒ‰æ–‡ä»¶å¤´å—…探格式分派:zip→docx;`<w:wordDocument`+`wordml`→**新增 WordML DOM è§£æžè·¯å¾„**;`D0CF11E0`→明确提示「.doc è¯·å¦å­˜ä¸º docx」;其它→「无法识别」;
- æ–°å¢ž `isWordPackage()`:zip ä½†æ—  `word/document.xml`(xlsx æ”¹åï¼‰â†’ ä¸­æ–‡æç¤ºï¼Œä¸å†æŠ› XMLBeans è‹±æ–‡å †æ ˆï¼›
- æ–°å¢ž `parseXmlSafely()`:DOM è§£æžå…³é—­å¤–部实体/DTD(防 XXE);
- è¡¨æ ¼åŒ¹é…æŠ½æˆä¸Žæ ¼å¼æ— å…³çš„ `matchWycOrderTable()`,docx ä¸Ž WordML ä¸¤æ¡è·¯å¾„**共用同一套表头识别/17 å¸‚州取值/合计行逻辑**,不会口径分叉;
- æŠ¥è¡¨æœŸè¯†åˆ«æŠ½æˆ `periodOfParagraphs()`,两种格式共用。
**验证**:8 æ¡ç”¨ä¾‹å…¨éƒ¨é€šè¿‡ï¼ˆè§ã€ŠåŠŸèƒ½æµ‹è¯•æŠ¥å‘Š_网约车订单报告WordML兼容导入_2026-09-18》)。2025-09 å…¥åº“:订单合计 17,652,159;武汉 8,076,610 / é»„石 676,644 / åå ° 1,048,593 / æ©æ–½ 804,736 / æž—区 1,424,与报告附件1 é€é¡¹ä¸€è‡´ï¼›pin ä»Ž `wyc_total_monthly` åŒæœŸå¤åˆ¶ã€‚真 docx(2026-08)重导幂等无变化;`.doc`、xlsx æ”¹åã€éžæœ¬æŠ¥å‘Š docx ä¸‰ç§è´Ÿå‘均给出中文可操作提示。
**数据缺口已补齐(重要)**:用户在 14:21~14:49 ä¹‹é—´è‡ªè¡Œå¯¼å…¥ 2026-01~06(6 ä»½ï¼‰ã€2025-01、2025-10~12;2025-09 ç”±æœ¬æ¬¡ä¿®å¤åŽè¡¥å…¥ã€‚现在 **2025-01~12 + 2026-01~08 çš„订单与 pin å…¨éƒ¨é½å…¨**。直接效果:中口径维度 4 çš„ 1~6 æœˆä»Žã€Œæ— æºã€å˜ä¸ºã€Œå¯ç®—」,**中口径排名件与中口径明细件的累计口径自动归一**(两者 1-8 æœˆç´¯è®¡å‡ä¸º 31528.0606,此前差 2063.45)。
## äºŒã€æµ‹è¯•结果摘要
见 `docs/功能测试报告/功能测试报告_汇总表公式扩页与重算_2026-09-18.md`:8 æ¡æ­£å‘ + 4 æ¡è´Ÿå‘/边界 + 4 é¡¹å…¥åº“抽查,全部通过。
@@ -55,12 +94,29 @@
- 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 ç´¯è®¡åˆ—(属预期)。
### ç½‘约车订单报告 WordML å¯¼å…¥ï¼ˆ15:00)验证
- 8 æ¡ç”¨ä¾‹ï¼ˆ4 æ­£å‘ / 3 è´Ÿå‘ / 1 è¾¹ç•Œï¼‰å…¨éƒ¨é€šè¿‡ï¼šWordML 2025-09 å¯¼å…¥æˆåŠŸã€æŠ¥è¡¨æœŸç•™ç©ºæ—¶é æ ‡é¢˜è‡ªåŠ¨è¯†åˆ«ã€çœŸ docx å¹‚等无变化、`.doc`/xlsx æ”¹å/非本报告 docx å‡ç»™å‡ºä¸­æ–‡æç¤ºã€‚
- æ•°æ®è¡¥é½åŽé‡è·‘ 8 æœˆå¯¼å‡ºå›žå½’:独立《生成_中口径明细》报表期内不一致 0、报表期后仍有值 0;与汇总大表「中口径明细」页 **704 å¯¹æ ¼ 0 å·®å¼‚**;全省 1-8 æœˆæ€»å®¢è¿é‡ 3733.79…4003.57,网约车城乡 333.39…426.56,累计 AA5=31528.0607、AA9=2911.47。
- æŽ’名件与明细件累计口径一致(均 31528.0606),差值 2063.45 æ¶ˆå¤±ã€‚
## ä¸‰ã€é—留问题与待办
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 ç½‘约车订单未入库~~ â†’ **已补齐**(用户 14:21~14:49 å¯¼å…¥ 2026-01~06 + 2025-01 + 2025-10~12;2025-09 ç» WordML ä¿®å¤åŽè¡¥å…¥ï¼‰ã€‚现在 2025-01~12 + 2026-01~08 è®¢å•齐全,维度 4 å…¨æœŸå¯ç®—,排名件/明细件口径归一。仍建议补一条「导入时订单列全空」的显式提示(《模板_网约车订单及全省总量.xlsx》那类文件现在会静默成功)。
5. åº“内 h2031「全省」行 â‰  Î£17 å¸‚州(1-8 æœˆ 27524.49 vs 24481.74,差 3042.75):业务口径问题,建议业务侧核对。
6. æŠ•资:模板里没有的新项目不会自动插行;明细表资金渠道分组行未入库(需加 `fund_channel`);同名不同项目未弹窗。
7. æŠ•资两张明细表(`X月客运站投资明细表` / `X月物流站场投资明细`)生成器未做。
@@ -73,12 +129,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. ç½‘约车订单导入空列提示(页面明确提示"该期订单列为空,未写入订单数")——数据虽已补齐,但静默成功仍是隐患。
3. æŠ•资"新增项目插行 + åˆ†ç»„行入库(`fund_channel`)"方案落地(等用户对"模块"口径的最后确认)。
4. æŠ•资两张明细表生成器(`X月客运站投资明细表` / `X月物流站场投资明细`)。