Files
lingniu-vehicle-ingest/vehicle-data-platform/docs/daily-geography-20260910.md
T

4.1 KiB
Raw Blame History

车辆日省市、大区后台计算

数据流

TDengine 当日历史定位 → 后台每分钟取车辆日最后有效定位 → 高德省市解析 → MySQL vehicle_daily_geography → 日统计 API → Excel

导出不再查询轨迹或发起逆地理编码。API 按 VIN、北京时间自然日关联已保存的省、市、大区、定位时间和状态。 车辆跨城时,以该日最后有效定位归属为准。原始定位精度保留到小数点后六位;缓存使用同一精度的坐标,避免用附近车辆的地区替代。

API 设置 DAILY_GEOGRAPHY_ENABLED=true 后启动后台任务:

  • 每分钟更新当天定位并解析待处理地区;每小时重查前两天,覆盖跨日、延迟上报及服务重启。
  • 多 API 实例用 MySQL 连接级命名锁避免重复运行。
  • 新坐标使旧解析失效;旧定位不能覆盖新定位;异步返回只更新仍匹配该坐标的记录。
  • 持久化坐标解析缓存,复用 180 天内的结果,降低地图接口请求量。
  • 解析失败保留 ERROR 和退避重试时间;历史任务与当日任务分开运行,批量补算不会阻塞导出。
  • 历史批量结束后,API 后台继续重试历史失败记录。无历史定位记录标记 NO_LOCATION,与接口失败区别处理。
  • 直辖市、省直辖县级市(例如潜江市)处理高德 city=[] 的返回。大区使用华东、华北、华中、华南、东北、西南、西北。

表结构与发布

先执行 deploy/migrations/046_daily_geography.sql,再发布 API 和 Web,开启 DAILY_GEOGRAPHY_ENABLED=true。 旧版 API 不依赖新表,回滚可以保留已经补算的数据。线上版本为 daily-geography-202609101620

独立批量工具:

cd vehicle-data-platform/apps/api
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -o daily-geography ./cmd/daily-geography
# 使用与 platform-api 相同的 MYSQL_DSN、TDENGINE_*、AMAP_API_KEY 环境配置。
./daily-geography --mode backfill --from 2026-07-03 --to 2026-09-09
./daily-geography --mode resolve --from 2026-07-03 --to 2026-09-09
./daily-geography --mode status --from 2026-07-03 --to 2026-09-10

默认历史范围为最早氢耗记录至昨天。批量按天扫描该日各车最后定位,同时为缺少定位的氢耗车辆日建档;可重复运行,支持断点后继续解析。 status 返回各状态数量及尚未建档的氢耗车辆日数量,不把已尝试但失败的记录算作成功。 resolve 处理当前已到重试时间的记录;仍处于退避时间内的失败由常驻后台继续处理。

本次历史范围从 2026-07-03 起,覆盖已有氢耗历史。里程库还包含更早的导入数据及2000年异常日期,不将其当前位置套用为历史地区。

验证

单元测试覆盖历史查询失败、跨北京时间自然日、协议间最后定位选择、持久化缓存命中、地图接口限流重试、直辖市和省直辖市。 日里程 SQL 在分页后关联地区表,权限、车辆与日期筛选及总数保持原有逻辑。 线上通过真实浏览器进入氢耗视图后点击 Excel 导出,再读回下载文件:地区列值正确,导出阶段历史定位和地图解析请求数均为 0;单车示例约440毫秒完成。

生产补算结果(2026-09-10 16:17

2026-07-03 至 2026-09-09 共建档 41,158 个车辆日:41,091 个已解析、67 个无有效定位,待解析和失败均为 0。历史氢耗记录全部覆盖:26,372 个已解析、67 个无有效定位,未建档为 0。

最终两条设备无效坐标 (-0.999999,-0.999999) 已通过后台过滤后重新扫描当天历史,成功选取较早的有效点并解析。过滤在聚合查询之前执行,避免无效末点遮蔽当天有效位置。

粤A08512FLNXNEGRR2SR3166122026-08-31 地区为湖北省/武汉市/华中,定位时间 23:59:54(北京时间)。

桌面和手机真实浏览器 Excel 导出均通过;最终发布再次验证省、市、大区、修正氢耗及物理氢耗列,导出触发位置查询数为 0,浏览器错误为 0。生产常驻任务日志持续每分钟解析当天新位置。