Files
lingniu-vehicle-ingest/reports/mileage-baseline-reset-20260918/REPORT.md
T

4.4 KiB
Raw Blame History

GB32960 旧来源基线重复累计修复与数据重算 — 2026-09-18

已部署 mileage-baseline-reset-20260918,修复实时统计和历史回补的基线选取,并在备份后重算受影响数据。

线上结果

车辆 日期 协议 修复后日里程 km 说明
粤AGH6240 2026-09-08 GB32960 0.2 原记录保留
粤AGH6240 2026-09-15 GB32960 0 原 35042.9;改用 09-09 的 75429.6 基线,日末仍为 75429.6
粤AGH6240 2026-09-15 JT808 0.1 未修改;中台默认去重选择该非零来源,因此默认页面结果为 0.1
粤AGG5043 2026-09-17 GB32960 70.7 原 308.2 包含重复累计;42077 42006.3 = 70.7

这些结果已通过中台 HTTP 查询和公网开放接口验证;公网单日及区间分页都返回 NORMAL。此前将粤AGG5043 的 308.2 判为正确的结论已被本次完整基线核查纠正。

代码与规则

  • GB32960 的总里程以 VIN 对应的车辆里程表为基准。旧转发来源恢复时,查找该车此前最新日期的有效来源记录(同来源或中台已选中的来源),同日优先采用已选中记录,避免因 IP 不同退回几个月前的基线。
  • 实时 Writer 和 stats-backfill 共用修正后的数据库基线查询。回补同时检查窗口前的跨转发来源历史,与持久化日统计比较后采用较新的自然日基线。
  • JT808、MQTT 保留原来的来源隔离。GPS 估算、协议未确认的历史导入和质量不通过的记录,不作为 GB32960 跨来源基线。
  • 保留累计回退、负值抖动和按实际统计窗口计算的异常上限检查。
  • 新增受控修复工具 mileage-baseline-repair:默认只读计划;应用时要求备份清单,逐条核验旧值和生产基线,在同一事务中更新来源记录及正式日统计,发现并发变化即回滚。

重算范围与备份

扫描 33,681 条有终端证据的 GB32960 来源记录,修正 304 辆车、1,268 条来源记录,重建 1,263 个车辆日结果。第一批 1,265 条,重投影后发现另外 3 条选源关联基线,一并修正;再次检查剩余候选为 0。没有改动原始报文或累计读数。

操作期间暂停统计 Writer 和相关定时任务,备份、重算及发布完成后已恢复。

备份目录:/opt/lingniu-go-native/backups/mileage-baseline-reset-20260918

  • mileage-tables.sql.gz:两张里程统计表的一致性快照,32,438,655 bytesgzip 完整性校验通过。
  • vehicle_daily_mileage1,462,363 行;vehicle_daily_mileage_source1,646,422 行。
  • SHA-256f918217fa1d613fe6d70ef8fee3f8413ca8320f9d3cee8c1e6942a0d850898b2
  • apply-plan-0.jsonapply-plan-1.json 保留逐行修改前内容与新基线。
  • 需要恢复时应在独立库还原备份并按受影响行清单恢复,不直接覆盖已恢复实时写入的整张生产表。

验证与已知限制

  • go test ./internal/stats ./cmd/stats-backfill ./cmd/stat-writer ./cmd/mileage-reproject 通过。
  • 新增返回旧来源的 35042.9 重复累计、来源切换增量 70.7、累计回退仍异常、JT808 来源隔离等回归。
  • 全量 go test ./... 中,未修改的 internal/identity 包测试 TestJT808RegistrationProjectorThrottlesLocationOnlyAfterPersist 失败(throttled facts=1,预期 0),单独重试同样失败。该包未在本次更改或部署,不将全量测试报告为通过。
  • 生产 Repository 验证覆盖 1,024 辆车、09-0809-17 共 6,867 条结果,平台日统计差异 0、单日/区间差异 03 条 outside_daily_range 异常仍保留。
  • 公网与中台 HTTP 实际响应保存在 http-verification.json;临时测试应用 75 已停用并清除车辆授权。
  • 新 Writer readyz 正常,运行二进制 SHA 与发布产物一致;三协议各分区 Kafka lag=0,三个 worker 重试队列均为 0,发布后无 error 级日志。
  • 中台默认“非零优先”的跨协议选择规则未改变,因此应在相同协议下比较中台与开放接口。BI 历史缓存未在本次清理。

发布

新目录:/opt/lingniu-go-native/releases/mileage-baseline-reset-20260918。 旧目录:/opt/lingniu-go-native/releases/mileage-reconciliation-20260916。 更新 stat-writer、stats-backfill,并附带修复工具;其他运行组件沿用原二进制。开放 API 继续使用已发布的中台日统计对齐逻辑,无须再次修改车辆日里程响应代码。