panlei
2019-12-17 eb6f08d1eea2430383ad486eca9d3a509db344bf
labelFilter/ruleForLabel.go
@@ -6,18 +6,11 @@
   "basic.com/valib/logger.git"
   "github.com/golang/protobuf/proto"
   "github.com/knetic/govaluate"
<<<<<<< HEAD
   "ruleprocess/logger"
=======
>>>>>>> master
   "ruleprocess/structure"
   "strconv"
   "time"
)
<<<<<<< HEAD
func Judge(msg structure.ResultMsg) {
=======
func PushSomthing(msg structure.ResultMsg) {
   defer func() {
      if err := recover(); err != nil {
@@ -25,7 +18,6 @@
      }
   }()
   start := time.Now()
>>>>>>> master
   // 装配成自己可以识别的数据
   label := new(Label)
   label.DataFormatToLabel(msg)
@@ -168,7 +160,7 @@
func baseJudge(label *Label, rule *protomsg.EventPushRule) string {
   if rule.RuleValue == "all" {
      for _, personGroup := range label.Persons {
         for _, arg := range personGroup.Args {
         for _, arg := range personGroup.AlarmObj {
            if len(arg.Liker) > 0 {
               logger.Info("满足全部底库规则")
               return "true"
@@ -178,7 +170,7 @@
      return "false"
   } else {
      for _, personGroup := range label.Persons {
         for _, arg := range personGroup.Args {
         for _, arg := range personGroup.AlarmObj {
            for _, liker := range arg.Liker {
               formula := "'" + liker.TableId + "'" + rule.Operator + "'" + rule.RuleValue + "'"
               expression, err := govaluate.NewEvaluableExpression(formula);
@@ -207,7 +199,7 @@
//是否符合人员规则
func personJudge(label *Label, rule *protomsg.EventPushRule) string {
   for _, personGroup := range label.Persons {
      for _, person := range personGroup.Args {
      for _, person := range personGroup.AlarmObj {
         formula := ""
         if rule.TopicArg == "sex" {
            formula = strconv.Itoa(int(person.ThftRes.Gender)) + rule.Operator + rule.RuleValue
@@ -240,7 +232,7 @@
      }
      if rule.TopicArg == "monitorLevel" {
         if rule.RuleValue == "all" {
            if len(personGroup.Args) > 0 {
            if len(personGroup.AlarmObj) > 0 {
               logger.Info("符合人员等级为全部的规则")
               return "true"
            }
@@ -274,10 +266,10 @@
func defenceJudge(label *Label, rule *protomsg.EventPushRule) string {
   if rule.RuleValue == "all" { // 布防等级为全部时只有有布防等级即为通过
      if len(label.DefenceLevel) > 0 {
         logger.Info("符合布防等级规则,布防等级为全部")
         //logger.Info("符合布防等级规则,布防等级为全部")
         return "true"
      } else {
         logger.Info("不符合布防等级规则")
         //logger.Info("不符合布防等级规则")
         return "false"
      }
   } else {
@@ -295,11 +287,11 @@
            //return "false"
         }
         if result.(bool) {
            logger.Info("符合布防等级规则!")
            //logger.Info("符合布防等级规则!")
            return "true"
         }
      }
      logger.Info("不符合布防等级规则")
      //logger.Info("不符合布防等级规则")
      return "false"
   }
}
@@ -319,26 +311,24 @@
      return "false"
   }
   if result.(bool) {
      logger.Info("符合任务规则!")
      //logger.Info("符合任务规则!")
      return "true"
   }
   logger.Info("不符合任务规则")
   //logger.Info("不符合任务规则")
   return "false"
}
// 调用目标服务器的插入接口
func pushData(urls []*protomsg.PushUrl, data structure.ResultMsg) {
   for _, url := range urls {
      logger.Debug("看看推送地址:",url.Url)
      //logger.Debug("推送地址:",url.Url)
      bytes,err1 := proto.Marshal(data)
      if err1 != nil {
         logger.Info("序列化失败:",err1)
      }
      if _, ok := urlPool[url.Url] ; ok {
         urlPool[url.Url] <- bytes
         logger.Info("chan信息而: ", urlPool[url.Url])
      }
      logger.Info("chan信息以: ", urlPool[url.Url])
   }