device.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. package model
  2. import (
  3. "sparrow/pkg/models"
  4. "time"
  5. "github.com/jinzhu/gorm"
  6. )
  7. // Device devices data
  8. type Device struct {
  9. db *gorm.DB
  10. }
  11. // Init device
  12. //TODO:增加产品ID查询,目前的查询都没有指定产品ID的查询
  13. func (a *Device) Init(db *gorm.DB) *Device {
  14. a.db = db
  15. return a
  16. }
  17. // GetDeviceCount 获取vendorid下的设备激活总数
  18. func (a *Device) GetDeviceCount(vendorid string) (count int, err error) {
  19. device := &models.Device{
  20. VendorID: vendorid,
  21. }
  22. err = a.db.Model(device).Where(device).Count(&count).Error
  23. return
  24. }
  25. // GetActiveNumberOfDate 获取某一天的设备激活数量
  26. func (a *Device) GetActiveNumberOfDate(vendorid string, datetime string) (count int, err error) {
  27. device := &models.Device{
  28. VendorID: vendorid,
  29. }
  30. err = a.db.Model(device).
  31. Where("vendor_id = ? and DATE_FORMAT(created_at, '%Y-%m-%d') = ?",
  32. vendorid, datetime).
  33. Count(&count).
  34. Error
  35. return
  36. }
  37. // GetLivelyCountOfDate 获取某一天的设备活跃数据
  38. func (a *Device) GetLivelyCountOfDate(vendorid string, datetime string) (count int, err error) {
  39. device := &models.Device{
  40. VendorID: vendorid,
  41. }
  42. err = a.db.Model(device).
  43. Where("vendor_id = ? and DATE_FORMAT(updated_at, '%Y-%m-%d') = ?",
  44. vendorid, datetime).Count(&count).Error
  45. return
  46. }
  47. // // GetActiveOf7Days 设备近7日的激活数据
  48. // func (a *Device) GetActiveOf7Days(vendorid int) (datas []models.DeviceChartData, err error) {
  49. // err = a.db.Model(&models.Device{}).
  50. // Select("DATE_FORMAT(created_at,'%Y-%m-%d') as dt, count(id) as count").
  51. // Where("DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(created_at) and vendor_id = ?",
  52. // vendorid).
  53. // Group("dt").Order("dt").Scan(&datas).Error
  54. // if err != nil {
  55. // return
  56. // }
  57. // return
  58. // }
  59. // // GetActiveOf14Days 设备近14日的激活数据
  60. // func (a *Device) GetActiveOf14Days(vendorid int) (datas []models.DeviceChartData, err error) {
  61. // err = a.db.Model(&models.Device{}).
  62. // Select("DATE_FORMAT(created_at,'%Y-%m-%d') as dt, count(id) as count").
  63. // Where("DATE_SUB(CURDATE(), INTERVAL 14 DAY) <= date(created_at) and vendor_id = ?",
  64. // vendorid).
  65. // Group("dt").Order("dt").Scan(&datas).Error
  66. // if err != nil {
  67. // return
  68. // }
  69. // return
  70. // }
  71. // // GetActiveOf30Days 设备近30日的激活数据
  72. // func (a *Device) GetActiveOf30Days(vendorid int) (datas []models.DeviceChartData, err error) {
  73. // err = a.db.Model(&models.Device{}).
  74. // Select("DATE_FORMAT(created_at,'%Y-%m-%d') as dt, count(id) as count").
  75. // Where("DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(created_at) and vendor_id = ?",
  76. // vendorid).
  77. // Group("dt").Order("dt").Scan(&datas).Error
  78. // if err != nil {
  79. // return
  80. // }
  81. // return
  82. // }
  83. // GetActiveOfNumDays 查询几日内的激活趋势数据
  84. // days参数为7则查询7日的数据
  85. func (a *Device) GetActiveOfNumDays(vendorid string, days int) ([]map[string]interface{}, error) {
  86. i := 1
  87. datas := make([]map[string]interface{}, 0)
  88. for i <= days {
  89. day := i - days
  90. i = i + 1
  91. datetime := time.Now().AddDate(0, 0, day).Format("2006-01-02")
  92. count, err := a.GetActiveNumberOfDate(vendorid, datetime)
  93. if err != nil {
  94. return nil, err
  95. }
  96. data := make(map[string]interface{})
  97. data[datetime] = count
  98. datas = append(datas, data)
  99. }
  100. return datas, nil
  101. }
  102. // GetLivelyOfNumDays 获取设备N日内活跃趋势数据
  103. func (a *Device) GetLivelyOfNumDays(vendorid string, days int) ([]map[string]interface{}, error) {
  104. i := 1
  105. datas := make([]map[string]interface{}, 0)
  106. for i <= days {
  107. day := i - days
  108. i = i + 1
  109. datetime := time.Now().AddDate(0, 0, day).Format("2006-01-02")
  110. count, err := a.GetLivelyCountOfDate(vendorid, datetime)
  111. if err != nil {
  112. return nil, err
  113. }
  114. data := make(map[string]interface{})
  115. data[datetime] = count
  116. datas = append(datas, data)
  117. }
  118. return datas, nil
  119. }
  120. // GetDevices 获取厂商已经激活的设备列表
  121. func (a *Device) GetDevices(vendorid string, proid, pi, ps int, deviceid string) (datas []models.Device, total int, err error) {
  122. tx := a.db.Where("vendor_id = ?", vendorid)
  123. if proid != 0 {
  124. tx = tx.Where("product_id = ?", proid)
  125. }
  126. if deviceid != "" {
  127. tx = tx.Where("device_identifier = ?", deviceid)
  128. }
  129. err = tx.Limit(ps).Offset((pi - 1) * ps).Find(&datas).Error
  130. tx.Model(&models.Device{}).Count(&total)
  131. return
  132. }
  133. //GetDevicesByVenderId 获取用户设备
  134. func (a *Device) GetDevicesByVenderId(vendorid string) (datas []models.Device, err error) {
  135. a.db.Where("vendor_id = ?", vendorid).Find(&datas)
  136. return
  137. }