From 5457fe77b87d5d1b191958aafa4974affb93a7ec Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期五, 13 十二月 2019 10:44:19 +0800
Subject: [PATCH] 前者包含后者

---
 algorithm/middleware/middleware.go   |  103 ++++++++++++++++++++++++++++++----
 algorithm/personTrack/personTrack.go |    2 
 go.sum                               |    2 
 cache/cache_test.go                  |    7 ++
 algorithm/middleware/readyData.go    |    3 -
 cache/cache.go                       |    9 ++
 go.mod                               |    2 
 ruleserver/ruleToformula.go          |    2 
 algorithm/face/face.go               |    7 +
 9 files changed, 115 insertions(+), 22 deletions(-)

diff --git a/algorithm/face/face.go b/algorithm/face/face.go
index 7a121a1..2e8530a 100644
--- a/algorithm/face/face.go
+++ b/algorithm/face/face.go
@@ -81,7 +81,9 @@
 							}
 						}
 						am.TargetNum = len(am.FilterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁
-						//logger.Info("杩囧畬鏉′欢鍚庣殑鐩爣鏁伴噺涓猴細",am.TargetNum)
+						if rule.RuleWithPre == "contain" {
+
+						}
 						if am.TargetNum > 0 {
 							//logger.Info("锛侊紒锛侊紒锛侊紒锛侊紒锛佷汉鑴告娴嬫垚鍔�")
 							return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
@@ -100,4 +102,5 @@
 		}
 	}
 	return structure.LittleRuleResult{}
-}
\ No newline at end of file
+}
+
diff --git a/algorithm/middleware/middleware.go b/algorithm/middleware/middleware.go
index e21e9bb..bd8537d 100644
--- a/algorithm/middleware/middleware.go
+++ b/algorithm/middleware/middleware.go
@@ -18,6 +18,7 @@
 	resultSplice := []*structure.LittleRuleResult{}
 	sdkNames := ""
 	polygonId := ""
+
 	// 杩欐杩囩殑鏄椂闂存瑙勫垯锛堟椂闂存绛夛級
 	for j := 0; j < len(groupRule.Rules); j++ {
 		for _, sdkData := range args.Sdkdata {
@@ -32,7 +33,7 @@
 					ruleResult := timeRuleResult(groupRule.Rules[j], areaMap)
 					if ruleResult.Result != "" {
 						if strings.Contains(ruleResult.Result, "false") {
-							return false,"",""  // 涓嶇鍚堟椂闂磋鍒欑殑璇濈洿鎺ヨ繑鍥烇紝涓嶅啀娴垂鏃堕棿
+							return false,"",""  // 涓嶇鍚堟椂闂磋鍒欑殑璇濈洿鎺ヨ繑鍥烇紝涓嶅啀娴垂绋嬪簭鎵ц
 						}
 						if strings.Contains(ruleResult.Result, "true") {
 							areaMap.IsEffective = true
@@ -72,6 +73,11 @@
 					//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 groupRule.Rules[j].RuleWithPre == "contain" {
+							assembleDta(args,groupRule.Rules[j-1],groupRule.Rules[j])
+							// 鎶婂綋鍓嶅皬瑙勫垯缁撴灉缃┖
+							ruleResult = structure.LittleRuleResult{}
+						}
 						if ruleResult.Result != "" {
 							//logger.Info("鏉′欢瑙勫垯缁撴灉锛�", ruleResult.Result)
 							// 濡傛灉缁撴灉涓虹湡锛屾妸杩欐潯瑙勫垯涓殑鍖哄煙缃负鏈夋晥
@@ -202,7 +208,7 @@
 	}
 	// 璺ㄦ憚鍍忔満璺熻釜
 	for j := 0; j < len(groupRule.Rules); j++ {
-		if groupRule.Rules[j].SdkId == "浜轰綋璺熻釜" && groupRule.Rules[j].SdkArgAlias != "鐏甸瓊鍙傛暟"{
+		if groupRule.Rules[j].SdkId == "520af340-f257-4fe2-ac3c-695c390e53dc" && groupRule.Rules[j].SdkArgAlias == "cmpThreshold"{
 			for _, sdkData := range args.Sdkdata {
 				// 鏍规嵁瑙勫垯鐨剆dkId鏌ュ嚭鍏跺搴旂殑ipcId锛岀敤ipcId鍘绘壘璇ユ瘮瀵圭殑鏁版嵁
 				sdk, err := cache.GetSdkById(groupRule.Rules[j].SdkId)
@@ -210,8 +216,6 @@
 					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 {
@@ -222,13 +226,7 @@
 							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)
 						}
 					}
@@ -425,4 +423,85 @@
 		}
 	}
 	return 0
-}
\ No newline at end of file
+}
+
+//// 鏃堕棿娈佃皟搴�
+//func timeDispatch(args *structure.SdkDatas,groupRule protomsg.GroupRule,resultSplice []*structure.LittleRuleResult,sdkNames,polygonId string) (bool,string,string){
+//	// 杩欐杩囩殑鏄椂闂存瑙勫垯锛堟椂闂存绛夛級
+//	for j := 0; j < len(groupRule.Rules); j++ {
+//		for _, sdkData := range args.Sdkdata {
+//			sdk, err := cache.GetSdkById(groupRule.Rules[j].SdkId)
+//			if err != nil {
+//				logger.Error("娌℃煡鍒皊dk鐨勪俊鎭�---", err)
+//			}
+//			ipcId := sdk.IpcId
+//			sdkName := sdk.SdkName
+//			if ipcId == sdkData.IpcId {
+//				for _, areaMap := range sdkData.AreaMapList {
+//					ruleResult := timeRuleResult(groupRule.Rules[j], areaMap)
+//					if ruleResult.Result != "" {
+//						if strings.Contains(ruleResult.Result, "false") {
+//							return false,"",""  // 涓嶇鍚堟椂闂磋鍒欑殑璇濈洿鎺ヨ繑鍥烇紝涓嶅啀娴垂绋嬪簭鎵ц
+//						}
+//						if strings.Contains(ruleResult.Result, "true") {
+//							areaMap.IsEffective = true
+//						}
+//						//logger.Info("鏃堕棿瑙勫垯缁撴灉锛�", ruleResult.Result)
+//						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)
+//					}
+//				}
+//			}
+//		}
+//	}
+//}
+
+func assembleData(args *structure.SdkDatas,resultSplice []*structure.LittleRuleResult,groupRule protomsg.GroupRule) {
+	for index,result := range resultSplice {
+		if strings.Contains(result.Result,"contain") {
+			assembleDta(args,groupRule.Rules[index-1],groupRule.Rules[index])
+			// 鍒犻櫎甯︽湁contain鐨勮鍒欑粨鏋�
+			resultSplice = append(resultSplice[:index],resultSplice[index+1:]...)
+		}
+	}
+}
+// 濡傛灉瑙勫垯缁勪腑鏈夊寘鍚鍙凤紝鎶婅鍒欑粍涔嬪悗鐨勮鍒欏搴旂殑绠楁硶鍜屽尯鍩熸彁鍙栫殑鏁版嵁瑁呴厤鍒板墠闈㈠幓
+func assembleDta(args *structure.SdkDatas,rule1,rule2 *protomsg.Rule) {
+		// 鎷垮埌鍚庨潰鐨勯偅涓尯鍩熺殑鏁版嵁
+		area := structure.AreaMap{}
+		for _, sdkData := range args.Sdkdata {
+			for _, areaMap := range sdkData.AreaMapList {
+				if areaMap.SdkId == rule2.SdkId && areaMap.AreaId == rule2.PolygonId {
+					area = *areaMap
+					goto second
+				}
+			}
+		}
+second:	for _, sdkData := range args.Sdkdata {
+			for _, areaMap := range sdkData.AreaMapList {
+				if areaMap.SdkId == rule1.SdkId && areaMap.AreaId == rule1.PolygonId {
+					// 鎷垮埌鍖呭惈绗︿箣鍓嶇殑鏁版嵁锛岄亶鍘嗚閰�
+					for _,arg := range areaMap.FilterData {
+						mergeArg(arg,area)
+					}
+					// 娓呯┖浜鸿劯锛屼汉鑴镐笉鍐嶅崟鐙彃鍏ヤ簡
+					len(area.FilterData) = 0
+					return // 瑁呴厤涓�娆″氨鍙互
+				}
+			}
+		}
+}
+
+func mergeArg(arg *structure.Arg,areaMap structure.AreaMap) {
+	for _,arg1 := range areaMap.FilterData {
+		precent := ruleserver.PgsInterPercent(Rect2Point(arg.Location),arg1.Location,1,1)
+		if precent > 99 {
+			arg.AttachArg = arg1.SourceArg
+		}
+	}
+}
diff --git a/algorithm/middleware/readyData.go b/algorithm/middleware/readyData.go
index 5ea0c97..b59b63d 100644
--- a/algorithm/middleware/readyData.go
+++ b/algorithm/middleware/readyData.go
@@ -80,7 +80,6 @@
 		if err := recover(); err != nil {
 			logger.Info("瑙e寘杩囩▼鐨勫紓甯告崟鑾�", err.(string))
 		}
-
 	}()
 	// 鍙嶅簭鍒楀寲鏁版嵁寰楀埌sdk鍏ュ弬
 	m := protomsg.SdkMessage{}
@@ -222,8 +221,6 @@
 		for _, info := range Track.Result {
 			logger.Info("鎺ユ敹璺熻釜鏁版嵁锛�",info.Id,info.Confidence)
 			photoMap := structure.PhotoMap{structure.SourcePhoto{Id: strconv.Itoa(int(info.Id)),Score: float64(info.Confidence)*100,Rects: rectFormat(info.RcHuman), Type: "track"},structure.SourcePhoto{}}
-			//FacePush2Body(&photoMap,m.Tasklab.Sdkinfos)
-			logger.Info("缁勮鍚庣殑璺熻釜鏁版嵁锛�",photoMap)
 			arg.Photo = append(arg.Photo, photoMap)
 		}
 		args.Sdkdata = append(args.Sdkdata, &arg)
diff --git a/algorithm/personTrack/personTrack.go b/algorithm/personTrack/personTrack.go
index 25f9965..7327df8 100644
--- a/algorithm/personTrack/personTrack.go
+++ b/algorithm/personTrack/personTrack.go
@@ -35,7 +35,7 @@
 		//logger.Debug("---------璧颁簡浜哄憳寮傚父绠楁硶", rule.Id, rule.SdkArgAlias, rule.Operator, rule.SdkArgValue, am.AreaId)
 		if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" || rule.SdkArgAlias == "" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔�
 			return filterRule(rule, am)
-		} else if rule.SdkArgAlias == "threshold"{
+		} else if rule.SdkArgAlias == "cmpThreshold"{
 			return track(rule,am)
 		}
 		return structure.LittleRuleResult{}
diff --git a/cache/cache.go b/cache/cache.go
index 9f4381d..53fcea2 100644
--- a/cache/cache.go
+++ b/cache/cache.go
@@ -60,10 +60,11 @@
 
 	initSdks() //鍒濆鍖杝dk鍒楄〃淇℃伅
 
-	initSoData()
+	initSoData() // sopath
 
 	initDictionary() // 鍒濆鍖栧瓧鍏�
 
+	initTaskSdkArgs()
 	initChan <- true
 }
 
@@ -166,7 +167,11 @@
 		}
 	}
 }
-
+func initTaskSdkArgs() {
+	var api dbapi.TaskApi
+	all := api.FindAllTaskDefaultArgs("TASKRULE")
+	fmt.Println(all)
+}
 func initCameraTaskRules() {
 	var api dbapi.CameraTaskArgsApi
 	all := api.FindAll()
diff --git a/cache/cache_test.go b/cache/cache_test.go
new file mode 100644
index 0000000..b8349b6
--- /dev/null
+++ b/cache/cache_test.go
@@ -0,0 +1,7 @@
+package cache
+
+import "testing"
+
+func TestInitTaskSdkArgs(t *testing.T){
+	initTaskSdkArgs()
+}
\ No newline at end of file
diff --git a/go.mod b/go.mod
index 3dba522..9498bd8 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@
 go 1.12
 
 require (
-	basic.com/dbapi.git v0.0.0-20191025084729-a04db890e7b5
+	basic.com/dbapi.git v0.0.0-20191212040113-a47ddaef3711
 	basic.com/fileserver/WeedFSClient.git v0.0.0-20191105073656-98059e699477
 	basic.com/pubsub/cache.git v0.0.0-20190718093725-6a413e1d7d48
 	basic.com/pubsub/esutil.git v0.0.0-20191205065552-198b5ecaefce
diff --git a/go.sum b/go.sum
index 7056fa9..7ebe7da 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@
 basic.com/dbapi.git v0.0.0-20190822081128-ce924b8a905f/go.mod h1:eDXPnxaz6jZPDvBSk7ya7oSASWPCuUEgRTJCjsfKt/Q=
 basic.com/dbapi.git v0.0.0-20191025084729-a04db890e7b5 h1:OcZOgjBXfzhI1Ukxblacxu5xwKl448ADYyulJ02zdb8=
 basic.com/dbapi.git v0.0.0-20191025084729-a04db890e7b5/go.mod h1:eDXPnxaz6jZPDvBSk7ya7oSASWPCuUEgRTJCjsfKt/Q=
+basic.com/dbapi.git v0.0.0-20191212040113-a47ddaef3711 h1:sTBMIIQKudhzFQIOkDNciqC0DIENAnOKPyN2onJIxGI=
+basic.com/dbapi.git v0.0.0-20191212040113-a47ddaef3711/go.mod h1:eDXPnxaz6jZPDvBSk7ya7oSASWPCuUEgRTJCjsfKt/Q=
 basic.com/fileserver/WeedFSClient.git v0.0.0-20191105073656-98059e699477 h1:yr95Oko76zjDlPs60aHT2lAqApz8nzli9A6yJB/IrGA=
 basic.com/fileserver/WeedFSClient.git v0.0.0-20191105073656-98059e699477/go.mod h1:oiXPn3wwwOi/Sbm6cDWpNWofoG5iV2Nb1V/DxLEAqYY=
 basic.com/pubsub/cache.git v0.0.0-20190718093725-6a413e1d7d48 h1:BBA30Rgljn6MRieC4gUncETJDyna3ObyubTo9HEQ2M0=
diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index 09d9892..f2f81f2 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -410,7 +410,7 @@
 					cars = append(cars, putFaceToResult(areaMap, cars)...)
 				}
 			}
-		case "璺熻釜鐨刬pcId":
+		case "807bac1b-4501-4c52-b450-0aeb75a68ded":
 			// 璺熻釜鐩爣
 			for _, areaMap := range sdkData.AreaMapList {
 				if areaMap.IsEffective {

--
Gitblit v1.8.0