xyc
8 天以前 3b68e9e811b9edc5a7abf7c53be37d6274f51d7d
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_Öпھ¶ËÄά¿Ú¾¶Í³Ò»_2026-09-18.md
@@ -16,19 +16,27 @@
- æ€»å®¢è¿é‡/总周转量 = ç»´åº¦ 1+2+3+4(`loadMidClassMap` çš„维度 0);
- **全省行一律 = Î£17 å¸‚å·ž**(不采用库内 `region_code='420000'` çš„全省行,该口径 1-8 æœˆæ¯” Î£å¸‚州多 3042.75,属业务待核项);
- åŒæ¯” = (本期 âˆ’ åŽ»å¹´åŒæœŸ) / åŽ»å¹´åŒæœŸï¼›æ— åŽ»å¹´æ•°æ®ç•™ç©ºã€‚
- **缺数据处理规则(本次新增,重要)**:库内该月该维没有源数据时,**保留母版/模板原值**,绝不写空、也不写 0。
  ä¸­å£å¾„明细的城市级「城际城乡巡游出租/网约车」行本来就是「台账页 æ€»é‡ âˆ’ åŸŽå¸‚内」的引用并已业务定稿;
  ç”¨åº“内缺失值覆盖,会把定稿数清掉(2026-01~06 ç½‘约车订单缺失时,全省 333.39 ä¸Žå„市州值被清空过)。
**本次改动文件**:`traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java`
- `loadMidClassMap()`:补维度 3(巡游出租城乡)、维度 4(网约车城乡),新增 `midPeriodKey()`;
- `fillMidCell()`:去掉「出租/网约车写死 0」旁路,四维统一取库内值;
- `fillMidYoyCell()` / `fillMidCumYoyColumn()`:同比由「只算前两维」改为四维齐全;
- `exportPassengerMidDetail()`:由「只处理公式格」改为「按列遍历」,扩列出来的 7~12 æœˆç©ºæ ¼æ‰å¡«å¾—上;扩列月份的总行值列由库内四维合计直接写入;重算改用逐格容错的 `recalcWorkbookFormulas()`(原 `evaluateAll()` ä¼šåœ¨è·¨ç°¿å…¬å¼å¤„整本中断,累计列拿不到新缓存值)。
- `exportPassengerMidDetail()`:由「只处理公式格」改为「按列遍历」,扩列出来的 7~12 æœˆç©ºæ ¼æ‰å¡«å¾—上;
- æ€»è¡Œå€¼åˆ—**一律保留模板公式**(1~6 æœˆåŽŸå…¬å¼ + æ‰©åˆ—克隆出来的公式),由收尾重算填值(不再 `keepCached` æ¸…公式、也不再手写合计);
- `fillMidCell()`:库内取值为 0(该月该维无源)时直接返回,保留母版/定稿原值;
- é‡ç®—改用逐格容错的 `recalcWorkbookFormulas()`,并 `setIgnoreMissingWorkbooks(true)`:跨簿公式(`[1]出租!C13`)在外部工作簿缺失时改用该格自身缓存值参与计算,否则引用它的总行/累计会连锁失败(表现为"公式在、但没有缓存值");
- æ–°å¢ž `blankFutureMonthColumns()`:报表期之后的月份列(如 8 æœˆæŠ¥è¡¨é‡Œçš„ 9~12 æœˆï¼‰æ¸…空数据格、保留表头,避免出现"9~12 æœˆå…¨æ˜¯ 0"的假数据。
## äºŒã€æµ‹è¯•环境
- åŽç«¯ 8090(`start-dev.ps1` é‡å¯ï¼ŒPID 11772)、前端 8080(复用已在运行实例);数据库 `traffic_audit`(127.0.0.1:3308);报表期 2026-08,mode=month。
- åŽç«¯ 8090(`start-dev.ps1` é‡å¯ï¼Œç¬¬äºŒè½® PID 18516)、前端 8080(复用已在运行实例);数据库 `traffic_audit`(127.0.0.1:3308);报表期 2026-08,mode=month。
- å¯¼å‡ºæŽ¥å£ï¼š`/api/report/export/summaryWorkbook`、`/api/report/export/passengerMidDetail`、`/api/report/export/passengerMidRank`。
- è¯æ®æ–‡ä»¶ï¼š`_tmp/_qa_out/step3c_summary.xlsx`、`step3c_midDetail.xlsx`、`step3c_midRank.xlsx`、`chk_step3c2.txt`、`chk_step3c3.txt`、`cmp_step3bc.txt`(本轮);`step3b_*.xlsx`(改动前基线)。
- è¯æ®æ–‡ä»¶ï¼ˆç¬¬ä¸€è½®ï¼‰ï¼š`_tmp/_qa_out/step3c_summary.xlsx`、`step3c_midDetail.xlsx`、`step3c_midRank.xlsx`、`chk_step3c2.txt`、`chk_step3c3.txt`、`cmp_step3bc.txt`;`step3b_*.xlsx`(改动前基线)。
- è¯æ®æ–‡ä»¶ï¼ˆç¬¬äºŒè½®/最终):`_tmp/_qa_out/step3g_summary.xlsx`、`step3g_midDetail.xlsx`、`step3g_midRank.xlsx`、`export_step3g.txt`、`chk_step3g.txt`、`cmp_md_vs_summary.txt`;导出脚本 `export_step3g.py`。
## ä¸‰ã€ç”¨ä¾‹è¡¨
@@ -46,6 +54,11 @@
| 10 | è´Ÿå‘/边界 | `wyc_order_monthly` 2026-01~06 è®¢å•列全为 NULL、模板《网约车订单及全省总量.xlsx》只有 2026-07 ä¸€è¡Œæœ‰æ•°æ® | ç»´åº¦ 4 è¯¥æœˆæ— æº â†’ è¡Œç•™ç©ºï¼ˆä¸ç¼–造) | ç‹¬ç«‹ä»¶ã€ŒåŸŽé™…城乡网约车」1-6 æœˆä¸ºç©ºï¼›æ±‡æ€»è¡¨è¯¥å£å¾„由母版定稿承载 | é€šè¿‡ï¼ˆæŒ‰é¢„期留空并记录) |
| 11 | è´Ÿå‘/边界 | åŽ»å¹´åŒæœŸæ— æ•°æ®ï¼ˆå¦‚ 2025-01 ç½‘约车订单缺失) | åŒæ¯”留空 | ç•™ç©ºï¼Œæœªå†™ 0 / #DIV/0! | é€šè¿‡ |
| 12 | è´Ÿå‘/边界 | ç¼ºæ¨¡æ¿æ–‡ä»¶ | æŠ›ã€Œæœªæ‰¾åˆ°æ¨¡æ¿æ–‡ä»¶ã€å¹¶å†™å…¥åŽç«¯æ—¥å¿— | æœªè§¦å‘(模板齐全) | ä¸é€‚用 |
| 13 | æ­£å‘ | ç‹¬ç«‹ä»¶åŸŽå¸‚级「城际城乡网约车」(R14 æ­¦æ±‰ / R19 é»„石 â€¦ï¼‰1~6 æœˆ | æœ‰å€¼ï¼ˆæ²¿ç”¨å®šç¨¿ï¼š0 / 13.5998 / 10.668 / â€¦ï¼‰ï¼Œä¸è¢«æ¸…空 | 0 / 13.599765541547697 / 10.668042925780014 â€¦ | é€šè¿‡ |
| 14 | æ­£å‘ | ç‹¬ç«‹ä»¶ 18 åœ°åŒº Ã— 12 ä¸ªæœˆï¼šæ€»è¡Œ = Î£ è¯¥å— 4 ç»´è¡Œã€ç´¯è®¡ = Î£1-8 æœˆ | å…¨éƒ¨ç›¸ç­‰ | ä¸ä¸€è‡´æ•° 0 | é€šè¿‡ |
| 15 | æ­£å‘ | ç‹¬ç«‹ä»¶ä¸Žæ±‡æ€»å¤§è¡¨ã€Œä¸­å£å¾„明细」页 1~8 æœˆé€æ ¼å¯¹ç…§ï¼ˆ18 åœ°åŒº Ã— 5 è¡Œ Ã— 8 æœˆï¼‰ | å®Œå…¨ä¸€è‡´ | 704 å¯¹æ ¼ 0 å·®å¼‚ | é€šè¿‡ |
| 16 | è´Ÿå‘/边界 | æŠ¥è¡¨æœŸä¹‹åŽçš„æœˆä»½åˆ—(9~12 æœˆï¼‰ | æ•°æ®æ ¼ä¸ºç©ºã€è¡¨å¤´ä¿ç•™ | æ•°æ®æ ¼å…¨ç©ºã€è¡¨å¤´ `2026å¹´9月…12月` ä¿ç•™ | é€šè¿‡ |
| 17 | å›žå½’ | æœ¬è½®æ”¹åŠ¨å‰åŽï¼šæ±‡æ€»å¤§è¡¨ 17 é¡µã€ç‹¬ç«‹ã€Šç”Ÿæˆ_中口径排名》 | 0 å·®å¼‚ | å‡ 0 å·®å¼‚;独立《生成_中口径明细》差异仅落在 æ€»è¡Œ/出租城乡/网约车城乡 ä¸‰ç±»è¡Œçš„æœˆä»½åˆ—与累计列 | é€šè¿‡ |
**入库抽查**(报表期 2026-08,与源表逐项对齐)
@@ -64,9 +77,14 @@
   - çŽ°è±¡ï¼šæŽ’åä»¶å…¨çœç´¯è®¡ = 29464.6108、累计同比 = 0.638;中口径明细全省累计 = 31528.0607、累计同比 = 0.0581,差值 2063.45 = 2026 å¹´ 1-6 æœˆç»´åº¦ 4(333.39+294.49+347.23+335.39+369.27+383.68)。
   - æ ¹å› ï¼šæŽ’名件由 Java ç”¨ `loadMidClassMap()` çŽ°ç®—ï¼ˆ1-6 æœˆç½‘约车无源 â†’ å°‘一块,且 2025 å¹´åŸºçº¿ä¹Ÿåªæœ‰åº“内口径);中口径明细页走的是母版公式链 + å®šç¨¿ç¼“存值。
   - å»ºè®®ï¼šè§ã€Šæ±‡æ€»è¡¨ä¸‰æ¡ä¸»çº¿ä¿®å¤æ–¹æ¡ˆ_2026-09-18》第 3 æ­¥â€”—统一由「母版公式链 + å°è´¦é¡µã€å‡ºæ•°ï¼ŒJava ä¸å†å¦ç®—一套(详见本轮答复)。
3. **(属母版缺陷)中口径明细城市级「城际城乡巡游出租/网约车」行公式引错页**
   - çŽ°è±¡ï¼šæ­¦æ±‰ R13/R14 å…¬å¼ä¸º `=公交!C13-公交!C15`(应分别指向 `出租!`、`网约车!`),城市级恒为 0;而全省行 R8/R9 é æ¯ç‰ˆç¼“存值给出真实数(535.83 / 333.39),二者不自洽。
   - å¤„置:需修母版这两行的公式引用(一次性),之后由重算自动出值。本次未改母版。
3. **(已纠正的误判)"母版公式引错页"不成立**
   - ä¸Šä¸€è½®ç»“论误判的经过:控制台里中文乱码(`����!`),把 `=出租!C13-出租!C15` å½“成 `=公交!C13-公交!C15`。
   - å¤æ ¸ç»“论(写入文件后按列读取,避开乱码):母版《中口径明细》与独立模板都是**正确的公式链**——
     åŸŽå¸‚级城乡行 = `=[1]出租!C13-[1]出租!C15` / `=[1]网约车!C13-[1]网约车!C15`(台账页 æ€»é‡ âˆ’ åŸŽå¸‚内),
     å…¨çœè¡Œ = `=C13+C18+…`(Σ17 å¸‚州),总行 = `=C6+C7+C8+C9`。
   - åå‘验证:台账页「总量 âˆ’ åŸŽå¸‚内」按 17 å¸‚州求和 = **535.83 / 333.39**,与母版全省行定稿值完全一致;
     æ­¦æ±‰ å‡ºç§Ÿ/网约车城乡 = 0(该市全部为城市内),黄石 = 26.01 / 13.5998,与母版逐项一致。
   - çœŸæ­£çš„æ ¹å› åœ¨æˆ‘们自己的代码:库内无源时把模板公式/缓存值清空(见问题 1 ä¸Ž"缺数据处理规则")。
4. **(数据缺口)2026 å¹´ 1-6 æœˆç½‘约车订单未入库**
   - `wyc_order_monthly` 2026-01~06 ä»…有 `pin_*`,`order_*` å…¨ NULL;模板文件也只有 2026-07 ä¸€è¡Œæœ‰æ•°æ® â†’ ç»´åº¦ 4 çš„ 1-6 æœˆæ— æºã€‚
@@ -74,4 +92,8 @@
本次改动把「中口径」从 2 ç»´ï¼ˆç­çº¿+公交)统一为 4 ç»´ï¼Œå¹¶ä¿®æŽ‰äº†ç‹¬ç«‹ã€Šç”Ÿæˆ_中口径明细》扩列月份总行为空、累计停在上一期的问题;已验证 12 æ¡ç”¨ä¾‹ï¼ˆ6 æ­£å‘ / 3 å›žå½’ / 3 è´Ÿå‘边界)全部通过,汇总大表 17 é¡µä¸Žã€Šç”Ÿæˆ_中口径排名》零回归。
仍待处理:排名件与明细件的口径归一(问题 2,需业务/方案确认)、母版中口径明细城市级公式引错页(问题 3)、网约车 1-6 æœˆè®¢å•数据缺口(问题 4)。
仍待处理:排名件与明细件的口径归一(问题 2,需业务/方案确认)、网约车 2026-01~06 ä¸Ž 2025-01/09/10 è®¢å•数据缺口(问题 4)。
**补记(同日第二轮)**:本轮把"缺数据保留定稿值 + æ€»è¡Œä¿ç•™å…¬å¼ + è·¨ç°¿å®¹é”™é‡ç®— + æŠ¥è¡¨æœŸä¹‹åŽæœˆä»½æ¸…空"四条并进,
独立《生成_中口径明细》现在**整表自洽**(18 åœ°åŒº Ã— 12 ä¸ªæœˆï¼šæ€»è¡Œ = Î£4 ç»´ã€ç´¯è®¡ = Î£1-8 æœˆï¼Œä¸ä¸€è‡´æ•° 0),
且与汇总大表「中口径明细」页 1~8 æœˆé€æ ¼ä¸€è‡´ï¼ˆ704 æ ¼ 0 å·®å¼‚);汇总大表 17 é¡µä¸ŽæŽ’名件零回归。