package adaptors import ( "crypto/rc4" "encoding/json" "goInOut/consumers/CQZG/protoFiles" "goInOut/models" "goInOut/utils" "google.golang.org/protobuf/proto" "log" ) // Adaptor_ZD_CQZG 振动数据转换器 type Adaptor_ZD_CQZG struct { IdMap map[string]int64 RC4Key string } func (the Adaptor_ZD_CQZG) Transform(rawMsg string) []byte { zd := models.ZD{} json.Unmarshal([]byte(rawMsg), &zd) return the.ZDtoCQZG(zd) } func (the Adaptor_ZD_CQZG) ZDtoCQZG(zd models.ZD) (result []byte) { var transBytes []byte ComplexData_HSD := &protoFiles.ComplexData{ SensorData: make([]*protoFiles.SensorData, 0), } sensorData := &protoFiles.SensorData{ MonitorType: protoFiles.MonitoryType_VIB, //监测类型 转换 SensorID: the.getSensorId(zd.Module), //id转换 EventTime: zd.Ticks / 1000 * 1000, //由于振动时间问题,去掉毫秒 ChannelCode: "", DataBody: &protoFiles.SensorData_Vib{ Vib: &protoFiles.VIBRealTime{ MonitorValues: zd.AccValues, }, }, } //无匹配 提前返回 if sensorData.SensorID == 0 { log.Printf("振动测点[%s] 数据无匹配的资管平台id,请检查配置文件", zd.Module) return } ComplexData_HSD.SensorData = append(ComplexData_HSD.SensorData, sensorData) transBytes, _ = proto.Marshal(ComplexData_HSD) resultByCrc16 := utils.NewCRC16CCITT().GetWCRCin(transBytes) needRC4 := append(transBytes, resultByCrc16...) rc4Key := []byte(the.RC4Key) // 加密操作 dest1 := make([]byte, len(needRC4)) rc4.NewCipher(rc4Key) cipher1, _ := rc4.NewCipher(rc4Key) cipher1.XORKeyStream(dest1, needRC4) //log.Printf("rc4加密结果=> %s \n", hex.EncodeToString(dest1)) return dest1 } func (the Adaptor_ZD_CQZG) getSensorId(rawSensorName string) int64 { v, isValid := the.IdMap[rawSensorName] if !isValid { v = 0 } return v } // DAAS软件 振动对方平台id对于关系 //var idMapZD = map[string]int64{ // "1": 5000200017, // "2": 5000200018, //}