refactor: store jt808 mileage as metric diff

This commit is contained in:
lingniu
2026-07-01 02:32:46 +08:00
parent a5f5cc94ee
commit b94780b48c
12 changed files with 73 additions and 40 deletions

View File

@@ -8,11 +8,11 @@ Consume JT808 Kafka location events, keep rolling daily state, and write the der
- Source topic: `vehicle.event.jt808.v1`
- Runtime app: `vehicle-analytics-app`
- State: Redis or in-memory `Jt808MileageStateStore`
- Runtime state: Redis `Jt808MileageStateStore`
- Metric output: `VehicleStatRepository.saveDailyStat(...)`
- Production metric storage: JDBC/MySQL `vehicle_stat_metric`
- Local fallback storage: `VEHICLE_STAT_FILE_PATH/daily-stats.tsv`
- Date boundary: `Asia/Shanghai`
- Calculation method: `JT808_TOTAL_MILEAGE_DIFF`
JT808 daily mileage is calculated only from the GPS total mileage reported by JT808 location additional information:

View File

@@ -269,28 +269,20 @@ MYSQL_USERNAME
MYSQL_PASSWORD
```
`vehicle_daily_stat`
Daily derived metrics are stored in the common metric table, not in a
protocol-specific daily-mileage table.
```sql
CREATE TABLE IF NOT EXISTS vehicle_daily_stat (
vin VARCHAR(32) NOT NULL,
CREATE TABLE IF NOT EXISTS vehicle_stat_metric (
vin VARCHAR(64) NOT NULL,
stat_date DATE NOT NULL,
platform_account VARCHAR(64),
total_mileage_km DECIMAL(14,3),
daily_mileage_km DECIMAL(14,3),
daily_power_kwh DECIMAL(14,3),
daily_hydrogen_kg DECIMAL(14,4),
daily_hydrogen_kg_per_100km DECIMAL(14,4),
first_event_time DATETIME(3),
last_event_time DATETIME(3),
first_total_mileage_km DECIMAL(14,3),
last_total_mileage_km DECIMAL(14,3),
last_soc_percent DECIMAL(8,3),
sample_count BIGINT NOT NULL DEFAULT 0,
late_sample_count BIGINT NOT NULL DEFAULT 0,
calculation_quality VARCHAR(32) NOT NULL,
updated_at DATETIME(3) NOT NULL,
PRIMARY KEY (vin, stat_date)
metric_key VARCHAR(64) NOT NULL,
metric_value DECIMAL(18,6) NULL,
metric_unit VARCHAR(16) NOT NULL,
calculation_method VARCHAR(64) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (vin, stat_date, metric_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```