# 工作日结_2026-09-19 ## 一、今天做了什么 ### 1. 持续在规企业(545 家)分市州 1-8 月累计运距同比(桌面交付) 用户 09-18 确认「持续在规企业」= **2025 年 1-8 月与 2026 年 1-8 月均连续 8 个月上报**(545 家), 要求把该口径下的分市州累计运距同比算出来并输出到 `D:\桌面\货运企业分市州情况\`。 - 数据源:`traffic_audit.h2032_enterprise_monthly`(2025-01 ~ 2026-08)。 - 口径:累计平均运距 = 1-8 月累计周转量 ÷ 累计货运量;同比 = 今年累计 ÷ 去年同期累计 − 1;全省 = Σ17 市州。 - 产出:`持续在规企业545家_分市州1-8月累计运距及同比_2026-09-19.xlsx`(`市州汇总` + `企业明细(545家)`), 脚本 `docs\工具\持续在规企业545家累计运距生成.py`。 关键结果: | 市州 | 2026年1-8月累计运距(公里) | 2025年同期(公里) | 同比 | 市州 | 2026年1-8月累计运距(公里) | 2025年同期(公里) | 同比 | | --- | --- | --- | --- | --- | --- | --- | --- | | **全省** | **158.18** | **153.73** | **+2.90%** | 黄冈 | 138.73 | 137.16 | +1.15% | | 武汉 | 159.66 | 140.71 | +13.47% | 咸宁 | 115.25 | 151.84 | −24.10% | | 黄石 | 112.67 | 93.75 | +20.18% | 随州 | 187.28 | 226.03 | −17.14% | | 十堰 | 321.13 | 330.78 | −2.92% | 恩施州 | 141.78 | 128.56 | +10.28% | | 宜昌 | 85.75 | 83.61 | +2.57% | 仙桃 | — | — | 不适用 | | 襄阳 | 279.65 | 258.01 | +8.39% | 潜江 | 407.97 | 367.73 | +10.94% | | 鄂州 | 42.38 | 103.49 | −59.05% | 天门 | 61.02 | 134.33 | −54.57% | | 荆门 | 305.92 | 321.00 | −4.70% | 神农架林区 | 57.68 | 113.39 | −49.13% | | 孝感 | 183.86 | 198.51 | −7.38% | | | | | | 荆州 | 321.44 | 337.36 | −4.72% | | | | | ### 2. 核对用户侧《货运企业分市州情况》表 - 该表 M/N 两列(持续在规企业)与本次 545 家口径**逐行一致**(M = 去年同期基数,N = 累计同比)。 - 发现一处口径混用:**全省行 N4 填的是 8 月当月同比 +7.8217%**(157.0007 ÷ 145.6114 − 1), 其余 17 行均为 1-8 月累计同比;累计口径应为 **+2.90%**(158.18 ÷ 153.73 − 1),相差 4.93 个百分点。 - 表头「1-8月平均运距」未标年份,实际为 2025 年值,已在本次交付件中分列两年消除歧义。 - 该表 O 列「1-8月高速运距同比」与手头高速数据(`运距分析报告\运距分析数据汇总.xlsx`)算得的全省 −5.94% 不一致 (市州差异更大),来源与期间待用户确认;按用户要求本轮不处理高速列。 ### 3. 同名企业口径 1-8 月累计货运量/周转量 SQL 查询脚本(本次新增) 用户提问:25 年与 26 年企业数不同,要「企业名称相同」地分别汇总 1-8 月累计的 货物周转量和货运量,SQL 怎么写。 - 交付脚本:`docs\生成汇总大表\同名企业_1-8月累计对比_2026-09-19.sql`(6 条查询,全中文注释)。 - 口径:企业名称取两年 1-8 月的交集,与白天确认的「持续在规企业 545 家」完全一致; 单位统一 ÷10000 输出「万吨 / 万吨公里」。 - 结果: | 口径 | 企业数 | 货运量2025(万吨) | 货运量2026(万吨) | 货运量同比 | 周转量2025(万吨公里) | 周转量2026(万吨公里) | 周转量同比 | | --- | --- | --- | --- | --- | --- | --- | --- | | 同名企业 | 545 | 30153.14 | 27752.68 | −7.96% | 4635340.46 | 4389882.05 | −5.30% | | 全量 | 664 / 636 | 33994.45 | 31399.82 | — | 5102518.95 | 4927161.77 | — | 同名口径的 2026 年累计数与白天交付件全省行(27752.6820 万吨 / 4389882.0468 万吨公里)完全一致,两条链路互证通过。 全量与同名口径的差额也已算清:2026 年新进 91 家(+3647.14 万吨 / +537279.73 万吨公里), 2025 年退出 119 家(−3841.31 万吨 / −467178.48 万吨公里)。 补充(当日追加):用户接着要「企业明细也导出来」,脚本追加 **查询 7 企业明细导出** 与 **查询 8 合计对总数**。 - 查询 7 的匹配键改用 `unified_credit_code`,覆盖 **546 家**(比名称口径多 1 家改名企业: `91420112558443820B`,2025-01~09「湖北三峡富烨绿电供应链有限公司」→ 2025-10 起「湖北长峡富烨绿电供应链有限公司」), 输出 14 列(信用代码、两年名称、是否改名、市州、两年货运量/周转量及增减同比),按 2026 年货运量降序。 - 546 家口径合计:2025 年 1-8 月 30162.99 万吨 / 4637038.58 万吨公里;2026 年 27764.88 万吨 / 4392984.81 万吨公里。 - 脚本内附三种导出方式(命令行 tsv / Navicat 导 xlsx / INTO OUTFILE),命令行方式已实测导出 546 行、中文正常。 - 待用户确认:对外报送用 545 家(名称交集)还是 546 家(代码交集),确认后再定稿件。 追加(当日第二轮):核对桌面《规上持续在规企业1-8月运距同比.xlsx》与今日交付件, 并修复 SQL 脚本的明细精度缺陷。 - 核对结论:两文件企业名称**545 家逐字符一致**(唯一多出的是改名企业 湖北长峡富烨绿电…); 但除名称外其余列对不上——运距 540/545 家不一致(最大 8.53 公里)、2025 运距 544/545 不一致、 同比 540/545 不一致;根因是对方文件用「万吨保留 2 位」再算运距,交付件走全精度(与数据库 0 偏差)。 另发现市州写法差异:对方写"恩施",交付件写"恩施州"(3 家)。 - 缺陷修复:原 SQL 的明细查询(查询 2、查询 7)把万吨列 `ROUND(...,2)`,精度只到 100 吨, 用户拿去算运距会被放大(湖北弘雷 4631 吨 → 0.46 万吨 → 运距虚高 8.53 公里)。 已改为 4 位小数,并在脚本顶部新增「★ 小数位约定」说明段;整脚本回归通过(21 条用例)。 - 待确认:对外报送用 545 家还是 546 家口径;以及是否把交付件与对方文件的小数位、恩施写法统一。 - 追加:按用户要求把明细类查询(查询 2、查询 7)的 `ROUND` 全部去掉,导出即原始值; 实测货运量/周转量的原始值最多 4 位小数(636 家企业中 4 位以外还有尾数的为 0 家), 4 位即全精度。汇总类仍保留 2 位。整脚本回归通过(25 条用例)。 - 追加验证:查询 2(545 家名称口径)与查询 7(546 家代码口径)**剔除改名企业后逐比特完全相等** (545 行企业名单一致,8 个数值列 + 地区代码最大差均为 0)。原因是匹配键一一对应 + 整数求和精确。 已记为测试报告 T26(累计 26 条用例)。 - 追加:确认「4 位小数」的适用范围(货运量/周转量 4 位即全精度,754 个对象 0 例外; 运距、同比不等于全精度),据此把汇总类查询(1/3/5/8)的 14 处小数位统一为 4 位。 改后脚本输出与 545 家交付件市州汇总逐列对齐(T27~T30,累计 30 条用例)。 ### 4. 汇总大表「中口径排名」周转量口径统一(用户桌面核出差异 → 定位 → 修复) 用户把人工算的一列(「人工-周转量」)放进桌面《生成_道路运输量汇总表 (1).xlsx》的「中口径排名」页, 问为什么和程序生成的「周转量」对不上(全省 +0.31978 万人公里,各市州 ±0.01~0.08)。 - **定位**:同一本表里两页口径不同。「中口径排名」走 `loadMidClassMap()` 公交维度——**逐企业行** 「城际城乡字段 > 0 就用字段值,= 0 才回退 总量 − 城市内」;「中口径明细/分析/道路运输周转量」走台账口径 `smReadLedgerMetrics()`——先按月按市州汇总再 总量合计 − 城市内合计。 源报表三个数各自两位小数舍入,2026 年 1-8 月全省有 **72 行**企业月报 `城际城乡 ≠ 总量 − 城市内`(差 ±0.01),程序采信字段值、人工用差额法,累加即成差异。 按企业行重算的运输口径差**逐市州与表里差列完全吻合**(孝感 +0.08、宜昌/荆州 +0.05、武汉/黄冈/天门 +0.04…)。 - **修复**:`ReportExportService.java` 公交维度改为一律「总量 − 城市内」现算(与台账页/明细页/四页合成口径一致)。 - **验证**:重启后端重新生成 2026-08 大表,「中口径排名」周转量与人工/明细口径 **17 市州逐格归零**; 客运量、同比、分析页、四页合成页无回归;2025 同比基期 0 行受影响(改后 17 市州差全 0)。 - 取证脚本与生成件:`_qa_busfix*.py`、`_after_busfix_2026-08.xlsx`、`_after_midrank.xlsx`、`_after_midana.xlsx`。 ## 二、测试结果摘要 见《功能测试报告_持续在规企业545家分市州累计运距同比_2026-09-19.md》:11 条用例(7 正向 / 3 边界 / 1 负向)全部通过。 - 明细 545 行求和 = 汇总页全省行(27752.6820 万吨 / 4389882.0468 万吨公里,差异 0); - 全省行 = Σ17 市州;17 个市州与用户表格逐行一致; - 仙桃市无可比基数、累计货运量为 0 的企业均已防除零处理。 - 同名企业口径 SQL 脚本已整脚本执行验证(含追加的明细导出查询):17 条用例(11 正向 / 2 负向 / 4 边界)全部通过; 明细 545 行求和 = 汇总行(差异 0),差异企业闭合校验通过。 - 中口径排名周转量口径统一:14 条用例(6 正向 / 1 回归组 / 3 边界 / 3 负向回归)全部通过, 详见《功能测试报告_中口径排名周转量口径统一_2026-09-19.md》; 全省行仍残留 0.0002 万人公里(=2 人公里,母版 `=SUM(O4:O20)` 先四舍五入后求和的固有结构)。 ## 三、遗留问题与待办 1. 用户表格 O 列高速运距同比的来源/期间待确认(需与 N 同为 1-8 月累计),确认后方可算「运距增速差」。 2. 09-18 交付的《货运月报_持续在规企业_分市州1-8月累计运距及同比》采用**官方全口径**(同比 +4.54%); 本表采用**两年持续在规 545 家口径**(同比 +2.90%),两版口径不同但都已注明,供业务按场景选用。 3. 若该表要随《差异率汇总表》上报,建议加注两种口径的差异原因(规上企业名单变动)。 4. 「中口径排名」全省行(母版公式 `=SUM(O4:O20)`)与明细全精度求和差 0.0002 万人公里, 是否改成全精度写值,待用户拍板。 5. 源报表 `city_bus_monthly` 中 72 行「城际城乡 ≠ 总量 − 城市内」的两位小数舍入差异, 已按差额法统一;如后续要与上报口径完全对齐,需回头与填报方确认该字段口径。 ## 四、明天计划 1. 视用户反馈确定上报口径(545 家 vs 全口径),必要时合并成一版双口径表。 2. 高速数据来源确认后补算「运距增速差」。