---
panlei
2019-08-01 25559a9c7f590cb18a3ab18dd9734d6a3d219a48
---
2个文件已修改
69 ■■■■■ 已修改文件
ruleserver/ruleToformula.go 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruleserver/timeTicker.go 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruleserver/ruleToformula.go
@@ -88,9 +88,13 @@
    RuleText     string // 文字版规则组
    Location     []Rect // 目标的坐标
    AlarmPolygon string // 触发的报警框
    Others         map[string]interface{} // cacheData: []ResultMsg,(本组规则中含有持续时间的规则开启的定时器缓存的数据帧),linkCache: []ResultMsg ,timeLabel: 00,01,10,11,12
    Others
}
type Others struct {
    CacheData []ResultMsg //(本组规则中含有持续时间的规则开启的定时器缓存的数据帧)
    LinkCache []ResultMsg
    TimeLabel string
}
// 过规则库打上的标签
type FaceResult struct {
    Result
@@ -127,7 +131,7 @@
                taskId := taskGroup.TaskId
                //logger.Println("------------本组任务下的规则组的数量:",len(ruleList))
                temp := group.Rules // temp为一组完整规则 在此需要判断规则是否是联动规则
                label := make(map[string]interface{})
                label := Others{}
                if len(temp) > 0 {
                    if group.SetType != "linkTask" {
                        // 独立任务的处理
@@ -140,7 +144,7 @@
                taskId := taskGroup.TaskId
                //logger.Println("------------本组任务下的规则组的数量:",len(ruleList))
                temp := group.Rules // temp为一组完整规则 在此需要判断规则是否是联动规则
                label := make(map[string]interface{})
                label := Others{}
                if len(temp) > 0 {
                    if group.SetType == "linkTask" {
                        // groupId中含有link则为联动任务
@@ -152,7 +156,7 @@
    }
}
func RunRule(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string, message *protomsg.SdkMessage,label map[string]interface{}) bool {
func RunRule(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string, message *protomsg.SdkMessage,label Others) bool {
    defer func() {
        if err := recover(); err != nil {
            logger.Error("比对规则有误", err.(string))
@@ -296,7 +300,7 @@
                }
            }
            // 进行定时器的处理和判断
            timeFlag := TimerAlarm(label, groupRule.GroupId, result.(bool))
            timeFlag := TimerAlarm(&label, groupRule.GroupId, result.(bool))
            if timeFlag == "01" || timeFlag == "10" || timeFlag == "11" { // 没有定时器或者满足定时器条件
                // 打人脸标签和yolo标签
                // 最后成功报警才把符合条件的人脸数据塞进结果标签里
@@ -328,17 +332,13 @@
                        }
                    }
                }
                nihao := make(map[string]interface{})
                for k,v := range label{
                    nihao[k] = v
                }
                //logger.Debug("------locations的内容:", locations)
                if sdkNames != "" {
                    args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkNames, groupRule.GroupId,groupRule.DefenceState,groupRule.AlarmLevel, groupRule.GroupText, locations, polygonId,nihao})
                    args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkNames, groupRule.GroupId,groupRule.DefenceState,groupRule.AlarmLevel, groupRule.GroupText, locations, polygonId,label})
                    //logger.Info("-------------------yolo结果标签长度", len(args.RuleResult["yolo"].([]Result)))
                }
                if faceFlag {
                    args.RuleResult["face"] = append(args.RuleResult["face"].([]FaceResult), FaceResult{Result{taskId, sdkNames, groupRule.GroupId,groupRule.DefenceState,groupRule.AlarmLevel, groupRule.GroupText, []Rect{}, polygonId,nihao},faces})
                    args.RuleResult["face"] = append(args.RuleResult["face"].([]FaceResult), FaceResult{Result{taskId, sdkNames, groupRule.GroupId,groupRule.DefenceState,groupRule.AlarmLevel, groupRule.GroupText, []Rect{}, polygonId,label},faces})
                    //logger.Info("-------------------face结果标签", len(args.RuleResult["face"].([]FaceResult)))
                }
                return true
@@ -389,7 +389,7 @@
}
// 联动任务的处理
func LinkTask(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string, message *protomsg.SdkMessage,label map[string]interface{}) {
func LinkTask(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string, message *protomsg.SdkMessage,label Others) {
    // new一个定时器,如果以此groupId为标志的定时器不存在的话
    logger.Info("------------------------------------------当前是联动任务,规则是:", groupRule.GroupText)
    var flag bool = true
@@ -429,23 +429,10 @@
                va.Result = strconv.FormatBool(isOk)
                tempMap := make(map[string]interface{})
                for k,result := range args.RuleResult {
                    if k == "yolo" {
                        tempMap[k] = []Result{}
                        for _,res := range result.([]Result)  {
                            tempMap[k] = append(tempMap[k].([]Result),res)
                        }
                    }
                    if k == "face" {
                        tempMap[k] = []FaceResult{}
                        for _,res := range result.([]FaceResult)  {
                            tempMap[k] = append(tempMap[k].([]FaceResult),res)
                        }
                    }
                    tempMap[k] = result
                }
                for _,result := range args.RuleResult["yolo"].([]Result)  {
                    for k,_ := range result.Others  {
                        logger.Warn("放进联动缓存的键是",k)
                    }
                    logger.Warn("放进联动缓存的长度是",len(result.LinkCache))
                }
                va.CacheData = ResultMsg{message,tempMap}
                logger.Info("这个摄像机--", args.CameraId, "--被赋予了result", va.Result)
@@ -475,11 +462,11 @@
                if result.(bool) {
                    logger.Info("___________________________________________________________________联动任务报警")
                    // 把数组里缓存的数据取出来一起报警
                    label["linkCache"] = []ResultMsg{}
                    label.LinkCache = []ResultMsg{}
                    for _, ruleRes := range TimeEleList[groupRule.GroupId].RuleResults {
                        label["linkCache"] = append(label["linkCache"].([]ResultMsg),ruleRes.CacheData)
                        label.LinkCache = append(label.LinkCache,ruleRes.CacheData)
                    }
                    logger.Debug("联动任务缓存了几个数据",len(label["linkCache"].([]ResultMsg)))
                    logger.Debug("联动任务缓存了几个数据",len(label.LinkCache))
                    //for _,result := range args.RuleResult["yolo"].([]Result) {
                    //    if result.RuleGroupId == groupRule.GroupId {
                    //        result.Others["linkCache"] = label
@@ -487,11 +474,7 @@
                    //}
                    for i := 0; i < len(args.RuleResult["yolo"].([]Result)); i++  {
                        if args.RuleResult["yolo"].([]Result)[i].RuleGroupId == groupRule.GroupId { // 把原来那个删掉再存一份新的
                            args.RuleResult["yolo"].([]Result)[i].Others["linkCache"] = label["linkCache"]
                            //res := args.RuleResult["yolo"].([]Result)[i]
                            //res.Others["linkCache"] = label["linkCache"]
                            //args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result)[:i],args.RuleResult["yolo"].([]Result)[i+1:]...)
                            //args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result),res)
                            args.RuleResult["yolo"].([]Result)[i].Others.LinkCache = label.LinkCache
                        }
                    }
                }
ruleserver/timeTicker.go
@@ -69,7 +69,7 @@
}
// 判断是否符合定时器条件
func TimerAlarm(args map[string]interface{}, groupId string, result bool) (string) {
func TimerAlarm(oth *Others, groupId string, result bool) (string) {
    var flagTime string //
    // 判断有无此规则组的定时器
    flag := false
@@ -86,15 +86,15 @@
                    if timeEle.N == 0 && timeEle.AlarmFlag {
                        logger.Debug("-------------------------符合持续时间规则但并不是首次,不报警")
                        flagTime = "11"
                        args["timeLabel"] = flagTime
                        oth.TimeLabel = flagTime
                    }
                    if timeEle.N == 0 && !timeEle.AlarmFlag { // 这组规则的定时器要全部等于0   暂且认为一组规则只有一个定时器
                        logger.Debug("———————————-------------首次符合持续时间规则并报警")
                        flagTime = "10"
                        timeEle.AlarmFlag = true
                        args["cacheData"] = []ResultMsg{}
                        args["cacheData"] = append(args["cacheData"].([]ResultMsg),timeEle.CacheSdkData)
                        args["timeLabel"] = flagTime
                        oth.CacheData = []ResultMsg{}
                        oth.CacheData = append(oth.CacheData,timeEle.CacheSdkData)
                        oth.TimeLabel = flagTime
                    }
                    if timeEle.N != 0 {
                        flagTime = "00"
@@ -111,7 +111,7 @@
                        if timeEle.BufferFlag == 0 {
                            logger.Debug("------------------------------杀死定时器,报警此帧状态改变的数据,此时的计数器的值为", timeEle.N)
                            flagTime = "12"
                            args["timeLabel"] = flagTime
                            oth.TimeLabel = flagTime
                            delete(TimeEleList, k)
                        } else {
                            if timeEle.BufferFlag > 0 {
@@ -127,7 +127,7 @@
    } else { // 无定时器
        if result {
            flagTime = "01"
            args["timeLabel"] = flagTime
            oth.TimeLabel = flagTime
        } else {
            flagTime = "00"
        }