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

工作日结_2026-09-21

一、今天做了什么

1. 定位「汇总大表中口径排名累计同比 7.74% vs 中口径明细 7.64%」根因(用户 09-21 提问)

现象:D:\桌面\生成数据\生成_道路运输量汇总表 (3).xlsx 中,
「中口径排名」M13 黄冈 1-8 月累计同比 7.744917%,「中口径明细」T55 同一格 7.641733%;
两页当月累计值相同(3480.930066022),差的只是去年同期基数(3230.713965 vs 3233.810859,差 3.096894)。

排查过程与结论(全部用库内数据 + 7 份母版历史版本逐格验证):

  1. 四个中口径维度分别复算 2025 年 1-8 月:班线+个体、城际城乡公交、城际城乡巡游出租**逐位一致**;
    只有**城际城乡网约车**一维不同,且只有 2025 年 3、4 月不同(其余 6 个月逐位一致):
  • 2025-03 黄冈:母版 5.203089147 / 库现算 3.938965484(差 1.264123663)
  • 2025-04 黄冈:母版 6.585331252 / 库现算 4.752560757(差 1.832770495)
  • 合计差 3.096894158,与两页基数差完全吻合。
  1. 用**母版自己的出租列**(与库逐格一致,17 市州 × 8 月全对)+ 订单 + pin 套现算法复算:
    1/2/5/6/7/8 月**逐位复现(偏差 0.000000000)**,3/4 月复现不出来 → 算法无误,是那两格另有来源。
  2. 否定「9/16 出租补录导致」:9/8 程序改动前的原始母版
    (docs/生成汇总大表/_bak_202608母版修改前_20260916/2026年8月道路运输量汇总表.xlsx)
    这两格**本来就是** 5.203089147 / 6.585331252,同月出租列也已与现库一致 → 矛盾在 9/8 之前就存在。
  3. 反推那两格隐含输入(前提已验证:母版 17 市州城市内加总 = 2504.28 = 全省 pin 城市内,分毫不差,武汉自留
    → 分摊规则与现算法完全相同):隐含的「巡游出租城市内客运量」16 个市州里 15 个都比现在低
    (荆州 -41.38、恩施 -34.65、黄冈 -26.13、十堰 -20.31,仅宜昌 +2.27)。
  4. 最终结论:母版 2025 年 3、4 月的网约车拆分,是用**另一份出租城市内口径**算出来的,与母版自带的出租列自相矛盾;
    9/16 出租入库后,排名页一现算才把矛盾显性化。属**「排行页按库现算 vs 明细页用母版静态历史」的双轨制**问题。
  5. 影响面:除武汉外 16 个市州全有差(宜昌 +0.55pp、十堰 -0.35pp、荆州 -0.32pp、鄂州 -0.30pp、荆门 -0.25pp、
    恩施 -0.13pp、黄冈 -0.10pp…);**全省行两页完全一致**,因为这是市州之间的分摊差异,加总抵消。

2. 产出《汇总大表问题交接说明》(面向接手同事)

  • 仓库:docs/问题汇总/汇总大表问题交接_2026-09-21.md(250 行)
  • 桌面副本:D:\桌面\汇总大表问题交接_2026-09-21.md
  • 内容:现状一句话 / 前置阅读 5 篇 / 生成原理 6 步 / 问题总览表(P0~P2)/ P0-1 历史基数双轨制完整根因与方案 A、B /
    P0-2 母版依赖与「每月换母版」三处必改点及方案 / 已修复的 6 个历史坑(避免改回去)/ P2 待办 /
    关键代码地图(文件:行号)/ 数据与环境 / 证据文件清单 / 待业务确认清单 / 建议接手顺序。

3. 临时证据文件(项目根目录,未清理)

_chk_wyc4~7.txt(网约车逐市逐月复算)、_chk_backsolve.txt(反推出租输入)、_chk_lineage*.txt(母版血缘)、
_chk_rule.txt(候选公式排除)、_chk_all_pref.txt(17 市州差异清单)、_chk_orig.txt(9/8 原始母版)等。

4. 产出《总交接文档》(用户要求「把存在的问题和没做完的工作都写进去,越详细越好」)

  • 仓库:docs/交接文档_2026-09-21.md(约 14.6 KB)。
  • 定位:**全系统唯一入口**。汇总大表那条线不重抄,只做摘要 + 指向已有
    docs/问题汇总/汇总大表问题交接_2026-09-21.md,避免两份文档写同一份内容后互相打架(用户问「汇总也在写要不要写一块」时确认的口径)。
  • 内容:接手第 1 小时清单 / 现状快照(服务·数据库·仓库,均为 09-21 上午实测)/ 系统结构与代码地图 /
    五条数据链(货运周转量、H203-1、城市客运、汇总大表、投资 5 张表)/ 未完成工作 P0·P1·P2 共 27 条(现象·影响·证据·下一步·状态)/
    待业务确认清单 10 条 / 历史坑索引与「最容易被改回去的 6 个点」/ 操作手册(启停·DB·本机特有的坑·交付规矩)/ 接手第一小时 checklist。
  • 本次核实并写入文档的关键事实:
  1. 后端 8090、前端 8080 当前均在运行(接口探活 200);
  2. 库内 investment_project 152 / investment_monthly 284(2026-08 = 136);
  3. 2026-09 脏期已清理干净(此前 09-16 记录的 1284/31/2061/3 行已不存在);
  4. 母版只有 2026年7月 / 2026年8月 两本(缺 2026-06 / 2026-09);
  5. 投资两处未实现:**《亿元投资项目》月份列每月覆盖上月**(Q7 要求的「新增一列」未做)、
    导出「按月分目录 + 自动备份 + 运行日志/校验报错」未实现(Q10 已答同意);
  6. 导出前基数体检(B4)只做了一半:后端 getLastMidIssues() 无任何调用方,前端未消费、无《数据缺失清单》页。

5. 十堰物流源文件清理(用户「清除掉」)+ 投资系统新模板支持

  • 十堰源文件清理(数据处置):docs/投资/输入/物流(物流园区)/8月/湖北省十堰交通物流基础设施投资统计汇总表(月报)(2026年8月).xls
    里的武汉段(27 个项目)与黄石段(4 个项目)用 Excel COM 整行删除(第 11~63 行),只留十堰段(7 个项目);
    原件先备份到 docs/投资/输出/源文件备份/…_原始含武汉黄石_20260921.xls。
    重导验证:该文件由 38 条 → 7 条,8 月物流 total 128 → 97,库内仍是 152 个项目 / 136 条 2026-08 月度数(不增不减)→ 残留问题闭环。
  • 投资系统导出新模板:用户把比对明细表换成《2026年8月投资系统项目明细》(多「项目所处阶段」、少「自年初累计」,列位整体右移)。
    原实现写死 8 列 → 改为**按表头关键字定位**(findColByKeywords),兼容新旧模板;缺列时 year_cum 留空而不是错填。
    新模板 129 条已入库(investment_system 2026-08 = 129,2026-07 = 148 不受影响),字段逐列抽查一致。
  • 审核「基准缺失」保护:新模板没有「自年初累计」,原 nvl() 会把 NULL 当 0 → 100+ 条误报。改为基准为 NULL 时跳过并记 WARN 日志。
    实测:RULE_I002 由「每个项目一条」降为 0 条;RULE_I001 2 条、RULE_I003 1 条、RULE_I004(存在性)25 条,合计 28 条均为真实差异。

二、测试结果摘要

  • 见《功能测试报告_投资系统新模板按表头解析与审核基准缺失保护_2026-09-21.md》:**11 条用例通过**(正向 6 / 负向 1 / 回归 4)。
  • 上半日(汇总大表双轨制定位):本次**无代码改动**,无《功能测试报告》(仅有数据核查)。
  • 数据核查口径:全部结果与库内 h2031_enterprise_monthly / passenger_individual_monthly /
    city_bus_monthly / city_taxi_monthly / wyc_order_monthly 现算值逐位比对,17 市州 × 8 个月,
    一致性达 1e-9;复现脚本与中间输出已留档(见上)。

三、遗留问题与待办

  1. P0-1 已解决:用户选择方案 A(排名页改用母版 2025 静态列),已于 2026-09-21 实施并回归通过,见本文件第六节。
  2. P0-2:母版依赖 —— 9 月出表需先有新母版;方案 A(程序自动扩列,2-3 天)/ 方案 B(Excel 小工具,1 天)待拍板。
  3. P2:B4 导出前基数体检 + 《数据缺失清单》页、D 组增速排名措辞、中口径明细 4 格 #DIV/0!、
    缺母版提示实测、部署包旧母版(用户明确暂不处理)。
  4. 本次产出的交接文档是否归档进 gitea / 是否推送本地未推提交(09-18 起的本地提交尚未推公司 gitea),待用户确认。

四、明日计划

  1. 按用户拍板的方案实施 P0-1(方案 A)并出《功能测试报告》+ 双页同比一致性回归。
  2. P0-2 先出 9 月母版(方案 B 应急),再排方案 A 的扩列器与「7 月母版扩 8 月」逐格 diff 验证。
  3. 配合接手同事过一遍《汇总大表问题交接说明》,答疑并补充遗漏。

五、下午追加:全库数据备份(交付给同事)

用户要求「把我的数据备份出来,拷贝给同事」,产出交付包 _给同事_2026-09-21\(仓库根,已用包内 .gitignore 整包排除入库):

文件 说明
traffic_audit_full_20260921.sql 全库备份,52,010,797 字节(约 49.6 MB),mysqldump 8.0.29 导出,含 CREATE DATABASE + 全 29 表结构与数据,共 128,803 行
还原说明_2026-09-21.md 备份信息 / 还原步骤(A 整库还原、B 已有库补数据)/ 验证明细 / 注意事项
交接文档_2026-09-21.md 总交接文档副本(一并发给同事)

导出命令(服务端同版本 mysqldump):

mysqldump --host=127.0.0.1 --port=3308 --user=root --default-character-set=utf8mb4 \
  --single-transaction --routines --triggers --events --hex-blob \
  --databases traffic_audit --result-file=...\traffic_audit_full_20260921.sql

验证(沿用 2026-09-13 的验证口径):把备份里的库名换成临时库 traffic_audit_vfy → 完整导入 → 与源库逐表 COUNT(*) 比对 → 比对后 DROP DATABASE traffic_audit_vfy。
结论:**29 张表全部一致,0 差异**(合计 128,803 行)。关键表:city_taxi_auth 85,272 / h2031_enterprise_monthly 15,811 / h2032_enterprise_monthly 13,056 / audit_result 3,393 / city_bus_monthly 2,860 / investment_project 152 / investment_monthly 284 / freight_turnover_import 234 —— 与交接文档 §1.2 记录一致。

留下的临时文件(未删):_tmp/_verify_20260921.sql(改名后的验证副本,52 MB)、_tmp/_verify_counts.tsv(逐表比对结果)、_tmp/_mk_pkg_20260921.py、_tmp/_fix_pkg_doc.py。

本次无代码改动,属数据类工作,故不另出《功能测试报告》。

待用户确认:① 交付包是否需要压缩 zip(50 MB → 便于微信/网盘传输);② 同事环境若为 MySQL 5.7,需另出一份 5.7 专用导出;③ 是否需要把 docs/(母版、投资源文件)一并打包 —— 该部分已在 git 仓库内,clone 即可获得。

五之补充:10:34 复查发现备份已过期,已重新导出

  • 用 CHECKSUM TABLE 复检 10:17 那份备份时发现 4 张表校验和不一致,进一步查 COUNT(*):audit_result 3393→3421、import_batch 417→419、investment_system 148→277、investment_monthly 284→284(行数同但内容变),最后写入时间 10:20~10:22
    → 即 10:17 导出之后,另一个会话(提交 2e6830b)又往库里导入了投资系统数据,旧备份已过期。
  • 已重新导出:**10:34:57,52,030,977 字节,合计 128,962 行**(旧份 128,803 行),《还原说明》已按新数据重写(含文件 SHA256)。
  • 重新验证(三层,全过):结构 CREATE TABLE 29/29;逐表 COUNT(*) 29/29 一致;CHECKSUM TABLE 29/29 一致;mysqldump --order-by-primary 有序导出两份数据文件 SHA256 完全相同(逐行内容一致)。
  • 经验:备份只是某一时刻的快照,导完之后只要还在导数据/跑审核就旧了;交付前必须最后再导一次。
  • 新增文档:docs/工具/数据库备份与还原操作步骤.md(备份参数说明 / 三步验证 / 还原 / 常见问题,命令可直接复制)。

六、追加:P0-1 历史同比基数双轨制按方案 A 修复

用户选择 方案 A(排名页改用母版《中口径明细》2025 静态列),已完成代码、回归与文档更新。

  • 代码:ReportExportService.exportPassengerMidRank() 增加母版工作簿上下文重载;汇总导出复用内存母版,独立排名表导出打开对应母版;按表头识别 2025 年逐月列,读取「总客运量 / 总旅客周转量」并按 1..N 月累计;全省基数由 17 市州求和;静态基数不完整时回退库内现算并写 WARN。
  • 编译:mvn -DskipTests compile 通过。
  • 生成回归:2026-08 汇总大表;黄冈客运量累计同比排名/明细均为 7.641733%(原 7.744917%)。
  • 双页一致性:17 市州 × 客运量/周转量的累计值与同比共 68 个数值对全部一致,最大绝对差 2.91e-11;全省累计值 = Σ17 市州;8 月当月同比 34 个数值对最大差 5.48e-15。
  • 独立《生成_中口径排名.xlsx》也按同一静态口径导出,结果与明细页一致。
  • 测试产物:_tmp/qa_plan_a_20260921/生成_道路运输量汇总表_202608_方案A.xlsx、_tmp/qa_plan_a_20260921/生成_中口径排名_202608_方案A.xlsx(按约定保留)。
  • 测试报告:docs/功能测试报告/功能测试报告_中口径排名同比基数方案A_2026-09-21.md。