From 2b2576642ae036b1930c1abbb628626e7fc500f5 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期四, 07 十一月 2019 17:57:37 +0800
Subject: [PATCH] ---

---
 ruleserver/ruleToformula.go |   77 ++++++++++++++++++++++++++++----------
 1 files changed, 56 insertions(+), 21 deletions(-)

diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index 67a0df8..d7062ee 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -3,7 +3,7 @@
 import (
 	"ruleprocess/cache"
 	"ruleprocess/structure"
-	"basic.com/valib/logger.git"
+	"ruleprocess/logger"
 	"sort"
 	"strconv"
 	"strings"
@@ -71,7 +71,7 @@
 			// 濡傛灉鏍囩涓惈鏈夋寔缁椂闂撮娆℃姤璀︾殑timeLabel鐨勮瘽鍒欎笉闇�瑕佽繃浜轰綋杩借釜锛屼笉鐒跺氨娌$殑鎻掑叆浜�
 			fk := TrackOrNot(args.RuleResult)
 			if !fk {
-				BodyIsSame(message)
+				BodyIsSame(args,message)
 			}
 		}
 	}
@@ -213,6 +213,7 @@
 
 		if result.(bool) {
 			// 鏈�鍚庤繃鎸佺画鏃堕棿绛夋椂闂寸淮搴︾殑鏉′欢   鎶婃椂闂磋鍒欎綅缃皟鏁村埌杩欎釜浣嶇疆鏄负浜嗙紦瀛樻暟鎹�
+			cacheId := ""
 			for j := 0; j < len(groupRule.Rules); j++ {
 				for _, sdkData := range args.Sdkdata {
 					sdk, err := cache.GetSdkById(groupRule.Rules[j].SdkId)
@@ -223,14 +224,17 @@
 					if ipcId == sdkData.IpcId {
 						for _, areaMap := range sdkData.AreaMapList {
 							// 鍘诲紑鍚竴涓畾鏃跺櫒
-							duration(groupRule.Rules[j], groupRule.GroupId, areaMap, args, message)
+							cacheid := duration(groupRule.Rules[j], groupRule.GroupId, areaMap, args, message)
+							if cacheid != "" {
+								cacheId = cacheid
+							}
 						}
 					}
 				}
 			}
 			// 杩涜瀹氭椂鍣ㄧ殑澶勭悊鍜屽垽鏂�
 			timeFlag := TimerAlarm(&label, groupRule.GroupId, result.(bool))
-			if timeFlag == "01" || timeFlag == "10" || timeFlag == "11" { // 娌℃湁瀹氭椂鍣ㄦ垨鑰呮弧瓒冲畾鏃跺櫒鏉′欢
+			if timeFlag == "01" || timeFlag == "10" || timeFlag == "11" || cacheId != ""{ // 娌℃湁瀹氭椂鍣ㄦ垨鑰呮弧瓒冲畾鏃跺櫒鏉′欢
 				// 鎵撲汉鑴告爣绛惧拰yolo鏍囩
 				// 鏈�鍚庢垚鍔熸姤璀︽墠鎶婄鍚堟潯浠剁殑浜鸿劯鏁版嵁濉炶繘缁撴灉鏍囩閲�
 				// 閰嶄簡浜鸿劯鐨勭畻娉曟墠鎶婁汉鑴哥殑鏁版嵁鐢╁嚭鏉ユ墦鏍囩
@@ -250,7 +254,7 @@
 						}
 					}
 				}
-				logger.Info("face鏍囩鐨勯暱搴︼細",len(faces))
+				//logger.Info("face鏍囩鐨勯暱搴︼細",len(faces))
 				//for _,face := range faces  {
 				//	//logger.Debug("鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�擾_______________鐪嬬湅浜鸿劯鐨勫潗鏍�:",face.Location)
 				//}
@@ -260,7 +264,9 @@
 				for _, sdkData := range args.Sdkdata {
 					if sdkData.IpcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && sdkNames != "" { // 鎶妝olo鏁版嵁鐨勫悇涓洰鏍囩殑鍧愭爣杈撳嚭鏂逛究鍚庨潰鐢绘
 						for _, areaMap := range sdkData.AreaMapList {
-							locations = append(locations, putYolosToResult(areaMap)...)
+							if areaMap.IsEffective {
+								locations = append(locations, putYolosToResult(areaMap)...)
+							}
 						}
 					}
 				}
@@ -282,6 +288,28 @@
 					//logger.Info("-------------------face缁撴灉鏍囩", len(args.RuleResult["face"].([]FaceResult)))
 					labelTypes = append(labelTypes,1)
 				}
+				// 缁欐寔缁椂闂寸殑绗竴寮犺祴浜堢紦瀛樻暟鎹紙閬嶅巻澶嶅埗锛�
+				if cacheId != "" { // 鏈夎繖甯ф暟鎹殑缂撳瓨
+					tempMap := make(map[string]interface{})
+					for k, result := range args.RuleResult {
+						if k == "yolo" {
+							tempMap[k] = []structure.Result{}
+							for _, res := range result.([]structure.Result) {
+								tempMap[k] = append(tempMap[k].([]structure.Result), res)
+							}
+						}
+						if k == "face" {
+							tempMap[k] = []structure.FaceResult{}
+							for _, res := range result.([]structure.FaceResult) {
+								tempMap[k] = append(tempMap[k].([]structure.FaceResult), res)
+							}
+						}
+					}
+					rw.Lock()
+					TimeEleList[cacheId].CacheSdkData.RuleResult = tempMap
+					rw.Unlock()
+				}
+
 				return true,labelTypes
 			} else {
 				return false,[]int{}
@@ -345,20 +373,20 @@
 			timeEle = *timeEle1
 		}
 	}
-	for _,ruleRe := range timeEle.RuleResults {
-		logger.Info("鑱斿姩鏁扮粍閲岀殑鏁版嵁----",ruleRe.CameraId,ruleRe.Sort)
-	}
+	//for _,ruleRe := range timeEle.RuleResults {
+	//	logger.Info("鑱斿姩鏁扮粍閲岀殑鏁版嵁----",ruleRe.CameraId,ruleRe.Sort)
+	//}
 	if flag { // 濡傛灉杩樻病鏈夎繖涓畾鏃跺櫒鍏冪礌灏辨柊澧炰竴涓�
 		//timeEle := TimeElement{N: 2, InitN: 2, GroupId: groupRule.GroupId} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌
 		//TimeEleList = make(map[string]timeElement)
 		TimeEleList[groupRule.GroupId] = &timeEle // 瀹氭椂鍣ㄥ厓绱犱互瑙勫垯缁刬d涓洪敭
-		logger.Info("---------------------------------------------鑱斿姩浠诲姟鍒涘缓浜嗚鏁板櫒骞朵笖璁℃暟鍣ㄩ泦鍚堜负锛�", TimeEleList)
+		//logger.Info("---------------------------------------------鑱斿姩浠诲姟鍒涘缓浜嗚鏁板櫒骞朵笖璁℃暟鍣ㄩ泦鍚堜负锛�", TimeEleList)
 		// 寰楀嚭杩欑粍瀹屾暣瑙勫垯閲屾秹鍙婂埌鍑犱釜鎽勫儚鏈猴紝鍐冲畾鐫�鏁扮粍閲屾湁鍑犱釜缁撴瀯浣�,鍘婚噸娣诲姞鏂瑰紡
 		for j := 0; j < len(groupRule.Rules); j++ {
 			var flag1 bool = true
-			logger.Info("瑙勫垯缁勪俊鎭細",groupRule.Rules[j].CameraId)
+			//logger.Info("瑙勫垯缁勪俊鎭細",groupRule.Rules[j].CameraId)
 			for _, ruleRes := range TimeEleList[groupRule.GroupId].RuleResults {
-				logger.Info("鑱斿姩鏁扮粍閲岀殑鏁版嵁锛�",ruleRes.CameraId,ruleRes.Sort)
+				//logger.Info("鑱斿姩鏁扮粍閲岀殑鏁版嵁锛�",ruleRes.CameraId,ruleRes.Sort)
 				if groupRule.Rules[j].CameraId == ruleRes.CameraId {
 					flag1 = false
 				}
@@ -427,7 +455,7 @@
 						for _, ruleRes := range TimeEleList[groupRule.GroupId].RuleResults {
 							label.LinkCache = append(label.LinkCache, ruleRes.CacheData)
 						}
-						logger.Debug("鑱斿姩浠诲姟缂撳瓨浜嗗嚑涓暟鎹�", len(label.LinkCache))
+						//logger.Debug("鑱斿姩浠诲姟缂撳瓨浜嗗嚑涓暟鎹�", len(label.LinkCache))
 						for i := 0; i < len(args.RuleResult["yolo"].([]structure.Result)); i++ {
 							if args.RuleResult["yolo"].([]structure.Result)[i].RuleGroupId == groupRule.GroupId { // 鎶婅仈鍔ㄦ暟鎹拷鍔犱笂
 								args.RuleResult["yolo"].([]structure.Result)[i].Others.LinkCache = label.LinkCache
@@ -498,7 +526,7 @@
 					// 鎶婃病鏈夌浉浼艰�呯殑浜鸿劯浠巉ilterData涓垹闄�
 					for index := 0; index < len(am.FilterData); {
 						// 灏嗚揪涓嶅埌闃堝�肩殑鐩镐技鑰呬粠鐩镐技鑰呮暟缁勪腑鍒犻櫎
-						logger.Info("鐪嬬湅鐩镐技鑰呬汉鏁帮細",len(am.FilterData[index].Liker))
+						//logger.Info("鐪嬬湅鐩镐技鑰呬汉鏁帮細",len(am.FilterData[index].Liker))
 						if len(am.FilterData[index].Liker) == 0 {
 							// Go 璇█涓垏鐗囧垹闄ゅ厓绱犵殑鏈川鏄細浠ヨ鍒犻櫎鍏冪礌涓哄垎鐣岀偣锛屽皢鍓嶅悗涓や釜閮ㄥ垎鐨勫唴瀛橀噸鏂拌繛鎺ヨ捣鏉ャ�備笉鐢ㄦ��鐤戯紝鏁扮粍鍒犻櫎鍏冪礌灏辫繖涔堝潙鐖�
 							am.FilterData = append(am.FilterData[:index], am.FilterData[index+1:]...)
@@ -509,7 +537,7 @@
 					if len(am.FilterData) > 0 {
 						flag = "true"
 					}
-					logger.Info("---------浜鸿劯姣斿绗﹀悎鏉′欢鐨勬暟閲忎负锛�",len(am.FilterData))
+					//logger.Info("---------浜鸿劯姣斿绗﹀悎鏉′欢鐨勬暟閲忎负锛�",len(am.FilterData))
 					return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + flag, rule.Sort}
 				}
 			}
@@ -518,7 +546,7 @@
 				if rule.Operator == "==" || rule.Operator == ">=" || rule.Operator == "<=" || rule.Operator == "<" || rule.Operator == ">" || rule.Operator == "!=" {
 					// 濡傛灉鏄笉瑙勭煩鐨勮繛鎺ョ缁熺粺杩斿洖false 瑙勫垯涔熷彧鑳藉垽鏂汉鑴哥殑鐩镐技搴︼紝鎵�浠ヤ笉瀛樺湪鍒殑杩炴帴绗�
 					if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔�
-						logger.Info("-----------------------杩囪鍒欎箣鍓嶅尯鍩熷唴鐨勪汉鑴告暟閲忎负锛�",am.TargetNum)
+						//logger.Info("-----------------------杩囪鍒欎箣鍓嶅尯鍩熷唴鐨勪汉鑴告暟閲忎负锛�",am.TargetNum)
 						var args []*structure.Arg
 						if rule.RuleWithPre == "&&" {
 							args = am.FilterData
@@ -550,7 +578,7 @@
 							}
 						}
 						am.TargetNum = len(am.FilterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁
-						logger.Info("杩囧畬鏉′欢鍚庣殑鐩爣鏁伴噺涓猴細",am.TargetNum)
+						//logger.Info("杩囧畬鏉′欢鍚庣殑鐩爣鏁伴噺涓猴細",am.TargetNum)
 						if am.TargetNum > 0 {
 							logger.Info("锛侊紒锛侊紒锛侊紒锛侊紒锛佷汉鑴告娴嬫垚鍔�")
 							return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
@@ -571,6 +599,7 @@
 		// 澶勭悊鐨勯兘鏄痽olo鏁版嵁
 		if rule.PolygonId == am.AreaId { // 棣栧厛杩欐潯瑙勫垯寰楁槸杩欎釜绠楁硶鐨勮鍒欙紝鍏舵瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
 			if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔�
+				logger.Info("鍖哄煙鏁版嵁锛�",am.AreaJson)
 				var args []*structure.Arg
 				if rule.RuleWithPre == "&&" {
 					args = am.FilterData
@@ -599,6 +628,9 @@
 					}
 				}
 				am.TargetNum = len(am.FilterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁
+				for _,tar := range am.FilterData  {
+					logger.Info("鍏蜂綋鐩爣鐨勫潗鏍囦负",tar.Id,tar.Location)
+				}
 				if am.TargetNum > 0 {
 					return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
 				} else {
@@ -618,30 +650,33 @@
 }
 
 // 濡傛灉鏈夋寔缁椂闂存潯浠剁淮鎶ゅ紑鍚竴涓畾鏃跺櫒
-func duration(rule *protomsg.Rule, groupId string, am *structure.AreaMap, args *structure.SdkDatas, message *protomsg.SdkMessage) {
+func duration(rule *protomsg.Rule, groupId string, am *structure.AreaMap, args *structure.SdkDatas, message *protomsg.SdkMessage) string{
+	cacheId := ""
 	if rule.PolygonId == am.AreaId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�  閰嶇疆鐨勭畻娉曡瀵圭殑涓�
 		if rule.SdkArgAlias == "duration" { //
-			logger.Info("褰撳墠灏忚鍒欐槸锛�---------", rule)
+			//logger.Info("褰撳墠灏忚鍒欐槸锛�---------", rule)
 			// 鍏堢湅鐪嬪畾鏃跺櫒鍏冪礌闃熷垪涓槸鍚︽湁杩欐潯瑙勫垯鐨勫畾鏃跺櫒,濡傛灉鏈夊氨涓嶈兘鍐嶆鍒涘缓浜�
 			rw.Lock()
 			var flag bool = true
 			for k, _ := range TimeEleList {
 				if k == groupId+"+"+rule.Id {
 					flag = false // 鏈夊氨缃负false
-					logger.Info("鏈夎繖涓畾鏃跺櫒锛屼笉鍐嶅垱寤轰簡锛�")
+					//logger.Info("鏈夎繖涓畾鏃跺櫒锛屼笉鍐嶅垱寤轰簡锛�")
 				}
 			}
 
 			if flag {
 				timeLength, _ := strconv.Atoi(rule.SdkArgValue)
-				timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false, BufferFlag: 10, CacheSdkData: structure.ResultMsg{message, args.RuleResult}} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌锛堝苟缂撳瓨褰撳墠鐢婚潰甯ф暟鎹級
+				timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false, BufferFlag: 10, CacheSdkData: structure.ResultMsg{message, nil}} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌锛堝苟缂撳瓨褰撳墠鐢婚潰甯ф暟鎹級
 				//TimeEleList = make(map[string]timeElement)
 				TimeEleList[groupId+"+"+rule.Id] = &timeEle // 瀹氭椂鍣ㄥ厓绱犱互褰撳墠鎸佺画鏃堕棿灏忚鍒檌d涓洪敭
 				logger.Info("鍒涘缓浜嗚鏁板櫒")
+				cacheId = groupId+"+"+rule.Id
 			}
 			rw.Unlock()
 		}
 	}
+	return cacheId
 }
 
 // 缁欐暟鎹簱鐨勮鍒欒〃杈惧紡浠e弬 args: 涓�鏉″瓙瑙勫垯锛屽尯鍩熸暟鎹�

--
Gitblit v1.8.0