package common_models import "time" type EsVbRaw struct { isFloat bool //是否拍扁 StructId int `json:"structId"` IotaDeviceName string `json:"iota_device_name"` Param map[string]any `json:"param"` Data map[string]any `json:"data"` CollectTime time.Time `json:"collect_time"` IotaDevice string `json:"iota_device"` CreateTime time.Time `json:"create_time"` } // FlatMapDynamicVib 振动数据打散 func (the *EsVbRaw) FlatMapDynamicVib() []EsVbRaw { var EsVbRaws []EsVbRaw if !the.isFloat { onceMill := 0.0 //毫秒间隔 if sampleFreqObj, ok := the.Param["sampleFreq"]; ok { if sampleFreq, ok := sampleFreqObj.(float64); ok { onceMill = 1000 / sampleFreq } } if rawsObj, ok := the.Data["raw"]; ok { if raws, ok := rawsObj.([]float64); ok { for i, raw := range raws { onceTime := the.CollectTime.Add(time.Duration(onceMill*float64(i)) * time.Millisecond) esVbRaw := EsVbRaw{ isFloat: true, StructId: the.StructId, IotaDeviceName: the.IotaDeviceName, Param: the.Param, Data: map[string]any{"physicalvalue": raw}, CollectTime: onceTime, IotaDevice: the.IotaDevice, CreateTime: the.CreateTime, } EsVbRaws = append(EsVbRaws, esVbRaw) } } } } return EsVbRaws }