manager.go 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. package main
  2. import (
  3. "github.com/gogf/gf/encoding/gjson"
  4. "sparrow/pkg/deviceAlarm"
  5. "sparrow/pkg/deviceStatus"
  6. "sparrow/pkg/online"
  7. "sparrow/pkg/otaUpgrade"
  8. "sparrow/pkg/rpcs"
  9. "sparrow/pkg/scene"
  10. "sparrow/pkg/token"
  11. "time"
  12. )
  13. type DeviceManager struct {
  14. onlineManager *online.Manager
  15. tokenHelper *token.Helper
  16. otaManager *otaUpgrade.OtaManager
  17. statusManager *deviceStatus.DevStatusManager
  18. alarmManager *deviceAlarm.DevAlarmManager
  19. sceneManager *scene.Manager
  20. }
  21. func NewDeviceManager(redishost string, port, db int) *DeviceManager {
  22. mgr := online.NewManager(redishost, port, db)
  23. helper := token.NewHelper(redishost, port, db)
  24. otaMgr := otaUpgrade.NewOtaManager(redishost, port, db)
  25. statusMgr := deviceStatus.NewDevStatusManager(redishost, port)
  26. alarmMgr := deviceAlarm.NewDevAlarmManager(redishost, port)
  27. sceneMgr := scene.NewSceneManager(redishost, port)
  28. return &DeviceManager{
  29. onlineManager: mgr,
  30. tokenHelper: helper,
  31. otaManager: otaMgr,
  32. statusManager: statusMgr,
  33. alarmManager: alarmMgr,
  34. sceneManager: sceneMgr,
  35. }
  36. }
  37. func (dm *DeviceManager) GenerateDeviceAccessToken(args rpcs.ArgsGenerateDeviceAccessToken, reply *rpcs.ReplyGenerateDeviceAccessToken) error {
  38. token, err := dm.tokenHelper.GenerateToken(args.Id)
  39. if err != nil {
  40. return err
  41. }
  42. reply.AccessToken = token
  43. return nil
  44. }
  45. func (dm *DeviceManager) ValidateDeviceAccessToken(args rpcs.ArgsValidateDeviceAccessToken, reply *rpcs.ReplyValidateDeviceAccessToken) error {
  46. return dm.tokenHelper.ValidateToken(args.Id, args.AccessToken)
  47. }
  48. func (dm *DeviceManager) GetOnline(args rpcs.ArgsGetOnline, reply *rpcs.ReplyGetOnline) error {
  49. return dm.onlineManager.GetOnline(args.Id, online.Status{
  50. ClientIP: args.ClientIP,
  51. AccessRPCHost: args.AccessRPCHost,
  52. HeartbeatInterval: args.HeartbeatInterval,
  53. })
  54. }
  55. func (dm *DeviceManager) GetOnlineV2(args rpcs.ArgsGetOnline, reply *rpcs.ReplyGetOnline) error {
  56. return dm.onlineManager.GetOnlineV2(args.Id, online.Status{
  57. ClientIP: args.ClientIP,
  58. AccessRPCHost: args.AccessRPCHost,
  59. HeartbeatInterval: args.HeartbeatInterval,
  60. })
  61. }
  62. func (dm *DeviceManager) HeartBeat(args rpcs.ArgsHeartBeat, reply *rpcs.ReplyHeartBeat) error {
  63. return dm.onlineManager.SetHeartbeat(args.Id)
  64. }
  65. func (dm *DeviceManager) GetOffline(args rpcs.ArgsGetOffline, reply *rpcs.ReplyGetOffline) error {
  66. return dm.onlineManager.GetOffline(args.Id)
  67. }
  68. func (dm *DeviceManager) GetDeviceOnlineStatus(args rpcs.ArgsGetDeviceOnlineStatus, reply *rpcs.ReplyGetDeviceOnlineStatus) error {
  69. status, err := dm.onlineManager.GetStatus(args.Id)
  70. if err != nil {
  71. return err
  72. }
  73. if status != nil {
  74. reply.ClientIP = status.ClientIP
  75. reply.AccessRPCHost = status.AccessRPCHost
  76. reply.HeartbeatInterval = status.HeartbeatInterval
  77. }
  78. return nil
  79. }
  80. func (dm *DeviceManager) SavaFile(args rpcs.ArgsOtaFile, reply *rpcs.ReplyGetOffline) error {
  81. err := dm.otaManager.SavaFile(args.FileId, args.FileData)
  82. if err != nil {
  83. return err
  84. }
  85. return nil
  86. }
  87. func (dm *DeviceManager) GetFile(args rpcs.ArgsOtaFile, reply *rpcs.ReplyOtaFile) error {
  88. file, err := dm.otaManager.GetFile(args.FileId)
  89. if err != nil {
  90. return err
  91. }
  92. if file != nil {
  93. reply.File = file.FileData
  94. }
  95. return nil
  96. }
  97. func (dm *DeviceManager) UpdateProgress(args rpcs.ArgsOtaProgress, reply *rpcs.ReplyGetOffline) error {
  98. err := dm.otaManager.UpdateProgress(args.DeviceId, args.Progress)
  99. if err != nil {
  100. return err
  101. }
  102. return nil
  103. }
  104. func (dm *DeviceManager) GetProgress(args rpcs.ArgsOtaProgress, reply *rpcs.ReplyOtaProgress) error {
  105. progress, err := dm.otaManager.GetProgress(args.DeviceId)
  106. if err != nil {
  107. return err
  108. }
  109. if progress != nil {
  110. reply.Progress = progress.Progress
  111. }
  112. return nil
  113. }
  114. func (dm *DeviceManager) GetDeviceStatus(args rpcs.ArgsGetStatus, reply *rpcs.ReplyStatus) error {
  115. status, err := dm.statusManager.GetDeviceStatus(args.Id, args.ProductId)
  116. if err != nil {
  117. return err
  118. }
  119. if status != "" {
  120. reply.Status = status
  121. }
  122. return nil
  123. }
  124. func (dm *DeviceManager) GetDeviceInfo(args rpcs.ArgsGetStatus, reply *rpcs.ReplayInfo) error {
  125. info, err := dm.statusManager.GetDeviceInfo(args.Id, args.ProductId)
  126. if err != nil {
  127. return err
  128. }
  129. if info != "" {
  130. reply.Info = info
  131. }
  132. return nil
  133. }
  134. func (dm *DeviceManager) GetDeviceEvent(args rpcs.ArgsGetStatus, reply *rpcs.ReplayEvent) error {
  135. event, err := dm.statusManager.GetDeviceEvent(args.Id, args.ProductId)
  136. if err != nil {
  137. return err
  138. }
  139. if event != "" {
  140. reply.Event = event
  141. }
  142. return nil
  143. }
  144. func (dm *DeviceManager) GetDeviceStatusByKey(args rpcs.ArgsGetStatus, reply *rpcs.ReplyStatus) error {
  145. status, err := dm.statusManager.GetDeviceStatusByKey(args.Key)
  146. if err != nil {
  147. return err
  148. }
  149. if status != "" {
  150. reply.Status = status
  151. }
  152. return nil
  153. }
  154. func (dm *DeviceManager) GetWeatherInfo(args rpcs.ArgsGetWeather, reply *rpcs.ReplayWeatherInfo) error {
  155. info, err := dm.statusManager.GetWeatherInfo(args.Location)
  156. if err != nil {
  157. return err
  158. }
  159. if info != "" {
  160. reply.Info = info
  161. }
  162. return nil
  163. }
  164. func (dm *DeviceManager) SetWeatherInfo(args rpcs.ArgsSetWeather, reply *rpcs.ReplyEmptyResult) error {
  165. return dm.statusManager.SetWeatherInfo(args.Location, args.Info)
  166. }
  167. func (dm *DeviceManager) SetAlarm(args rpcs.ArgsAlarmInfo, reply *rpcs.ArgsAlarmInfo) error {
  168. return dm.alarmManager.SetAlarm(&deviceAlarm.AlarmParams{
  169. DeviceCode: args.DeviceCode,
  170. FirstReportTime: args.FirstReportTime,
  171. LastAlarmTime: args.LastAlarmTime,
  172. })
  173. }
  174. func (dm *DeviceManager) GetAlarm(args rpcs.ArgsGetAlarm, reply *rpcs.ReplayAlarm) error {
  175. info, err := dm.alarmManager.GetAlarm(args.DeviceCode)
  176. if err != nil {
  177. return err
  178. }
  179. if info != nil {
  180. reply.AlarmParams = info
  181. }
  182. return nil
  183. }
  184. func (dm *DeviceManager) DelAlarm(args rpcs.ArgsGetAlarm, reply *rpcs.ReplayAlarm) error {
  185. return dm.alarmManager.DeleteAlarm(args.DeviceCode)
  186. }
  187. func (dm *DeviceManager) GetAllScenesPage(args rpcs.ArgsGetAllScene, reply *rpcs.ReplyScenes) error {
  188. result, err := dm.sceneManager.GetAllScenesPage(args.Code, args.Pi, args.Ps)
  189. if err != nil {
  190. return err
  191. }
  192. if len(result.Data) > 0 {
  193. reply.Total = result.Total
  194. reply.Result = result.Data
  195. }
  196. return nil
  197. }
  198. func (dm *DeviceManager) GetAllScenes(args rpcs.ArgsGetAllScene, reply *rpcs.ReplyScenes) error {
  199. result, err := dm.sceneManager.GetAllScenes(args.Code)
  200. if err != nil {
  201. return err
  202. }
  203. if len(result) > 0 {
  204. reply.Result = result
  205. }
  206. return nil
  207. }
  208. func (dm *DeviceManager) SaveScene(args rpcs.ArgsScene, reply *rpcs.ReplyScene) error {
  209. return dm.sceneManager.SaveScene(&scene.InfoScene{
  210. Id: args.SceneId,
  211. Key: args.Key,
  212. SceneId: args.SceneId,
  213. ConditionDesc: args.ConditionDesc,
  214. ActionDesc: args.ActionDesc,
  215. Name: args.Name,
  216. Config: args.Config,
  217. Status: args.Status,
  218. Time: args.Time,
  219. SceneType: args.SceneType,
  220. })
  221. }
  222. func (dm *DeviceManager) UpdateSceneStatus(args rpcs.ArgsScene, reply *rpcs.ReplyScene) error {
  223. info, err := dm.sceneManager.GetScene(args.Key)
  224. if err != nil {
  225. return err
  226. }
  227. j := gjson.New(info)
  228. _ = j.Set("status", args.Status)
  229. _ = j.Set("time", time.Now())
  230. return nil
  231. }
  232. func (dm *DeviceManager) GetScene(args rpcs.ArgsScene, reply *rpcs.ReplyScene) error {
  233. info, err := dm.sceneManager.GetScene(args.Key)
  234. if err != nil {
  235. return err
  236. }
  237. if info != "" {
  238. reply.Config = info
  239. }
  240. return nil
  241. }
  242. func (dm *DeviceManager) DeleteScene(args rpcs.ArgsScene, reply *rpcs.ReplyScene) error {
  243. return dm.sceneManager.DeleteScene(args.Key)
  244. }