From b0d2f2b16a8b03cd563121bac16bf0fb7b3ce58d Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期五, 02 八月 2019 10:01:48 +0800
Subject: [PATCH] ---

---
 labelFilter/ruleForLabel.go |  176 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 171 insertions(+), 5 deletions(-)

diff --git a/labelFilter/ruleForLabel.go b/labelFilter/ruleForLabel.go
index 3768a0c..ccc3cf5 100644
--- a/labelFilter/ruleForLabel.go
+++ b/labelFilter/ruleForLabel.go
@@ -1,18 +1,90 @@
 package labelFilter
 
 import (
+	"basic.com/dbapi.git"
+	"basic.com/pubsub/protomsg.git"
 	"github.com/knetic/govaluate"
 	"ruleprocess/logger"
+	"ruleprocess/ruleserver"
+	"strconv"
+	"time"
 )
 
-func Judge(){
+func Judge(label *Label, result ruleserver.ResultMsg){
+	//鎷垮埌鎵�鏈夎鍒欑粍
+	var api dbapi.EventPushApi
+	b,allRules := api.FindAllDetails()
+	if !b {
+		logger.Error("鏌ヨ鏃堕棿鎺ㄩ�佽鍒欏け璐ワ紒")
+	}
+	//閬嶅巻鎵�鏈夌殑瑙勫垯缁勶紝鐪嬬湅绗﹀悎鍝釜瑙勫垯缁勶紝灏辨妸鏁版嵁鎻掑叆鍒板摢涓鍒欑粍鐨勭洰鏍囨満鍣ㄤ笂
+	for _,ruleGroup := range allRules {
+		if ruleGroup.Enable {  // 澶ц鍒欏紑鍏冲紑鍚姸鎬�
+			// 鍏堣繃鏃堕棿瑙勫垯
+			timeJudge(label,ruleGroup)
+			result := ""
+			var Connector string
+			if ruleGroup.IsSatisfyAll {
+				Connector = "&&"
+			} else {
+				Connector = "||"
+			}
+			for _,rule := range ruleGroup.Rules {
+				// 杩囨瘡涓�涓皬瑙勫垯
+				if rule.TopicType == "camera" {
+					result = Connector + cameraJudge(label,rule)
+				}
+				if rule.TopicType == "baseLibrary" {
+					result = Connector + baseJudge(label,rule)
+				}
+				if rule.TopicType == "task" {
+					result = Connector + taskJudge(label,rule)
+				}
+				if rule.TopicType == "person" {
+					result = Connector + taskJudge(label,rule)
+				}
+				if rule.TopicType == "defence" {
+					result = Connector + defenceJudge(label,rule)
+				}
+			}
+			// 寰楀嚭鎬荤殑鍒ゆ柇缁撴灉
+			if result != "" {
+				result = result[2:] // 鎶婂墠涓や綅瀛楃鍘绘帀
+				expression, err:= govaluate.NewEvaluableExpression(result);
+				if err != nil {
+					logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒")
+				}
+				result, err1:= expression.Evaluate(nil)
+				if err1 != nil {
+					logger.Error("甯﹀叆鍙傛暟鏈夎")
+				}
+				logger.Warn("瑙勫垯鍒ゆ柇缁撴灉鏄細",)
+				if result.(bool) {
+					logger.Info("閫氳繃瑙勫垯锛岃〃杈惧紡涓猴細",result)
+					// 鎺ㄩ�佹湇鍔″櫒
+					pushData(ruleGroup.Urls,result.(ruleserver.ResultMsg))
+				} else {
+					logger.Info("娌¢�氳繃瑙勫垯,琛ㄨ揪寮忎负锛�",result)
+				}
+			}
+		}
+	}
 
+	//绗﹀悎鏈鍒欑粍鐨勫氨鎶婃暟鎹帹閫佸埌璇ョ洰鐨勬湇鍔″櫒涓�
 }
-//
-func timeJudge(label *Label,groupRule *GroupRule){
-
+// 鏄惁绗﹀悎鏃堕棿瑙勫垯
+func timeJudge(label *Label,groupRule protomsg.EventPush) string{
+	timeNow := time.Now().Format("2006-01-02 15:04:05")
+	flag1 := isBefore(groupRule.TimeStart,timeNow)
+	flag2 := isBefore(timeNow,groupRule.TimeEnd)
+	if flag1 && flag2 {
+		return "true"
+	} else {
+		logger.Info("涓嶅湪瑙勫畾鐨勬椂闂磋寖鍥村唴锛�")
+		return "false"
+	}
 }
-// 鍒ゆ柇绗竴涓椂闂存槸鍚﹀皬浜庣浜屼釜鏃堕棿
+// 浼犲叆涓や釜鏃堕棿鐨勫瓧绗︿覆锛屽垽鏂涓�涓椂闂存槸鍚﹀皬浜庣浜屼釜鏃堕棿
 func isBefore(time1 string,time2 string) bool{
 	expression, err:= govaluate.NewEvaluableExpression("t1 < t2");
 	if err != nil {
@@ -26,4 +98,98 @@
 		logger.Error("甯﹀叆鍙傛暟鏈夎")
 	}
 	return result.(bool)
+}
+
+// 鏄惁绗﹀悎鎽勫儚鏈鸿鍒�
+func cameraJudge(label *Label,rule *protomsg.EventPushRule) string{
+	if rule.TopicArg == "cameraName" {
+		if label.CameraName == rule.RuleValue {
+			logger.Info("绗﹀悎鎽勫儚鏈哄悕绉拌鍒�")
+			return "true"
+		} else {
+			logger.Info("涓嶇鍚堟憚鍍忔満鍚嶇О瑙勫垯")
+			return "false"
+		}
+	}
+	if rule.TopicArg == "cameraLocation" {
+		if label.CameraAddr == rule.RuleValue {
+			logger.Info("绗﹀悎鎽勫儚鏈轰綅缃鍒�")
+			return "true"
+		} else {
+			logger.Info("涓嶇鍚堟憚鍍忔満浣嶇疆瑙勫垯")
+			return "false"
+		}
+	}
+	return ""
+}
+
+// 鏄惁绗﹀悎搴曞簱瑙勫垯
+func baseJudge(label *Label,rule *protomsg.EventPushRule) string{
+	flag := "false"
+	for _,personGroup := range label.Persons  {
+		for _,arg := range personGroup.Args {
+			for _,liker := range arg.Liker{
+				if liker.TableId == rule.RuleValue {
+					logger.Info("绗﹀悎搴曞簱瑙勫垯锛�")
+					flag = "true"
+				}
+			}
+		}
+	}
+	return flag
+}
+
+//鏄惁绗﹀悎浜哄憳瑙勫垯
+func personJudge(label *Label,rule *protomsg.EventPushRule) string{
+	for _,personGroup := range label.Persons  {
+		for _,person := range personGroup.Args {
+			if rule.TopicArg == "sex" && strconv.Itoa(int(person.ThftRes.Gender)) == rule.RuleValue{
+				logger.Info("绗﹀悎浜哄憳鎬у埆瑙勫垯锛�")
+				return  "true"
+			}
+			if rule.TopicArg == "race" && strconv.Itoa(int(person.ThftRes.Race)) == rule.RuleValue {
+				logger.Info("绗﹀悎浜哄憳绉嶆棌瑙勫垯锛�")
+				return "true"
+			}
+			if rule.TopicArg == "age" && strconv.Itoa(int(person.ThftRes.Age)) == rule.RuleValue {
+				logger.Info("绗﹀悎浜哄憳骞撮緞瑙勫垯锛�")
+				return "true"
+			}
+			if rule.TopicArg == "others" {
+				// 鍏朵粬杩欎釜鍊煎厛杩欎箞澶勭悊
+				return "true"
+			}
+		}
+		if strconv.Itoa(int(personGroup.AlarmLevel)) == rule.RuleValue {
+			logger.Info("绗﹀悎浜哄憳鎶ヨ绛夌骇瑙勫垯锛�")
+			return "true"
+		}
+	}
+	logger.Info("涓嶇鍚堜汉鍛樿鍒�")
+	return "false"
+}
+
+// 鏄惁绗﹀悎甯冮槻绛夌骇瑙勫垯
+func defenceJudge(label *Label,rule *protomsg.EventPushRule) string{
+	for _,def := range label.DefenceLevel {
+		if strconv.Itoa(int(def)) == rule.RuleValue {
+			logger.Info("绗﹀悎甯冮槻绛夌骇瑙勫垯锛�")
+			return "true"
+		}
+	}
+	logger.Info("涓嶇鍚堝竷闃茬瓑绾ц鍒�")
+	return "false"
+}
+// 鏄惁绗﹀悎浠诲姟瑙勫垯
+func taskJudge(label *Label,rule *protomsg.EventPushRule) string{
+	if label.TaskId == rule.RuleValue {
+		logger.Info("绗﹀悎浠诲姟瑙勫垯!")
+		return "true"
+	}
+	logger.Info("涓嶇鍚堜换鍔¤鍒�")
+	return "false"
+}
+// 璋冪敤鐩爣鏈嶅姟鍣ㄧ殑鎻掑叆鎺ュ彛
+func pushData (urls []*protomsg.PushUrl, data ruleserver.ResultMsg){
+
 }
\ No newline at end of file

--
Gitblit v1.8.0