meter_event.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package iotDb
  2. import (
  3. "IotAdmin/app/iot/models"
  4. "IotAdmin/core/logger"
  5. "IotAdmin/core/sdk"
  6. "IotAdmin/core/storage"
  7. "IotAdmin/iot/constant"
  8. iotMap "IotAdmin/iot/map"
  9. iotStruct "IotAdmin/iot/struct"
  10. "encoding/json"
  11. "errors"
  12. "fmt"
  13. )
  14. func DtuChangeStatus(message storage.Message) (err error) {
  15. db := sdk.Runtime.GetDbByKey(message.GetPrefix())
  16. if db == nil {
  17. err = errors.New("db not exist")
  18. logger.Errorf("host[%s]'s %s", message.GetPrefix(), err.Error())
  19. return
  20. }
  21. var rb []byte
  22. rb, err = json.Marshal(message.GetValues())
  23. if err != nil {
  24. err = fmt.Errorf("json Marshal error,%s, %v", string(rb), err.Error())
  25. return
  26. }
  27. status := iotStruct.DtuStatus{}
  28. err = json.Unmarshal(rb, &status)
  29. if err != nil {
  30. err = fmt.Errorf("json Unmarshal error,%s, %v", string(rb), err.Error())
  31. return
  32. }
  33. mp := make(map[string]interface{})
  34. mp["online_status"] = status.Status
  35. if status.Status == constant.IotDeviceOffline {
  36. mp["time_offline"] = status.Time
  37. } else {
  38. mp["time_online"] = status.Time
  39. }
  40. err = db.Model(&models.IotDevice{}).Where("sn = ?", status.SN).Updates(mp).Error
  41. return err
  42. }
  43. func DtuDeviceChange(message storage.Message) (err error) {
  44. db := sdk.Runtime.GetDbByKey(message.GetPrefix())
  45. if db == nil {
  46. err = errors.New("db not exist")
  47. logger.Errorf("host[%s]'s %s", message.GetPrefix(), err.Error())
  48. return nil
  49. }
  50. var rb []byte
  51. rb, err = json.Marshal(message.GetValues())
  52. if err != nil {
  53. err = fmt.Errorf("json Marshal error,%s, %v", string(rb), err.Error())
  54. return err
  55. }
  56. val := &iotStruct.DtuChange{}
  57. err = json.Unmarshal(rb, val)
  58. if err != nil {
  59. err = fmt.Errorf("json Unmarshal error,%s, %v", string(rb), err.Error())
  60. return err
  61. }
  62. if val.Type == constant.IotDeviceRefresh {
  63. err = LoadDtuDeviceMap()
  64. } else if val.Type == constant.IotDeviceDelete {
  65. device := &models.IotDevice{}
  66. err = db.Model(device).Where("id = ? ", val.Id).Find(device).Error
  67. if err != nil {
  68. return
  69. }
  70. iotMap.MapDtuDevice.Remove(device.Sn)
  71. } else {
  72. device := &models.IotDevice{}
  73. err = db.Model(device).Where("id = ? AND status = ?", val.Id, constant.IotDeviceEnabled).Find(device).Error
  74. if err != nil {
  75. return
  76. }
  77. err = addDtuDevice(db, *device)
  78. }
  79. return
  80. }