devicealarm.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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. func GetUpdateAlarm(id uint64, update string) ([]DeviceAlarm, error) {
  31. var array []DeviceAlarm
  32. err := G_db.Model(&DeviceAlarm{}).Where("id > ? OR updated_at > ?", id, update).Order("id asc").Find(&array).Error
  33. return array, err
  34. }
  35. //获取告警信息
  36. //flag=0获取所有告警信息
  37. //flag=1获取结束的告警信息
  38. //flag=2获取未结束的告警信息
  39. func GetAlarmByCodes(codes []string, flag int) ([]DeviceAlarm, error) {
  40. var array []DeviceAlarm
  41. var err error
  42. switch flag {
  43. case 2: //未结束的告警
  44. 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
  45. case 1: //已结束的告警
  46. 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
  47. case 0: //所有告警
  48. err = G_db.Model(&DeviceAlarm{}).Where("d_id IN (?)", codes).Order("d_id asc,t_start desc").Find(&array).Error
  49. }
  50. return array, err
  51. }
  52. type AlarmStrategy struct {
  53. ID int64 `gorm:"primary_key"` //主键
  54. Name string `gorm:"type:varchar(64)"` //策略名称
  55. UpLimit float32 `gorm:"type:float(10,1)"` //上限
  56. LowLimit float32 `gorm:"type:float(10,1)"` //下限
  57. Duration uint8 `gorm:"type:int"` //持续时间
  58. State int `gorm:"type:int"` //1启用,0禁用
  59. LcModel
  60. }
  61. func (AlarmStrategy) TableName() string {
  62. return "t_alarm_strategy"
  63. }
  64. func (o AlarmStrategy) Delete() error {
  65. return G_db.Model(&o).Where("id = ?", o.ID).Updates(map[string]interface{}{"state": 0}).Error
  66. }
  67. func (o AlarmStrategy) IsExistedByCode() (bool, error) {
  68. var count int = 0
  69. err := G_db.Model(&o).Where(" id = ? ", o.ID).Count(&count).Error
  70. return count > 0, err
  71. }
  72. func (o AlarmStrategy) SaveFromWeb() error {
  73. has, err := o.IsExistedByCode()
  74. if err != nil {
  75. return err
  76. }
  77. if has {
  78. //更新
  79. return G_db.Model(&o).Updates(map[string]interface{}{
  80. "name": o.Name, "up_limit": o.UpLimit,
  81. "low_limit": o.LowLimit, "duration": o.Duration, "state": o.State}).Error
  82. } else {
  83. //插入
  84. return G_db.Create(&o).Error
  85. }
  86. }
  87. func GetAllAlarmStrategy() ([]AlarmStrategy, error) {
  88. var arr []AlarmStrategy
  89. if err := G_db.Model(AlarmStrategy{}).Where("state = 1").Find(&arr).Error; err != nil {
  90. return nil, err
  91. }
  92. return arr, nil
  93. }
  94. type AlarmAssociate struct {
  95. ID string `gorm:"primary_key" sql:"type:varchar(32) NOT NULL"`
  96. Mid int `gorm:"primary_key" sql:"type:int"`
  97. Sid int `gorm:"primary_key" sql:"type:int"`
  98. Cid int `gorm:"primary_key" sql:"type:int"`
  99. State int `gorm:"type:int"`
  100. CreatedAt time.Time
  101. UpdatedAt time.Time
  102. }
  103. func (AlarmAssociate) TableName() string {
  104. return "t_alarm_associate"
  105. }
  106. //func (o AlarmAssociate) Delete() error {
  107. // return G_db.Model(&o).Where("id = ? AND mid = ? AND sid = ? AND cid = ?",
  108. // o.ID, o.Mid, o.Sid, o.Cid).Updates(map[string]interface{}{"state": 0}).Error
  109. //}
  110. func (o AlarmAssociate) IsExistedByCode() (bool, error) {
  111. var count int = 0
  112. err := G_db.Model(&o).Where("id = ? AND mid = ? AND sid = ? AND cid = ?",
  113. o.ID, o.Mid, o.Sid, o.Cid).Count(&count).Error
  114. return count > 0, err
  115. }
  116. func (o AlarmAssociate) SaveFromWeb() error {
  117. has, err := o.IsExistedByCode()
  118. if err != nil {
  119. return err
  120. }
  121. if has {
  122. //更新
  123. return G_db.Model(&o).Updates(map[string]interface{}{"state": o.State}).Error
  124. } else {
  125. //插入
  126. return G_db.Create(&o).Error
  127. }
  128. }
  129. func GetAllAlarmAssociate() ([]AlarmAssociate, error) {
  130. var arr []AlarmAssociate
  131. if err := G_db.Model(AlarmAssociate{}).Where("state = 1").Find(&arr).Error; err != nil {
  132. return nil, err
  133. }
  134. return arr, nil
  135. }