From 86422aa8581159c0a6a960b7bcf40fdb10996d85 Mon Sep 17 00:00:00 2001 From: panlei <2799247126@qq.com> Date: 星期五, 02 八月 2019 19:56:34 +0800 Subject: [PATCH] --- --- labelFilter/ruleForLabel.go | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 170 insertions(+), 4 deletions(-) diff --git a/labelFilter/ruleForLabel.go b/labelFilter/ruleForLabel.go index d00dfe8..ccc3cf5 100644 --- a/labelFilter/ruleForLabel.go +++ b/labelFilter/ruleForLabel.go @@ -1,16 +1,88 @@ 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{ @@ -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