package adaptors import ( "bytes" "encoding/binary" "encoding/json" "fmt" "goInOut/models" "goInOut/utils" "log" "time" ) // Adaptor_GDND2LA_JSNCGLQL 光电挠度2路安数据 转换 江苏农村公路桥梁监测系统 type Adaptor_GDND2LA_JSNCGLQL struct { IdMap map[string]string BridgeCode string } func (the Adaptor_GDND2LA_JSNCGLQL) Transform(inTopic, rawMsg string) []NeedPush { gdnd := models.GDND2luAn{} json.Unmarshal([]byte(rawMsg), &gdnd) return the.RawToJSNCGLQL(gdnd) } func (the Adaptor_GDND2LA_JSNCGLQL) RawToJSNCGLQL(raw models.GDND2luAn) (result []NeedPush) { Atime, err := time.Parse("2006-01-02 15:04:05", raw.Time) if err != nil { log.Printf("光电扰度 设备[%s] 数据时间 %s 解析错误", raw.Id, raw.Time) return } sensorDataList := raw.Value[raw.Id] //获取对方系统 id sensorCode := the.getSensorCode(raw.Id) if sensorCode == "" { log.Printf("光电扰度 设备[%s] 无匹配的 江苏农村公路桥梁监测系统 测点id,请检查配置文件", raw.Id) return } topic := fmt.Sprintf("data/%s/%s", the.BridgeCode, sensorCode) var transBytes []byte //添加时间段 transBytes = append(transBytes, the.getTimeBytes(Atime)...) for _, sensorData := range sensorDataList { //添加数据值段 bs := utils.Float32ToBytes(sensorData) transBytes = append(transBytes, bs...) } result = append(result, NeedPush{ Topic: topic, Payload: transBytes, }) return result } func (the Adaptor_GDND2LA_JSNCGLQL) getSensorCode(rawSensorName string) string { v, isValid := the.IdMap[rawSensorName] if !isValid { v = "" } return v } func (the Adaptor_GDND2LA_JSNCGLQL) getTimeBytes(sensorTime time.Time) []byte { year := uint16(sensorTime.Year()) month := int8(sensorTime.Month()) day := int8(sensorTime.Day()) hour := int8(sensorTime.Hour()) minute := int8(sensorTime.Minute()) second := int8(sensorTime.Second()) bytesBuffer := bytes.NewBuffer([]byte{}) binary.Write(bytesBuffer, binary.BigEndian, year) binary.Write(bytesBuffer, binary.BigEndian, month) binary.Write(bytesBuffer, binary.BigEndian, day) binary.Write(bytesBuffer, binary.BigEndian, hour) binary.Write(bytesBuffer, binary.BigEndian, minute) binary.Write(bytesBuffer, binary.BigEndian, second) return bytesBuffer.Bytes() }