From c8f8ab7518d6df83edc94e7c8e364319dd21c22d Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期一, 01 七月 2019 18:32:58 +0800
Subject: [PATCH] ---

---
 ruleserver/ruleToformula.go |   49 +++++++++++++++++++++++++++++--------------------
 1 files changed, 29 insertions(+), 20 deletions(-)

diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index 8484174..4947858 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -64,7 +64,7 @@
 	Location   Rect    // 璁颁笅姣忎釜鐩爣鐨勪綅缃弬鏁帮紝鏈�鍚庣粰缁撴灉瑁呴厤浜鸿劯鏁版嵁鐨勬椂鍊欑敤鐨勫埌
 	SdkName    string
 	ThftRes    protomsg.ThftResult
-	Liker      []LikePerson
+	Liker      []*protomsg.Baseinfo
 }
 
 type LikePerson struct {
@@ -98,7 +98,7 @@
 	IsYolo  bool    // 鏄惁鏄痽olo鏁版嵁
 	SdkName string
 	ThftRes protomsg.ThftResult
-	Liker   []LikePerson // 濡傛灉鏄汉鑴哥殑璇濆挨鍏舵槸姣斿锛屽簲瀛樹笅浠栬窡搴曞簱鐨勪汉鍛樼殑鐩镐技鎯呭喌 yolo鐨勮瘽缁檔il灏辫
+	Liker   []*protomsg.Baseinfo // 濡傛灉鏄汉鑴哥殑璇濆挨鍏舵槸姣斿锛屽簲瀛樹笅浠栬窡搴曞簱鐨勪汉鍛樼殑鐩镐技鎯呭喌 yolo鐨勮瘽缁檔il灏辫
 }
 
 // 姣忎釜绠楁硶瀵逛簬褰撳墠甯х敾闈㈣嚜宸辨彁鍙栫殑鏁版嵁
@@ -183,14 +183,12 @@
 		areaMap := AreaMap{cameraId: cameraId, areaId: polygon.Id, areaJson: polygon.Polygon, triggerLine: polygon.TriggerLine, directionLine: polygon.DirectionLine}
 		// 涓烘瘡涓憚鍍忔満鍖哄煙濉厖鏁版嵁
 		areaMap.CountAreaObjs(arg)
-		log.Println("-------areaMap鐨勫唴瀹�",areaMap)
 		arg.AreaMapList = append(arg.AreaMapList, areaMap)
-		log.Println("-------AreaMapList鐨勫唴瀹�",arg.AreaMapList)
 	}
 }
 
 // 瀵瑰崟甯у浘鍍忕殑鍒ゆ柇 鏄垗寮冿紙鎴栬�呰瀵逛簬鏌愪簺闇�姹傚彲浠ユ斁ES鏁版嵁搴撲竴浠斤級杩樻槸杩斿洖
-func Judge(args SdkDatas) {
+func Judge(args *SdkDatas) {
 	if len(args.Sdkdata) > 0 {
 		// 鎷垮埌鏈憚鍍忔満鐨勫尯鍩�
 		cameraPolygons := GetPolygons(args.CameraId)
@@ -217,7 +215,6 @@
 							linkTask(args, ruleList[i], taskId)
 						} else {
 							// 鐙珛浠诲姟鐨勫鐞�
-							log.Println("----------------------------------------64鎽勫儚鏈哄叆鍏�")
 							RunRule(args, ruleList[i], taskId)
 						}
 					}
@@ -226,14 +223,17 @@
 		}
 	}
 }
-func RunRule(args SdkDatas, groupRule *protomsg.GroupRule, taskId string) bool {
+func RunRule(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string) bool {
+	defer func() {
+		if err := recover(); err != nil {
+			fmt.Println("姣斿瑙勫垯鏈夎", err.(string))
+		}
+
+	}()
 	resultSplice := []*LittleRuleResult{}
 	// 鍏堣繃瀹屾潯浠惰鍒�
 	for j := 0; j < len(groupRule.Rules); j++ {
 		for _, sdkData := range args.Sdkdata {
-			if sdkData.SdkId == "812b674b-2375-4589-919a-5c1c3278a975" {
-				log.Println("鍏ヤ镜鐨勭畻娉曟暟鎹�", sdkData)
-			}
 			for _, areaMap := range sdkData.AreaMapList {
 				ruleResult := filterRule(groupRule.Rules[j], &areaMap)
 				if ruleResult.Result != "" {
@@ -293,9 +293,13 @@
 		completeFormula = completeFormula + va.Result
 	}
 	if completeFormula != "" {
+		log.Println("鐪嬬湅鍏紡-----------锛�", completeFormula)
 		expression, _ := govaluate.NewEvaluableExpression(completeFormula)
-		result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
-		if result.(bool) {
+		if strings.HasPrefix(completeFormula,"&&") || strings.HasPrefix(completeFormula,"||"){
+			panic("瑙勫垯鏈夎锛屽緱鍒扮殑鏁板鍏紡涓嶅彲瑙f瀽")
+		}
+		result,_ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
+		if !result.(bool) {
 			// 缁欒繖甯ф暟鎹墦涓婅鍒欑粍鏍囩
 			//args.RuleResult = append(args.RuleResult, Result{TaskId: taskId, RuleGroupId: groupRule.GroupId})
 			for k, timeEle := range TimeEleList {
@@ -310,6 +314,7 @@
 			for k, timeEle := range TimeEleList {
 				if strings.Contains(k, taskId) {
 					if timeEle.N != 0 { // 璺熻繖涓换鍔℃湁鍏崇殑瀹氭椂鍣ㄨ鍏ㄩ儴绛変簬0
+						log.Println("鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺��-------------涓嶅啢锛屼綘鏄瀹氭椂鍣ㄦ墦璐ョ殑锛�")
 						flag = false
 					}
 				}
@@ -371,7 +376,7 @@
 			// 杩欐瑕佸榻愯〃杈惧紡閲屾墍闇�瑕佺殑鎵�鏈夊弬鏁�
 			a.targetNum++
 			arg1 := Arg{obj.Score, PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), obj.IsYolo, obj.Rects, obj.SdkName, obj.ThftRes, obj.Liker}
-			log.Println("鏀捐繘鍘荤殑arg锛�-------", arg1)
+			//log.Println("鏀捐繘鍘荤殑arg锛�-------", arg1)
 			a.args = append(a.args, arg1)
 			a.filterData = append(a.filterData, arg1)
 		}
@@ -418,7 +423,7 @@
 }
 
 // 鑱斿姩浠诲姟鐨勫鐞�
-func linkTask(args SdkDatas, groupRule *protomsg.GroupRule, taskId string) {
+func linkTask(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string) {
 	// new涓�涓畾鏃跺櫒锛屽鏋滀互姝roupId涓烘爣蹇楃殑瀹氭椂鍣ㄤ笉瀛樺湪鐨勮瘽
 	var flag bool = true
 	var timeEle = TimeElement{N: 3, InitN: 3, GroupId: groupRule.GroupId}
@@ -507,7 +512,6 @@
 func filterRule(rule *protomsg.Rule, am *AreaMap) LittleRuleResult {
 	if rule.SdkId == "FaceDetect" || rule.SdkId == "FaceCompare" {
 		// 澶勭悊鐨勬槸浜鸿劯绠楁硶 濡傛灉杩欐潯瑙勫垯閰嶇疆鐨勬槸浜鸿劯绠楁硶锛岃繃婊ゅ畬鏉′欢涔嬪悗鐩存帴寰楀嚭缁撴灉锛屽洜涓鸿偗瀹氭病鏈夋暟閲忔潯浠讹紝鑷繁鎷兼帴
-		log.Println("------------------------------------------杩樿兘杩涜繖鍎夸簡涓嶆垚锛燂紵锛�")
 		if rule.SdkId == am.sdkId && rule.PolygonId == am.areaId { // 绠楁硶鍜屽尯鍩熼兘寰楀鐨勪笂
 
 			if rule.SdkId == "FaceCompare" {
@@ -521,7 +525,7 @@
 				for _, obj := range am.filterData {
 					for index := 0; index < len(obj.Liker); {
 						// 灏嗚揪涓嶅埌闃堝�肩殑鐩镐技鑰呬粠鐩镐技鑰呮暟缁勪腑鍒犻櫎
-						if obj.Liker[index].Score < argValue {
+						if float64(obj.Liker[index].CompareScore) < argValue {
 							// Go 璇█涓垏鐗囧垹闄ゅ厓绱犵殑鏈川鏄細浠ヨ鍒犻櫎鍏冪礌涓哄垎鐣岀偣锛屽皢鍓嶅悗涓や釜閮ㄥ垎鐨勫唴瀛橀噸鏂拌繛鎺ヨ捣鏉ャ�備笉鐢ㄦ��鐤戯紝鏁扮粍鍒犻櫎鍏冪礌灏辫繖涔堝潙鐖�
 							obj.Liker = append(obj.Liker[:index], obj.Liker[index+1:]...)
 						} else {
@@ -589,9 +593,9 @@
 		}
 	} else {
 		// 澶勭悊鐨勯兘鏄痽olo鏁版嵁
-		log.Println("瑙勫垯涓殑sdkId涓猴細", rule.SdkId, "--鍖哄煙鏁版嵁闆嗗悎涓殑sdkId涓猴細", am.sdkId, "--瑙勫垯涓殑鍖哄煙Id涓猴細", rule.PolygonId, "--鍖哄煙鏁版嵁闆嗗悎涓殑鍖哄煙Id涓猴細", am.areaId, )
 		if rule.SdkId == am.sdkId && rule.PolygonId == am.areaId { // 棣栧厛杩欐潯瑙勫垯寰楁槸杩欎釜绠楁硶鐨勮鍒欙紝鍏舵瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
 			if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔�
+				log.Println("----------褰撳墠鏉′欢瑙勫垯锛�---------",rule)
 				var args []Arg
 				if rule.RuleWithPre == "&&" {
 					args = am.filterData
@@ -604,10 +608,13 @@
 					var formula string
 					if rule.SdkArgAlias == "score" {
 						formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
+						log.Println("褰撳墠鐩镐技搴﹀皬鍏紡锛�",formula)
 					} else if rule.SdkArgAlias == "proportion" {
 						formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
+						log.Println("褰撳墠鍗犳瘮灏忓叕寮忥細",formula)
 					} else {
 						formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
+						log.Println("褰撳墠灏哄灏忓叕寮忥細",formula)
 					}
 					expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
 					result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
@@ -709,17 +716,19 @@
 }
 func timeRuleResult(rule *protomsg.Rule, am *AreaMap) LittleRuleResult {
 	if rule.PolygonId == am.areaId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
-		if rule.SdkArgAlias == "time" { // 鍒ゆ柇鏄惁绗﹀悎鏃堕棿瑙勫垯
+		if rule.SdkArgAlias == "time_rule" { // 鍒ゆ柇鏄惁绗﹀悎鏃堕棿瑙勫垯
+			log.Println("----------褰撳墠鏃堕棿瑙勫垯锛�---------",rule)
 			// 鏍规嵁鏀惧�煎瓧娈甸噷瀛樼殑鏃堕棿瑙勫垯鐨刬d鍘诲彟涓�涓〃閲屾煡闇�瑕佹瘮瀵圭殑鏃堕棿娈碉紙姣斿褰撳墠鏃堕棿鏄懆涓夛紝搴旀牴鎹尯鍩焛d鏌ュ嚭鍏跺懆涓夌殑鍑犱釜甯冮槻鏃堕棿娈碉紝鏁扮粍锛�
 			//fmt.Println("鏃堕棿瑙勫垯鐨勬祴璇�")
 			now := time.Now()
 			index := getIndexOfWeek(now.Weekday().String())
 			timeList := GetTimeById(rule.SdkArgValue, index)
+			log.Println("褰撳ぉ鐨勬椂闂磋鍒欙細----------",timeList)
 			//fmt.Println("浠庢暟鎹簱涓煡鍑虹殑鏃堕棿瑙勫垯锛�", timeList)
 			// 鍒ゆ柇鍥剧墖鏁版嵁鐨勬椂闂存槸鍚︾鍚堝綋鍓嶈鍒� 鍦ㄤ竴涓嵆涓簍rue锛屽叏涓嶅湪涓篺alse
 			flag := "false"
 			for _, timeSlot := range timeList {
-				if rule.Operator == "satisfy" { // 婊¤冻鎵�閫夌殑鏃堕棿瑙勫垯
+				if rule.Operator == "satisfy" || rule.Operator == "=="{ // 婊¤冻鎵�閫夌殑鏃堕棿瑙勫垯
 					formula := "'" + timeSlot.Start + "'" + "<" + "'" + am.time + "'"
 					expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
 					result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
@@ -733,7 +742,7 @@
 						break
 					}
 				}
-				if rule.Operator == "unsatisfy" { // 涓嶆弧瓒虫墍閫夌殑鏃堕棿瑙勫垯
+				if rule.Operator == "unsatisfy" || rule.Operator == "!="{ // 涓嶆弧瓒虫墍閫夌殑鏃堕棿瑙勫垯
 					formula := timeSlot.Start + "<" + am.time
 					expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
 					result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�

--
Gitblit v1.8.0