panlei
2019-07-13 59ec1051feb6cbff1e4b2937939213f8620a4f14
定时器位置变更
1个文件已修改
56 ■■■■■ 已修改文件
ruleserver/ruleToformula.go 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruleserver/ruleToformula.go
@@ -2,6 +2,7 @@
import (
    "encoding/json"
    "fmt"
    "ruleprocess/cache"
    "ruleprocess/logger"
    "sort"
@@ -406,22 +407,7 @@
            }
        }
    }
    // 最后过持续时间等时间维度的条件
    for j := 0; j < len(groupRule.Rules); j++ {
        for _, sdkData := range args.Sdkdata {
            sdk, err := cache.GetSdkById(groupRule.Rules[j].SdkId)
            if err != nil {
                logger.Error("没查到sdk的信息---", err)
            }
            ipcId := sdk.IpcId
            if ipcId == sdkData.IpcId {
                for _, areaMap := range sdkData.AreaMapList {
                    // 去开启一个定时器
                    duration(groupRule.Rules[j], groupRule.GroupId, areaMap, args,message)
                }
            }
        }
    }
    // 将数组按sort排序
    sort.Sort(resultList(resultSplice))
    // 排序后取各自的结果和连接符拼出规则表达式得出结果
@@ -449,9 +435,8 @@
            panic("规则有误,得到的数学公式不可解析")
        }
        result, _ := expression.Evaluate(nil) // 得到数学公式的结果
        // 进行定时器的处理和判断
        timeFlag := TimerAlarm(args,groupRule.GroupId,result.(bool))
        if timeFlag == "01" || timeFlag == "10" || timeFlag == "11" {
        if result.(bool) {
            // 最后成功报警才把符合条件的人脸数据塞进结果标签里
            // 配了人脸的算法才把人脸的数据甩出来打标签
            faces := []Arg{}
@@ -489,14 +474,33 @@
            if args.RuleResult["face"] != nil {
                logger.Info("-------------------face结果标签", len(args.RuleResult["face"].([]Arg)))
            }
            // 给定时器里缓存的那帧数据赋结果标签
            for k, timeEle := range TimeEleList {
                if strings.Contains(k, groupRule.GroupId) {
                    timeEle.CacheSdkData.RuleResult = args.RuleResult
            // 最后过持续时间等时间维度的条件   把时间规则位置调整到这个位置是为了缓存数据
            for j := 0; j < len(groupRule.Rules); j++ {
                for _, sdkData := range args.Sdkdata {
                    sdk, err := cache.GetSdkById(groupRule.Rules[j].SdkId)
                    if err != nil {
                        logger.Error("没查到sdk的信息---", err)
                    }
                    ipcId := sdk.IpcId
                    if ipcId == sdkData.IpcId {
                        for _, areaMap := range sdkData.AreaMapList {
                            // 去开启一个定时器
                            duration(groupRule.Rules[j], groupRule.GroupId, areaMap, args,message)
                        }
                    }
                }
            }
            return true
            // 进行定时器的处理和判断
            timeFlag := TimerAlarm(args,groupRule.GroupId,result.(bool))
            if timeFlag == "01" || timeFlag == "10" || timeFlag == "11" { // 满足定时器条件
                return true
            } else {
                return false
            }
        } else {
            // 结果为假时也要走,有时候为假的状态反转数据也需要记录下来
            timeFlag := TimerAlarm(args,groupRule.GroupId,result.(bool))
            fmt.Println(timeFlag)
            return false
        }
    } else {
@@ -532,6 +536,8 @@
                    }
                    if timeEle.N != 0 {
                        flagTime = "00"
                        // 有定时器但不为0把已打的标签删除
                        args.RuleResult = nil
                        logger.Debug("------------------------结果为真但计数器不到0,不报警,此时的计数器的值为:",timeEle.N)
                    }
                }
@@ -879,7 +885,7 @@
            if flag {
                timeLength, _ := strconv.Atoi(rule.SdkArgValue)
                timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false, CacheSdkData: ResultMsg{message,nil}} // 扔进去一个定时器元素(并缓存当前画面帧数据)
                timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false, CacheSdkData: ResultMsg{message,args.RuleResult}} // 扔进去一个定时器元素(并缓存当前画面帧数据)
                //TimeEleList = make(map[string]timeElement)
                TimeEleList[groupId+" "+rule.Id] = &timeEle // 定时器元素以摄像机id拼接区域id为键
                logger.Info("创建了计数器并且计数器集合为:", TimeEleList)