| | |
| | | } |
| | | type RuleResult struct { |
| | | // 每个摄像机一个结构体 |
| | | CameraId string // 摄像机id |
| | | Sort int32 // 摄像机在规则组中序号 |
| | | Result string // 摄像机过滤数据得出的结果 |
| | | RuleWithPre string // 摄像机之间的连接符 |
| | | CameraId string // 摄像机id |
| | | Sort int32 // 摄像机在规则组中序号 |
| | | Result string // 摄像机过滤数据得出的结果 |
| | | RuleWithPre string // 摄像机之间的连接符 |
| | | CacheData ResultMsg // 缓存当前帧数据 |
| | | } |
| | | |
| | | func TimeTicker() { |
| | |
| | | } |
| | | |
| | | // 判断是否符合定时器条件 |
| | | func TimerAlarm(args *SdkDatas, groupId string, result bool) (string) { |
| | | func TimerAlarm(args map[string]interface{}, groupId string, result bool) (string) { |
| | | var flagTime string // |
| | | // 判断有无此规则组的定时器 |
| | | flag := false |
| | | for k, _ := range TimeEleList { |
| | | logger.Debug("-----------------看看这个key和groupId", k, groupId) |
| | | if strings.Contains(k, groupId) { |
| | | //logger.Debug("-----------------看看这个key和groupId", k, groupId) |
| | | if strings.Contains(k, groupId) && k != groupId{ |
| | | flag = true |
| | | } |
| | | } |
| | | if flag { // 有定时器 |
| | | if result { // 结果为真 |
| | | for k, timeEle := range TimeEleList { |
| | | if strings.Contains(k, groupId) { |
| | | if strings.Contains(k, groupId) && k != groupId{ |
| | | if timeEle.N == 0 && timeEle.AlarmFlag { |
| | | logger.Debug("-------------------------符合持续时间规则但并不是首次,不报警") |
| | | flagTime = "11" |
| | | args.RuleResult["timeLabel"] = flagTime |
| | | args["timeLabel"] = flagTime |
| | | } |
| | | if timeEle.N == 0 && !timeEle.AlarmFlag { // 这组规则的定时器要全部等于0 暂且认为一组规则只有一个定时器 |
| | | logger.Debug("———————————-------------首次符合持续时间规则并报警") |
| | | flagTime = "10" |
| | | timeEle.AlarmFlag = true |
| | | args.RuleResult["cacheData"] = timeEle.CacheSdkData |
| | | args.RuleResult["timeLabel"] = flagTime |
| | | args["cacheData"] = []ResultMsg{} |
| | | args["cacheData"] = append(args["cacheData"].([]ResultMsg),timeEle.CacheSdkData) |
| | | args["timeLabel"] = flagTime |
| | | } |
| | | if timeEle.N != 0 { |
| | | flagTime = "00" |
| | | // 有定时器但不为0把已打的标签删除 |
| | | // args.RuleResult = nil |
| | | logger.Debug("------------------------结果为真但计数器不到0,不报警,此时的计数器的值为:", timeEle.N) |
| | | logger.Debug("------------------------结果为真但计数器不到0,不报警,此时的计数器", k, "的值为:", timeEle.N) |
| | | } |
| | | } |
| | | } |
| | | } else { // 结果为假 |
| | | for k, timeEle := range TimeEleList { |
| | | if strings.Contains(k, groupId) { |
| | | if strings.Contains(k, groupId) && k != groupId{ |
| | | if timeEle.AlarmFlag { |
| | | if timeEle.BufferFlag == 0 { |
| | | logger.Debug("------------------------------杀死定时器,报警此帧状态改变的数据,此时的计数器的值为", timeEle.N) |
| | | flagTime = "12" |
| | | args.RuleResult["timeLabel"] = flagTime |
| | | args["timeLabel"] = flagTime |
| | | delete(TimeEleList, k) |
| | | } else { |
| | | if timeEle.BufferFlag > 0 { |
| | |
| | | } else { // 无定时器 |
| | | if result { |
| | | flagTime = "01" |
| | | args.RuleResult["timeLabel"] = flagTime |
| | | args["timeLabel"] = flagTime |
| | | } else { |
| | | flagTime = "00" |
| | | } |