device.go 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. package services
  2. import (
  3. "github.com/gogf/gf/encoding/gjson"
  4. "sparrow/pkg/models"
  5. "sparrow/pkg/rpcs"
  6. "sparrow/pkg/server"
  7. "sparrow/services/knowoapi/model"
  8. )
  9. // DeviceService device service接口
  10. type DeviceService interface {
  11. // 获取厂商已经激活的设备总数
  12. GetDeviceCount(vendorid string) (int, error)
  13. //返回厂商某天激活的设备数
  14. GetActiveNumberOfDate(vendor string, datetime string) (int, error)
  15. //获取厂商某天活跃的设备数
  16. GetLivelyCountOfDate(string, string) (int, error)
  17. //获取近N日激活设备数据
  18. GetActiveOfNumDays(string, int) ([]map[string]interface{}, error)
  19. //获取近N日活跃设备数据
  20. GetLivelyOfNumDays(string, int) ([]map[string]interface{}, error)
  21. //获取已经激活的设备列表
  22. GetDevices(vendorid, proid string, pi, ps int, deviceid string) ([]*models.Devices, int, error)
  23. //获取用户下所有设备的数量,在线设备的数量,离线设备的数量
  24. GetDevicesCountByVenderId(vendorid string) (map[string]interface{}, error)
  25. // 发起设备OTA升级
  26. Upgrade(params *models.UpgradeParams) error
  27. // GetUpgradeProgress 获取ota升级进度
  28. GetUpgradeProgress(deviceId string) (rpcs.ReplyOtaProgress, error)
  29. // 获取设备状态数据
  30. GetDeviceStatus(deviceId string) (*gjson.Json, error)
  31. // 获取分体式五恒获取网关信息
  32. GetSplitInfo(deviceId string) error
  33. }
  34. type deviceservice struct {
  35. models *model.All
  36. }
  37. // NewDeviceService create device service
  38. func NewDeviceService(models *model.All) DeviceService {
  39. return deviceservice{
  40. models: models,
  41. }
  42. }
  43. func (a deviceservice) GetDevices(vendorid, proid string, pi, ps int, deviceid string) ([]*models.Devices, int, error) {
  44. data, total, err := a.models.Device.GetDevices(vendorid, proid, pi, ps, deviceid)
  45. if err != nil {
  46. return nil, 0, err
  47. }
  48. dataMap := make([]*models.Devices, 0)
  49. for _, device := range data {
  50. onlineargs := rpcs.ArgsGetDeviceOnlineStatus{
  51. Id: device.DeviceIdentifier,
  52. }
  53. onlinereply := rpcs.ReplyGetDeviceOnlineStatus{}
  54. err = server.RPCCallByName(nil, rpcs.DeviceManagerName, "DeviceManager.GetDeviceOnlineStatus", onlineargs, &onlinereply)
  55. if err != nil && err.Error() != "redigo: nil returned" {
  56. server.Log.Errorf("get devie online status error: %v", err)
  57. return nil, 0, err
  58. }
  59. devices := new(models.Devices)
  60. devices.Device = device
  61. if int(onlinereply.HeartbeatInterval) > 0 && len(onlinereply.ClientIP) > 0 {
  62. devices.Status = 1
  63. }
  64. dataMap = append(dataMap, devices)
  65. }
  66. return dataMap, total, nil
  67. }
  68. func (a deviceservice) GetDeviceCount(vendorid string) (int, error) {
  69. return a.models.Device.GetDeviceCount(vendorid)
  70. }
  71. func (a deviceservice) GetActiveNumberOfDate(vendorid string, datetime string) (int, error) {
  72. return a.models.Device.GetActiveNumberOfDate(vendorid, datetime)
  73. }
  74. func (a deviceservice) GetLivelyCountOfDate(vendorid string, datetime string) (int, error) {
  75. return a.models.Device.GetLivelyCountOfDate(vendorid, datetime)
  76. }
  77. func (a deviceservice) GetActiveOfNumDays(vendorid string, days int) ([]map[string]interface{}, error) {
  78. return a.models.Device.GetActiveOfNumDays(vendorid, days)
  79. }
  80. func (a deviceservice) GetLivelyOfNumDays(vendorid string, days int) ([]map[string]interface{}, error) {
  81. return a.models.Device.GetLivelyOfNumDays(vendorid, days)
  82. }
  83. func (a deviceservice) GetDevicesCountByVenderId(vendorid string) (map[string]interface{}, error) {
  84. data, err := a.models.Device.GetDevicesByVenderId(vendorid)
  85. if err != nil {
  86. return nil, err
  87. }
  88. var onlineCount int
  89. var offlineCount int
  90. for _, device := range data {
  91. onlineargs := rpcs.ArgsGetDeviceOnlineStatus{
  92. Id: device.DeviceIdentifier,
  93. }
  94. onlinereply := rpcs.ReplyGetDeviceOnlineStatus{}
  95. err = server.RPCCallByName(nil, rpcs.DeviceManagerName, "DeviceManager.GetDeviceOnlineStatus", onlineargs, &onlinereply)
  96. if err != nil && err.Error() != "redigo: nil returned" {
  97. server.Log.Errorf("get devie online status error: %v", err)
  98. return nil, err
  99. }
  100. if int(onlinereply.HeartbeatInterval) > 0 && len(onlinereply.ClientIP) > 0 {
  101. onlineCount += 1
  102. } else {
  103. offlineCount += 1
  104. }
  105. }
  106. deviceCount := map[string]interface{}{
  107. "TotalData": len(data),
  108. "OnlineCount": onlineCount,
  109. "OfflineCount": offlineCount,
  110. }
  111. return deviceCount, nil
  112. }
  113. func (a deviceservice) Upgrade(param *models.UpgradeParams) error {
  114. //var fileArgs rpcs.ArgsOtaFile
  115. //fileArgs.FileData = param.File
  116. //fileArgs.FileId = guid.S()
  117. //var reply rpcs.ReplyEmptyResult
  118. //
  119. //err := server.RPCCallByName(nil, rpcs.DeviceManagerName, "DeviceManager.SavaFile", fileArgs, &reply)
  120. //if err != nil {
  121. // server.Log.Errorf("OTA升级文件保存失败:%v", err)
  122. // return err
  123. //}
  124. //
  125. //var args rpcs.ArgsUpgrade4G
  126. //args.DeviceId = param.DeviceID
  127. //args.FileId = fileArgs.FileId
  128. //args.FileSize = param.FileSize
  129. //
  130. //err = server.RPCCallByName(nil, rpcs.MQTTAccessName, "Access.UpgradeFor4G", args, &reply)
  131. //if err != nil {
  132. // server.Log.Errorf("4G模组OTA升级失败:%v", err)
  133. // return err
  134. //}
  135. server.Log.Debugf("ota升级请求成功")
  136. return nil
  137. }
  138. func (a deviceservice) GetUpgradeProgress(deviceId string) (rpcs.ReplyOtaProgress, error) {
  139. //var args rpcs.ArgsOtaProgress
  140. //args.DeviceId = deviceId
  141. //
  142. var reply rpcs.ReplyOtaProgress
  143. //
  144. //err := server.RPCCallByName(nil, rpcs.DeviceManagerName, "DeviceManager.GetProgress", args, &reply)
  145. //if err != nil {
  146. // server.Log.Errorf("OTA升级进度获取失败:%v", err)
  147. // return reply, err
  148. //}
  149. server.Log.Debugf("获取升级进度请求成功")
  150. return reply, nil
  151. }
  152. func (a deviceservice) GetDeviceStatus(deviceId string) (*gjson.Json, error) {
  153. var args rpcs.ArgsGetStatus
  154. args.Id = deviceId
  155. //var reply rpcs.ReplyStatus
  156. str := `{
  157. "power": 1,
  158. "mode": 1,
  159. "fan_speed": 3,
  160. "set_temp": 25,
  161. "env_temp": 2348,
  162. "env_humidity": 4336,
  163. "env_co2": 612,
  164. "env_pm25": 22,
  165. "status_code": 29,
  166. "air_mode": 3,
  167. "ac_type": 1,
  168. "air_type": 3,
  169. "hum_type": 0
  170. }`
  171. j := gjson.New(str)
  172. server.Log.Debugf("获取设备信息请求成功")
  173. return j, nil
  174. //err := server.RPCCallByName(nil, rpcs.DeviceManagerName, "DeviceManager.GetDeviceStatus", args, &reply)
  175. //if err != nil {
  176. // server.Log.Errorf("设备状态数据获取失败:%v", err)
  177. // return reply.Status, err
  178. //}
  179. //
  180. //return reply.Status, nil
  181. }
  182. func (a deviceservice) GetSplitInfo(deviceId string) error {
  183. //var args rpcs.ArgsSendCommand
  184. //args.DeviceId = deviceId
  185. //args.Cmd = "getInfo"
  186. //var reply rpcs.ReplySendCommand
  187. //err := server.RPCCallByName(nil, rpcs.ControllerName, "Controller.SendCommand", args, &reply)
  188. //if err != nil {
  189. // server.Log.Errorf("设备状态数据获取失败:%v", err)
  190. // return err
  191. //}
  192. server.Log.Debugf("更新设备信息请求成功")
  193. return nil
  194. }