From cbaf5704914c0f51a80ebe8220bdb5bad7c64d03 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期二, 06 八月 2019 17:53:22 +0800
Subject: [PATCH] ---
---
labelFilter/ruleForLabel.go | 281 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 277 insertions(+), 4 deletions(-)
diff --git a/labelFilter/ruleForLabel.go b/labelFilter/ruleForLabel.go
index d00dfe8..3588c9c 100644
--- a/labelFilter/ruleForLabel.go
+++ b/labelFilter/ruleForLabel.go
@@ -1,16 +1,100 @@
package labelFilter
import (
+ "basic.com/dbapi.git"
+ "basic.com/pubsub/protomsg.git"
"github.com/knetic/govaluate"
+ "os"
"ruleprocess/logger"
+ "ruleprocess/ruleserver"
+ "strconv"
+ "time"
)
-func Judge(){
+func Judge(result ruleserver.ResultMsg){
+ // 瑁呴厤鎴愯嚜宸卞彲浠ヨ瘑鍒殑鏁版嵁
+ label := new(Label)
+ label.DataFormatToLabel(result)
+ 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)
+ 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 != "" {
+ logger.Info("鎬荤殑鍒ゆ柇缁撴灉锛�",result)
+ result = result[2:] // 鎶婂墠涓や綅瀛楃鍘绘帀
+ expression, err:= govaluate.NewEvaluableExpression(result);
+ if err != nil {
+ logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒")
+ }
+ result, err1:= expression.Evaluate(nil)
+ if err1 != nil {
+ logger.Error("甯﹀叆鍙傛暟鏈夎")
+ }
+ if result.(bool) {
+ logger.Info("閫氳繃瑙勫垯锛岃〃杈惧紡涓猴細",result)
+ // 鎺ㄩ�佹湇鍔″櫒
+ pushData(ruleGroup.Urls,result.(ruleserver.ResultMsg))
+ os.Exit(1)
+ } else {
+ logger.Info("娌¢�氳繃瑙勫垯,琛ㄨ揪寮忎负锛�",result)
+ os.Exit(1)
+ }
+ }
+ }
+ }
+ //绗﹀悎鏈鍒欑粍鐨勫氨鎶婃暟鎹帹閫佸埌璇ョ洰鐨勬湇鍔″櫒涓�
}
-//
-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{
@@ -26,4 +110,193 @@
logger.Error("甯﹀叆鍙傛暟鏈夎")
}
return result.(bool)
+}
+
+// 鏄惁绗﹀悎鎽勫儚鏈鸿鍒�
+func cameraJudge(label *Label,rule *protomsg.EventPushRule) string{
+ formula := ""
+ if rule.TopicArg == "cameraName" {
+ formula = label.CameraName + rule.Operator + rule.RuleValue
+ }
+ if rule.TopicArg == "cameraLocation" {
+ formula = label.CameraAddr + rule.Operator + rule.RuleValue
+ }
+ expression, err:= govaluate.NewEvaluableExpression(formula);
+ if err != nil {
+ logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒",formula)
+ return "false"
+ }
+ result, err1:= expression.Evaluate(nil)
+ if err1 != nil {
+ logger.Error("甯﹀叆鍙傛暟鏈夎")
+ return "false"
+ }
+ if result.(bool) {
+ logger.Info("绗﹀悎鎽勫儚鏈鸿鍒�!")
+ return "true"
+ }
+ return "false"
+}
+
+// 鏄惁绗﹀悎搴曞簱瑙勫垯
+func baseJudge(label *Label,rule *protomsg.EventPushRule) string{
+ if rule.RuleValue == "all" {
+ for _,personGroup := range label.Persons {
+ for _, arg := range personGroup.Args {
+ if len(arg.Liker) > 0 {
+ logger.Info("婊¤冻鍏ㄩ儴搴曞簱瑙勫垯")
+ return "true"
+ }
+ }
+ }
+ 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);
+ if err != nil {
+ logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒",formula)
+ //return "false"
+ }
+ result, err1:= expression.Evaluate(nil)
+ if err1 != nil {
+ logger.Error("甯﹀叆鍙傛暟鏈夎")
+ //return "false"
+ }
+ if result.(bool) {
+ logger.Info("绗﹀悎搴曞簱瑙勫垯!")
+ return "true"
+ }
+ }
+ }
+ }
+ return "false"
+ }
+}
+
+//鏄惁绗﹀悎浜哄憳瑙勫垯
+func personJudge(label *Label,rule *protomsg.EventPushRule) string{
+ for _,personGroup := range label.Persons {
+ for _,person := range personGroup.Args {
+ formula := ""
+ if rule.TopicArg == "sex"{
+ formula = strconv.Itoa(int(person.ThftRes.Gender)) + rule.Operator + rule.RuleValue
+ }
+ if rule.TopicArg == "race"{
+ formula = strconv.Itoa(int(person.ThftRes.Race)) + rule.Operator + rule.RuleValue
+ return "true"
+ }
+ if rule.TopicArg == "age"{
+ formula = strconv.Itoa(int(person.ThftRes.Age)) + rule.Operator + rule.RuleValue
+ return "true"
+ }
+ if rule.TopicArg == "others" {
+ // 鍏朵粬杩欎釜鍊煎厛杩欎箞澶勭悊
+ return "true"
+ }
+ expression, err:= govaluate.NewEvaluableExpression(formula);
+ if err != nil {
+ logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒",formula)
+ //return "false"
+ }
+ result, err1:= expression.Evaluate(nil)
+ if err1 != nil {
+ logger.Error("甯﹀叆鍙傛暟鏈夎")
+ //return "false"
+ }
+ if result.(bool) {
+ logger.Info("绗﹀悎浜哄憳瑙勫垯锛�",formula)
+ return "true"
+ }
+ }
+ if rule.TopicArg == "monitorLevel" {
+ if rule.RuleValue == "all" {
+ if len(personGroup.Args) > 0 {
+ logger.Info("绗﹀悎浜哄憳绛夌骇涓哄叏閮ㄧ殑瑙勫垯")
+ return "true"
+ }
+ } else {
+ formula := strconv.Itoa(int(personGroup.AlarmLevel)) + rule.Operator + rule.RuleValue
+ expression, err:= govaluate.NewEvaluableExpression(formula);
+ if err != nil {
+ logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒",formula)
+ //return "false"
+ }
+ result, err1:= expression.Evaluate(nil)
+ if err1 != nil {
+ logger.Error("甯﹀叆鍙傛暟鏈夎")
+ //return "false"
+ }
+ if result.(bool) {
+ logger.Info("绗﹀悎浜哄憳绛夌骇瑙勫垯!")
+ return "true"
+ }
+ }
+ logger.Info("绗﹀悎浜哄憳鎶ヨ绛夌骇瑙勫垯锛�")
+ return "true"
+ }
+ }
+ logger.Info("涓嶇鍚堜汉鍛樿鍒�")
+ return "false"
+}
+
+// 鏄惁绗﹀悎甯冮槻绛夌骇瑙勫垯
+func defenceJudge(label *Label,rule *protomsg.EventPushRule) string{
+ if rule.RuleValue == "all" { // 甯冮槻绛夌骇涓哄叏閮ㄦ椂鍙湁鏈夊竷闃茬瓑绾у嵆涓洪�氳繃
+ if len(label.DefenceLevel) > 0 {
+ logger.Info("绗﹀悎甯冮槻绛夌骇瑙勫垯锛屽竷闃茬瓑绾т负鍏ㄩ儴")
+ return "true"
+ } else {
+ logger.Info("涓嶇鍚堝竷闃茬瓑绾ц鍒�")
+ return "false"
+ }
+ } else {
+ for _,def := range label.DefenceLevel {
+ formula := strconv.Itoa(int(def)) + rule.Operator + rule.RuleValue
+ expression, err:= govaluate.NewEvaluableExpression(formula);
+ if err != nil {
+ logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒",formula)
+ //return "false"
+ }
+ result, err1:= expression.Evaluate(nil)
+ if err1 != nil {
+ logger.Error("甯﹀叆鍙傛暟鏈夎")
+ //return "false"
+ }
+ if result.(bool) {
+ logger.Info("绗﹀悎甯冮槻绛夌骇瑙勫垯!")
+ return "true"
+ }
+ }
+ logger.Info("涓嶇鍚堝竷闃茬瓑绾ц鍒�")
+ return "false"
+ }
+}
+// 鏄惁绗﹀悎浠诲姟瑙勫垯
+func taskJudge(label *Label,rule *protomsg.EventPushRule) string{
+ formula := label.TaskId + rule.Operator + rule.RuleValue
+ expression, err:= govaluate.NewEvaluableExpression(formula);
+ if err != nil {
+ logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒",formula)
+ return "false"
+ }
+ result, err1:= expression.Evaluate(nil)
+ if err1 != nil {
+ logger.Error("甯﹀叆鍙傛暟鏈夎")
+ return "false"
+ }
+ if result.(bool) {
+ logger.Info("绗﹀悎浠诲姟瑙勫垯!")
+ return "true"
+ }
+ logger.Info("涓嶇鍚堜换鍔¤鍒�")
+ return "false"
+}
+// 璋冪敤鐩爣鏈嶅姟鍣ㄧ殑鎻掑叆鎺ュ彛
+func pushData (urls []*protomsg.PushUrl, data ruleserver.ResultMsg){
+ for _,url := range urls {
+ Push(url.Url,data)
+ }
}
\ No newline at end of file
--
Gitblit v1.8.0