From 087bf92d707de1a838451719da505f69b6934087 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期五, 29 十一月 2019 18:03:27 +0800
Subject: [PATCH] 换log

---
 algorithm/middleware/middleware.go |  144 +++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 130 insertions(+), 14 deletions(-)

diff --git a/algorithm/middleware/middleware.go b/algorithm/middleware/middleware.go
index 928d6e8..ca3b6f3 100644
--- a/algorithm/middleware/middleware.go
+++ b/algorithm/middleware/middleware.go
@@ -2,23 +2,31 @@
 
 import (
 	"basic.com/pubsub/protomsg.git"
-	"basic.com/valib/logger.git"
+	logger "github.com/jeanphorn/log4go"
 	"encoding/json"
 	"github.com/knetic/govaluate"
 	"plugin"
 	"ruleprocess/cache"
+	"ruleprocess/ruleserver"
 	"ruleprocess/structure"
+	"sort"
 	"strings"
 	"time"
 )
 
-func Entrance (args *structure.SdkDatas,groupRule protomsg.GroupRule) ([]*structure.LittleRuleResult,string,string){
+func Entrance (args *structure.SdkDatas,groupRule protomsg.GroupRule,lable *structure.Others,message *protomsg.SdkMessage) (bool,string,string){
 	resultSplice := []*structure.LittleRuleResult{}
 	sdkNames := ""
 	polygonId := ""
 	// 鍏堣繃瀹屾潯浠惰鍒�
 	for j := 0; j < len(groupRule.Rules); j++ {
-		if groupRule.Rules[j].SdkArgAlias == "score" || groupRule.Rules[j].SdkArgAlias == "proportion" || groupRule.Rules[j].SdkArgAlias == "size" || (groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && groupRule.Rules[j].SdkArgAlias != "time_rule"){
+
+		carFlag := groupRule.Rules[j].SdkArgAlias == "license" ||  groupRule.Rules[j].SdkArgAlias == "nConfidence" || groupRule.Rules[j].SdkArgAlias == "fConfidence" ||
+			groupRule.Rules[j].SdkArgAlias == "nType" || groupRule.Rules[j].SdkArgAlias == "nVehicleColor1" ||  groupRule.Rules[j].SdkArgAlias == "nVehicleBright" || groupRule.Rules[j].SdkArgAlias == "nCarColor" ||
+		groupRule.Rules[j].SdkArgAlias == "fVDConf" || groupRule.Rules[j].SdkArgAlias == "nVehicleColor2" ||  groupRule.Rules[j].SdkArgAlias == "nColor" || groupRule.Rules[j].SdkArgAlias == "nPlateFlag"
+
+		if groupRule.Rules[j].SdkArgAlias == "score" || groupRule.Rules[j].SdkArgAlias == "proportion" || groupRule.Rules[j].SdkArgAlias == "size" ||
+			(groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && groupRule.Rules[j].SdkArgAlias != "time_rule") || carFlag{
 			for _, sdkData := range args.Sdkdata {
 				// 鏍规嵁瑙勫垯鐨剆dkId鏌ュ嚭鍏跺搴旂殑ipcId锛岀敤ipcId鍘绘壘璇ユ瘮瀵圭殑鏁版嵁
 				sdk, err := cache.GetSdkById(groupRule.Rules[j].SdkId)
@@ -29,9 +37,9 @@
 				sdkName := sdk.SdkName
 				//logger.Info("瑙勫垯鐨刬pcId涓巗dkData鐨処pcId:", ipcId, "===", sdkData.IpcId)
 				if ipcId == sdkData.IpcId {
-					//logger.Info("褰撳墠璧扮殑瑙勫垯鏄�--锛�", sdkName, "---","")
+					logger.Info("褰撳墠璧扮殑瑙勫垯鏄�--锛�", groupRule.Rules[j],sdkName,groupRule.Rules[j].SdkArgAlias, "---","")
 					for _, areaMap := range sdkData.AreaMapList {
-						ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap)
+						ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap,lable,args,message)
 						if ruleResult.Result != "" {
 							logger.Info("鏉′欢瑙勫垯缁撴灉锛�", ruleResult.Result)
 							// 濡傛灉缁撴灉涓虹湡锛屾妸杩欐潯瑙勫垯涓殑鍖哄煙缃负鏈夋晥
@@ -43,7 +51,7 @@
 								sdkNames = sdkName + " "
 							}
 							if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(polygonId, groupRule.Rules[j].PolygonId) {
-								polygonId = groupRule.Rules[j].PolygonId + " "
+								polygonId += groupRule.Rules[j].PolygonId + ","
 							}
 							resultSplice = append(resultSplice, &ruleResult)
 						}
@@ -52,6 +60,7 @@
 			}
 		}
 	}
+	// 浜鸿劯
 	for j := 0; j < len(groupRule.Rules); j++ {
 		if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && groupRule.Rules[j].SdkArgAlias != "time_rule"{
 			for _, sdkData := range args.Sdkdata {
@@ -66,7 +75,7 @@
 				if ipcId == sdkData.IpcId {
 					//logger.Info("褰撳墠璧扮殑瑙勫垯鏄�--锛�", sdkName, "---","")
 					for _, areaMap := range sdkData.AreaMapList {
-						ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap)
+						ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap,lable,args,message)
 						if ruleResult.Result != "" {
 							logger.Info("浜鸿劯姣斿瑙勫垯缁撴灉锛�", ruleResult.Result)
 							// 濡傛灉缁撴灉涓虹湡锛屾妸杩欐潯瑙勫垯涓殑鍖哄煙缃负鏈夋晥
@@ -78,7 +87,79 @@
 								sdkNames = sdkName + " "
 							}
 							if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(polygonId, groupRule.Rules[j].PolygonId) {
-								polygonId = groupRule.Rules[j].PolygonId + " "
+								polygonId += groupRule.Rules[j].PolygonId + ","
+							}
+							resultSplice = append(resultSplice, &ruleResult)
+						}
+					}
+				}
+			}
+		}
+	}
+	// 涓綋闈欐
+	for j := 0; j < len(groupRule.Rules); j++ {
+		if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a977" && groupRule.Rules[j].SdkArgAlias == "duration"{
+			for _, sdkData := range args.Sdkdata {
+				// 鏍规嵁瑙勫垯鐨剆dkId鏌ュ嚭鍏跺搴旂殑ipcId锛岀敤ipcId鍘绘壘璇ユ瘮瀵圭殑鏁版嵁
+				sdk, err := cache.GetSdkById(groupRule.Rules[j].SdkId)
+				if err != nil {
+					logger.Error("娌℃煡鍒皊dk鐨勪俊鎭�---", err)
+				}
+				ipcId := sdk.IpcId
+				sdkName := sdk.SdkName
+				//logger.Info("瑙勫垯鐨刬pcId涓巗dkData鐨処pcId:", ipcId, "===", sdkData.IpcId)
+				if ipcId == sdkData.IpcId {
+					logger.Info("褰撳墠璧扮殑瑙勫垯鏄�--锛�", groupRule.Rules[j],sdkName,groupRule.Rules[j].SdkArgAlias, "---","")
+					for _, areaMap := range sdkData.AreaMapList {
+						ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap,lable,args,message)
+						if ruleResult.Result != "" {
+							logger.Info("涓綋闈欐缁撴灉锛�", ruleResult.Result)
+							// 濡傛灉缁撴灉涓虹湡锛屾妸杩欐潯瑙勫垯涓殑鍖哄煙缃负鏈夋晥
+							if strings.Contains(ruleResult.Result, "true") {
+								areaMap.IsEffective = true
+							}
+							// 濡傛灉姝ょ粨鏋滀负鐪熶笖褰撳墠杩囩殑鏄痽olo绠楁硶锛屽簲璁颁笅姝よ鍒欐墍瀵瑰簲鐨剆dkName,鍙﹀锛岃繕瑕佸幓閲� (鍚庡姞锛氭妸姝ゆ潯瑙︾鐨勫尯鍩焛d涔熻褰曚笅鏉�)
+							if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
+								sdkNames = sdkName + " "
+							}
+							if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(polygonId, groupRule.Rules[j].PolygonId) {
+								polygonId += groupRule.Rules[j].PolygonId + ","
+							}
+							resultSplice = append(resultSplice, &ruleResult)
+						}
+					}
+				}
+			}
+		}
+	}
+	// 杞﹁締
+	for j := 0; j < len(groupRule.Rules); j++ {
+		if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a978" && (groupRule.Rules[j].SdkArgAlias == "nCarCount" || groupRule.Rules[j].SdkArgAlias == "nCarLogoCount"){
+			for _, sdkData := range args.Sdkdata {
+				// 鏍规嵁瑙勫垯鐨剆dkId鏌ュ嚭鍏跺搴旂殑ipcId锛岀敤ipcId鍘绘壘璇ユ瘮瀵圭殑鏁版嵁
+				sdk, err := cache.GetSdkById(groupRule.Rules[j].SdkId)
+				if err != nil {
+					logger.Error("娌℃煡鍒皊dk鐨勪俊鎭�---", err)
+				}
+				ipcId := sdk.IpcId
+				sdkName := sdk.SdkName
+				//logger.Info("瑙勫垯鐨刬pcId涓巗dkData鐨処pcId:", ipcId, "===", sdkData.IpcId)
+				if ipcId == sdkData.IpcId {
+					logger.Info("褰撳墠璧扮殑瑙勫垯鏄�--锛�", groupRule.Rules[j],sdkName,groupRule.Rules[j].SdkArgAlias, "---","")
+					for _, areaMap := range sdkData.AreaMapList {
+						ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap,lable,args,message)
+						if ruleResult.Result != "" {
+							logger.Info("杞︾墝缁撴灉锛�", ruleResult.Result)
+							// 濡傛灉缁撴灉涓虹湡锛屾妸杩欐潯瑙勫垯涓殑鍖哄煙缃负鏈夋晥
+							if strings.Contains(ruleResult.Result, "true") {
+								areaMap.IsEffective = true
+							}
+							// 濡傛灉姝ょ粨鏋滀负鐪熶笖褰撳墠杩囩殑鏄痽olo绠楁硶锛屽簲璁颁笅姝よ鍒欐墍瀵瑰簲鐨剆dkName,鍙﹀锛岃繕瑕佸幓閲� (鍚庡姞锛氭妸姝ゆ潯瑙︾鐨勫尯鍩焛d涔熻褰曚笅鏉�)
+							if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
+								sdkNames = sdkName + " "
+							}
+							if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(polygonId, groupRule.Rules[j].PolygonId) {
+								polygonId += groupRule.Rules[j].PolygonId + ","
 							}
 							resultSplice = append(resultSplice, &ruleResult)
 						}
@@ -100,7 +181,7 @@
 				sdkName := sdk.SdkName
 				if ipcId == sdkData.IpcId {
 					for _, areaMap := range sdkData.AreaMapList {
-						ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap)
+						ruleResult := CallSo(sdk.Id, groupRule.Rules[j], areaMap,lable,args,message)
 						if ruleResult.Result != "" {
 							if strings.Contains(ruleResult.Result, "true") {
 								areaMap.IsEffective = true
@@ -110,7 +191,7 @@
 								sdkNames = sdkName + " "
 							}
 							if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(polygonId, groupRule.Rules[j].PolygonId) {
-								polygonId = groupRule.Rules[j].PolygonId + " "
+								polygonId += groupRule.Rules[j].PolygonId + ","
 							}
 							resultSplice = append(resultSplice, &ruleResult)
 						}
@@ -140,7 +221,7 @@
 							sdkNames = sdkName + " "
 						}
 						if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(polygonId, groupRule.Rules[j].PolygonId) {
-							polygonId = groupRule.Rules[j].PolygonId + " "
+							polygonId += groupRule.Rules[j].PolygonId + ","
 						}
 						resultSplice = append(resultSplice, &ruleResult)
 					}
@@ -148,7 +229,37 @@
 			}
 		}
 	}
-	return resultSplice,sdkNames,polygonId
+	// 灏嗘暟缁勬寜sort鎺掑簭
+	sort.Sort(ruleserver.ResultList(resultSplice))
+	// 鎺掑簭鍚庡彇鍚勮嚜鐨勭粨鏋滃拰杩炴帴绗︽嫾鍑鸿鍒欒〃杈惧紡寰楀嚭缁撴灉
+	completeFormula := ""
+	for _, va := range resultSplice {
+		completeFormula = completeFormula + va.Result
+	}
+	if strings.HasPrefix(completeFormula, "&&") || strings.HasPrefix(completeFormula, "||") || strings.HasPrefix(completeFormula, ">=") || strings.HasPrefix(completeFormula, "<=") || strings.HasPrefix(completeFormula, "==") || strings.HasPrefix(completeFormula, "!=") || strings.HasPrefix(completeFormula, ">") || strings.HasPrefix(completeFormula, "<") {
+		// 浠ヨ繖浜涘紑澶寸殑鍩烘湰鏄仈鍔ㄤ换鍔�
+		if strings.HasPrefix(completeFormula, "&&") || strings.HasPrefix(completeFormula, "||") || strings.HasPrefix(completeFormula, ">=") || strings.HasPrefix(completeFormula, "<=") || strings.HasPrefix(completeFormula, "==") || strings.HasPrefix(completeFormula, "!=") {
+			completeFormula = completeFormula[2:]
+		}
+		if strings.HasPrefix(completeFormula, ">") || strings.HasPrefix(completeFormula, "<") {
+			completeFormula = completeFormula[1:]
+		}
+		logger.Info("-------------------鐪嬬湅鎷旀瘺鍚庣殑琛ㄨ揪寮忥細", completeFormula)
+		//expression, _ := govaluate.NewEvaluableExpression(completeFormula)
+		//result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
+		//return result.(bool)
+	}
+	if completeFormula != "" {
+		logger.Info("缁撴灉鍏紡-----------锛�", completeFormula)
+		expression, err2 := govaluate.NewEvaluableExpression(completeFormula)
+		if strings.HasPrefix(completeFormula, "&&") || strings.HasPrefix(completeFormula, "||") || err2 != nil {
+			panic("瑙勫垯鏈夎锛屽緱鍒扮殑鏁板鍏紡涓嶅彲瑙f瀽")
+		}
+		result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
+		return result.(bool),sdkNames,polygonId
+	} else {
+		return false,sdkNames,polygonId
+	}
 }
 
 func timeRuleResult(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult {
@@ -208,7 +319,7 @@
 	return structure.LittleRuleResult{}
 }
 
-func CallSo(sdkId string,rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult{
+func CallSo(sdkId string,rule *protomsg.Rule, am *structure.AreaMap,lable *structure.Others,args *structure.SdkDatas,message *protomsg.SdkMessage) structure.LittleRuleResult{
 	// 鏍规嵁sdkId鏌ュ嚭鍏跺搴旂殑sdk鐨剆oName锛岃皟鐢ㄧ浉搴攕o鐨凟ntrance鏂规硶
 	var soName = ""
 	if sdkId == "812b674b-2375-4589-919a-5c1c3278a97e" {
@@ -219,6 +330,10 @@
 		soName = "personUnsual.so"
 	} else if sdkId == "812b674b-2375-4589-919a-5c1c3278a972" {
 		soName = "faceCompare.so"
+	} else if sdkId == "812b674b-2375-4589-919a-5c1c3278a977" {
+		soName = "static.so"
+	} else if sdkId == "812b674b-2375-4589-919a-5c1c3278a978" {
+		soName = "plate.so"
 	}
 	//soInfo,errr := cache.GetSoInfoById(sdkId)
 	//if errr != nil {
@@ -233,7 +348,8 @@
 	if err1 != nil {
 		panic("娌℃湁鎵惧埌鍏ュ彛鍑芥暟")
 	}
-	ruleResult := f.(func(rule *protomsg.Rule, am *structure.AreaMap)structure.LittleRuleResult)(rule,am)
+	logger.Info("鍙戠粰so鐨勬暟鎹細",sdkId,rule.SdkArgValue,rule.Operator,rule.SdkArgAlias)
+	ruleResult := f.(func(rule *protomsg.Rule, am *structure.AreaMap,lable *structure.Others, args *structure.SdkDatas,message *protomsg.SdkMessage)structure.LittleRuleResult)(rule,am,lable,args,message)
 	return ruleResult
 }
 

--
Gitblit v1.8.0