panlei
2019-07-11 69a44e03958e215b6d90b89576f79ac445c01355
ruleserver/ruleToformula.go
@@ -266,7 +266,7 @@
                              if err1 != nil {
                                 logger.Error("查询底库人员信息出错", err1)
                              }
                              baseinfo.CompareScore = val
                              baseinfo.CompareScore = val * 100
                              arg.Liker = append(arg.Liker, &baseinfo)
                           }
                        }
@@ -304,7 +304,7 @@
         logger.Error("比对规则有误", err.(string))
      }
   }()
   logger.Info("+++++++++++规则开始运行+++++++++++++++++当前规则--:", *groupRule)
   logger.Info("+++++++++++规则开始运行+++++++++++++++++当前大规则--:", *groupRule)
   Compare(args, groupRule)
   resultSplice := []*LittleRuleResult{}
   sdkNames := ""
@@ -393,7 +393,8 @@
         ipcId := sdk.IpcId
         if ipcId == sdkData.IpcId {
            for _, areaMap := range sdkData.AreaMapList {
               duration(groupRule.Rules[j], &areaMap, args)
               // 去开启一个定时器
               duration(groupRule.Rules[j], groupRule.GroupId, &areaMap, args)
            }
         }
      }
@@ -429,7 +430,7 @@
         // 给这帧数据打上规则组标签
         //args.RuleResult = append(args.RuleResult, Result{TaskId: taskId, RuleGroupId: groupRule.GroupId})
         for k, timeEle := range TimeEleList {
            if strings.Contains(k, taskId) {
            if strings.Contains(k, groupRule.GroupId) {
               timeEle.N = timeEle.InitN // 重置定时器
            }
         }
@@ -438,16 +439,15 @@
      } else {
         // 判断持续时间条件,去看池子里是否有与本帧数据有关的定时器,如果有,看此时是否走到0,没有此定时器或有定时器走到0的话返回成功报警
         var flag bool = true
         logger.Info("flag 是:",flag)
         for k, timeEle := range TimeEleList {
            if strings.Contains(k, taskId) {
               if timeEle.N != 0 { // 跟这个任务有关的定时器要全部等于0
            if strings.Contains(k, groupRule.GroupId) {
               if timeEle.N != 0 { // 这组规则的定时器要全部等于0
                  logger.Info("———————————-------------不冤,你是被定时器打败的:")
                  flag = false
               }
            }
         }
         if true {
         if flag {
            // 最后成功报警才把符合条件的人脸数据塞进结果标签里
            // 配了人脸的算法才把人脸的数据甩出来打标签
            logger.Info("------------------------------最后一关")
@@ -493,6 +493,23 @@
   } else {
      return false
   }
}
func TimerAlarm(groupId string) (int){
   var flagTime int = 0
   for k, timeEle := range TimeEleList {
      if strings.Contains(k, groupId) {
         if timeEle.N == 0 && !timeEle.AlarmFlag { // 这组规则的定时器要全部等于0   暂且认为一组规则只有一个定时器
            logger.Info("———————————-------------首次符合持续时间规则并报警")
            flagTime = 1
            timeEle.AlarmFlag = true
         }
         if timeEle.N == 0 && timeEle.AlarmFlag {
            logger.Info("-------------------------符合持续时间规则但并不是首次,不报警")
            flagTime = 2
         }
      }
   }
   return flagTime
}
func putFaceToResult(am *AreaMap) []Arg {
@@ -797,14 +814,14 @@
   }
}
// 都过滤完条件之后看看是否满足持续时间条件
func duration(rule *protomsg.Rule, am *AreaMap, args *SdkDatas) {
// 如果有持续时间条件维护开启一个定时器
func duration(rule *protomsg.Rule, groupId string, am *AreaMap, args *SdkDatas) {
   if rule.PolygonId == am.areaId { // 首先规则所对应的区域id要跟区域数据的id对的上  配置的算法要对的上
      if rule.SdkArgAlias == "duration" { //
         // 先看看定时器元素队列中是否有这个摄像机这个区域的定时器,如果有就不能再次创建了
         var flag bool = true
         for k,_ := range TimeEleList {
            if k == am.taskId+" "+am.sdkId+" "+am.areaId {
            if k == groupId+" "+rule.Id {
               flag = false // 有就置为false
               logger.Info("有这个定时器,不再创建了:")
            }
@@ -812,9 +829,9 @@
         if flag {
            timeLength, _ := strconv.Atoi(rule.SdkArgValue)
            timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false, CacheSdkData: *args} // 扔进去一个定时器元素
            timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false, CacheSdkData: *args} // 扔进去一个定时器元素(并缓存当前画面帧数据)
            //TimeEleList = make(map[string]timeElement)
            TimeEleList[am.taskId+" "+am.sdkId+" "+am.areaId] = &timeEle // 定时器元素以摄像机id拼接区域id为键
            TimeEleList[groupId+" "+rule.Id] = &timeEle // 定时器元素以摄像机id拼接区域id为键
            logger.Info("创建了计数器并且计数器集合为:", TimeEleList)
         }
      }