From d197779cb9a7d3d33eb6afb2ad6d1a7ea7cf6e3f Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期四, 04 七月 2019 10:29:27 +0800
Subject: [PATCH] 不符合时间规则的逻辑修改

---
 ruleserver/ruleToformula.go |   79 +++++++++++++++++++++++----------------
 1 files changed, 46 insertions(+), 33 deletions(-)

diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index e1e88cd..c7e3667 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -113,7 +113,7 @@
 	IsStatic    bool       // 鏄惁闈欐
 	ImageWidth  int        // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚瀹� 鍍忕礌
 	ImageHeight int        // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚楂� 鍍忕礌
-	AreaMapList []AreaMap // 鏈瑂dk鎻愬彇鐨勬暟鎹寜鐓у尯鍩熷垝鍒嗗悗鐨勬暟鎹泦鍚�
+	AreaMapList []AreaMap  // 鏈瑂dk鎻愬彇鐨勬暟鎹寜鐓у尯鍩熷垝鍒嗗悗鐨勬暟鎹泦鍚�
 }
 
 // 浠庣畻娉曟ā鍧楀効鎷挎潵鐨勫涓�甯у浘鍍忓悇涓畻娉曟彁鍙栫殑鏁版嵁闆嗗悎
@@ -208,7 +208,7 @@
 		args.RuleResult["face"] = []Arg{}
 		if len(taskRuleList) > 0 {
 			for _, taskRule := range taskRuleList {
-				log.Println("------------------------------浠诲姟瑙勫垯锛�",taskRule)
+				//log.Println("------------------------------浠诲姟瑙勫垯锛�",taskRule)
 				ruleList := taskRule.GroupRules // 鑾峰彇鐨勬槸task涓嬮潰鐨勪换鍔$粍
 				taskId := taskRule.TaskId
 				//log.Println("------------鏈粍浠诲姟涓嬬殑瑙勫垯缁勭殑鏁伴噺锛�",len(ruleList))
@@ -217,7 +217,7 @@
 					if len(temp) > 0 {
 						if ruleList[i].SetType == "linkTask" {
 							// groupId涓惈鏈塴ink鍒欎负鑱斿姩浠诲姟
-							LinkTask(args, ruleList[i], taskId)
+							//LinkTask(args, ruleList[i], taskId)
 						} else {
 							// 鐙珛浠诲姟鐨勫鐞�
 							RunRule(args, ruleList[i], taskId)
@@ -233,9 +233,8 @@
 		if err := recover(); err != nil {
 			fmt.Println("姣斿瑙勫垯鏈夎", err.(string))
 		}
-
 	}()
-	log.Println("+++++++++++瑙勫垯寮�濮嬭繍琛�+++++++++++++++++褰撳墠瑙勫垯--锛�",(*groupRule).GroupText)
+	log.Println("+++++++++++瑙勫垯寮�濮嬭繍琛�+++++++++++++++++褰撳墠瑙勫垯--锛�", (*groupRule).GroupText)
 	resultSplice := []*LittleRuleResult{}
 	// 鍏堣繃瀹屾潯浠惰鍒�
 	for j := 0; j < len(groupRule.Rules); j++ {
@@ -254,7 +253,7 @@
 	for _, sdkData := range args.Sdkdata {
 		for _, areaMap := range sdkData.AreaMapList {
 			for j := 0; j < len(groupRule.Rules); j++ {
-				faces = append(faces,putFaceToResult(groupRule.Rules[j], &areaMap)...)
+				faces = append(faces, putFaceToResult(groupRule.Rules[j], &areaMap)...)
 			}
 		}
 	}
@@ -308,12 +307,12 @@
 		completeFormula = completeFormula + va.Result
 	}
 	if completeFormula != "" {
-		log.Println("鐪嬬湅鍏紡-----------锛�", completeFormula)
+		log.Println("缁撴灉鍏紡-----------锛�", completeFormula)
 		expression, _ := govaluate.NewEvaluableExpression(completeFormula)
-		if strings.HasPrefix(completeFormula,"&&") || strings.HasPrefix(completeFormula,"||"){
+		if strings.HasPrefix(completeFormula, "&&") || strings.HasPrefix(completeFormula, "||") {
 			panic("瑙勫垯鏈夎锛屽緱鍒扮殑鏁板鍏紡涓嶅彲瑙f瀽")
 		}
-		result,_ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
+		result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
 		if !result.(bool) {
 			// 缁欒繖甯ф暟鎹墦涓婅鍒欑粍鏍囩
 			//args.RuleResult = append(args.RuleResult, Result{TaskId: taskId, RuleGroupId: groupRule.GroupId})
@@ -340,17 +339,17 @@
 				sdkName := ""
 				for j := 0; j < len(groupRule.Rules); j++ {
 					for _, sdkData := range args.Sdkdata {
-						if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo && !strings.Contains(sdkName,sdkData.SdkName) { // 鍙褰晊olo绗﹀悎瑙勫垯鐨剆dk 鍚屾椂瑕侀伩鍏嶉噸澶嶆嫾鎺�
+						if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo && !strings.Contains(sdkName, sdkData.SdkName) { // 鍙褰晊olo绗﹀悎瑙勫垯鐨剆dk 鍚屾椂瑕侀伩鍏嶉噸澶嶆嫾鎺�
 							sdkName = sdkData.SdkName + " "
 						}
 					}
 				}
 				if sdkName != "" {
 					args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText})
-					log.Println("-------------------yolo缁撴灉鏍囩",args.RuleResult["yolo"].([]Result))
+					log.Println("-------------------yolo缁撴灉鏍囩", args.RuleResult["yolo"].([]Result))
 				}
 				if args.RuleResult["face"] != nil {
-					log.Println("-------------------face缁撴灉鏍囩",args.RuleResult["face"].([]Arg))
+					log.Println("-------------------face缁撴灉鏍囩", args.RuleResult["face"].([]Arg))
 				}
 				return true
 			} else {
@@ -364,7 +363,7 @@
 
 func putFaceToResult(rule *protomsg.Rule, am *AreaMap) []Arg {
 	faces := []Arg{}
-	if rule.SdkId == am.sdkId && rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a971"{
+	if rule.SdkId == am.sdkId && rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a971" {
 		if len(am.filterData) > 0 {
 			for _, data := range am.filterData {
 				faces = append(faces, data)
@@ -393,7 +392,7 @@
 
 	// }
 	for _, obj := range arg.Photo {
-		log.Println("------------------鐪嬬湅sdkData:",arg.SdkName,"鐨凱hoto鏁版嵁----------------", obj, "----椤轰究鐪嬬湅鍗犳瘮-----锛�", PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale))
+		log.Println("------------------鐪嬬湅sdkData:", arg.SdkName, "鐨凱hoto鏁版嵁----------------", obj, "----椤轰究鐪嬬湅鍗犳瘮-----锛�", PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale))
 		if threshold <= obj.Score && size <= float64(obj.Rects.Width*obj.Rects.Height) && intersectionper <= PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale) {
 			// 杩欐瑕佸榻愯〃杈惧紡閲屾墍闇�瑕佺殑鎵�鏈夊弬鏁�
 			a.targetNum++
@@ -449,6 +448,7 @@
 // 鑱斿姩浠诲姟鐨勫鐞�
 func LinkTask(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string) {
 	// new涓�涓畾鏃跺櫒锛屽鏋滀互姝roupId涓烘爣蹇楃殑瀹氭椂鍣ㄤ笉瀛樺湪鐨勮瘽
+	log.Println("------------------------------------------褰撳墠鏄仈鍔ㄤ换鍔★紝瑙勫垯鏄細", groupRule.GroupText)
 	var flag bool = true
 	var timeEle = TimeElement{N: 3, InitN: 3, GroupId: groupRule.GroupId}
 	for k, timeEle1 := range TimeEleList {
@@ -501,6 +501,7 @@
 			for _, va := range timeEle.RuleResults {
 				completeFormula = completeFormula + va.RuleWithPre + "" + va.Result
 			}
+			log.Println("---------------------------鑱斿姩浠诲姟鐨勫叕寮�", completeFormula)
 			if completeFormula != "" {
 				expression, _ := govaluate.NewEvaluableExpression(completeFormula)
 				result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
@@ -509,17 +510,17 @@
 					sdkName := ""
 					for j := 0; j < len(groupRule.Rules); j++ {
 						for _, sdkData := range args.Sdkdata {
-							if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo && !strings.Contains(sdkName,sdkData.SdkName) { // 鍙褰晊olo绗﹀悎瑙勫垯鐨剆dk 鍚屾椂瑕侀伩鍏嶉噸澶嶆嫾鎺�
+							if groupRule.Rules[j].SdkId == sdkData.SdkId && sdkData.IsYolo && !strings.Contains(sdkName, sdkData.SdkName) { // 鍙褰晊olo绗﹀悎瑙勫垯鐨剆dk 鍚屾椂瑕侀伩鍏嶉噸澶嶆嫾鎺�
 								sdkName = sdkData.SdkName + " "
 							}
 						}
 					}
 					if sdkName != "" {
 						args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkName, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText})
-						log.Println("-------------------yolo缁撴灉鏍囩",args.RuleResult["yolo"].([]Result))
+						log.Println("-------------------yolo缁撴灉鏍囩", args.RuleResult["yolo"].([]Result))
 					}
 					if args.RuleResult["face"] != nil {
-						log.Println("-------------------face缁撴灉鏍囩",args.RuleResult["face"].([]Arg))
+						log.Println("-------------------face缁撴灉鏍囩", args.RuleResult["face"].([]Arg))
 					}
 					os.Exit(0)
 				}
@@ -597,10 +598,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)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
@@ -629,7 +633,7 @@
 		// 澶勭悊鐨勯兘鏄痽olo鏁版嵁
 		if rule.SdkId == am.sdkId && rule.PolygonId == am.areaId { // 棣栧厛杩欐潯瑙勫垯寰楁槸杩欎釜绠楁硶鐨勮鍒欙紝鍏舵瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
 			if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔�
-				log.Println("----------褰撳墠鏉′欢瑙勫垯锛�---------",rule)
+				log.Println("----------褰撳墠鏉′欢瑙勫垯锛�---------", rule)
 				var args []Arg
 				if rule.RuleWithPre == "&&" {
 					args = am.filterData
@@ -642,13 +646,13 @@
 					var formula string
 					if rule.SdkArgAlias == "score" {
 						formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
-						log.Println("褰撳墠鐩镐技搴﹀皬鍏紡锛�",formula)
+						log.Println("褰撳墠鐩镐技搴﹀皬鍏紡锛�", formula)
 					} else if rule.SdkArgAlias == "proportion" {
 						formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
-						log.Println("褰撳墠鍗犳瘮灏忓叕寮忥細",formula)
+						log.Println("褰撳墠鍗犳瘮灏忓叕寮忥細", formula)
 					} else {
 						formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
-						log.Println("褰撳墠灏哄灏忓叕寮忥細",formula)
+						log.Println("褰撳墠灏哄灏忓叕寮忥細", formula)
 					}
 					expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
 					result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
@@ -749,20 +753,21 @@
 	return LittleRuleResult{}
 }
 func timeRuleResult(rule *protomsg.Rule, am *AreaMap) LittleRuleResult {
-	if rule.PolygonId == am.areaId && rule.SdkId == am.sdkId{ // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
+	if rule.PolygonId == am.areaId && rule.SdkId == am.sdkId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
 		if rule.SdkArgAlias == "time_rule" { // 鍒ゆ柇鏄惁绗﹀悎鏃堕棿瑙勫垯
-			log.Println("----------褰撳墠鏃堕棿瑙勫垯锛�---------",rule)
+			log.Println("----------褰撳墠鏃堕棿瑙勫垯锛�---------", rule)
 			// 鏍规嵁鏀惧�煎瓧娈甸噷瀛樼殑鏃堕棿瑙勫垯鐨刬d鍘诲彟涓�涓〃閲屾煡闇�瑕佹瘮瀵圭殑鏃堕棿娈碉紙姣斿褰撳墠鏃堕棿鏄懆涓夛紝搴旀牴鎹尯鍩焛d鏌ュ嚭鍏跺懆涓夌殑鍑犱釜甯冮槻鏃堕棿娈碉紝鏁扮粍锛�
 			//fmt.Println("鏃堕棿瑙勫垯鐨勬祴璇�")
 			now := time.Now()
 			index := getIndexOfWeek(now.Weekday().String())
 			timeList := GetTimeById(rule.SdkArgValue, index)
-			log.Println("褰撳ぉ鐨勬椂闂存闆嗗悎锛�----------",timeList)
+			log.Println("褰撳ぉ鐨勬椂闂存闆嗗悎锛�----------", timeList)
 			//fmt.Println("浠庢暟鎹簱涓煡鍑虹殑鏃堕棿瑙勫垯锛�", timeList)
 			// 鍒ゆ柇鍥剧墖鏁版嵁鐨勬椂闂存槸鍚︾鍚堝綋鍓嶈鍒� 鍦ㄤ竴涓嵆涓簍rue锛屽叏涓嶅湪涓篺alse
-			flag := "false"
-			for _, timeSlot := range timeList {
-				if rule.Operator == "satisfy" || rule.Operator == "=="{ // 婊¤冻鎵�閫夌殑鏃堕棿瑙勫垯
+
+			if rule.Operator == "satisfy" || rule.Operator == "==" { // 婊¤冻鎵�閫夌殑鏃堕棿瑙勫垯
+				flag := "false"
+				for _, timeSlot := range timeList {
 					formula := "'" + timeSlot.Start + "'" + "<" + "'" + am.time + "'"
 					expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
 					result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
@@ -776,21 +781,29 @@
 						break
 					}
 				}
-				if rule.Operator == "unsatisfy" || rule.Operator == "!="{ // 涓嶆弧瓒虫墍閫夌殑鏃堕棿瑙勫垯
-					formula := timeSlot.Start + "<" + am.time
+				return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + flag, rule.Sort}
+			}
+
+			if rule.Operator == "unsatisfy" || rule.Operator == "!=" { // 涓嶆弧瓒虫墍閫夌殑鏃堕棿瑙勫垯
+				flag := "true"
+				for _, timeSlot := range timeList {
+					formula := "'" + timeSlot.Start + "'" + " < " + "'" + am.time + "'"
+					log.Println("-----------------鏃堕棿瑙勫垯涓嶆弧瓒崇殑鍏紡start锛�", formula)
 					expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
 					result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
 
-					formula1 := timeSlot.End + ">" + am.time
+					formula1 := "'" + timeSlot.End + "'" + " > " + "'" + am.time + "'"
+					log.Println("-----------------鏃堕棿瑙勫垯涓嶆弧瓒崇殑鍏紡end锛�", formula1)
 					expression1, _ := govaluate.NewEvaluableExpression(formula1) // 寰楀埌鏁板鍏紡
 					result1, _ := expression1.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
 					if result.(bool) && result1.(bool) {
-						flag = "true"
+						flag = "false"
 						break
 					}
 				}
+				return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + flag, rule.Sort}
 			}
-			return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + flag, rule.Sort}
+
 		}
 	}
 	return LittleRuleResult{}
@@ -826,7 +839,7 @@
 	//		cameraTimeRule = rule
 	//	}
 	//}
-	_,cameraTimeRule := cache.GetTimeRuleById(id)
+	_, cameraTimeRule := cache.GetTimeRuleById(id)
 	var timeRangeList []day
 	json.Unmarshal([]byte(cameraTimeRule.TimeRule), &timeRangeList)
 	for _, timerange := range timeRangeList {

--
Gitblit v1.8.0