lampdata.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package models
  2. import "time"
  3. type LightingData struct {
  4. ID string `gorm:"type:varchar(32);primary_key"` //设备编码
  5. Date time.Time `gorm:"type:date;primary_key"` //日期
  6. Duration int `gorm:"type:int"` //时长
  7. Tenant string `gorm:"type:varchar(8)"` //租户ID
  8. CreatedAt time.Time
  9. }
  10. func (LightingData) TableName() string {
  11. return "t_lamp_lighting_day_data"
  12. }
  13. type LightingRateData struct {
  14. Tenant string `gorm:"type:varchar(8);primary_key"` //租户ID
  15. Date time.Time `gorm:"type:date;primary_key"` //日期
  16. Total int `gorm:"type:int"` //总灯数
  17. Number int `gorm:"type:int"` //亮灯数
  18. Rate float32 `gorm:"type:float(10,2)"` //亮灯率
  19. CreatedAt time.Time //统计时间
  20. }
  21. func (LightingRateData) TableName() string {
  22. return "t_lamp_lighting_rate_day_data"
  23. }
  24. func GetDayLightingRateData(tenant, start, end string) ([]LightingRateData, error) {
  25. var arr []LightingRateData
  26. err := G_db.Model(LightingRateData{}).Where("tenant = ? and date between ? and ?", tenant, start, end).Find(&arr).Error
  27. return arr, err
  28. }
  29. type LightingRate struct {
  30. Time string //周期
  31. Rate float32 //亮灯率
  32. }
  33. func GetMonthLightingRateData(tenant, start, end string) ([]LightingRate, error) {
  34. var arr []LightingRate
  35. sql := `SELECT DATE_FORMAT(a.date,'%Y-%m') AS time,ROUND(SUM(number)*100/SUM(total),1) AS rate
  36. FROM t_lamp_lighting_rate_day_data a
  37. WHERE a.tenant = ? AND DATE_FORMAT(a.date,'%Y-%m') BETWEEN ? AND ?
  38. GROUP BY DATE_FORMAT(a.date,'%Y-%m')
  39. ORDER BY DATE_FORMAT(a.date,'%Y-%m')`
  40. err := G_db.Raw(sql, tenant, start, end).Scan(&arr).Error
  41. return arr, err
  42. }
  43. func GetQuarterLightingRateData(tenant, start, end string, quarter int) ([]LightingRate, error) {
  44. var err error
  45. var arr []LightingRate
  46. if quarter == 0 {
  47. sql := `SELECT QUARTER(a.date) AS time,ROUND(SUM(a.number)*100/SUM(a.total),1) AS rate
  48. FROM t_lamp_lighting_rate_day_data a
  49. WHERE a.tenant = ? AND DATE_FORMAT(a.date,'%Y') BETWEEN ? AND ?
  50. GROUP BY QUARTER(a.date)
  51. ORDER BY QUARTER(a.date)`
  52. err = G_db.Raw(sql, tenant, start, end).Scan(&arr).Error
  53. } else {
  54. sql := `SELECT QUARTER(a.date) AS time,ROUND(SUM(a.number)*100/SUM(a.total),1) AS rate
  55. FROM t_lamp_lighting_rate_day_data a
  56. WHERE a.tenant = ? AND QUARTER(a.date) = ? AND DATE_FORMAT(a.date,'%Y') BETWEEN ? AND ?
  57. GROUP BY QUARTER(a.date)
  58. ORDER BY QUARTER(a.date)`
  59. err = G_db.Raw(sql, tenant, quarter, start, end).Scan(&arr).Error
  60. }
  61. return arr, err
  62. }
  63. func GetYearLightingRateData(tenant, start, end string) ([]LightingRate, error) {
  64. var err error
  65. var arr []LightingRate
  66. sql := `SELECT DATE_FORMAT(a.date,'%Y') AS time,ROUND(SUM(a.number)*100/SUM(a.total),1) AS rate
  67. FROM t_lamp_lighting_rate_day_data a
  68. WHERE a.tenant = ? AND DATE_FORMAT(a.date,'%Y') BETWEEN ? AND ?
  69. GROUP BY DATE_FORMAT(a.date,'%Y')
  70. ORDER BY DATE_FORMAT(a.date,'%Y')`
  71. err = G_db.Raw(sql, tenant, start, end).Scan(&arr).Error
  72. return arr, err
  73. }
  74. type LightingRateMiniteData struct {
  75. Tenant string `gorm:"type:varchar(8);primary_key"` //租户ID
  76. Time time.Time `gorm:"type:datetime;primary_key"` //时间
  77. Total int `gorm:"type:int"` //总灯数
  78. Number int `gorm:"type:int"` //亮灯数
  79. Rate float32 `gorm:"type:float(10,2)"` //亮灯率
  80. CreatedAt time.Time //统计时间
  81. }
  82. func (LightingRateMiniteData) TableName() string {
  83. return "t_lamp_lighting_rate_minite_data"
  84. }
  85. //获取某时间段内的15分钟亮灯率数据
  86. func GetMiniteLightingRateData(tenant, start, end string) ([]LightingRateMiniteData, error) {
  87. var err error
  88. var arr []LightingRateMiniteData
  89. if end != "" {
  90. G_db.Model(LightingRateMiniteData{}).Where("tenant = ? and time BETWEEN ? AND ? ",
  91. tenant, start, end)
  92. } else {
  93. G_db.Model(LightingRateMiniteData{}).Where("tenant = ? and time >= ? ",
  94. tenant, start)
  95. }
  96. return arr, err
  97. }
  98. type LastestLightingRate struct {
  99. Tenant string //租户ID
  100. Total int //总灯数
  101. Number int //亮灯数
  102. Rate float32 //亮灯率
  103. }
  104. //获取实时亮灯率数据
  105. func GetLastestLightingRate(tenant string) (LastestLightingRate, error) {
  106. var err error
  107. var ret LastestLightingRate
  108. sql := `SELECT a.tenant,COUNT(a.id) AS total,SUM(IF(b.d_id IS NULL,0,1)) AS number,
  109. ROUND(SUM(IF(b.d_id IS NULL,0,1))*100/COUNT(a.id),2) AS rate
  110. FROM t_device_lampcontroller a
  111. LEFT JOIN (SELECT DISTINCT d_id FROM device_lamp_events WHERE t_end IS NULL) b
  112. ON a.id = b.d_id WHERE a.state = 1 AND a.tenant = ?`
  113. err = G_db.Raw(sql, tenant).Find(&ret).Error
  114. return ret, err
  115. }