panlei
2019-09-20 fba572d554d849777ded0132a47dcf4c7e1950de
ruleserver/timeTicker.go
@@ -28,12 +28,10 @@
   Sort        int32     // 摄像机在规则组中序号
   Result      string    // 摄像机过滤数据得出的结果
   RuleWithPre string    // 摄像机之间的连接符
   CacheData   *ResultMsg // 缓存当前帧数据
   CacheData   ResultMsg // 缓存当前帧数据
}
func TimeTicker() {
   logger.Info("定时器执行了")
   fmt.Println("定时器执行了")
   ticker := time.NewTicker(1 * time.Second)
   go func(ticker *time.Ticker) {
      defer ticker.Stop()
@@ -43,6 +41,7 @@
            logger.Info("定时器执行单元", time.Now().Unix())
            fmt.Println("定时器执行单元", time.Now().Unix())
            // 每秒钟计数器池子里所有的计数器元素都减一,减到0的是该报警的
            rw.Lock()
            for k, timeEle := range TimeEleList {
               if timeEle.N > 0 {
                  timeEle.N = timeEle.N - 1
@@ -53,6 +52,7 @@
                  delete(TimeEleList, k)
               }
            }
            rw.Unlock()
         case stop := <-stopChan:
            if stop {
               logger.Info("定时器结束")
@@ -69,32 +69,33 @@
}
// 判断是否符合定时器条件
func TimerAlarm(args *SdkDatas, groupId string, result bool) (string) {
func TimerAlarm(oth *Others, groupId string, result bool) (string) {
   var flagTime string //
   // 判断有无此规则组的定时器
   flag := false
   rw.Lock()
   for k, _ := range TimeEleList {
      //logger.Debug("-----------------看看这个key和groupId", k, groupId)
      if strings.Contains(k, groupId) {
      if strings.Contains(k, groupId) && k != groupId{
         flag = true
      }
   }
   if flag { // 有定时器
      if result { // 结果为真
         for k, timeEle := range TimeEleList {
            if strings.Contains(k, groupId) {
            if strings.Contains(k, groupId) && k != groupId{
               if timeEle.N == 0 && timeEle.AlarmFlag {
                  logger.Debug("-------------------------符合持续时间规则但并不是首次,不报警")
                  flagTime = "11"
                  args.RuleResult["timeLabel"] = flagTime
                  oth.TimeLabel = flagTime
               }
               if timeEle.N == 0 && !timeEle.AlarmFlag { // 这组规则的定时器要全部等于0   暂且认为一组规则只有一个定时器
                  logger.Debug("———————————-------------首次符合持续时间规则并报警")
                  flagTime = "10"
                  timeEle.AlarmFlag = true
                  args.RuleResult["cacheData"] = []ResultMsg{}
                  args.RuleResult["cacheData"] = append(args.RuleResult["cacheData"].([]ResultMsg),timeEle.CacheSdkData)
                  args.RuleResult["timeLabel"] = flagTime
                  oth.CacheData = []ResultMsg{}
                  oth.CacheData = append(oth.CacheData,timeEle.CacheSdkData)
                  oth.TimeLabel = flagTime
               }
               if timeEle.N != 0 {
                  flagTime = "00"
@@ -106,19 +107,21 @@
         }
      } else { // 结果为假
         for k, timeEle := range TimeEleList {
            if strings.Contains(k, groupId) {
            if strings.Contains(k, groupId) && k != groupId{
               if timeEle.AlarmFlag {
                  if timeEle.BufferFlag == 0 {
                     logger.Debug("------------------------------杀死定时器,报警此帧状态改变的数据,此时的计数器的值为", timeEle.N)
                     flagTime = "12"
                     args.RuleResult["timeLabel"] = flagTime
                     oth.TimeLabel = flagTime
                     delete(TimeEleList, k)
                  } else {
                     if timeEle.BufferFlag > 0 {
                        logger.Debug("缓冲区减减")
                        timeEle.BufferFlag--
                     }
                  }
               } else {
                  logger.Debug("-----------结果为假且不到0,杀死定时器")
                  delete(TimeEleList, k)
               }
            }
@@ -127,11 +130,12 @@
   } else { // 无定时器
      if result {
         flagTime = "01"
         args.RuleResult["timeLabel"] = flagTime
         oth.TimeLabel = flagTime
      } else {
         flagTime = "00"
      }
   }
   rw.Unlock()
   return flagTime
}