device.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package controllers
  2. import (
  3. "errors"
  4. "fmt"
  5. "sparrow/services/knowoapi/services"
  6. "strconv"
  7. "time"
  8. "github.com/kataras/iris"
  9. )
  10. // DeviceController api
  11. type DeviceController struct {
  12. Ctx iris.Context
  13. Service services.DeviceService
  14. Token
  15. }
  16. // Get 获取激活设备列表
  17. // GET /device?pi=&ps=&proid=&device_id=
  18. func (a *DeviceController) Get() {
  19. pi, err := a.Ctx.URLParamInt("pi")
  20. if err != nil {
  21. badRequest(a.Ctx, err)
  22. return
  23. }
  24. ps, err := a.Ctx.URLParamInt("ps")
  25. if err != nil {
  26. badRequest(a.Ctx, err)
  27. return
  28. }
  29. proid, err := a.Ctx.URLParamInt("proid")
  30. if err != nil {
  31. proid = 0
  32. }
  33. deviceid := a.Ctx.URLParam("device_id")
  34. vid := a.getVendorID(a.Ctx)
  35. datas, total, err := a.Service.GetDevices(vid, proid, pi, ps, deviceid)
  36. if err != nil {
  37. responseError(a.Ctx, ErrDatabase, err.Error())
  38. return
  39. }
  40. done(a.Ctx, map[string]interface{}{
  41. "list": datas,
  42. "total": total,
  43. })
  44. }
  45. // GetBannerdata 获取设备激活和活跃数据
  46. // GET /bannerdata?proid=
  47. func (a *DeviceController) GetBannerdata() {
  48. proid, err := a.Ctx.URLParamInt("proid")
  49. if err != nil {
  50. proid = 0
  51. }
  52. var (
  53. //今日激活
  54. tact = 0
  55. // 今日活跃
  56. tlive = 0
  57. // 昨日激活
  58. yact = 0
  59. // 昨日活跃
  60. ylive = 0
  61. // 累计激活
  62. totolact = 0
  63. // 环比昨日激活
  64. comparedWithYesterdayActive = 0.00
  65. //活跃占比
  66. rateOfTodayLive = 0.00
  67. //环比昨日活跃
  68. comparedWithYesterdayLive = 0.00
  69. )
  70. vendorid := a.getVendorID(a.Ctx)
  71. totolact, err = a.Service.GetDeviceCount(vendorid)
  72. if err != nil {
  73. responseError(a.Ctx, ErrDatabase, err.Error())
  74. return
  75. }
  76. today := time.Now().Format("2006-01-02")
  77. yestoday := time.Now().AddDate(0, 0, -1).Format("2006-01-02")
  78. tact, err = a.Service.GetActiveNumberOfDate(vendorid, today)
  79. if err != nil {
  80. responseError(a.Ctx, ErrDatabase, err.Error())
  81. return
  82. }
  83. tlive, err = a.Service.GetLivelyCountOfDate(vendorid, today)
  84. if err != nil {
  85. responseError(a.Ctx, ErrDatabase, err.Error())
  86. return
  87. }
  88. yact, err = a.Service.GetActiveNumberOfDate(vendorid, yestoday)
  89. if err != nil {
  90. responseError(a.Ctx, ErrDatabase, err.Error())
  91. return
  92. }
  93. ylive, err = a.Service.GetLivelyCountOfDate(vendorid, yestoday)
  94. if err != nil {
  95. responseError(a.Ctx, ErrDatabase, err.Error())
  96. return
  97. }
  98. if tact != 0 && yact != 0 {
  99. comparedWithYesterdayActive = (float64(tact) / float64(yact)) * 100
  100. }
  101. if tlive != 0 && ylive != 0 {
  102. comparedWithYesterdayLive = (float64(tlive) / float64(ylive)) * 100
  103. rateOfTodayLive = float64(tlive) / float64(totolact) * 100
  104. }
  105. //TODO 这里的productid要去掉
  106. result := map[string]interface{}{
  107. "todayAct": tact,
  108. "todayLive": tlive,
  109. "yestodayAct": yact,
  110. "yestodayLive": ylive,
  111. "totalAct": totolact,
  112. "comparedWithYesterdayActive": fmt.Sprintf("%s%%", strconv.FormatFloat(comparedWithYesterdayActive, 'f', 2, 64)),
  113. "comparedWithYesterdayLive": fmt.Sprintf("%s%%", strconv.FormatFloat(comparedWithYesterdayLive, 'f', 2, 64)),
  114. "rateOfTodayLive": fmt.Sprintf("%s%%", strconv.FormatFloat(rateOfTodayLive, 'f', 2, 64)),
  115. "productid": proid,
  116. }
  117. done(a.Ctx, result)
  118. }
  119. // GetActivechart 获取N日的激活数据趋势
  120. func (a *DeviceController) GetActivechart() {
  121. // proid, err := a.Ctx.URLParamInt("proid")
  122. // if err != nil {
  123. // proid = 0
  124. // }
  125. days, err := a.Ctx.URLParamInt("days")
  126. if err != nil {
  127. days = 7
  128. }
  129. if days > 30 {
  130. badRequest(a.Ctx, errors.New("非法参数"))
  131. return
  132. }
  133. vendorid := a.getVendorID(a.Ctx)
  134. datas, err := a.Service.GetActiveOfNumDays(vendorid, days)
  135. if err != nil {
  136. responseError(a.Ctx, ErrDatabase, err.Error())
  137. return
  138. }
  139. done(a.Ctx, map[string]interface{}{
  140. "chart": datas,
  141. })
  142. }
  143. // GetLivechart 获取N日内的活跃数据
  144. func (a *DeviceController) GetLivechart() {
  145. // proid, err := a.Ctx.URLParamInt("proid")
  146. // if err != nil {
  147. // proid = 0
  148. // }
  149. days, err := a.Ctx.URLParamInt("days")
  150. if err != nil {
  151. days = 7
  152. }
  153. if days > 30 {
  154. badRequest(a.Ctx, errors.New("非法参数"))
  155. return
  156. }
  157. vendorid := a.getVendorID(a.Ctx)
  158. datas, err := a.Service.GetLivelyOfNumDays(vendorid, days)
  159. if err != nil {
  160. responseError(a.Ctx, ErrDatabase, err.Error())
  161. return
  162. }
  163. done(a.Ctx, map[string]interface{}{
  164. "chart": datas,
  165. })
  166. }