---
panlei
2019-07-18 b624035a9b6bbcd0b9d11503aa0b00815c61f38a
ruleserver/ruleToformula.go
@@ -105,24 +105,27 @@
         SdkDataFormat(args.CameraId, arg, cameraPolygons)
      }
      // 跑本摄像机的所有规则组 一组一组跑
      logger.Debug("当前摄像机执行的任务是:",message.Tasklab.Taskname)
      taskGroup := GetRuleGroup(args.CameraId, args.TaskId) // 本摄像机下所有任务组
      //logger.Println("看下摄像机下的任务组:",taskRuleList)
      // 得到属于该摄像机的若干组任务的完整规则(跟每一条完整规则比较之后得出本张图像对于某个规则是否报警的结果。放进map,比如本帧图像的id,所碰撞成功的规则id)
      args.RuleResult = make(map[string]interface{})
      args.RuleResult["yolo"] = []Result{}
      args.RuleResult["face"] = []Arg{}
      for _, group := range taskGroup.GroupRules {
         //logger.Println("------------------------------任务规则:",taskRule)
         taskId := taskGroup.TaskId
         //logger.Println("------------本组任务下的规则组的数量:",len(ruleList))
         temp := group.Rules // temp为一组完整规则 在此需要判断规则是否是联动规则
         if len(temp) > 0 {
            if group.SetType == "linkTask" {
               // groupId中含有link则为联动任务
               LinkTask(args, group, taskId, message)
            } else {
               // 独立任务的处理
               RunRule(args, group, taskId, message)
      if taskGroup != nil && len(taskGroup.GroupRules) > 0 {
         for _, group := range taskGroup.GroupRules {
            //logger.Println("------------------------------任务规则:",taskRule)
            taskId := taskGroup.TaskId
            //logger.Println("------------本组任务下的规则组的数量:",len(ruleList))
            temp := group.Rules // temp为一组完整规则 在此需要判断规则是否是联动规则
            if len(temp) > 0 {
               if group.SetType == "linkTask" {
                  // groupId中含有link则为联动任务
                  LinkTask(args, group, taskId, message)
               } else {
                  // 独立任务的处理
                  RunRule(args, group, taskId, message)
               }
            }
         }
      }
@@ -252,8 +255,8 @@
   }
   if completeFormula != "" {
      logger.Info("结果公式-----------:", completeFormula)
      expression, _ := govaluate.NewEvaluableExpression(completeFormula)
      if strings.HasPrefix(completeFormula, "&&") || strings.HasPrefix(completeFormula, "||") {
      expression, err := govaluate.NewEvaluableExpression(completeFormula)
      if strings.HasPrefix(completeFormula, "&&") || strings.HasPrefix(completeFormula, "||") || err != nil{
         panic("规则有误,得到的数学公式不可解析")
      }
      result, _ := expression.Evaluate(nil) // 得到数学公式的结果