Initial cloud-services repo - gateway service + pkg modules
This commit is contained in:
231
pkg/common/order_updated.go
Normal file
231
pkg/common/order_updated.go
Normal file
@@ -0,0 +1,231 @@
|
||||
package common
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"encoding/xml"
|
||||
"time"
|
||||
|
||||
"fiskerinc.com/modules/grpc/kafka_grpc"
|
||||
)
|
||||
|
||||
type OrderUpdated struct {
|
||||
XMLName xml.Name `xml:"VehicleOrderReplicate"`
|
||||
Header HeaderArea `xml:"HeaderArea" validate:"required"`
|
||||
VehicleOrder VehicleOrder `xml:"DataArea>VehicleOrder" validate:"required"`
|
||||
}
|
||||
|
||||
type HeaderArea struct {
|
||||
CreationDateTime CreationDateTime `xml:"CreationDateTime" json:"creation_date_time"`
|
||||
MessageIdentifier string `xml:"MessageIdentifier" json:"message_identifier"`
|
||||
InterfaceID int `xml:"InterfaceId" json:"interface_id"`
|
||||
SourceSystem string `xml:"Sender>SourceSystem" json:"source_system"`
|
||||
TargetSystem string `xml:"Sender>TargetSystem" json:"target_system"`
|
||||
}
|
||||
|
||||
type VehicleOrder struct {
|
||||
SpecID int `xml:"SpecId" json:"spec_id"`
|
||||
OrderNumber int `xml:"VehicleOrderNumber" json:"order_number"`
|
||||
MessageIdentifier string `xml:"-" json:"message_identifier"`
|
||||
VehicleSpecification VehicleSpecification `xml:"VehicleSpecification" json:"vehicle_specification"`
|
||||
}
|
||||
|
||||
type VehicleSpecification struct {
|
||||
OrderIndicator string `xml:"OrderIndicator" json:"order_indicator"`
|
||||
FleetOrderIndicator string `xml:"FleetOrderIndicator" json:"fleet_order_indicator"`
|
||||
ProductionPhaseIndicator string `xml:"ProductionPhaseIndicator" json:"production_phase_indicator"`
|
||||
VehicleIndicator string `xml:"VehicleIndicator" json:"vehicle_indicator"`
|
||||
ManufacturingPlant string `xml:"ManufacturingPlant" json:"manufacturing_plant"`
|
||||
ExpectedReferenceDate ExpectedReferenceDate `xml:"ExpectedReferenceDate" json:"expected_reference_date"`
|
||||
ModelType string `xml:"ModelType" json:"model_type"`
|
||||
ModelYearIndicator int `xml:"ModelYearIndicator" json:"model_year_indicator"`
|
||||
ModelYear int `xml:"ModelYear" json:"model_year"`
|
||||
SequenceNumber string `xml:"SequenceNumber" json:"sequence_number"`
|
||||
VersionDuringModelYear int `xml:"VersionDuringModelYear" json:"version_during_model_year"`
|
||||
VehicleModel string `xml:"VehicleModel" json:"vehicle_model"`
|
||||
VinPrefix string `xml:"VinPrefix" json:"vin_prefix"`
|
||||
VehicleFeatures []FeatureCodes `xml:"VehicleFeatures>FeatureCodes" json:"vehicle_features"`
|
||||
DestinationCountry string `xml:"DestinationCountry" json:"destination_country"`
|
||||
}
|
||||
|
||||
type FeatureCodes struct {
|
||||
FamilyCode string `xml:"FamilyCode" json:"family_code"`
|
||||
FeatureCode string `xml:"FeatureCode" json:"feature_code"`
|
||||
}
|
||||
|
||||
type ExpectedReferenceDate struct {
|
||||
time.Time
|
||||
}
|
||||
|
||||
func (t *ExpectedReferenceDate) UnmarshalText(data []byte) error {
|
||||
// Fractional seconds are handled implicitly by Parse.
|
||||
var err error
|
||||
t.Time, err = time.Parse("2006-01-02", string(data))
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (t ExpectedReferenceDate) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
|
||||
s := t.Format("2006-01-02")
|
||||
return e.EncodeElement(s, start)
|
||||
}
|
||||
|
||||
type CreationDateTime struct {
|
||||
time.Time
|
||||
}
|
||||
|
||||
func (t *CreationDateTime) UnmarshalText(data []byte) error {
|
||||
// Fractional seconds are handled implicitly by Parse.
|
||||
var err error
|
||||
t.Time, err = time.Parse("2006-01-02T15:04", string(data))
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (t CreationDateTime) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
|
||||
s := t.Format("2006-01-02T15:04")
|
||||
return e.EncodeElement(s, start)
|
||||
}
|
||||
|
||||
// OrderUpdatedSwag is used ONLY to represent OrderUpdated in swagger.
|
||||
type OrderUpdatedSwag struct {
|
||||
Header struct {
|
||||
CreationDateTime CreationDateTime `json:"CreationDateTime" swaggertype:"string"`
|
||||
MessageIdentifier string `json:"MessageIdentifier"`
|
||||
InterfaceID int `json:"InterfaceId"`
|
||||
Sender struct {
|
||||
SourceSystem string `json:"SourceSystem"`
|
||||
TargetSystem string `json:"TargetSystem"`
|
||||
} `json:"Sender"`
|
||||
} `json:"HeaderArea" validate:"required"`
|
||||
DataArea struct {
|
||||
VehicleOrder struct {
|
||||
SpecID int `json:"SpecId"`
|
||||
OrderNumber int `json:"VehicleOrderNumber"`
|
||||
VehicleSpecification struct {
|
||||
OrderIndicator string `json:"OrderIndicator"`
|
||||
FleetOrderIndicator string `json:"FleetOrderIndicator"`
|
||||
ProductionPhaseIndicator string `json:"ProductionPhaseIndicator"`
|
||||
VehicleIndicator string `json:"VehicleIndicator"`
|
||||
ManufacturingPlant string `json:"ManufacturingPlant"`
|
||||
ExpectedReferenceDate ExpectedReferenceDate `json:"ExpectedReferenceDate" swaggertype:"string"`
|
||||
ModelType string `json:"ModelType"`
|
||||
ModelYearIndicator int `json:"ModelYearIndicator"`
|
||||
SequenceNumber string `json:"SequenceNumber"`
|
||||
VehicleModel string `json:"VehicleModel"`
|
||||
VinPrefix string `json:"VinPrefix"`
|
||||
VehicleFeatures []struct {
|
||||
FeatureCodes struct {
|
||||
FamilyCode string `json:"FamilyCode" `
|
||||
FeatureCode string `json:"FeatureCode"`
|
||||
} `json:"FeatureCodes"`
|
||||
} `json:"VehicleFeatures"`
|
||||
DestinationCountry string `json:"DestinationCountry"`
|
||||
} `json:"VehicleSpecification"`
|
||||
} `json:"VehicleOrder" validate:"required"`
|
||||
} `json:"DataArea"`
|
||||
} // @name VehicleOrderReplicate
|
||||
|
||||
func OrderToGRPC(input MessageRawJSON) *kafka_grpc.GRPC_AttendantPayload {
|
||||
grpcPayload := &kafka_grpc.GRPC_AttendantPayload{
|
||||
Handler: input.Handler,
|
||||
}
|
||||
var order VehicleOrder
|
||||
err := json.Unmarshal(input.Data, &order)
|
||||
if err != nil {
|
||||
return grpcPayload
|
||||
}
|
||||
orderObj := &kafka_grpc.Order{
|
||||
VehicleSpecification: &kafka_grpc.VehicleSpecification{},
|
||||
}
|
||||
orderObj.VehicleSpecification.Date = order.VehicleSpecification.ExpectedReferenceDate.UnixMilli()
|
||||
orderObj.MsgIdentifier = order.MessageIdentifier
|
||||
orderObj.SpecId = int64(order.SpecID)
|
||||
orderObj.VehicleSpecification.OrderId = order.VehicleSpecification.OrderIndicator
|
||||
orderObj.VehicleSpecification.FOrderId = order.VehicleSpecification.FleetOrderIndicator
|
||||
orderObj.VehicleSpecification.MfPlant = order.VehicleSpecification.ManufacturingPlant
|
||||
orderObj.VehicleSpecification.DestCon = order.VehicleSpecification.DestinationCountry
|
||||
orderObj.VehicleSpecification.ModelType = order.VehicleSpecification.ModelType
|
||||
orderObj.VehicleSpecification.ProductId = order.VehicleSpecification.ProductionPhaseIndicator
|
||||
orderObj.VehicleSpecification.Sn = order.VehicleSpecification.SequenceNumber
|
||||
orderObj.VehicleSpecification.VehicleId = order.VehicleSpecification.VehicleIndicator
|
||||
orderObj.VehicleSpecification.Model = order.VehicleSpecification.VehicleModel
|
||||
orderObj.VehicleSpecification.VinPre = order.VehicleSpecification.VinPrefix
|
||||
orderObj.VehicleSpecification.ModelYear = int64(order.VehicleSpecification.ModelYear)
|
||||
orderObj.VehicleSpecification.ModelId = int64(order.VehicleSpecification.ModelYearIndicator)
|
||||
orderObj.VehicleSpecification.Version = int64(order.VehicleSpecification.VersionDuringModelYear)
|
||||
|
||||
if len(order.VehicleSpecification.VehicleFeatures) > 0 {
|
||||
var features []*kafka_grpc.FeatureCodes
|
||||
for _, feature := range order.VehicleSpecification.VehicleFeatures {
|
||||
features = append(features, &kafka_grpc.FeatureCodes{
|
||||
FamilyCode: feature.FamilyCode,
|
||||
FeatureCode: feature.FeatureCode,
|
||||
})
|
||||
}
|
||||
orderObj.VehicleSpecification.Feature = features
|
||||
}
|
||||
|
||||
payload := &kafka_grpc.GRPC_AttendantPayload_Order{
|
||||
Order: orderObj,
|
||||
}
|
||||
grpcPayload.Data = payload
|
||||
return grpcPayload
|
||||
}
|
||||
|
||||
func GRPCToOrder(payload *kafka_grpc.GRPC_AttendantPayload) *VehicleOrder {
|
||||
if payload.Data == nil {
|
||||
return nil
|
||||
}
|
||||
data := payload.Data.(*kafka_grpc.GRPC_AttendantPayload_Order)
|
||||
order := &VehicleOrder{}
|
||||
order.OrderNumber = int(data.Order.OrderNo)
|
||||
order.MessageIdentifier = data.Order.MsgIdentifier
|
||||
order.SpecID = int(data.Order.SpecId)
|
||||
order.VehicleSpecification = VehicleSpecification{}
|
||||
if data.Order.VehicleSpecification != nil {
|
||||
order.VehicleSpecification.DestinationCountry = data.Order.VehicleSpecification.DestCon
|
||||
order.VehicleSpecification.FleetOrderIndicator = data.Order.VehicleSpecification.FOrderId
|
||||
order.VehicleSpecification.FleetOrderIndicator = data.Order.VehicleSpecification.FOrderId
|
||||
|
||||
order.VehicleSpecification.ManufacturingPlant = data.Order.VehicleSpecification.MfPlant
|
||||
|
||||
order.VehicleSpecification.ModelType = data.Order.VehicleSpecification.ModelType
|
||||
|
||||
order.VehicleSpecification.ModelYear = int(data.Order.VehicleSpecification.ModelYear)
|
||||
|
||||
order.VehicleSpecification.ModelYearIndicator = int(data.Order.VehicleSpecification.ModelId)
|
||||
|
||||
order.VehicleSpecification.OrderIndicator = data.Order.VehicleSpecification.OrderId
|
||||
|
||||
order.VehicleSpecification.ProductionPhaseIndicator = data.Order.VehicleSpecification.ProductId
|
||||
|
||||
order.VehicleSpecification.FleetOrderIndicator = data.Order.VehicleSpecification.FOrderId
|
||||
|
||||
order.VehicleSpecification.SequenceNumber = data.Order.VehicleSpecification.Sn
|
||||
|
||||
order.VehicleSpecification.VehicleIndicator = data.Order.VehicleSpecification.VehicleId
|
||||
|
||||
order.VehicleSpecification.VehicleModel = data.Order.VehicleSpecification.Model
|
||||
|
||||
order.VehicleSpecification.VinPrefix = data.Order.VehicleSpecification.VinPre
|
||||
|
||||
order.VehicleSpecification.VersionDuringModelYear = int(data.Order.VehicleSpecification.Version)
|
||||
|
||||
seconds := data.Order.VehicleSpecification.Date / 1000
|
||||
nanoseconds := (data.Order.VehicleSpecification.Date % 1000) * int64(time.Millisecond)
|
||||
order.VehicleSpecification.ExpectedReferenceDate = ExpectedReferenceDate{time.Unix(seconds, nanoseconds)}
|
||||
|
||||
if data.Order.VehicleSpecification.Feature != nil && len(data.Order.VehicleSpecification.Feature) > 0 {
|
||||
var features []FeatureCodes
|
||||
for _, feature := range data.Order.VehicleSpecification.Feature {
|
||||
features = append(features, FeatureCodes{
|
||||
FamilyCode: feature.FamilyCode,
|
||||
FeatureCode: feature.FeatureCode,
|
||||
})
|
||||
}
|
||||
order.VehicleSpecification.VehicleFeatures = features
|
||||
}
|
||||
}
|
||||
|
||||
return order
|
||||
}
|
||||
Reference in New Issue
Block a user