From 11082e25407ea22361c54787f84d1c1a88a93301 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期一, 04 十一月 2019 11:32:29 +0800
Subject: [PATCH] 测事件推送所用事件

---
 labelFilter/ruleForLabel.go |  218 ++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 137 insertions(+), 81 deletions(-)

diff --git a/labelFilter/ruleForLabel.go b/labelFilter/ruleForLabel.go
index 6c5acfa..b4c0b32 100644
--- a/labelFilter/ruleForLabel.go
+++ b/labelFilter/ruleForLabel.go
@@ -3,35 +3,45 @@
 import (
 	"basic.com/dbapi.git"
 	"basic.com/pubsub/protomsg.git"
+	"basic.com/valib/logger.git"
+	"github.com/golang/protobuf/proto"
 	"github.com/knetic/govaluate"
-	"os"
-	"ruleprocess/logger"
-	"ruleprocess/ruleserver"
+	"ruleprocess/structure"
 	"strconv"
 	"time"
 )
 
-func Judge(result ruleserver.ResultMsg){
+func PushSomthing(msg structure.ResultMsg) {
+	defer func() {
+		if err := recover(); err != nil {
+			logger.Error("浜嬩欢鎺ㄩ�佹ā鍧楀効鐨勫紓甯告崟鑾凤細",err)
+		}
+	}()
+
 	// 瑁呴厤鎴愯嚜宸卞彲浠ヨ瘑鍒殑鏁版嵁
 	label := new(Label)
-	label.DataFormatToLabel(result)
-	logger.Info("label鐨勪俊鎭細",label.CameraName,label.DefenceLevel,label.Time)
+	label.DataFormatToLabel(msg)
+	logger.Info("label鐨勪俊鎭細", label.CameraName, label.DefenceLevel, label.Time)
 	if label.CameraName == "" {
 		logger.Error("鏃犳晥鏁版嵁锛岀洿鎺ヨ繑鍥�")
 		return
 	}
 	//鎷垮埌鎵�鏈夎鍒欑粍
 	var api dbapi.EventPushApi
-	b,allRules := api.FindAllDetails()
-	logger.Info("鏌ョ湅鎵�鏈夎鍒欑粍锛�",allRules)
+	b, allRules := api.FindAllDetails()
+	logger.Info("鏌ョ湅鎵�鏈夎鍒欑粍锛�", allRules)
 	if !b {
 		logger.Error("鏌ヨ鏃堕棿鎺ㄩ�佽鍒欏け璐ワ紒")
 	}
 	//閬嶅巻鎵�鏈夌殑瑙勫垯缁勶紝鐪嬬湅绗﹀悎鍝釜瑙勫垯缁勶紝灏辨妸鏁版嵁鎻掑叆鍒板摢涓鍒欑粍鐨勭洰鏍囨満鍣ㄤ笂
-	for _,ruleGroup := range allRules {
-		if ruleGroup.Enable {  // 澶ц鍒欏紑鍏冲紑鍚姸鎬�
+	for _, ruleGroup := range allRules {
+		if ruleGroup.Enable { // 澶ц鍒欏紑鍏冲紑鍚姸鎬�
 			// 鍏堣繃鏃堕棿瑙勫垯
-			timeJudge(label,ruleGroup)
+			timeFlag := timeJudge(label, ruleGroup)
+			if !timeFlag {
+				logger.Info("涓嶅湪瑙勫垯鐨勬椂闂磋寖鍥村唴锛屼笉鎺ㄩ�侊紒")
+				continue
+			}
 			result := ""
 			var Connector string
 			if ruleGroup.IsSatisfyAll {
@@ -39,44 +49,45 @@
 			} else {
 				Connector = "||"
 			}
-			for _,rule := range ruleGroup.Rules {
+			for _, rule := range ruleGroup.Rules {
 				// 杩囨瘡涓�涓皬瑙勫垯
 				if rule.TopicType == "camera" {
-					result = Connector + cameraJudge(label,rule)
+					result += Connector + cameraJudge(label, rule)
 				}
 				if rule.TopicType == "dbtable" {
-					result = Connector + baseJudge(label,rule)
+					result += Connector + baseJudge(label, rule)
 				}
 				if rule.TopicType == "task" {
-					result = Connector + taskJudge(label,rule)
+					result += Connector + taskJudge(label, rule)
 				}
 				if rule.TopicType == "person" {
-					result = Connector + taskJudge(label,rule)
+					result += Connector + taskJudge(label, rule)
 				}
 				if rule.TopicType == "alarmLevel" {
-					result = Connector + defenceJudge(label,rule)
+					result += Connector + defenceJudge(label, rule)
 				}
 			}
 			// 寰楀嚭鎬荤殑鍒ゆ柇缁撴灉
 			if result != "" {
-				logger.Info("鎬荤殑鍒ゆ柇缁撴灉锛�",result)
+				logger.Info("鎬荤殑鍒ゆ柇缁撴灉锛�", result)
 				result = result[2:] // 鎶婂墠涓や綅瀛楃鍘绘帀
-				expression, err:= govaluate.NewEvaluableExpression(result);
+				expression, err := govaluate.NewEvaluableExpression(result);
 				if err != nil {
 					logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒")
+					return
 				}
-				result, err1:= expression.Evaluate(nil)
+				result, err1 := expression.Evaluate(nil)
 				if err1 != nil {
 					logger.Error("甯﹀叆鍙傛暟鏈夎")
 				}
 				if result.(bool) {
-					logger.Info("閫氳繃瑙勫垯锛岃〃杈惧紡涓猴細",result)
+					logger.Info("閫氳繃瑙勫垯锛岃〃杈惧紡涓猴細", result)
 					// 鎺ㄩ�佹湇鍔″櫒
-					pushData(ruleGroup.Urls,result.(ruleserver.ResultMsg))
-					os.Exit(1)
+					pushData(ruleGroup.Urls, msg)
+					//os.Exit(1)
 				} else {
-					logger.Info("娌¢�氳繃瑙勫垯,琛ㄨ揪寮忎负锛�",result)
-					os.Exit(1)
+					logger.Info("娌¢�氳繃瑙勫垯,琛ㄨ揪寮忎负锛�", result)
+					//os.Exit(1)
 				}
 			}
 		}
@@ -84,28 +95,32 @@
 
 	//绗﹀悎鏈鍒欑粍鐨勫氨鎶婃暟鎹帹閫佸埌璇ョ洰鐨勬湇鍔″櫒涓�
 }
+
 // 鏄惁绗﹀悎鏃堕棿瑙勫垯
-func timeJudge(label *Label,groupRule protomsg.EventPush) string{
+func timeJudge(label *Label, groupRule protomsg.EventPush) bool {
 	timeNow := time.Now().Format("2006-01-02 15:04:05")
-	flag1 := isBefore(groupRule.TimeStart,timeNow)
-	flag2 := isBefore(timeNow,groupRule.TimeEnd)
+	logger.Info("鏍囩杩囨护鍣ㄨ捣濮嬫椂闂翠负锛�",groupRule.TimeStart,groupRule.TimeEnd)
+	flag1 := isBefore(groupRule.TimeStart, timeNow)
+	flag2 := isBefore(timeNow, groupRule.TimeEnd)
 	if flag1 && flag2 {
-		return "true"
+		return true
 	} else {
 		logger.Info("涓嶅湪瑙勫畾鐨勬椂闂磋寖鍥村唴锛�")
-		return "false"
+		return false
 	}
 }
+
 // 浼犲叆涓や釜鏃堕棿鐨勫瓧绗︿覆锛屽垽鏂涓�涓椂闂存槸鍚﹀皬浜庣浜屼釜鏃堕棿
-func isBefore(time1 string,time2 string) bool{
-	expression, err:= govaluate.NewEvaluableExpression("t1 < t2");
+func isBefore(time1 string, time2 string) bool {
+	expression, err := govaluate.NewEvaluableExpression("t1 < t2");
 	if err != nil {
 		logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒")
+		return false
 	}
-	parameters := make(map[string]interface{},8)
+	parameters := make(map[string]interface{}, 8)
 	parameters["t1"] = time1
 	parameters["t2"] = time2
-	result, err1:= expression.Evaluate(parameters)
+	result, err1 := expression.Evaluate(parameters)
 	if err1 != nil {
 		logger.Error("甯﹀叆鍙傛暟鏈夎")
 	}
@@ -113,20 +128,21 @@
 }
 
 // 鏄惁绗﹀悎鎽勫儚鏈鸿鍒�
-func cameraJudge(label *Label,rule *protomsg.EventPushRule) string{
+func cameraJudge(label *Label, rule *protomsg.EventPushRule) string {
 	formula := ""
 	if rule.TopicArg == "name" {
-		formula = label.CameraName + rule.Operator + rule.RuleValue
+		formula = "'" + label.CameraName + "'" + rule.Operator + "'" + rule.RuleValue + "'"
 	}
 	if rule.TopicArg == "addr" {
-		formula = label.CameraAddr + rule.Operator + rule.RuleValue
+		formula = "'" + label.CameraAddr + "'" + rule.Operator + "'" + rule.RuleValue + "'"
 	}
-	expression, err:= govaluate.NewEvaluableExpression(formula);
+	logger.Info("-------鎵撳嵃鎽勫儚鏈鸿鍒欏叕寮忥細",formula)
+	expression, err := govaluate.NewEvaluableExpression(formula);
 	if err != nil {
-		logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒",formula)
+		logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒", formula)
 		return "false"
 	}
-	result, err1:= expression.Evaluate(nil)
+	result, err1 := expression.Evaluate(nil)
 	if err1 != nil {
 		logger.Error("甯﹀叆鍙傛暟鏈夎")
 		return "false"
@@ -135,13 +151,14 @@
 		logger.Info("绗﹀悎鎽勫儚鏈鸿鍒�!")
 		return "true"
 	}
+	logger.Info("涓嶇鍚堟憚鍍忔満瑙勫垯!")
 	return "false"
 }
 
 // 鏄惁绗﹀悎搴曞簱瑙勫垯
-func baseJudge(label *Label,rule *protomsg.EventPushRule) string{
+func baseJudge(label *Label, rule *protomsg.EventPushRule) string {
 	if rule.RuleValue == "all" {
-		for _,personGroup := range label.Persons {
+		for _, personGroup := range label.Persons {
 			for _, arg := range personGroup.Args {
 				if len(arg.Liker) > 0 {
 					logger.Info("婊¤冻鍏ㄩ儴搴曞簱瑙勫垯")
@@ -151,16 +168,17 @@
 		}
 		return "false"
 	} else {
-		for _,personGroup := range label.Persons  {
-			for _,arg := range personGroup.Args {
-				for _,liker := range arg.Liker{
-					formula := liker.TableId + rule.Operator + rule.RuleValue
-					expression, err:= govaluate.NewEvaluableExpression(formula);
+		for _, personGroup := range label.Persons {
+			for _, arg := range personGroup.Args {
+				for _, liker := range arg.Liker {
+					formula := "'" + liker.TableId + "'" + rule.Operator + "'" + rule.RuleValue + "'"
+					expression, err := govaluate.NewEvaluableExpression(formula);
+					logger.Info("-------鎵撳嵃搴曞簱瑙勫垯鍏紡锛�",formula)
 					if err != nil {
-						logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒",formula)
-						//return "false"
+						logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒", formula)
+						return "false"
 					}
-					result, err1:= expression.Evaluate(nil)
+					result, err1 := expression.Evaluate(nil)
 					if err1 != nil {
 						logger.Error("甯﹀叆鍙傛暟鏈夎")
 						//return "false"
@@ -172,40 +190,42 @@
 				}
 			}
 		}
+		logger.Info("涓嶇鍚堝簳搴撹鍒�!")
 		return "false"
 	}
 }
 
 //鏄惁绗﹀悎浜哄憳瑙勫垯
-func personJudge(label *Label,rule *protomsg.EventPushRule) string{
-	for _,personGroup := range label.Persons  {
-		for _,person := range personGroup.Args {
+func personJudge(label *Label, rule *protomsg.EventPushRule) string {
+	for _, personGroup := range label.Persons {
+		for _, person := range personGroup.Args {
 			formula := ""
-			if rule.TopicArg == "sex"{
+			if rule.TopicArg == "sex" {
 				formula = strconv.Itoa(int(person.ThftRes.Gender)) + rule.Operator + rule.RuleValue
 			}
-			if rule.TopicArg == "race"{
+			if rule.TopicArg == "race" {
 				formula = strconv.Itoa(int(person.ThftRes.Race)) + rule.Operator + rule.RuleValue
 			}
-			if rule.TopicArg == "age"{
+			if rule.TopicArg == "age" {
 				formula = strconv.Itoa(int(person.ThftRes.Age)) + rule.Operator + rule.RuleValue
 			}
 			if rule.TopicArg == "otherInfo" {
 				// 鍏朵粬杩欎釜鍊煎厛杩欎箞澶勭悊
 				return "true"
 			}
-			expression, err:= govaluate.NewEvaluableExpression(formula);
+			logger.Info("-------鎵撳嵃浜哄憳瑙勫垯鍏紡锛�",formula)
+			expression, err := govaluate.NewEvaluableExpression(formula);
 			if err != nil {
-				logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒",formula)
-				//return "false"
+				logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒", formula)
+				return "false"
 			}
-			result, err1:= expression.Evaluate(nil)
+			result, err1 := expression.Evaluate(nil)
 			if err1 != nil {
 				logger.Error("甯﹀叆鍙傛暟鏈夎")
 				//return "false"
 			}
 			if result.(bool) {
-				logger.Info("绗﹀悎浜哄憳瑙勫垯锛�",formula)
+				logger.Info("绗﹀悎浜哄憳瑙勫垯锛�", formula)
 				return "true"
 			}
 		}
@@ -216,13 +236,14 @@
 					return "true"
 				}
 			} else {
-				formula := strconv.Itoa(int(personGroup.AlarmLevel)) + rule.Operator + rule.RuleValue
-				expression, err:= govaluate.NewEvaluableExpression(formula);
+				formula := strconv.Itoa(int(personGroup.AlarmLevel)) + rule.Operator + formate(rule.RuleValue)
+				logger.Info("-------鎵撳嵃浜哄憳绛夌骇瑙勫垯鍏紡锛�",formula)
+				expression, err := govaluate.NewEvaluableExpression(formula);
 				if err != nil {
-					logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒",formula)
-					//return "false"
+					logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒", formula)
+					return "false"
 				}
-				result, err1:= expression.Evaluate(nil)
+				result, err1 := expression.Evaluate(nil)
 				if err1 != nil {
 					logger.Error("甯﹀叆鍙傛暟鏈夎")
 					//return "false"
@@ -241,7 +262,7 @@
 }
 
 // 鏄惁绗﹀悎甯冮槻绛夌骇瑙勫垯
-func defenceJudge(label *Label,rule *protomsg.EventPushRule) string{
+func defenceJudge(label *Label, rule *protomsg.EventPushRule) string {
 	if rule.RuleValue == "all" { // 甯冮槻绛夌骇涓哄叏閮ㄦ椂鍙湁鏈夊竷闃茬瓑绾у嵆涓洪�氳繃
 		if len(label.DefenceLevel) > 0 {
 			logger.Info("绗﹀悎甯冮槻绛夌骇瑙勫垯锛屽竷闃茬瓑绾т负鍏ㄩ儴")
@@ -251,14 +272,15 @@
 			return "false"
 		}
 	} else {
-		for _,def := range label.DefenceLevel {
+		for _, def := range label.DefenceLevel {
 			formula := strconv.Itoa(int(def)) + rule.Operator + rule.RuleValue
-			expression, err:= govaluate.NewEvaluableExpression(formula);
+			logger.Info("-------鎵撳嵃甯冮槻绛夌骇瑙勫垯鍏紡锛�",formula)
+			expression, err := govaluate.NewEvaluableExpression(formula);
 			if err != nil {
-				logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒",formula)
-				//return "false"
+				logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒", formula)
+				return "false"
 			}
-			result, err1:= expression.Evaluate(nil)
+			result, err1 := expression.Evaluate(nil)
 			if err1 != nil {
 				logger.Error("甯﹀叆鍙傛暟鏈夎")
 				//return "false"
@@ -272,15 +294,17 @@
 		return "false"
 	}
 }
+
 // 鏄惁绗﹀悎浠诲姟瑙勫垯
-func taskJudge(label *Label,rule *protomsg.EventPushRule) string{
-	formula := label.TaskId + rule.Operator + rule.RuleValue
-	expression, err:= govaluate.NewEvaluableExpression(formula);
+func taskJudge(label *Label, rule *protomsg.EventPushRule) string {
+	formula := "'"+label.TaskId +"'"+ rule.Operator +"'"+ rule.RuleValue+"'"
+	expression, err := govaluate.NewEvaluableExpression(formula);
+	logger.Info("-------鎵撳嵃浠诲姟瑙勫垯鍏紡锛�",formula)
 	if err != nil {
-		logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒",formula)
+		logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒", formula)
 		return "false"
 	}
-	result, err1:= expression.Evaluate(nil)
+	result, err1 := expression.Evaluate(nil)
 	if err1 != nil {
 		logger.Error("甯﹀叆鍙傛暟鏈夎")
 		return "false"
@@ -292,9 +316,41 @@
 	logger.Info("涓嶇鍚堜换鍔¤鍒�")
 	return "false"
 }
+
 // 璋冪敤鐩爣鏈嶅姟鍣ㄧ殑鎻掑叆鎺ュ彛
-func pushData (urls []*protomsg.PushUrl, data ruleserver.ResultMsg){
-	for _,url := range urls {
-		Push(url.Url,data)
+func pushData(urls []*protomsg.PushUrl, data structure.ResultMsg) {
+	for _, url := range urls {
+		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])
+
 	}
-}
\ No newline at end of file
+}
+
+// 鎶婃姤璀︾瓑绾ц浆鍖栨垚姹夊瓧
+func formate(str string) string {
+	var i string
+	if str == "涓�绾�" {
+		i = "1"
+	}
+	if str == "浜岀骇" {
+		i = "2"
+	}
+	if str == "涓夌骇" {
+		i = "3"
+	}
+	if str == "鍥涚骇" {
+		i = "4"
+	}
+	if str == "浜旂骇" {
+		i = "5"
+	}
+	return i
+}

--
Gitblit v1.8.0