---
panlei
2019-07-04 37e0cf80dde971cd10cf1d57377c7729b008881d
ruleserver/ruleToformula.go
@@ -201,7 +201,6 @@
      }
      // 跑本摄像机的所有规则组 一组一组跑
      taskRuleList := GetRuleGroup(args.CameraId) // 本摄像机下所有任务组
      log.Println("------------------------------查看下全部规则:",taskRuleList)
      //log.Println("看下摄像机下的任务组:",taskRuleList)
      // 得到属于该摄像机的若干组任务的完整规则(跟每一条完整规则比较之后得出本张图像对于某个规则是否报警的结果。放进map,比如本帧图像的id,所碰撞成功的规则id)
      args.RuleResult = make(map[string]interface{})
@@ -209,6 +208,7 @@
      args.RuleResult["face"] = []Arg{}
      if len(taskRuleList) > 0 {
         for _, taskRule := range taskRuleList {
            //log.Println("------------------------------任务规则:",taskRule)
            ruleList := taskRule.GroupRules // 获取的是task下面的任务组
            taskId := taskRule.TaskId
            //log.Println("------------本组任务下的规则组的数量:",len(ruleList))
@@ -217,7 +217,7 @@
               if len(temp) > 0 {
                  if ruleList[i].SetType == "linkTask" {
                     // groupId中含有link则为联动任务
                     LinkTask(args, ruleList[i], taskId)
                     //LinkTask(args, ruleList[i], taskId)
                  } else {
                     // 独立任务的处理
                     RunRule(args, ruleList[i], taskId)
@@ -233,7 +233,6 @@
      if err := recover(); err != nil {
         fmt.Println("比对规则有误", err.(string))
      }
   }()
   log.Println("+++++++++++规则开始运行+++++++++++++++++当前规则--:",(*groupRule).GroupText)
   resultSplice := []*LittleRuleResult{}
@@ -308,7 +307,7 @@
      completeFormula = completeFormula + va.Result
   }
   if completeFormula != "" {
      log.Println("看看公式-----------:", completeFormula)
      log.Println("结果公式-----------:", completeFormula)
      expression, _ := govaluate.NewEvaluableExpression(completeFormula)
      if strings.HasPrefix(completeFormula,"&&") || strings.HasPrefix(completeFormula,"||"){
         panic("规则有误,得到的数学公式不可解析")
@@ -449,6 +448,7 @@
// 联动任务的处理
func LinkTask(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string) {
   // new一个定时器,如果以此groupId为标志的定时器不存在的话
   log.Println("------------------------------------------当前是联动任务,规则是:",groupRule.GroupText)
   var flag bool = true
   var timeEle = TimeElement{N: 3, InitN: 3, GroupId: groupRule.GroupId}
   for k, timeEle1 := range TimeEleList {
@@ -501,6 +501,7 @@
         for _, va := range timeEle.RuleResults {
            completeFormula = completeFormula + va.RuleWithPre + "" + va.Result
         }
         log.Println("---------------------------联动任务的公式",completeFormula)
         if completeFormula != "" {
            expression, _ := govaluate.NewEvaluableExpression(completeFormula)
            result, _ := expression.Evaluate(nil) // 得到数学公式的结果
@@ -597,10 +598,13 @@
                     var formula string
                     if rule.SdkArgAlias == "score" {
                        formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 得到字符串公式
                        log.Println("当前相似度小公式:",formula)
                     } else if rule.SdkArgAlias == "proportion" {
                        formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 得到字符串公式
                        log.Println("当前占比小公式:",formula)
                     } else {
                        formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 得到字符串公式
                        log.Println("当前尺寸小公式:",formula)
                     }
                     expression, _ := govaluate.NewEvaluableExpression(formula) // 得到数学公式
                     result, _ := expression.Evaluate(nil)                      // 得到数学公式的结果
@@ -777,11 +781,13 @@
               }
            }
            if rule.Operator == "unsatisfy" || rule.Operator == "!="{ // 不满足所选的时间规则
               formula := timeSlot.Start + "<" + am.time
               formula := timeSlot.Start + " < " + am.time
               log.Println("-----------------时间规则不满足的公式start:",formula)
               expression, _ := govaluate.NewEvaluableExpression(formula) // 得到数学公式
               result, _ := expression.Evaluate(nil)                      // 得到数学公式的结果
               formula1 := timeSlot.End + ">" + am.time
               formula1 := timeSlot.End + " > " + am.time
               log.Println("-----------------时间规则不满足的公式end:",formula1)
               expression1, _ := govaluate.NewEvaluableExpression(formula1) // 得到数学公式
               result1, _ := expression1.Evaluate(nil)                      // 得到数学公式的结果
               if result.(bool) && result1.(bool) {