# OneOS 车辆业务影响矩阵

更新时间：2026-07-14

## 1. 结论

车辆数据中台接入 OneOS 不能等同于“把所有里程和位置字段同步回资产库”。OneOS 同时存在实时遥测、人工单据、合同聚合和结算证据；它们含义不同，必须按数据域迁移。

- 实时位置、在线状态、SOC、速度、当日里程、最新总里程：以车辆数据中台为权威来源。
- 交车里程、还车里程、异动起止里程和结算里程：保留 OneOS 单据事实，不允许遥测自动覆盖。
- 客户、合同、项目、当前租赁归属、车型和运营状态：以 OneOS 为权威来源。
- 车辆中台只消费最小业务投影，不复制合同金额、联系人、银行账号等敏感字段。

## 2. 当前遥测链路

| 链路 | 当前用途 | 已发现问题 | 建议 |
| --- | --- | --- | --- |
| `LocationUtil` → `47.99.166.38:20000` | 交车、还车、迷你交车按 VIN 取坐标和总里程 | 地址硬编码；每次新建 HTTP Client；失败返回固定坐标而非“无数据”；会把故障伪装成真实位置 | P0 禁止固定坐标降级；后续改为调用车辆中台单车快照 API |
| `TruckSyncService` → HASP | 每 10 分钟拉位置、在线、SOC、氢耗、里程 | 全车辆串行请求；依赖车牌/VIN 双接口；状态可能滞后；同时写 `vehicle_status.online_status` | 数据中台稳定后停用拉取任务，改为受控兼容投影或 OneOS 只读调用 |
| `tab_truck_remote_sync_realtime_info` | OneOS 地图、车辆列表位置和里程 | 老表字段多为字符串；总里程单位是米、日里程按 km；坐标已转 GCJ-02；客户名可能来自 HASP 而非 OneOS | 迁移期只作兼容缓存，不作为客户归属或历史权威来源 |
| `vehicle_realtime_location` | CRUD 型实时位置表 | 当前更像普通业务表，没有持续同步和客户范围 | 不新增依赖；确认无调用方后归档或明确用途 |
| `vehicle_status` | 运营/车辆/证照/保险/在线/里程混合状态 | 前四项是业务状态，后两项是遥测状态，来源混杂 | 保留业务状态；在线和遥测里程逐步改为中台只读展示，不反向覆盖业务状态 |

## 3. 业务域影响

| 业务域 | 主要模块/表 | 与客户车辆范围关系 | 中台接入策略 | 风险级别 |
| --- | --- | --- | --- | --- |
| 客户与账号 | `customer_info`、`sys_user` | 决定客户主体和启停 | OneOS 认证，向中台传递签名客户身份 | P0 |
| 合同 | `vehicle_lease_contract_info` | 主客户/丙方客户决定有效客户 | OneOS 输出有效客户，不由中台推断合同 | P0 |
| 当前租赁 | `vehicle_lease_order_record` | 决定当前可见车辆 | 修复聚合一致性后输出版本化 Scope | P0 |
| 交车 | `delivery_vehicle`、交车任务 | 形成 Scope 开始时间；保存签署里程和地点 | Scope 只使用已确认交车事实；人工里程不覆盖 | P0 |
| 还车 | `return_vehicle_task` | 形成 Scope 结束；从客户范围移除 | 完成还车后发布新 Scope；异常时失败关闭 | P0 |
| 换车/转三方 | `VehicleReplaceRecordService`、合同变更 | 同时改变旧车、新车和有效客户 | 必须做原子或同版本范围切换 | P0 |
| 地图 | `MapTruckController`、旧 realtime 表 | 当前返回全量车辆 | 客户门户使用中台地图；OneOS 内部地图后续再迁移 | P0 |
| 车辆列表/详情 | `VehicleInfoMapper` | 混入客户、合同、位置、总里程 | 业务档案继续 OneOS；遥测展示改为批量调用，禁止逐 VIN N+1 | P1 |
| 事故、违章 | `AccidentInfo`、`TrafficViolation` | 通过车辆或历史租赁记录关联客户 | 若未来开放客户查看，必须按“事件发生时的客户”而非当前客户授权 | P1 |
| 保险、年检、年审、证照 | 对应 vehicle 业务模块 | 当前以 vehicleId 关联 | 默认仍为内部业务；若开放客户须额外产品授权，不自动随实时车辆 Scope 开放 | P1 |
| 加氢台账 | `HydrogenFuelLedger` | 使用客户、车辆和里程字段 | 台账里程是业务记录；中台遥测只用于对账，不自动改账 | P1 |
| 结算 | `ReturnSettlement` | 使用交还车里程计算费用 | 中台可提供差异证据，不能成为自动覆盖结算的来源 | P0 |
| 异动、调拨、故障 | 多个车辆业务模块 | 保存计划/起止/故障时里程 | 保留业务单据值；按需要显示中台采集值作为旁证 | P1 |
| 运维和接入质量 | 车辆数据中台 | 不属于外部客户默认权限 | 仅内部运维/管理员开放 | P0 |

## 4. 时间语义

必须区分两类车辆权限：

### 当前车辆权限

用于 `/monitor`、当前车辆列表、最新遥测和当前告警。依据当前有效交付关系，车辆还车后立即移除。

### 历史事件权限

轨迹、历史数据和事故/违章存在两种产品口径，不能默认选择：

1. **持有期口径（推荐）**：客户只能查看 `scopeStartAt <= eventAt < scopeEndAt` 的数据。车辆还车后仍可查看租赁期间历史，但不能查看还车后的数据。
2. **仅当前口径**：还车后所有历史立即不可见，实现简单但不利于客户对账。

建议范围投影保留历史有效期，而不是只保存当前 VIN 集合：

```text
customer_id, vin, valid_from, valid_to, contract_id, scope_version
```

任何历史查询都同时校验 VIN 和事件时间。当前快照接口用于实时查询，历史范围接口或增量事件用于回填 `valid_to`。

## 5. 坐标与单位

| 字段 | OneOS 当前情况 | 数据中台约定 | 展示规则 |
| --- | --- | --- | --- |
| 原始坐标 | 上游多为 WGS-84 | 中台保存 WGS-84 原始值并标注坐标系 | 高德前端展示前统一转 GCJ-02，只转换一次 |
| 旧地图坐标 | `TruckSyncService` 已转 GCJ-02 | 不回写为“原始坐标” | 迁移时避免再次转换造成漂移 |
| `total_mileage` | HASP 老表单位为 m、类型为字符串 | 中台规范为 km、数值类型 | API 字段明确命名 `totalMileageKm` |
| `day_mileage` | OneOS 按 km 使用 | 中台按自然日、时区和来源生成 | 明确 `Asia/Shanghai` 日界线和统计版本 |
| 交还车里程 | 人工/单据 km | 不覆盖 | 可增加 `telemetryMileageKm` 作对照证据 |

## 6. 推荐迁移顺序

1. 修复并审计客户账号、当前租赁聚合和 Scope 接口。
2. 车辆中台完成客户身份、当前/历史 Scope 投影和全 API 隔离。
3. 外部客户门户先只读上线，功能限定为当前监控、持有期轨迹、里程和授权告警。
4. 为 OneOS 提供批量最新遥测 API，影子对比 HASP 与旧接口，不改业务单据。
5. 对比位置、在线、SOC、总里程、日里程的覆盖率与延迟，达到验收标准后切换 OneOS 地图读取源。
6. 最后停用 `TruckSyncService` 和 `LocationUtil` 旧链路；保留可回滚开关，不删除历史表。

## 7. 遥测切换验收

- 连续 7 天 VIN 覆盖率不低于旧链路，关键车辆无遗漏。
- 最新位置 P95 延迟满足业务约定，离线判断与数据上报周期匹配。
- WGS-84 → GCJ-02 只执行一次，抽样点位无系统性漂移。
- 总里程单位和来源明确，无米/公里千倍错误，无异常倒退未告警。
- OneOS 地图使用批量接口，不出现逐车 N+1 调用。
- 数据中台不可用时显示“实时数据暂不可用”，不得展示固定默认坐标或过期数据为实时值。
- 交车、还车、结算、加氢台账等人工事实在切换前后完全不变。

## 8. 本轮不建议改动的业务

在客户车辆范围和遥测切换稳定前，不建议同时改造保险、年检、结算、违章、事故、加氢台账等业务流程。它们可以消费 Scope 或遥测证据，但不应与第一批权限修复绑在一次发布中。
