WarningRate.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package Warning
  2. import (
  3. "ColdP_server/controllers/lib"
  4. "ColdP_server/logs"
  5. "github.com/beego/beego/v2/client/orm"
  6. "time"
  7. )
  8. var (
  9. WarningRateDay = "Day"
  10. WarningRateMonth = "Month"
  11. )
  12. // 报警率
  13. type WarningRate struct {
  14. Id int `orm:"column(ID);size(11);auto;pk"`
  15. T_uuid string `orm:"index;size(64);null"` // 用户uuid
  16. T_date string `orm:"size(64);null"` // 记薪日期,2023-03-01
  17. T_device_num int64 `orm:"size(20);default(0)"` // 探头数量
  18. T_warning_num int64 `orm:"size(20);default(0)"` // 报警数量
  19. T_type string `orm:"size(20);default(0)"` // 类型 Day-每日 Month-每月
  20. T_rate float32 `orm:"digits(12);decimals(2)"` // 报警率
  21. CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
  22. UpdateTime time.Time `orm:"column(update_time);type(timestamp);null;auto_now"` //auto_now 每次 model 保存时都会对时间自动更新
  23. }
  24. type WarningRate_R struct {
  25. Id int
  26. T_uuid string // 用户uuid
  27. T_date string // 记薪日期,2023-03-01
  28. T_device_num int64 // 探头数量
  29. T_warning_num int64 // 报警数量
  30. Value float32 // 报警率
  31. }
  32. type WarningRate_User struct {
  33. T_uuid string // 用户uuid
  34. T_name string // 用户名
  35. }
  36. func WarningRateToWarningRate_R(t WarningRate) (r WarningRate_R) {
  37. r.Id = t.Id
  38. r.T_uuid = t.T_uuid
  39. r.T_date = t.T_date
  40. r.T_device_num = t.T_device_num
  41. r.T_warning_num = t.T_warning_num
  42. r.Value = t.T_rate
  43. return r
  44. }
  45. func (t *WarningRate) TableName() string {
  46. return "warning_rate"
  47. }
  48. func init() {
  49. //注册模型
  50. orm.RegisterModel(new(WarningRate))
  51. }
  52. func Add_WarningRate(m WarningRate) (id int64, err error) {
  53. o := orm.NewOrm()
  54. id, err = o.Insert(&m)
  55. if err != nil {
  56. logs.Error(lib.FuncName(), err)
  57. }
  58. return id, err
  59. }
  60. func Read_WarningRate_List(T_uuid, T_type string, startTime, endTime string) (r []map[string]interface{}) {
  61. o := orm.NewOrm()
  62. qs := o.QueryTable(new(WarningRate))
  63. cond := orm.NewCondition()
  64. var maps []WarningRate
  65. cond = cond.And("T_uuid", T_uuid).And("T_type", T_type)
  66. if len(startTime) > 0 {
  67. cond = cond.And("T_date__gte", startTime)
  68. }
  69. if len(endTime) > 0 {
  70. cond = cond.And("T_date__lte", endTime)
  71. }
  72. _, err := qs.SetCond((cond)).OrderBy("T_date").All(&maps)
  73. if err != nil {
  74. logs.Error(lib.FuncName(), err)
  75. }
  76. for _, v := range maps {
  77. rate := map[string]interface{}{
  78. "T_uuid": v.T_uuid,
  79. "T_date": v.T_date,
  80. "T_device_num": v.T_device_num,
  81. "T_warning_num": v.T_warning_num,
  82. "value": v.T_rate,
  83. }
  84. r = append(r, rate)
  85. }
  86. return r
  87. }
  88. // 获取每月平均值
  89. func Read_WarningRateAvg_Month(startTime, endTime string) (r []WarningRate_R) {
  90. o := orm.NewOrm()
  91. sql := "SELECT t_uuid, ROUND(avg(t_device_num)) as t_device_num ,ROUND(avg(t_warning_num)) as t_warning_num FROM warning_rate WHERE `t_type` = '" + WarningRateDay + "' AND T_date >= '" + startTime + "' AND T_date <= '" + endTime + "'" +
  92. " GROUP BY t_uuid"
  93. _, err := o.Raw(sql).QueryRows(&r)
  94. if err != nil {
  95. logs.Error(lib.FuncName(), err)
  96. return
  97. }
  98. return r
  99. }
  100. // 获取昨天的设备报警率
  101. func Read_WarningRate_Yesterday(T_uuid string) float32 {
  102. o := orm.NewOrm()
  103. qs := o.QueryTable(new(WarningRate))
  104. var r WarningRate
  105. T_date := time.Now().AddDate(0, -1, 0).Format("2006-01-02")
  106. err := qs.Filter("T_uuid", T_uuid).Filter("T_date", T_date).Filter("T_type", WarningRateDay).One(&r)
  107. if err != nil {
  108. logs.Error(lib.FuncName(), err)
  109. }
  110. return r.T_rate
  111. }