meter_device.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package iotDb
  2. import (
  3. "IotAdmin/app/iot/models"
  4. "IotAdmin/core/logger"
  5. "IotAdmin/iot/constant"
  6. iotLog "IotAdmin/iot/log"
  7. iotMap "IotAdmin/iot/map"
  8. iotStruct "IotAdmin/iot/struct"
  9. "errors"
  10. "gorm.io/gorm"
  11. )
  12. // LoadDtuDeviceMap 加载DTU设备
  13. func LoadDtuDeviceMap() error {
  14. iotMap.MapDtuDevice.Clean()
  15. deviceArr := make([]models.IotDevice, 0)
  16. for _, db := range dbMap {
  17. gatewayArr := make([]models.IotDevice, 0)
  18. d := &models.IotDevice{}
  19. err := db.Model(d).Select("id,sn,name,type,mode,status,cycle").Where("type = ? AND status = ?", constant.IotDeviceTypeGateway, constant.IotDeviceOnline).Find(&gatewayArr).Error
  20. if err != nil {
  21. continue
  22. }
  23. deviceArr = append(deviceArr, gatewayArr...)
  24. err = loadDtuDeviceMap(db, &deviceArr)
  25. if err != nil {
  26. return err
  27. }
  28. }
  29. return nil
  30. }
  31. func loadDtuDeviceMap(db *gorm.DB, arr *[]models.IotDevice) error {
  32. if len(*arr) == 0 {
  33. return nil
  34. }
  35. for _, v := range *arr {
  36. err := addDtuDevice(db, v)
  37. if err != nil {
  38. return err
  39. }
  40. }
  41. return nil
  42. }
  43. func addDtuDevice(db *gorm.DB, device models.IotDevice) error {
  44. if device.Type != constant.IotDeviceTypeGateway {
  45. return errors.New("type is not gateway")
  46. }
  47. children := make([]models.IotDevice, 0)
  48. db.Model(&models.IotDevice{}).Select("id,sn,status,dsn,protocol,address,bm_yz,other_config").Where("parent_id = ? AND status = ?", device.Id, constant.IotDeviceOnline).Find(&children)
  49. if len(children) == 0 {
  50. return nil
  51. }
  52. cfg := device.ToDtuConfig(&children)
  53. var dtu = &iotStruct.DtuDevice{
  54. SN: device.Sn,
  55. Name: device.Name,
  56. Config: cfg,
  57. Logger: logger.NewHelper(iotLog.SetupDeviceLogger(device.Sn)),
  58. }
  59. logger.Infof("加载DTU设备: %s %v", dtu.SN, dtu.Config)
  60. dtu.Logger.Infof("加载DTU设备 %v", *dtu.Config)
  61. iotMap.MapDtuDevice.Add(device.Sn, dtu)
  62. return nil
  63. }