device.go 5.4 KB

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