# 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 bytes,gzip 完整性校验通过。 - vehicle_daily_mileage:1,462,363 行;vehicle_daily_mileage_source:1,646,422 行。 - SHA-256:`f918217fa1d613fe6d70ef8fee3f8413ca8320f9d3cee8c1e6942a0d850898b2`。 - `apply-plan-0.json`、`apply-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-08~09-17 共 6,867 条结果,平台日统计差异 0、单日/区间差异 0;3 条 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 继续使用已发布的中台日统计对齐逻辑,无须再次修改车辆日里程响应代码。