diff --git a/consumers/consumerAxySkAlarm.go b/consumers/consumerAxySkAlarm.go index ac13814..4e39aac 100644 --- a/consumers/consumerAxySkAlarm.go +++ b/consumers/consumerAxySkAlarm.go @@ -11,6 +11,7 @@ import ( "goInOut/monitors" "gopkg.in/yaml.v3" "log" + "strconv" "sync" "time" ) @@ -243,6 +244,30 @@ func (the *consumerAxySkAlarm) judgeSK() string { } } } + + //无告警的测点,需要恢复 + var noAlarmStationIds []string + var alarmStationIdMap map[string]string + for _, alarm := range alarms { + alarmStationIdMap[alarm.SourceId] = alarm.AlarmCode + } + for _, stationId := range trigger.StationIds { + stationIdStr := strconv.Itoa(stationId) + if _, ok := alarmStationIdMap[stationIdStr]; !ok { + noAlarmStationIds = append(noAlarmStationIds, stationIdStr) + } + } + + //恢复无告警的双控测点 + log.Printf("无告警,待恢复的测点ids==%v", noAlarmStationIds) + for _, stationId := range noAlarmStationIds { + content := "原始告警都已恢复" + payload := the.skAlarmAutoElimination(trigger.StructId, trigger.StructName, stationId, "", trigger.AlarmLevel, content) + the.OutKafka.Publish(the.Info.IoConfig.Out.Kafka.AlarmTopic, payload) + hisK := fmt.Sprintf("%s_%s", stationId, fmt.Sprintf("3077000%d", trigger.AlarmLevel)) + delete(the.historyStationAlarmMap, hisK) + } + } return "" } @@ -316,6 +341,25 @@ func (the *consumerAxySkAlarm) skAlarmElimination(alarmInfoTemplate *models.EsAl payload, _ := json.Marshal(alarmMsg) return payload } +func (the *consumerAxySkAlarm) skAlarmAutoElimination(structureId int, structName string, sourceId, sourceName string, level int, content string) []byte { + alarmMsg := models.KafkaAlarm{ + MessageMode: "AlarmAutoElimination", + StructureId: structureId, + StructureName: structName, + SourceId: sourceId, + SourceName: sourceName, + AlarmTypeCode: "3077", + AlarmCode: fmt.Sprintf("3077000%d", level), + Content: content, + Time: time.Now().Format("2006-01-02T15:04:05.000+0800"), + SourceTypeId: 2, // 0:DTU, 1:传感器, 2:测点 + Sponsor: "goInOut_axySkAlarm", + Extras: nil, + SubDevices: nil, + } + payload, _ := json.Marshal(alarmMsg) + return payload +} func (the *consumerAxySkAlarm) isRuleAlarm(trigger AXY_SK.AlarmTrigger, stationAlarm AXY_SK.StationAlarmGroup) (bool, int, string, time.Time, []string) { level := 0