# JT808 Daily Mileage Streaming ## Scope The analytics app can calculate daily mileage from JT808 telemetry only. It consumes `vehicle.event.jt808.v1`, keeps the rolling per-vehicle daily state in Redis or memory, and saves the current daily result into the common `vehicle-stat` metric repository. ## Storage There is no separate JT808 daily-mileage table. Runtime state is stored under the configured JT808 state store so the stream can continue after restart. The derived metric is written through `VehicleStatRepository.saveDailyStat(...)`; the default repository persists it under `VEHICLE_STAT_FILE_PATH` as `daily-stats.tsv`. The JT808 daily-mileage value is calculated from the GPS total mileage reported in location additional information: ```text daily_mileage_km = last_total_mileage_km - first_total_mileage_km ``` The metric is saved only after at least two ordered JT808 location points with valid `total_mileage_km` have been received for the same vehicle and local day. If the difference is negative, no metric row is saved for that state update. ## Runtime Settings Set these in Portainer or Nacos, without committing secrets: ```text KAFKA_TOPIC_JT808_EVENT=vehicle.event.jt808.v1 VEHICLE_STAT_JT808_MILEAGE_ENABLED=true VEHICLE_STAT_JT808_STATE_STORE=redis VEHICLE_STAT_FILE_PATH=/data/vehicle-stat REDIS_HOST= REDIS_PORT=6379 REDIS_DATABASE=50 REDIS_PASSWORD= ``` Algorithm defaults use the Asia/Shanghai daily boundary. The rolling state stores only the fields needed by the GPS total-mileage difference calculation.