panlei
2019-07-15 6778d033d1659069119cd0fb7fc5947b29c1cd5e
ruleserver/ruleToformula.go
@@ -2,6 +2,7 @@
import (
   "encoding/json"
   "fmt"
   "ruleprocess/cache"
   "ruleprocess/logger"
   "sort"
@@ -406,22 +407,7 @@
         }
      }
   }
   // 最后过持续时间等时间维度的条件
   for j := 0; j < len(groupRule.Rules); j++ {
      for _, sdkData := range args.Sdkdata {
         sdk, err := cache.GetSdkById(groupRule.Rules[j].SdkId)
         if err != nil {
            logger.Error("没查到sdk的信息---", err)
         }
         ipcId := sdk.IpcId
         if ipcId == sdkData.IpcId {
            for _, areaMap := range sdkData.AreaMapList {
               // 去开启一个定时器
               duration(groupRule.Rules[j], groupRule.GroupId, areaMap, args,message)
            }
         }
      }
   }
   // 将数组按sort排序
   sort.Sort(resultList(resultSplice))
   // 排序后取各自的结果和连接符拼出规则表达式得出结果
@@ -449,9 +435,8 @@
         panic("规则有误,得到的数学公式不可解析")
      }
      result, _ := expression.Evaluate(nil) // 得到数学公式的结果
      // 进行定时器的处理和判断
      timeFlag := TimerAlarm(args,groupRule.GroupId,result.(bool))
      if timeFlag == "01" || timeFlag == "10" || timeFlag == "11" {
      if result.(bool) {
         // 最后成功报警才把符合条件的人脸数据塞进结果标签里
         // 配了人脸的算法才把人脸的数据甩出来打标签
         faces := []Arg{}
@@ -489,8 +474,33 @@
         if args.RuleResult["face"] != nil {
            logger.Info("-------------------face结果标签", len(args.RuleResult["face"].([]Arg)))
         }
         return true
         // 最后过持续时间等时间维度的条件   把时间规则位置调整到这个位置是为了缓存数据
         for j := 0; j < len(groupRule.Rules); j++ {
            for _, sdkData := range args.Sdkdata {
               sdk, err := cache.GetSdkById(groupRule.Rules[j].SdkId)
               if err != nil {
                  logger.Error("没查到sdk的信息---", err)
               }
               ipcId := sdk.IpcId
               if ipcId == sdkData.IpcId {
                  for _, areaMap := range sdkData.AreaMapList {
                     // 去开启一个定时器
                     duration(groupRule.Rules[j], groupRule.GroupId, areaMap, args,message)
                  }
               }
            }
         }
         // 进行定时器的处理和判断
         timeFlag := TimerAlarm(args,groupRule.GroupId,result.(bool))
         if timeFlag == "01" || timeFlag == "10" || timeFlag == "11" { // 满足定时器条件
            return true
         } else {
            return false
         }
      } else {
         // 结果为假时也要走,有时候为假的状态反转数据也需要记录下来
         timeFlag := TimerAlarm(args,groupRule.GroupId,result.(bool))
         fmt.Println(timeFlag)
         return false
      }
   } else {
@@ -526,6 +536,8 @@
               }
               if timeEle.N != 0 {
                  flagTime = "00"
                  // 有定时器但不为0把已打的标签删除
                  args.RuleResult = nil
                  logger.Debug("------------------------结果为真但计数器不到0,不报警,此时的计数器的值为:",timeEle.N)
               }
            }
@@ -534,10 +546,16 @@
         for k, timeEle := range TimeEleList {
            if strings.Contains(k, groupId) {
               if timeEle.AlarmFlag {
                  logger.Debug("------------------------------杀死定时器,报警此帧状态改变的数据,此时的计数器的值为",timeEle.N)
                  flagTime = "12"
                  args.RuleResult["timeLabel"] = flagTime
                  delete(TimeEleList,k)
                  if timeEle.BufferFlag == 0 {
                     logger.Debug("------------------------------杀死定时器,报警此帧状态改变的数据,此时的计数器的值为",timeEle.N)
                     flagTime = "12"
                     args.RuleResult["timeLabel"] = flagTime
                     delete(TimeEleList,k)
                  } else {
                     if timeEle.BufferFlag > 0 {
                        timeEle.BufferFlag--
                     }
                  }
               } else {
                  delete(TimeEleList,k)
               }
@@ -610,7 +628,7 @@
// 将字符串格式的坐标序列化为Point格式
func Json2points(areaPoints string) []Point {
   var pts []Point
   if areaPoints == "[]" {
   if areaPoints == "[]" || areaPoints == ""{
      logger.Error("=====================此区域为全部区域")
      pts = append(pts, Point{0, 0})
      pts = append(pts, Point{0, 540})
@@ -873,7 +891,7 @@
         if flag {
            timeLength, _ := strconv.Atoi(rule.SdkArgValue)
            timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false, CacheSdkData: &ResultMsg{message,args.RuleResult}} // 扔进去一个定时器元素(并缓存当前画面帧数据)
            timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false,BufferFlag:10, CacheSdkData: ResultMsg{message,args.RuleResult}} // 扔进去一个定时器元素(并缓存当前画面帧数据)
            //TimeEleList = make(map[string]timeElement)
            TimeEleList[groupId+" "+rule.Id] = &timeEle // 定时器元素以摄像机id拼接区域id为键
            logger.Info("创建了计数器并且计数器集合为:", TimeEleList)