| | |
| | | |
| | | func (slf *DeviceUpdate) HandleMessage(data []byte) (err error) { |
| | | logx.Infof("get a device update message :%s", data) |
| | | var device common.Device |
| | | err = json.Unmarshal(data, &device) |
| | | var msg common.DeviceMsg |
| | | err = json.Unmarshal(data, &msg) |
| | | if err != nil { |
| | | logx.Infof("unmarshal device update msg err :%s", err) |
| | | return err |
| | | } |
| | | |
| | | procedures := make([]string, 0, len(device.DeviceProcedureAttr)) |
| | | for _, attr := range device.DeviceProcedureAttr { |
| | | procedures := make([]string, 0, len(msg.DeviceProcedureAttr)) |
| | | for _, attr := range msg.DeviceProcedureAttr { |
| | | procedures = append(procedures, attr.ProcedureName) |
| | | } |
| | | |
| | | deviceRecord := &model.Device{ |
| | | DeviceID: device.ID, |
| | | DeviceID: msg.ID, |
| | | Procedures: strings.Join(procedures, ","), |
| | | ExtChannelAmount: device.ExtChannelAmount, |
| | | ExtChannelAmount: msg.ExtChannelAmount, |
| | | } |
| | | |
| | | oldRecord, err := model.NewDeviceSearch().SetDeviceId(device.ID).First() |
| | | oldRecord, err := model.NewDeviceSearch().SetDeviceId(msg.ID).First() |
| | | if err == gorm.ErrRecordNotFound { |
| | | err = model.NewDeviceSearch().Create(deviceRecord) |
| | | } else { |
| | | err = model.NewDeviceSearch().SetID(oldRecord.ID).Save(deviceRecord) |
| | | } else if oldRecord.ExtChannelAmount != deviceRecord.ExtChannelAmount || oldRecord.Procedures != deviceRecord.Procedures { |
| | | err = model.NewDeviceSearch().SetDeviceId(msg.ID).Save(deviceRecord) |
| | | } |
| | | |
| | | if err != nil { |
| | |
| | | return err |
| | | } |
| | | |
| | | if msg.PlcConfig.Method == "" { |
| | | return nil |
| | | } |
| | | |
| | | msg.PlcConfig.Method.ConvertToEnglish() |
| | | var record model.DevicePlc |
| | | err = mapstructure.Decode(msg.PlcConfig, &record) |
| | | if err != nil { |
| | | logx.Infof("decode from PlcAddressList to DevicePlc Details err:%v", err) |
| | | } |
| | | err = mapstructure.Decode(msg.PlcAddressList, &record.Details) |
| | | if err != nil { |
| | | logx.Infof("decode from PlcAddressList to DevicePlc Details err:%v", err) |
| | | } |
| | | detail, err := json.Marshal(record.Details) |
| | | record.Detail = string(detail) |
| | | record.ID = 1 |
| | | err = model.NewDevicePlcSearch().SetId(record.ID).Save(&record) |
| | | if err != nil { |
| | | return err |
| | | } |
| | | |
| | | return nil |
| | | } |
| | | |