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

53 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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-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-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 继续使用已发布的中台日统计对齐逻辑,无须再次修改车辆日里程响应代码。