package openplatform import ( "encoding/json" "time" ) const ( StatusNormal = "NORMAL" StatusNoData = "NO_DATA" ) type QueryRequest struct { PlateNumbers []string `json:"plateNumbers"` Date string `json:"date"` ProtocolPriority ProtocolPriority `json:"protocolPriority,omitempty"` } type MileageRangeRequest struct { StartDate string `json:"startDate"` EndDate string `json:"endDate"` PlateNumbers []string `json:"plateNumbers"` ProtocolPriority ProtocolPriority `json:"protocolPriority,omitempty"` Cursor string `json:"cursor"` PageSize int `json:"pageSize"` } type ProtocolPriority struct { Values []string Present bool } func (p *ProtocolPriority) UnmarshalJSON(data []byte) error { p.Present = true if string(data) == "null" { p.Values = []string{} return nil } var values []string if err := json.Unmarshal(data, &values); err != nil { return err } p.Values = values return nil } type HydrogenResult struct { PlateNumber string `json:"plateNumber"` Date string `json:"date"` HydrogenConsumptionKg *float64 `json:"hydrogenConsumptionKg"` Status string `json:"status"` } type MileageResult struct { VIN string `json:"vin"` PlateNumber string `json:"plateNumber"` Date string `json:"date"` DailyMileageKm *float64 `json:"dailyMileageKm"` TotalMileageKm *float64 `json:"totalMileageKm"` DataTime *string `json:"dataTime"` UpdatedAt *string `json:"updatedAt"` SourceProtocol *string `json:"sourceProtocol"` Status string `json:"status"` } type MileageRangeResult struct { VIN string `json:"vin"` PlateNumber string `json:"plateNumber"` Date string `json:"date"` DailyMileageKm *float64 `json:"dailyMileageKm"` TotalMileageKm *float64 `json:"totalMileageKm"` DataTime *string `json:"dataTime"` UpdatedAt *string `json:"updatedAt"` SourceProtocol *string `json:"sourceProtocol"` Status string `json:"status"` } type TotalMileageQueryRequest struct { VIN string `json:"vin"` Time string `json:"time"` Protocol string `json:"protocol,omitempty"` } type TotalMileageResult struct { VIN string `json:"vin"` QueryTime string `json:"queryTime"` TotalMileageKm *float64 `json:"totalMileageKm"` Protocol string `json:"protocol,omitempty"` ProtocolInput string `json:"protocolInput,omitempty"` MileageMeaning string `json:"mileageMeaning,omitempty"` RecordTime string `json:"recordTime,omitempty"` TimeDifferenceSeconds *int64 `json:"timeDifferenceSeconds,omitempty"` SelectionPolicy string `json:"selectionPolicy"` Status string `json:"status"` } type TotalMileagePoint struct { VIN string Protocol string ObservedAt time.Time TotalMileageKm float64 } type RealtimeVehicleRequest struct { PlateNumbers []string `json:"plateNumbers,omitempty"` } type RealtimeVehiclePoint struct { VIN string Protocol string Longitude float64 Latitude float64 SpeedKmh float64 TotalMileageKm float64 ObservedAt time.Time } type RealtimeVehicleResult struct { VIN string `json:"vin"` PlateNumber string `json:"plateNumber"` Protocol string `json:"protocol,omitempty"` Longitude *float64 `json:"longitude"` Latitude *float64 `json:"latitude"` SpeedKmh *float64 `json:"speedKmh"` TotalMileageKm *float64 `json:"totalMileageKm"` RecordTime string `json:"recordTime,omitempty"` TimeDifferenceSeconds *int64 `json:"timeDifferenceSeconds,omitempty"` Online bool `json:"online"` MotionStatus string `json:"motionStatus"` LocationAvailable bool `json:"locationAvailable"` Status string `json:"status"` } type HydrogenStationRequest struct { Province string `json:"province,omitempty"` City string `json:"city,omitempty"` CooperateOnly *bool `json:"cooperateOnly,omitempty"` } type HydrogenStation struct { ID string `json:"id"` Name string `json:"name"` ShortName string `json:"shortName,omitempty"` Address string `json:"address,omitempty"` Longitude float64 `json:"longitude"` Latitude float64 `json:"latitude"` Province string `json:"province,omitempty"` City string `json:"city,omitempty"` District string `json:"district,omitempty"` Cooperative bool `json:"cooperative"` } type ExternalResponse struct { Code string `json:"code"` Message string `json:"message"` Data any `json:"data,omitempty"` TraceID string `json:"traceId"` } type MileageRangeResponse struct { Code string `json:"code"` Message string `json:"message"` Data []MileageRangeResult `json:"data"` SnapshotID string `json:"snapshotId"` NextCursor *string `json:"nextCursor"` TraceID string `json:"traceId"` } type App struct { ID uint64 `json:"id"` Name string `json:"name"` AppKeyPrefix string `json:"appKeyPrefix"` Status string `json:"status"` ValidFrom time.Time `json:"validFrom"` ValidTo *time.Time `json:"validTo,omitempty"` CreatedBy string `json:"createdBy"` CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` } type AppCreated struct { App AppKey string `json:"appKey"` } type AppInput struct { Name string `json:"name"` Status string `json:"status"` ValidFrom string `json:"validFrom"` ValidTo string `json:"validTo"` } type VehicleGrantInput struct { VIN string `json:"vin"` ValidFrom string `json:"validFrom"` ValidTo string `json:"validTo"` } type VehicleGrantRequest struct { Vehicles []VehicleGrantInput `json:"vehicles"` } type VehicleGrant struct { VIN string `json:"vin"` Plate string `json:"plate"` ValidFrom time.Time `json:"validFrom"` ValidTo *time.Time `json:"validTo,omitempty"` GrantedBy string `json:"grantedBy"` UpdatedAt time.Time `json:"updatedAt"` } type VehicleCatalogItem struct { VIN string `json:"vin"` Plate string `json:"plate"` OEM string `json:"oem"` Status string `json:"status"` Source string `json:"source"` } type AuthorizedVehicle struct { VIN string Plate string } type AppCredential struct { ID uint64 Name string } type DailyHydrogen struct { VIN string Date string ConsumptionKg float64 SampleCount int QualityStatus string } type DailyMileage struct { VIN string Date string Protocol string MileageKm float64 TotalMileageKm float64 DataTime string UpdatedAt string } type MileageSnapshot struct { ID string AppID uint64 RequestHash []byte StartDate string EndDate string VehicleCount int ExpiresAt time.Time Vehicles []AuthorizedVehicle } type HydrogenObservation struct { VIN string Source string ObservedAt time.Time MassKg float64 TankCapacityLiter float64 PressureMPa float64 TemperatureC float64 NoiseKg float64 RefuelThresholdKg float64 } type HydrogenRateObservation struct { VIN string Source string ObservedAt time.Time Rate float64 MileageKm float64 } type HydrogenRateDailyStat struct { VIN string Source string Date string ConsumptionKg float64 SampleCount int QualityStatus string QualityReason string } type HydrogenDailyStat struct { VIN string Source string Date string ConsumptionKg float64 FirstMassKg float64 LastMassKg float64 SampleCount int RefuelCount int QualityStatus string QualityReason string } type PortalUser struct { ID uint64 `json:"id"` Username string `json:"username"` DisplayName string `json:"displayName"` Status string `json:"status"` ValidFrom time.Time `json:"validFrom"` ValidTo *time.Time `json:"validTo,omitempty"` LastLoginAt *time.Time `json:"lastLoginAt,omitempty"` CreatedBy string `json:"createdBy"` CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` } type PortalUserInput struct { Username string `json:"username"` DisplayName string `json:"displayName"` Password string `json:"password"` Status string `json:"status"` ValidFrom string `json:"validFrom"` ValidTo string `json:"validTo"` } type PortalUserAppInput struct { AppID uint64 `json:"appId"` Role string `json:"role"` } type PortalUserAppRequest struct { Apps []PortalUserAppInput `json:"apps"` } type PortalUserApp struct { AppID uint64 `json:"appId"` AppName string `json:"appName"` AppKeyPrefix string `json:"appKeyPrefix"` AppStatus string `json:"appStatus"` Role string `json:"role"` ValidFrom time.Time `json:"validFrom"` ValidTo *time.Time `json:"validTo,omitempty"` } type PortalSession struct { UserID uint64 `json:"userId"` Username string `json:"username"` DisplayName string `json:"displayName"` UserType string `json:"userType"` ExpiresAt time.Time `json:"expiresAt"` } type PortalLoginResponse struct { AccessToken string `json:"accessToken"` ExpiresAt time.Time `json:"expiresAt"` Session PortalSession `json:"session"` } type PortalLoginRequest struct { Username string `json:"username"` Password string `json:"password"` } type PortalAuditItem struct { TraceID string `json:"traceId"` Endpoint string `json:"endpoint"` Result string `json:"result"` VehicleCount int `json:"vehicleCount"` CreatedAt time.Time `json:"createdAt"` } type DataProduct struct { Code string `json:"code"` Name string `json:"name"` Description string `json:"description"` Version string `json:"version"` Status string `json:"status"` Method string `json:"method"` Path string `json:"path"` Unit string `json:"unit"` }