device.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package services
  2. import (
  3. "sparrow/pkg/models"
  4. "sparrow/pkg/rpcs"
  5. "sparrow/pkg/server"
  6. "sparrow/services/knowoapi/model"
  7. )
  8. // DeviceService device service接口
  9. type DeviceService interface {
  10. // 获取厂商已经激活的设备总数
  11. GetDeviceCount(vendorid string) (int, error)
  12. //返回厂商某天激活的设备数
  13. GetActiveNumberOfDate(vendor string, datetime string) (int, error)
  14. //获取厂商某天活跃的设备数
  15. GetLivelyCountOfDate(string, string) (int, error)
  16. //获取近N日激活设备数据
  17. GetActiveOfNumDays(string, int) ([]map[string]interface{}, error)
  18. //获取近N日活跃设备数据
  19. GetLivelyOfNumDays(string, int) ([]map[string]interface{}, error)
  20. //获取已经激活的设备列表
  21. GetDevices(vendorid string, proid, pi, ps int, deviceid string) ([]*models.Devices, int, error)
  22. //获取用户下所有设备的数量,在线设备的数量,离线设备的数量
  23. GetDevicesCountByVenderId(vendorid string) (map[string]interface{}, error)
  24. }
  25. type deviceservice struct {
  26. models *model.All
  27. }
  28. // NewDeviceService create device service
  29. func NewDeviceService(models *model.All) DeviceService {
  30. return deviceservice{
  31. models: models,
  32. }
  33. }
  34. func (a deviceservice) GetDevices(vendorid string, proid, pi, ps int, deviceid string) ([]*models.Devices, int, error) {
  35. data, total, err := a.models.Device.GetDevices(vendorid, proid, pi, ps, deviceid)
  36. if err != nil {
  37. return nil, 0, err
  38. }
  39. dataMap := make([]*models.Devices, 0)
  40. for _, device := range data {
  41. onlineargs := rpcs.ArgsGetDeviceOnlineStatus{
  42. Id: device.DeviceIdentifier,
  43. }
  44. onlinereply := rpcs.ReplyGetDeviceOnlineStatus{}
  45. err = server.RPCCallByName(nil, rpcs.DeviceManagerName, "DeviceManager.GetDeviceOnlineStatus", onlineargs, &onlinereply)
  46. if err != nil && err.Error() != "redigo: nil returned" {
  47. server.Log.Errorf("get devie online status error: %v", err)
  48. return nil, 0, err
  49. }
  50. devices := new(models.Devices)
  51. devices.Device = device
  52. if int(onlinereply.HeartbeatInterval) > 0 && len(onlinereply.ClientIP) > 0 {
  53. devices.Status = 1
  54. }
  55. dataMap = append(dataMap, devices)
  56. }
  57. return dataMap, total, nil
  58. }
  59. func (a deviceservice) GetDeviceCount(vendorid string) (int, error) {
  60. return a.models.Device.GetDeviceCount(vendorid)
  61. }
  62. func (a deviceservice) GetActiveNumberOfDate(vendorid string, datetime string) (int, error) {
  63. return a.models.Device.GetActiveNumberOfDate(vendorid, datetime)
  64. }
  65. func (a deviceservice) GetLivelyCountOfDate(vendorid string, datetime string) (int, error) {
  66. return a.models.Device.GetLivelyCountOfDate(vendorid, datetime)
  67. }
  68. func (a deviceservice) GetActiveOfNumDays(vendorid string, days int) ([]map[string]interface{}, error) {
  69. return a.models.Device.GetActiveOfNumDays(vendorid, days)
  70. }
  71. func (a deviceservice) GetLivelyOfNumDays(vendorid string, days int) ([]map[string]interface{}, error) {
  72. return a.models.Device.GetLivelyOfNumDays(vendorid, days)
  73. }
  74. func (a deviceservice) GetDevicesCountByVenderId(vendorid string) (map[string]interface{}, error) {
  75. data, err := a.models.Device.GetDevicesByVenderId(vendorid)
  76. if err != nil {
  77. return nil, err
  78. }
  79. var onlineCount int
  80. var offlineCount int
  81. for _, device := range data {
  82. onlineargs := rpcs.ArgsGetDeviceOnlineStatus{
  83. Id: device.DeviceIdentifier,
  84. }
  85. onlinereply := rpcs.ReplyGetDeviceOnlineStatus{}
  86. err = server.RPCCallByName(nil, rpcs.DeviceManagerName, "DeviceManager.GetDeviceOnlineStatus", onlineargs, &onlinereply)
  87. if err != nil && err.Error() != "redigo: nil returned" {
  88. server.Log.Errorf("get devie online status error: %v", err)
  89. return nil, err
  90. }
  91. if int(onlinereply.HeartbeatInterval) > 0 && len(onlinereply.ClientIP) > 0 {
  92. onlineCount += 1
  93. } else {
  94. offlineCount += 1
  95. }
  96. }
  97. deviceCount := map[string]interface{}{
  98. "TotalData": len(data),
  99. "OnlineCount": onlineCount,
  100. "OfflineCount": offlineCount,
  101. }
  102. return deviceCount, nil
  103. }