Files
lingniu-vehicle-ingest/vehicle-data-platform/apps/api/internal/openplatform/model.go
T

527 lines
17 KiB
Go

package openplatform
import (
"encoding/json"
"time"
)
const (
StatusNormal = "NORMAL"
StatusNoData = "NO_DATA"
StatusDataAnomaly = "DATA_ANOMALY"
)
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"`
DataQuality *string `json:"dataQuality,omitempty"`
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"`
DataQuality *string `json:"dataQuality,omitempty"`
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
}
// StationaryVehicleQueryRequest verifies whether an authorized vehicle stayed
// at a refuelling-site coordinate during a supplied time window. Coordinates
// may be supplied in WGS84 or GCJ02 (Amap) longitude/latitude.
type StationaryVehicleQueryRequest struct {
StartTime string `json:"startTime"`
EndTime string `json:"endTime"`
Longitude float64 `json:"longitude"`
Latitude float64 `json:"latitude"`
CoordinateSystem string `json:"coordinateSystem,omitempty"`
RadiusMeters *float64 `json:"radiusMeters,omitempty"`
PlateNumbers []string `json:"plateNumbers,omitempty"`
}
type StationaryVehicleResult struct {
VIN string `json:"vin"`
PlateNumber string `json:"plateNumber"`
StayStartTime string `json:"stayStartTime"`
StayEndTime string `json:"stayEndTime"`
StayDurationSeconds int64 `json:"stayDurationSeconds"`
StayDurationMinutes float64 `json:"stayDurationMinutes"`
MatchScore float64 `json:"matchScore"`
AverageDistanceM float64 `json:"averageDistanceMeters"`
MaxDistanceM float64 `json:"maxDistanceMeters"`
AverageSpeedKmh float64 `json:"averageSpeedKmh"`
MaxSpeedKmh float64 `json:"maxSpeedKmh"`
MatchedSamples int `json:"matchedSamples"`
SourceProtocols []string `json:"sourceProtocols"`
}
type StationaryLocationPoint struct {
VIN string
Protocol string
ObservedAt time.Time
Longitude float64
Latitude float64
SpeedKmh float64
}
type RealtimeVehicleRequest struct {
PlateNumbers []string `json:"plateNumbers,omitempty"`
}
type RealtimeVehiclePoint struct {
VIN string
Protocol string
Longitude float64
Latitude float64
SpeedKmh float64
SOCPercent *float64
TotalMileageKm float64
ObservedAt time.Time
Online bool
ActiveToday bool
}
type RealtimeVehicleResult struct {
VIN string `json:"vin"`
PlateNumber string `json:"plateNumber"`
// Protocol is the single, canonical source protocol for this realtime record.
// It is normalized to GB32960, MQTT, or JT808.
Protocol string `json:"protocol,omitempty"`
Longitude *float64 `json:"longitude"`
Latitude *float64 `json:"latitude"`
SpeedKmh *float64 `json:"speedKmh"`
SOCPercent *float64 `json:"socPercent,omitempty"`
TotalMileageKm *float64 `json:"totalMileageKm"`
RecordTime string `json:"recordTime,omitempty"`
TimeDifferenceSeconds *int64 `json:"timeDifferenceSeconds,omitempty"`
Online bool `json:"online"`
ActiveToday bool `json:"activeToday"`
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"`
ContactPerson string `json:"contactPerson,omitempty"`
ContactPhone string `json:"contactPhone,omitempty"`
UnitPrice float64 `json:"unitPrice,omitempty"`
MonthlyHydrogenKg float64 `json:"monthlyHydrogenKg"`
TotalHydrogenKg float64 `json:"totalHydrogenKg"`
}
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
EventID string
ObservedAt time.Time
MassKg float64
TankCapacityLiter float64
PressureMPa float64
TemperatureC float64
NoiseKg float64
RefuelThresholdKg float64
FuelCellActive bool
FuelCellStateKnown bool
FuelCellVoltageV float64
FuelCellCurrentA float64
FuelCellPowerKnown bool
SOCPercent float64
SOCKnown bool
MileageKm float64
MileageKnown bool
VehicleState int
VehicleStateKnown bool
ChargeState int
ChargeStateKnown bool
RunningMode int
RunningModeKnown bool
BoundaryEligible bool
BoundaryReason string
RefuelBoundary bool
RefuelAmountKg float64
PressureInvalid bool
}
type HydrogenCalculationParameters struct {
BatteryCapacityKWh float64 `json:"batteryCapacityKWh"`
HydrogenEnergyKWhKg float64 `json:"hydrogenEnergyKWhPerKg"`
PowerOnDelaySeconds int `json:"powerOnDelaySeconds"`
PowerOffLeadSeconds int `json:"powerOffLeadSeconds"`
RefuelRiseMPa float64 `json:"refuelRiseMpa"`
RefuelSustainSeconds int `json:"refuelSustainSeconds"`
PureElectricDropMPA float64 `json:"pureElectricDropMpa"`
PureElectricWindowSeconds int `json:"pureElectricWindowSeconds"`
InitialChargeCycleKnown bool `json:"initialChargeCycleKnown,omitempty"`
InitialMixedLocked bool `json:"initialMixedLocked,omitempty"`
AlgorithmVersion string `json:"algorithmVersion"`
}
type HydrogenIntervalEvidence struct {
Index int `json:"index"`
Type string `json:"type"`
StartTime string `json:"startTime"`
EndTime string `json:"endTime"`
StartEventID string `json:"startEventId"`
EndEventID string `json:"endEventId"`
Source string `json:"source"`
StartPressureMPa float64 `json:"startPressureMpa"`
EndPressureMPa float64 `json:"endPressureMpa"`
StartTemperatureC float64 `json:"startTemperatureC"`
EndTemperatureC float64 `json:"endTemperatureC"`
StartMassKg float64 `json:"startMassKg"`
EndMassKg float64 `json:"endMassKg"`
RawHydrogenConsumptionKg float64 `json:"rawHydrogenConsumptionKg"`
StartSOCPercent *float64 `json:"startSocPercent,omitempty"`
EndSOCPercent *float64 `json:"endSocPercent,omitempty"`
BatterySOCDeltaPct *float64 `json:"batterySocDeltaPct,omitempty"`
BatteryEnergyChangeKWh *float64 `json:"batteryEnergyChangeKWh,omitempty"`
ElectricEquivalentKg *float64 `json:"electricEquivalentHydrogenKg,omitempty"`
CorrectedConsumptionKg *float64 `json:"correctedHydrogenConsumptionKg,omitempty"`
BatteryDischargeKWh *float64 `json:"batteryDischargeKWh,omitempty"`
BatteryEquivalentKg *float64 `json:"batteryEquivalentKg,omitempty"`
SOCBalancedConsumptionKg *float64 `json:"socBalancedConsumptionKg,omitempty"`
StartMileageKm *float64 `json:"startMileageKm,omitempty"`
EndMileageKm *float64 `json:"endMileageKm,omitempty"`
MileageKm *float64 `json:"mileageKm,omitempty"`
ConsumptionKgPer100Km *float64 `json:"consumptionKgPer100Km,omitempty"`
SampleCount int `json:"sampleCount"`
QualityStatus string `json:"qualityStatus"`
QualityReason string `json:"qualityReason"`
}
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
CycleMinimumMassKg float64
SampleCount int
RefuelCount int
RefuelAmountKg float64
AbnormalDropCount int
SuspectedLeakCount int
SuspectedLeakMaxPressureDropMPa float64
EligibleIntervalCount int
QualifiedSegmentCount int
ChargeCount int
ChargeEnergyKWh float64
InvalidSegmentCount int
BatterySOCDeltaPct *float64
BatteryEnergyChangeKWh *float64
ElectricEquivalentKg *float64
CorrectedConsumptionKg *float64
BatteryDischargeKWh *float64
BatteryEquivalentKg *float64
SOCBalancedConsumptionKg *float64
MixedMileageKm float64
PureElectricMileageKm float64
ConsumptionKgPer100Km *float64
SOCBalancedKgPer100Km *float64
CalculationParameters HydrogenCalculationParameters
Intervals []HydrogenIntervalEvidence
HydrogenIntervals []HydrogenIntervalEvidence
FirstObservation HydrogenObservation
LastObservation HydrogenObservation
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"`
}