From 76636907c24fc83002717c41c7265cdfdc1b7582 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期四, 11 七月 2019 16:54:34 +0800
Subject: [PATCH] ---

---
 ruleserver/ruleToformula.go |  167 ++++++++++++++++++++++---------------------------------
 1 files changed, 67 insertions(+), 100 deletions(-)

diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index 0d2e914..a0ac529 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -89,8 +89,8 @@
 	triggerLine   string
 	directionLine string
 	targetNum     int    // 鍖哄煙鍐呯洰鏍囨暟閲�
-	args          []Arg  // 鍖哄煙鍐呯洰鏍囬泦鍚�
-	filterData    []Arg  // 杩囨护鍚庡尯鍩熷唴鐩爣闆嗗悎
+	args          []*Arg // 鍖哄煙鍐呯洰鏍囬泦鍚�
+	filterData    []*Arg // 杩囨护鍚庡尯鍩熷唴鐩爣闆嗗悎
 	time          string // 褰撳墠鏃堕棿锛堢敤浠ュ尮閰嶆椂闂磋鍒欙級
 	keepRight     bool   // 鏄惁闈犲彸琛�
 	isStatic      bool   // 鏄惁闈欐
@@ -115,7 +115,7 @@
 	IsStatic    bool       // 鏄惁闈欐
 	ImageWidth  int        // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚瀹� 鍍忕礌
 	ImageHeight int        // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚楂� 鍍忕礌
-	AreaMapList []AreaMap  // 鏈瑂dk鎻愬彇鐨勬暟鎹寜鐓у尯鍩熷垝鍒嗗悗鐨勬暟鎹泦鍚�
+	AreaMapList []*AreaMap // 鏈瑂dk鎻愬彇鐨勬暟鎹寜鐓у尯鍩熷垝鍒嗗悗鐨勬暟鎹泦鍚�
 }
 
 // 浠庣畻娉曟ā鍧楀効鎷挎潵鐨勫涓�甯у浘鍍忓悇涓畻娉曟彁鍙栫殑鏁版嵁闆嗗悎
@@ -135,12 +135,13 @@
 
 // 杩囪鍒欏簱鎵撲笂鐨勬爣绛�
 type Result struct {
-	TaskId      string // 浠诲姟id
-	SdkName     string
-	RuleGroupId string // 瑙勫垯缁刬d
-	AlarmLevel  int32  // 鎶ヨ绛夌骇
-	RuleText    string // 鏂囧瓧鐗堣鍒欑粍
-	Location    []Rect
+	TaskId       string // 浠诲姟id
+	SdkName      string
+	RuleGroupId  string // 瑙勫垯缁刬d
+	AlarmLevel   int32  // 鎶ヨ绛夌骇
+	RuleText     string // 鏂囧瓧鐗堣鍒欑粍
+	Location     []Rect // 鐩爣鐨勫潗鏍�
+	AlarmPolygon string // 瑙﹀彂鐨勬姤璀︽
 }
 type LittleRuleResult struct {
 	SdkName string // 璁板綍涓嬫缁撴灉鏄摢涓猻dk鐨勭粨鏋�
@@ -180,7 +181,7 @@
 		areaMap := AreaMap{cameraId: cameraId, areaId: polygon.Id, areaJson: polygon.Polygon, triggerLine: polygon.TriggerLine, directionLine: polygon.DirectionLine}
 		// 涓烘瘡涓憚鍍忔満鍖哄煙濉厖鏁版嵁
 		areaMap.CountAreaObjs(arg)
-		arg.AreaMapList = append(arg.AreaMapList, areaMap)
+		arg.AreaMapList = append(arg.AreaMapList, &areaMap)
 	}
 }
 
@@ -222,6 +223,27 @@
 		}
 	}
 }
+
+// 缁欑洰鏍囧~鍏卨iker
+func (arg *Arg) fillLiker() {
+	bytes := bigCache.Getdbpersonmsg("", arg.Feature, true)
+	var m map[string]float32
+	err1 := json.Unmarshal(bytes, &m)
+	if err1 != nil {
+		logger.Error("getBaseInfo瑙e帇閿欒", err1)
+	}
+	logger.Info("----------------------------------------map鏄�", m)
+	for key, val := range m {
+		logger.Info("_______________________________________瀵规瘮搴撶殑杩斿洖鍊�", key, val)
+		baseinfo, err1 := esutil.Dbpersoninfosbyid(key)
+		if err1 != nil {
+			logger.Error("鏌ヨ搴曞簱浜哄憳淇℃伅鍑洪敊", err1)
+		}
+		baseinfo.CompareScore = val
+		arg.Liker = append(arg.Liker, &baseinfo)
+	}
+	//logger.Info("------------------绗竴娆$湅args:",*arg)
+}
 func Compare(args *SdkDatas, groupRule *protomsg.GroupRule) {
 	compareFlag := 0
 	tableIds := ""
@@ -253,85 +275,18 @@
 						if groupRule.Rules[j].PolygonId == areaMap.areaId {
 							for _, arg := range areaMap.args {
 								if compareFlag == 1 {
-									bytes := bigCache.Getdbpersonmsg("", arg.Feature, true)
-									var m map[string]float32
-									err1 := json.Unmarshal(bytes, &m)
-									if err1 != nil {
-										logger.Error("getBaseInfo瑙e帇閿欒", err1)
-									}
-									logger.Info("----------------------------------------map鏄�", m)
-									for key, val := range m {
-										logger.Info("_______________________________________瀵规瘮搴撶殑杩斿洖鍊�", key, val)
-										baseinfo, err1 := esutil.Dbpersoninfosbyid(key)
-										if err1 != nil {
-											logger.Error("鏌ヨ搴曞簱浜哄憳淇℃伅鍑洪敊", err1)
-										}
-										baseinfo.CompareScore = val
-										arg.Liker = append(arg.Liker, &baseinfo)
-									}
+									arg.fillLiker()
 								}
 								if compareFlag == 2 {
 									array := strings.Split(tableIds, ",")
 									for i := 0; i < len(array)-1; i++ {
-										bytes := bigCache.Getdbpersonmsg(array[i], arg.Feature, true)
-										var m map[string]float32
-										err1 := json.Unmarshal(bytes, &m)
-										if err1 != nil {
-											logger.Error("getBaseInfo瑙e帇閿欒", err1)
-										}
-										for key, val := range m {
-											baseinfo, err1 := esutil.Dbpersoninfosbyid(key)
-											if err1 != nil {
-												logger.Error("鏌ヨ搴曞簱浜哄憳淇℃伅鍑洪敊", err1)
-											}
-											baseinfo.CompareScore = val
-											arg.Liker = append(arg.Liker, &baseinfo)
-										}
+										arg.fillLiker()
 									}
 								}
 								logger.Info("-------------------鎴愬姛缁檒iker璧嬪��,闀垮害涓猴細", len(arg.Liker))
 							}
-							for _, arg := range areaMap.filterData {
-								if compareFlag == 1 {
-									bytes := bigCache.Getdbpersonmsg("", arg.Feature, true)
-									var m map[string]float32
-									err1 := json.Unmarshal(bytes, &m)
-									if err1 != nil {
-										logger.Error("getBaseInfo瑙e帇閿欒", err1)
-									}
-									logger.Info("----------------------------------------map鏄�", m)
-									for key, val := range m {
-										logger.Info("_______________________________________瀵规瘮搴撶殑杩斿洖鍊�", key, val)
-										baseinfo, err1 := esutil.Dbpersoninfosbyid(key)
-										if err1 != nil {
-											logger.Error("鏌ヨ搴曞簱浜哄憳淇℃伅鍑洪敊", err1)
-										}
-										baseinfo.CompareScore = val
-										arg.Liker = append(arg.Liker, &baseinfo)
-									}
-								}
-								if compareFlag == 2 {
-									array := strings.Split(tableIds, ",")
-									for i := 0; i < len(array)-1; i++ {
-										bytes := bigCache.Getdbpersonmsg(array[i], arg.Feature, true)
-										var m map[string]float32
-										err1 := json.Unmarshal(bytes, &m)
-										if err1 != nil {
-											logger.Error("getBaseInfo瑙e帇閿欒", err1)
-										}
-										for key, val := range m {
-											baseinfo, err1 := esutil.Dbpersoninfosbyid(key)
-											if err1 != nil {
-												logger.Error("鏌ヨ搴曞簱浜哄憳淇℃伅鍑洪敊", err1)
-											}
-											baseinfo.CompareScore = val
-											arg.Liker = append(arg.Liker, &baseinfo)
-										}
-									}
-								}
-								logger.Info("-------------------鎴愬姛缁檒iker璧嬪��,闀垮害涓猴細", len(arg.Liker))
-							}
-							logger.Info("----------------------绗簩娆$湅args锛�",areaMap.filterData)
+							areaMap.filterData = areaMap.args
+							//logger.Info("=======绗竴娆$湅args锛�",(areaMap.filterData))
 						}
 					}
 				}
@@ -349,6 +304,7 @@
 	Compare(args, groupRule)
 	resultSplice := []*LittleRuleResult{}
 	sdkNames := ""
+	polygonId := ""
 	// 鍏堣繃瀹屾潯浠惰鍒�
 	for j := 0; j < len(groupRule.Rules); j++ {
 		for _, sdkData := range args.Sdkdata {
@@ -359,16 +315,21 @@
 			}
 			ipcId := sdk.IpcId
 			sdkName := sdk.SdkName
-			logger.Info("瑙勫垯鐨刬pcId涓巗dkData鐨処pcId:",ipcId,"===",sdkData.IpcId)
+			logger.Info("瑙勫垯鐨刬pcId涓巗dkData鐨処pcId:", ipcId, "===", sdkData.IpcId)
 			if ipcId == sdkData.IpcId {
 				logger.Info("褰撳墠璧扮殑瑙勫垯鐨勭畻娉曟槸--锛�", sdkName, "---")
+				logger.Info("========================鏈夊嚑涓尯鍩燂細",len(sdkData.AreaMapList))
 				for _, areaMap := range sdkData.AreaMapList {
-					ruleResult := filterRule(groupRule.Rules[j], &areaMap)
+					ruleResult := filterRule(groupRule.Rules[j], areaMap)
 					if ruleResult.Result != "" {
 						logger.Info("鏉′欢瑙勫垯缁撴灉锛�", ruleResult.Result)
-						// 濡傛灉姝ょ粨鏋滀负鐪熶笖褰撳墠杩囩殑鏄痽olo绠楁硶锛屽簲璁颁笅姝よ鍒欐墍瀵瑰簲鐨剆dkName,鍙﹀锛岃繕瑕佸幓閲�
-						if ruleResult.Result == "true" && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
+						// 濡傛灉姝ょ粨鏋滀负鐪熶笖褰撳墠杩囩殑鏄痽olo绠楁硶锛屽簲璁颁笅姝よ鍒欐墍瀵瑰簲鐨剆dkName,鍙﹀锛岃繕瑕佸幓閲� (鍚庡姞锛氭妸姝ゆ潯瑙︾鐨勫尯鍩焛d涔熻褰曚笅鏉�)
+						if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
 							sdkNames = sdkName + ","
+							polygonId = groupRule.Rules[j].PolygonId + ","
+						}
+						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)
 					}
@@ -389,11 +350,14 @@
 			sdkName := sdk.SdkName
 			if ipcId == sdkData.IpcId {
 				for _, areaMap := range sdkData.AreaMapList {
-					ruleResult := transferParameters(groupRule.Rules[j], &areaMap)
+					ruleResult := transferParameters(groupRule.Rules[j], areaMap)
 					if ruleResult.Result != "" {
 						logger.Info("鏁伴噺瑙勫垯缁撴灉锛�", ruleResult.Result)
-						if ruleResult.Result == "true" && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
+						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)
 					}
@@ -412,11 +376,14 @@
 			sdkName := sdk.SdkName
 			if ipcId == sdkData.IpcId {
 				for _, areaMap := range sdkData.AreaMapList {
-					ruleResult := timeRuleResult(groupRule.Rules[j], &areaMap)
+					ruleResult := timeRuleResult(groupRule.Rules[j], areaMap)
 					if ruleResult.Result != "" {
 						logger.Info("鏃堕棿瑙勫垯缁撴灉锛�", ruleResult.Result)
-						if ruleResult.Result == "true" && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
+						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)
 					}
@@ -435,7 +402,7 @@
 			if ipcId == sdkData.IpcId {
 				for _, areaMap := range sdkData.AreaMapList {
 					// 鍘诲紑鍚竴涓畾鏃跺櫒
-					duration(groupRule.Rules[j], groupRule.GroupId, &areaMap, args)
+					duration(groupRule.Rules[j], groupRule.GroupId, areaMap, args)
 				}
 			}
 		}
@@ -502,7 +469,7 @@
 				for _, sdkData := range args.Sdkdata {
 					if sdkData.IpcId == "A8B73405-373D-4F23-CED2-A617EBD7EC55" && faceFlag { // sdkData閲屾湁浜鸿劯鏁版嵁涓旈厤缃簡绠楁硶鎵嶆妸绗﹀悎鏉′欢鐨勬暟鎹杩涙爣绛鹃噷鍘�
 						for _, areaMap := range sdkData.AreaMapList {
-							faces = append(faces, putFaceToResult(&areaMap)...)
+							faces = append(faces, putFaceToResult(areaMap)...)
 						}
 					}
 				}
@@ -515,12 +482,12 @@
 				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)...)
+							locations = append(locations, putYolosToResult(areaMap)...)
 						}
 					}
 				}
 				if sdkNames != "" {
-					args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkNames, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, locations})
+					args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkNames, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, locations,polygonId})
 					logger.Info("-------------------yolo缁撴灉鏍囩", args.RuleResult["yolo"].([]Result))
 				}
 				if args.RuleResult["face"] != nil {
@@ -535,7 +502,7 @@
 		return false
 	}
 }
-func TimerAlarm(groupId string) (int){
+func TimerAlarm(groupId string) (int) {
 	var flagTime int = 0
 	for k, timeEle := range TimeEleList {
 		if strings.Contains(k, groupId) {
@@ -557,7 +524,7 @@
 	faces := []Arg{}
 	if len(am.filterData) > 0 {
 		for _, data := range am.filterData {
-			faces = append(faces, data)
+			faces = append(faces, *data)
 		}
 	}
 
@@ -594,8 +561,8 @@
 			a.targetNum++
 			arg1 := Arg{obj.Score, PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), obj.IsYolo, obj.Rects, obj.Feature, obj.ThftRes, []*protomsg.Baseinfo{}}
 			//logger.Println("鏀捐繘鍘荤殑arg锛�-------", arg1)
-			a.args = append(a.args, arg1)
-			a.filterData = append(a.filterData, arg1)
+			a.args = append(a.args, &arg1)
+			a.filterData = append(a.filterData, &arg1)
 		}
 	}
 	a.time = time.Unix(time.Now().Unix(), 0).String()[11:16]
@@ -692,7 +659,7 @@
 				result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
 				if result.(bool) {
 					logger.Info("___________________________________________________________________鑱斿姩浠诲姟鎶ヨ")
-					args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, "", groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, []Rect{}})
+					args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, "", groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, []Rect{},""})
 					logger.Info("-------------------yolo缁撴灉鏍囩鏈夊嚑涓�", len(args.RuleResult["yolo"].([]Result)))
 					if args.RuleResult["face"] != nil {
 						logger.Info("-------------------face缁撴灉鏍囩鏈夊嚑涓�", len(args.RuleResult["face"].([]Arg)))
@@ -763,7 +730,7 @@
 					// 濡傛灉鏄笉瑙勭煩鐨勮繛鎺ョ缁熺粺杩斿洖false 瑙勫垯涔熷彧鑳藉垽鏂汉鑴哥殑鐩镐技搴︼紝鎵�浠ヤ笉瀛樺湪鍒殑杩炴帴绗�
 					if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔�
 						logger.Info("--------------------缁堜簬绛夊埌浣犵殑涓嬫枃")
-						var args []Arg
+						var args []*Arg
 						if rule.RuleWithPre == "&&" {
 							args = am.filterData
 						} else {
@@ -812,7 +779,7 @@
 		if rule.PolygonId == am.areaId { // 棣栧厛杩欐潯瑙勫垯寰楁槸杩欎釜绠楁硶鐨勮鍒欙紝鍏舵瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
 			if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔�
 				logger.Info("----------褰撳墠鏉′欢瑙勫垯锛�---------", rule)
-				var args []Arg
+				var args []*Arg
 				if rule.RuleWithPre == "&&" {
 					args = am.filterData
 				} else {

--
Gitblit v1.8.0