---
panlei
2019-07-03 b0fecafd3e44fa7919249e01e7f6446e1214d46a
ruleserver/ruleToformula.go
@@ -4,6 +4,7 @@
   "encoding/json"
   "fmt"
   "log"
   "os"
   "ruleprocess/cache"
   "sort"
   "strconv"
@@ -200,6 +201,7 @@
      }
      // 跑本摄像机的所有规则组 一组一组跑
      taskRuleList := GetRuleGroup(args.CameraId) // 本摄像机下所有任务组
      log.Println("------------------------------查看下全部规则:",taskRuleList)
      //log.Println("看下摄像机下的任务组:",taskRuleList)
      // 得到属于该摄像机的若干组任务的完整规则(跟每一条完整规则比较之后得出本张图像对于某个规则是否报警的结果。放进map,比如本帧图像的id,所碰撞成功的规则id)
      args.RuleResult = make(map[string]interface{})
@@ -215,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 +235,7 @@
      }
   }()
   log.Println("+++++++++++规则开始运行+++++++++++++++++当前规则--:",*groupRule)
   log.Println("+++++++++++规则开始运行+++++++++++++++++当前规则--:",(*groupRule).GroupText)
   resultSplice := []*LittleRuleResult{}
   // 先过完条件规则
   for j := 0; j < len(groupRule.Rules); j++ {
@@ -333,7 +335,7 @@
            }
         }
         if flag {
            fmt.Println("----------------------------终于走完万里长征")
            fmt.Println("___________________________________________________________________________终于走完万里长征")
            // 如果成功了我应该找到规则中涉及到的sdk,记录下他们的sdkname
            sdkName := ""
            for j := 0; j < len(groupRule.Rules); j++ {
@@ -445,7 +447,7 @@
}
// 联动任务的处理
func linkTask(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string) {
func LinkTask(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string) {
   // new一个定时器,如果以此groupId为标志的定时器不存在的话
   var flag bool = true
   var timeEle = TimeElement{N: 3, InitN: 3, GroupId: groupRule.GroupId}
@@ -459,7 +461,7 @@
      timeEle := TimeElement{N: 3, InitN: 3, GroupId: groupRule.GroupId} // 扔进去一个定时器元素
      //TimeEleList = make(map[string]timeElement)
      TimeEleList[groupRule.GroupId] = &timeEle // 定时器元素以规则组id为键
      fmt.Println("创建了计数器并且计数器集合为:", TimeEleList)
      fmt.Println("---------------------------------------------联动任务创建了计数器并且计数器集合为:", TimeEleList)
      // 得出这组完整规则里涉及到几个摄像机,决定着数组里有几个结构体,去重添加方式
      for j := 0; j < len(groupRule.Rules); j++ {
         var flag1 bool = true
@@ -503,16 +505,23 @@
            expression, _ := govaluate.NewEvaluableExpression(completeFormula)
            result, _ := expression.Evaluate(nil) // 得到数学公式的结果
            if result.(bool) {
               log.Println("___________________________________________________________________联动任务报警")
               sdkName := ""
               for j := 0; j < len(groupRule.Rules); j++ {
                  for _, sdkData := range args.Sdkdata {
                     if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo { // 只记录yolo符合规则的sdk
                        sdkName = sdkName + "," + sdkData.SdkName
                     if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo && !strings.Contains(sdkName,sdkData.SdkName) { // 只记录yolo符合规则的sdk 同时要避免重复拼接
                        sdkName = sdkData.SdkName + " "
                     }
                  }
               }
               // 过完规则后打个标签,告诉调用者本帧数据针对哪个任务哪组规则报警了
               args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText})
               if sdkName != "" {
                  args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText})
                  log.Println("-------------------yolo结果标签",args.RuleResult["yolo"].([]Result))
               }
               if args.RuleResult["face"] != nil {
                  log.Println("-------------------face结果标签",args.RuleResult["face"].([]Arg))
               }
               os.Exit(0)
            }
         }
      } else {