Files
lingniu-vehicle-ingest/vehicle-data-platform/apps/api/internal/openplatform/model.go
2026-07-27 16:46:15 +08:00

331 lines
8.5 KiB
Go

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 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"`
}