devicealarm.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package models
  2. import (
  3. "time"
  4. )
  5. type DeviceAlarm struct {
  6. ID int64 `gorm:"primary_key"` //主键
  7. DID string `gorm:"type:varchar(32)"` //设备编码
  8. TStart time.Time `gorm:"type:datetime"` //开始时间
  9. TEnd time.Time `gorm:"type:datetime;default:null"` //结束时间
  10. Threshold float32 `gorm:"type:float(10,2)"` //阈值
  11. SValue float32 `gorm:"type:float(10,2)"` //告警值
  12. EValue float32 `gorm:"type:float(10,2)"` //恢复值
  13. Content string `gorm:"type:varchar(128)"` //告警内容
  14. AlarmType uint16 `gorm:"type:smallint"` //告警类型
  15. Level uint8 `gorm:"type:smallint"` //告警等级,0:普通,1:重要,2:严重
  16. Sid uint16 `gorm:"type:smallint;default:0"` //sid
  17. Cid uint16 `gorm:"type:smallint;default:0"` //策略id
  18. Cname string `gorm:"type:varchar(40)"` //策略名称
  19. LcModel
  20. }
  21. func (DeviceAlarm) TableName() string {
  22. return "t_device_alarm"
  23. }
  24. func (o DeviceAlarm) Update() error {
  25. err := G_db.Model(&o).Where("id = ?", o.ID).Updates(
  26. map[string]interface{}{"t_end": o.TEnd, "e_value": o.EValue}).Error
  27. return err
  28. }
  29. // 用于web端告警信息同步
  30. // todo lq 该查询还有优化空间,可以考虑使用UNION ALL优化
  31. func GetUpdateAlarm(id uint64, update string) ([]DeviceAlarm, error) {
  32. var array []DeviceAlarm
  33. err := G_db.Model(&DeviceAlarm{}).Where("id > ? OR updated_at > ?", id, update).Order("id asc").Find(&array).Error
  34. return array, err
  35. }
  36. // 获取告警信息
  37. // flag=0获取所有告警信息
  38. // flag=1获取结束的告警信息
  39. // flag=2获取未结束的告警信息
  40. func GetAlarmByCodes(codes []string, flag int) ([]DeviceAlarm, error) {
  41. var array []DeviceAlarm
  42. var err error
  43. switch flag {
  44. case 2: //未结束的告警
  45. err = G_db.Model(&DeviceAlarm{}).Where("d_id IN (?) AND t_end IS NULL", codes).Order("d_id asc,t_start desc").Find(&array).Error
  46. case 1: //已结束的告警
  47. err = G_db.Model(&DeviceAlarm{}).Where("d_id IN (?) AND t_end IS NOT NULL", codes).Order("d_id asc,t_start desc").Find(&array).Error
  48. case 0: //所有告警
  49. err = G_db.Model(&DeviceAlarm{}).Where("d_id IN (?)", codes).Order("d_id asc,t_start desc").Find(&array).Error
  50. }
  51. return array, err
  52. }
  53. type AlarmStrategy struct {
  54. ID int64 `gorm:"primary_key"` //主键
  55. Name string `gorm:"type:varchar(64)"` //策略名称
  56. UpLimit float32 `gorm:"type:float(10,1)"` //上限
  57. LowLimit float32 `gorm:"type:float(10,1)"` //下限
  58. Duration uint8 `gorm:"type:int"` //持续时间
  59. State int `gorm:"type:int"` //1启用,0禁用
  60. LcModel
  61. }
  62. func (AlarmStrategy) TableName() string {
  63. return "t_alarm_strategy"
  64. }
  65. func (o AlarmStrategy) Delete() error {
  66. return G_db.Model(&o).Where("id = ?", o.ID).Updates(map[string]interface{}{"state": 0}).Error
  67. }
  68. func (o AlarmStrategy) IsExistedByCode() (bool, error) {
  69. var count int = 0
  70. err := G_db.Model(&o).Where(" id = ? ", o.ID).Count(&count).Error
  71. return count > 0, err
  72. }
  73. func (o AlarmStrategy) SaveFromWeb() error {
  74. has, err := o.IsExistedByCode()
  75. if err != nil {
  76. return err
  77. }
  78. if has {
  79. //更新
  80. return G_db.Model(&o).Updates(map[string]interface{}{
  81. "name": o.Name, "up_limit": o.UpLimit,
  82. "low_limit": o.LowLimit, "duration": o.Duration, "state": o.State}).Error
  83. } else {
  84. //插入
  85. return G_db.Create(&o).Error
  86. }
  87. }
  88. func GetAllAlarmStrategy() ([]AlarmStrategy, error) {
  89. var arr []AlarmStrategy
  90. if err := G_db.Model(AlarmStrategy{}).Where("state = 1").Find(&arr).Error; err != nil {
  91. return nil, err
  92. }
  93. return arr, nil
  94. }
  95. type AlarmAssociate struct {
  96. ID string `gorm:"primary_key" sql:"type:varchar(32) NOT NULL"`
  97. Mid int `gorm:"primary_key" sql:"type:int"`
  98. Sid int `gorm:"primary_key" sql:"type:int"`
  99. Cid int `gorm:"primary_key" sql:"type:int"`
  100. State int `gorm:"type:int"`
  101. CreatedAt time.Time
  102. UpdatedAt time.Time
  103. }
  104. func (AlarmAssociate) TableName() string {
  105. return "t_alarm_associate"
  106. }
  107. //func (o AlarmAssociate) Delete() error {
  108. // return G_db.Model(&o).Where("id = ? AND mid = ? AND sid = ? AND cid = ?",
  109. // o.ID, o.Mid, o.Sid, o.Cid).Updates(map[string]interface{}{"state": 0}).Error
  110. //}
  111. func (o AlarmAssociate) IsExistedByCode() (bool, error) {
  112. var count int = 0
  113. err := G_db.Model(&o).Where("id = ? AND mid = ? AND sid = ? AND cid = ?",
  114. o.ID, o.Mid, o.Sid, o.Cid).Count(&count).Error
  115. return count > 0, err
  116. }
  117. func (o AlarmAssociate) SaveFromWeb() error {
  118. has, err := o.IsExistedByCode()
  119. if err != nil {
  120. return err
  121. }
  122. if has {
  123. //更新
  124. return G_db.Model(&o).Updates(map[string]interface{}{"state": o.State}).Error
  125. } else {
  126. //插入
  127. return G_db.Create(&o).Error
  128. }
  129. }
  130. func GetAllAlarmAssociate() ([]AlarmAssociate, error) {
  131. var arr []AlarmAssociate
  132. if err := G_db.Model(AlarmAssociate{}).Where("state = 1").Find(&arr).Error; err != nil {
  133. return nil, err
  134. }
  135. return arr, nil
  136. }