fix(stats): recover jt808 mileage from safe gps tracks

This commit is contained in:
lingniu
2026-07-19 22:23:19 +08:00
parent 2f195e725a
commit e45daff528
11 changed files with 860 additions and 14 deletions

View File

@@ -73,6 +73,7 @@ type AppendResult struct {
SamplesSkippedMissingVIN int
SamplesSkippedMissingMileage int
SamplesRecoveredStationary int
SamplesRecoveredGPSCoordinate int
SamplesSkippedNonMileageFrame int
SamplesSkippedNonPositiveMileage int
SamplesSkippedMissingTime int
@@ -248,6 +249,7 @@ func (w *Writer) CacheStats() CacheStats {
func (w *Writer) EnsureSchema(ctx context.Context) error {
for _, statement := range []string{
DataSourceTableSQL,
GPSMileageStateTableSQL,
DailyMileageSourceTableSQL,
DailyMileageTableSQL,
} {
@@ -304,6 +306,20 @@ func (w *Writer) AppendWithResult(ctx context.Context, env envelope.FrameEnvelop
}
var stationaryCandidate *SourceMileageSample
if len(samples) == 0 && hasSource && result.SamplesSkippedMissingMileage > 0 {
if point, ok := GPSMileagePointFromEnvelope(env, identity, w.loc); ok {
_, recovered, recoverErr := AccumulateJT808GPSMileage(ctx, w.exec, point)
if recoverErr != nil {
return result, recoverErr
}
if recovered {
result.SamplesFound++
result.SamplesWritten++
result.SamplesRecoveredGPSCoordinate++
result.ProjectionsAttempted++
result.ProjectionsWritten++
return result, nil
}
}
sample, candidate, recovered, recoverErr := w.stationaryCarryForward(ctx, env, identity)
if recoverErr != nil {
return result, recoverErr