panlei
2019-07-30 0654d8d0f204a79132fed811a127db2e3ee34e1b
ruleserver/ruleToformula.go
@@ -84,6 +84,7 @@
   TaskId       string // 任务id
   SdkName      string
   RuleGroupId  string // 规则组id
   DefenceState bool   //是否布防
   AlarmLevel   int32  // 报警等级
   RuleText     string // 文字版规则组
   Location     []Rect // 目标的坐标
@@ -118,6 +119,7 @@
      args.RuleResult = make(map[string]interface{})
      args.RuleResult["yolo"] = []Result{}
      args.RuleResult["face"] = []FaceResult{}
      logger.Warn("传进去之前是什么德行:",args.RuleResult["yolo"])
      if taskGroup != nil && len(taskGroup.GroupRules) > 0 {
         for _, group := range taskGroup.GroupRules {
            //logger.Println("------------------------------任务规则:",taskRule)
@@ -145,6 +147,7 @@
      }
   }()
   logger.Info("+++++++++++规则开始运行+++++++++++++++++当前大规则--:", *groupRule)
   logger.Warn("传进去之后是什么德行:",args.RuleResult["yolo"])
   Compare(args, groupRule)
   resultSplice := []*LittleRuleResult{}
   sdkNames := ""
@@ -276,9 +279,12 @@
         for _, sdkData := range args.Sdkdata {
            if sdkData.IpcId == "A8B73405-373D-4F23-CED2-A617EBD7EC55" && faceFlag { // sdkData里有人脸数据且配置了算法才把符合条件的数据塞进标签里去
               for _, areaMap := range sdkData.AreaMapList {
                  faces = append(faces, putFaceToResult(areaMap)...)
                  faces = append(faces, putFaceToResult(areaMap,faces)...)
               }
            }
         }
         for _,face := range faces  {
            logger.Debug("————————————————________________看看人脸的坐标:",face.Location)
         }
         logger.Warn("___________________________________________________________________________终于走完万里长征")
         // 把他们的位置数据也传下去
@@ -292,11 +298,11 @@
         }
         logger.Debug("------locations的内容:", locations)
         if sdkNames != "" {
            args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkNames, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, locations, polygonId})
            logger.Info("-------------------yolo结果标签长度", len(args.RuleResult["yolo"].([]Result)))
            args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkNames, groupRule.GroupId,groupRule.DefenceState,groupRule.AlarmLevel, groupRule.GroupText, locations, polygonId})
            //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.AlarmLevel, groupRule.GroupText, []Rect{}, polygonId},faces})
            args.RuleResult["face"] = append(args.RuleResult["face"].([]FaceResult), FaceResult{Result{taskId, sdkNames, groupRule.GroupId,groupRule.DefenceState,groupRule.AlarmLevel, groupRule.GroupText, []Rect{}, polygonId},faces})
            logger.Info("-------------------face结果标签", len(args.RuleResult["face"].([]FaceResult)))
         }
         // 最后过持续时间等时间维度的条件   把时间规则位置调整到这个位置是为了缓存数据
@@ -333,11 +339,19 @@
   }
}
func putFaceToResult(am *AreaMap) []Arg {
func putFaceToResult(am *AreaMap,faceList []Arg) []Arg {
   faces := []Arg{}
   if len(am.filterData) > 0 {
      for _, data := range am.filterData {
         faces = append(faces, *data)
         flag := true
         for _,face := range faceList  {
            if data.Location.X == face.Location.X && data.Location.Y == face.Location.Y && data.Location.Width == face.Location.Width && data.Location.Height == face.Location.Height {
               flag = false
            }
         }
         if flag {
            faces = append(faces, *data)
         }
      }
   }
@@ -420,10 +434,10 @@
            result, _ := expression.Evaluate(nil) // 得到数学公式的结果
            if result.(bool) {
               logger.Info("___________________________________________________________________联动任务报警")
               args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, "", groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, []Rect{}, ""})
               args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, "", groupRule.GroupId, groupRule.DefenceState,groupRule.AlarmLevel, groupRule.GroupText, []Rect{}, ""})
               logger.Info("-------------------yolo结果标签有几个", len(args.RuleResult["yolo"].([]Result)))
               if args.RuleResult["face"] != nil {
                  logger.Info("-------------------face结果标签有几个", len(args.RuleResult["face"].([]Arg)))
                  logger.Info("-------------------face结果标签有几个", len(args.RuleResult["face"].([]FaceResult)))
               }
               //os.Exit(0)
            }
@@ -477,8 +491,10 @@
                  var args []*Arg
                  if rule.RuleWithPre == "&&" {
                     args = am.filterData
                     logger.Info("过滤后的args的长度为:",len(args))
                  } else {
                     args = am.args
                     logger.Info("没过滤的args的长度为:",len(args))
                  }
                  // 先清空过滤后的数据,再往里塞本次过滤后的数据
                  am.filterData = am.filterData[0:0]