device.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. package controllers
  2. import (
  3. "errors"
  4. "fmt"
  5. "sparrow/pkg/rpcs"
  6. "sparrow/pkg/server"
  7. "sparrow/services/knowoapi/services"
  8. "strconv"
  9. "time"
  10. "github.com/kataras/iris"
  11. )
  12. // DeviceController api
  13. type DeviceController struct {
  14. Ctx iris.Context
  15. Service services.DeviceService
  16. Token
  17. }
  18. // Get 获取激活设备列表
  19. // GET /device?pi=&ps=&proid=&device_id=
  20. func (a *DeviceController) Get() {
  21. pi, err := a.Ctx.URLParamInt("pi")
  22. if err != nil {
  23. badRequest(a.Ctx, err)
  24. return
  25. }
  26. ps, err := a.Ctx.URLParamInt("ps")
  27. if err != nil {
  28. badRequest(a.Ctx, err)
  29. return
  30. }
  31. proid, err := a.Ctx.URLParamInt("proid")
  32. if err != nil {
  33. proid = 0
  34. }
  35. deviceid := a.Ctx.URLParam("device_id")
  36. vid := a.getVendorID(a.Ctx)
  37. datas, total, err := a.Service.GetDevices(vid, proid, pi, ps, deviceid)
  38. if err != nil {
  39. responseError(a.Ctx, ErrDatabase, err.Error())
  40. return
  41. }
  42. done(a.Ctx, map[string]interface{}{
  43. "list": datas,
  44. "total": total,
  45. })
  46. }
  47. //设备数量,包含在线数量,离线数量,总数量
  48. //GET /devicecount
  49. func (a *DeviceController) GetDevicecount() {
  50. vid := a.getVendorID(a.Ctx)
  51. data, err := a.Service.GetDevicesCountByVenderId(vid)
  52. if err != nil && err.Error() != "redigo: nil returned" {
  53. responseError(a.Ctx, ErrDatabase, err.Error())
  54. return
  55. }
  56. done(a.Ctx, data)
  57. }
  58. //获取设备在线状态
  59. // GET /devicestatus?device_id=
  60. func (a *DeviceController) GetDevicestatus() {
  61. deviceid, err := a.Ctx.URLParamInt("device_id")
  62. if err != nil {
  63. deviceid = 0
  64. }
  65. var status int
  66. onlineargs := rpcs.ArgsGetDeviceOnlineStatus{
  67. Id: uint64(deviceid),
  68. }
  69. onlinereply := rpcs.ReplyGetDeviceOnlineStatus{}
  70. err = server.RPCCallByName(nil, "devicemanager", "DeviceManager.GetDeviceOnlineStatus", onlineargs, &onlinereply)
  71. if err != nil && err.Error() != "redigo: nil returned" {
  72. server.Log.Errorf("get devie online status error: %v", err)
  73. responseError(a.Ctx, ErrDatabase, err.Error())
  74. return
  75. }
  76. if int(onlinereply.HeartbeatInterval) > 0 && len(onlinereply.ClientIP) > 0 {
  77. status = 1
  78. }
  79. done(a.Ctx, map[string]interface{}{
  80. "Status": status,
  81. })
  82. }
  83. // GetBannerdata 获取设备激活和活跃数据
  84. // GET /bannerdata?proid=
  85. func (a *DeviceController) GetBannerdata() {
  86. proid, err := a.Ctx.URLParamInt("proid")
  87. if err != nil {
  88. proid = 0
  89. }
  90. var (
  91. //今日激活
  92. tact = 0
  93. // 今日活跃
  94. tlive = 0
  95. // 昨日激活
  96. yact = 0
  97. // 昨日活跃
  98. ylive = 0
  99. // 累计激活
  100. totolact = 0
  101. // 环比昨日激活
  102. comparedWithYesterdayActive = 0.00
  103. //活跃占比
  104. rateOfTodayLive = 0.00
  105. //环比昨日活跃
  106. comparedWithYesterdayLive = 0.00
  107. )
  108. vendorid := a.getVendorID(a.Ctx)
  109. totolact, err = a.Service.GetDeviceCount(vendorid)
  110. if err != nil {
  111. responseError(a.Ctx, ErrDatabase, err.Error())
  112. return
  113. }
  114. today := time.Now().Format("2006-01-02")
  115. yestoday := time.Now().AddDate(0, 0, -1).Format("2006-01-02")
  116. tact, err = a.Service.GetActiveNumberOfDate(vendorid, today)
  117. if err != nil {
  118. responseError(a.Ctx, ErrDatabase, err.Error())
  119. return
  120. }
  121. tlive, err = a.Service.GetLivelyCountOfDate(vendorid, today)
  122. if err != nil {
  123. responseError(a.Ctx, ErrDatabase, err.Error())
  124. return
  125. }
  126. yact, err = a.Service.GetActiveNumberOfDate(vendorid, yestoday)
  127. if err != nil {
  128. responseError(a.Ctx, ErrDatabase, err.Error())
  129. return
  130. }
  131. ylive, err = a.Service.GetLivelyCountOfDate(vendorid, yestoday)
  132. if err != nil {
  133. responseError(a.Ctx, ErrDatabase, err.Error())
  134. return
  135. }
  136. if tact != 0 && yact != 0 {
  137. comparedWithYesterdayActive = (float64(tact) / float64(yact)) * 100
  138. }
  139. if tlive != 0 && ylive != 0 {
  140. comparedWithYesterdayLive = (float64(tlive) / float64(ylive)) * 100
  141. rateOfTodayLive = float64(tlive) / float64(totolact) * 100
  142. }
  143. //TODO 这里的productid要去掉
  144. result := map[string]interface{}{
  145. "todayAct": tact,
  146. "todayLive": tlive,
  147. "yestodayAct": yact,
  148. "yestodayLive": ylive,
  149. "totalAct": totolact,
  150. "comparedWithYesterdayActive": fmt.Sprintf("%s%%", strconv.FormatFloat(comparedWithYesterdayActive, 'f', 2, 64)),
  151. "comparedWithYesterdayLive": fmt.Sprintf("%s%%", strconv.FormatFloat(comparedWithYesterdayLive, 'f', 2, 64)),
  152. "rateOfTodayLive": fmt.Sprintf("%s%%", strconv.FormatFloat(rateOfTodayLive, 'f', 2, 64)),
  153. "productid": proid,
  154. }
  155. done(a.Ctx, result)
  156. }
  157. // GetActivechart 获取N日的激活数据趋势
  158. func (a *DeviceController) GetActivechart() {
  159. // proid, err := a.Ctx.URLParamInt("proid")
  160. // if err != nil {
  161. // proid = 0
  162. // }
  163. days, err := a.Ctx.URLParamInt("days")
  164. if err != nil {
  165. days = 7
  166. }
  167. if days > 30 {
  168. badRequest(a.Ctx, errors.New("非法参数"))
  169. return
  170. }
  171. vendorid := a.getVendorID(a.Ctx)
  172. datas, err := a.Service.GetActiveOfNumDays(vendorid, days)
  173. if err != nil {
  174. responseError(a.Ctx, ErrDatabase, err.Error())
  175. return
  176. }
  177. done(a.Ctx, map[string]interface{}{
  178. "chart": datas,
  179. })
  180. }
  181. // GetLivechart 获取N日内的活跃数据
  182. func (a *DeviceController) GetLivechart() {
  183. // proid, err := a.Ctx.URLParamInt("proid")
  184. // if err != nil {
  185. // proid = 0
  186. // }
  187. days, err := a.Ctx.URLParamInt("days")
  188. if err != nil {
  189. days = 7
  190. }
  191. if days > 30 {
  192. badRequest(a.Ctx, errors.New("非法参数"))
  193. return
  194. }
  195. vendorid := a.getVendorID(a.Ctx)
  196. datas, err := a.Service.GetLivelyOfNumDays(vendorid, days)
  197. if err != nil {
  198. responseError(a.Ctx, ErrDatabase, err.Error())
  199. return
  200. }
  201. done(a.Ctx, map[string]interface{}{
  202. "chart": datas,
  203. })
  204. }