编辑 | blame | 历史 | 原始文档

工作日结_2026-09-18

一、今天做了什么

1. 汇总表三条主线(用户 09-18 上午提出,已修前两条)

先定位,再动手:复核 8 月生成件,确认三条主线是「一个统一根因 + 一处页范围漏项 + 一处口径缺口」:

  • 母版本身是公式驱动的:全省行 = Σ17 市州(公交!C5 = =C9+C13+…)、城市客运/中口径明细市州行 = 跨表引用(城市客运!C9 = =公交!C16+出租!C16+网约车!C16+'轨道、轮渡'!C9)→ 这两页根本不用单独写数据。
  • 主线 1 根因:SummaryWorkbookFiller.ensureMonthFormulas() 页范围只含 6 个台账页,漏 城市客运/中口径明细;而同比公式用的页范围是含的 → 出现"同比列有公式、当月值列空白"。
  • 主线 2/3 根因:生成件**不带公式缓存值**,预览/二次处理读到的是母版上一期的旧值。

改动:
- SummaryWorkbookFiller.ensureMonthFormulas():页范围改用 isMonthLedgerSheet;派生页新增"结构性常量行按月沿用"(中口径明细 武汉 城际城乡出租/网约车 恒为 0 的 4 格);加 logger;删掉已无用的 isFilledLedgerSheet()。
- ReportExportService.recalcWorkbookFormulas():新增,生成收尾逐格 evaluateFormulaCell 写回缓存值(失败兜底 fullCalcOnLoad=true)。

踩坑记录:POI 4.1 的 FormulaEvaluator.evaluate(Cell) 无副作用(只算不写),第一版白跑(日志"成功 40713 格"但文件无 <v>),必须用 evaluateFormulaCell(Cell)。

2. 其他

  • 写了《汇总表三条主线修复方案_2026-09-18》(docs/问题汇总/),把根因、证据、4 步修法、投资"按项目名称更新/新增插行"现状一并记录。
  • 投资侧核实:导入确实按「项目名称 + 类别」upsert(库内 客运站场 49/49、物流园区 135/135 无重复行);缺口是"模板里没有的新项目不会插行"、"资金渠道分组行导入时被跳过"、"同名不同项目不弹窗"。

二、测试结果摘要

见 docs/功能测试报告/功能测试报告_汇总表公式扩页与重算_2026-09-18.md:8 条正向 + 4 条负向/边界 + 4 项入库抽查,全部通过。

  • 城市客运 36 格、中口径明细 180 格 8 月列补齐(公式 + 缓存值)。
  • 全省行 = Σ17 市州三方一致:公交 12315.37、出租 5786.81、网约车 4997.74(与库内 city_bus_monthly 2026-08 各市州求和逐项对齐;武汉 3856.83 / 黄石 879.12 抽查一致)。
  • 中口径排名 K3 缓存 24481.7407 = 手工 Σ17 市州。
  • 回归:改动前后逐格对比,仅 216 格变化,全部落在目标两页,其余 17 页 0 差异。

三、遗留问题与待办

  1. 中口径排名同比仍是写死值(M3=0.7424 / Q3=0.2317,库内全省口径),需与 Σ17 市州口径统一 —— 第 3 步。
  2. loadMidClassMap() 缺巡游出租 + 网约车两维,导致独立《生成_公路旅客中口径明细》少 535.83+333.39(1 月)—— 第 3 步。
  3. 库内 h2031「全省」行 ≠ Σ17 市州(1-8 月 27524.49 vs 24481.74,差 3042.75):业务口径问题,建议业务侧核对。
  4. 投资:模板里没有的新项目不会自动插行;明细表资金渠道分组行未入库(需加 fund_channel);同名不同项目未弹窗。
  5. 投资两张明细表(X月客运站投资明细表 / X月物流站场投资明细)生成器未做。

四、明天计划

  1. 第 3 步:统一中口径口径(rank 全省同比改为同源 + loadMidClassMap 补两维),改完对独立中口径明细与汇总表逐项比对。
  2. 投资"新增项目插行 + 分组行入库"方案落地(等用户对"模块"口径的最后确认)。
  3. 建生成件 vs 母版重算的回归比对脚本,固化为每次改动的验收基线。