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

57 lines
4.1 KiB
Markdown
Raw Permalink 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.
# 车辆日省市、大区后台计算
## 数据流
`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`
独立批量工具:
```sh
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。生产常驻任务日志持续每分钟解析当天新位置。