From 7a06bb3e7e47e9b67adfd1fcbe025491819b2970 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期日, 29 九月 2019 14:34:02 +0800
Subject: [PATCH] 人脸也画规则框

---
 ruleserver/ruleToformula.go |   68 ++++++++++++++++++---------------
 1 files changed, 37 insertions(+), 31 deletions(-)

diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index 19f1656..5160f2a 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -2,10 +2,11 @@
 
 import (
 	"ruleprocess/cache"
-	"ruleprocess/logger"
+	"basic.com/valib/logger.git"
 	"sort"
 	"strconv"
 	"strings"
+	"sync"
 	"time"
 
 	"basic.com/pubsub/protomsg.git"
@@ -111,8 +112,15 @@
 	Sort    int32
 }
 
+var rw sync.RWMutex // 璇诲啓閿�
+
 // 瀵瑰崟甯у浘鍍忕殑鍒ゆ柇 thisSdkDatas  褰撳墠浼犲叆鐨勮繖甯ф暟鎹紝cacheSdkData 瀹氭椂鍣ㄩ噷缂撳瓨鐨勪竴甯ф暟鎹� 娌℃湁灏辫繑鍥瀗il  (thisSdkDatas SdkDatas, cacheSdkDatas SdkDatas)
 func Judge(args *SdkDatas, message *protomsg.SdkMessage) {
+	defer func() {
+		if err := recover(); err != nil {
+			logger.Error("瑙勫垯妯″潡鍎跨殑寮傚父鎹曡幏锛�",err)
+		}
+	}()
 	if len(args.Sdkdata) > 0 {
 		// 鎷垮埌鏈憚鍍忔満鐨勫尯鍩�
 		cameraPolygons := GetPolygons(args.CameraId)
@@ -197,9 +205,8 @@
 						// 濡傛灉姝ょ粨鏋滀负鐪熶笖褰撳墠杩囩殑鏄痽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) {
+						if strings.Contains(ruleResult.Result, "true") && !strings.Contains(polygonId, groupRule.Rules[j].PolygonId) {
 							polygonId = groupRule.Rules[j].PolygonId + ","
 						}
 						resultSplice = append(resultSplice, &ruleResult)
@@ -420,11 +427,15 @@
 	logger.Info("------------------------------------------褰撳墠鏄仈鍔ㄤ换鍔★紝瑙勫垯鏄細", groupRule.GroupText)
 	var flag bool = true
 	var timeEle = TimeElement{N: 2, InitN: 2, GroupId: groupRule.GroupId}
+	rw.Lock()
 	for k, timeEle1 := range TimeEleList {
 		if k == groupRule.GroupId {
 			flag = false // 宸茬粡鏈変簡杩欎釜瀹氭椂鍣ㄥ氨缃负false 涓嶅啀鏂板
 			timeEle = *timeEle1
 		}
+	}
+	for _,ruleRe := range timeEle.RuleResults {
+		logger.Info("鑱斿姩鏁扮粍閲岀殑鏁版嵁----",ruleRe.CameraId,ruleRe.Sort)
 	}
 	if flag { // 濡傛灉杩樻病鏈夎繖涓畾鏃跺櫒鍏冪礌灏辨柊澧炰竴涓�
 		//timeEle := TimeElement{N: 2, InitN: 2, GroupId: groupRule.GroupId} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌
@@ -434,7 +445,9 @@
 		// 寰楀嚭杩欑粍瀹屾暣瑙勫垯閲屾秹鍙婂埌鍑犱釜鎽勫儚鏈猴紝鍐冲畾鐫�鏁扮粍閲屾湁鍑犱釜缁撴瀯浣�,鍘婚噸娣诲姞鏂瑰紡
 		for j := 0; j < len(groupRule.Rules); j++ {
 			var flag1 bool = true
+			logger.Info("瑙勫垯缁勪俊鎭細",groupRule.Rules[j].CameraId)
 			for _, ruleRes := range TimeEleList[groupRule.GroupId].RuleResults {
+				logger.Info("鑱斿姩鏁扮粍閲岀殑鏁版嵁锛�",ruleRes.CameraId,ruleRes.Sort)
 				if groupRule.Rules[j].CameraId == ruleRes.CameraId {
 					flag1 = false
 				}
@@ -444,6 +457,7 @@
 			}
 		}
 	}
+	rw.Unlock()
 	// 寰�鏁扮粍閲岃祴鍊�
 	isOk,labelTypes := RunRule(args, groupRule, taskId, message, label)
 	if isOk {
@@ -474,10 +488,8 @@
 		}
 		// 鍒ゆ柇缁撴灉鏁扮粍鏄惁瀹屾弧(鍗宠璧嬪�煎畬姣�)鍙緱鍑烘姤璀︾粨鏋�
 		var isPerfect = true
-		logger.Info("鑱斿姩浠诲姟鏁扮粍锛�")
 		for _, va := range timeEle.RuleResults {
 			//logger.Info("---------------------鐬呯瀰褰撳墠鏁扮粍________________锛�", *va)
-			logger.Info("鑱斿姩瀛愬厓绱狅細",va.Sort,va.RuleWithPre,va.Result,va.CameraId)
 			if va.Result == "" && va.RuleWithPre != "||" {
 				isPerfect = false
 			}
@@ -497,6 +509,7 @@
 				result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
 				if result.(bool) {
 					logger.Info("___________________________________________________________________鑱斿姩浠诲姟鎶ヨ")
+					rw.RLock()
 					if TimeEleList[groupRule.GroupId] != nil {  // 鏋佸伓灏旀湁鎯呭喌浼氱瓑浜巒il锛屼笉鐭ラ亾涓哄暐锛屽仛涓垽鏂互闃插畷鏈�
 						// 鎶婃暟缁勯噷缂撳瓨鐨勬暟鎹彇鍑烘潵涓�璧锋姤璀�
 						label.LinkCache = []ResultMsg{}
@@ -515,6 +528,7 @@
 							}
 						}
 					}
+					rw.RUnlock()
 				}
 			}
 		} else {
@@ -545,12 +559,14 @@
 		//		va.Result = strconv.FormatBool(isOk)
 		//	}
 		//}
+		rw.Lock()
 		for k, _ := range TimeEleList {
 			if k == groupRule.GroupId {
 				delete(TimeEleList, k)
 				logger.Debug("鍥犱负瀹氭椂鍣ㄧ殑涓�甯ф暟鎹粨鏋滀负false锛屽共鎺夊畾鏃跺櫒")
 			}
 		}
+		rw.Unlock()
 		// 鍥犱负鏈抚鏁版嵁涓嶇鍚堣鍒欙紝鎵�浠ヤ篃涓嶇敤缁熻缁撴灉鏁扮粍閲岀殑涓滆タ
 
 	}
@@ -563,7 +579,7 @@
 		//logger.Info("瑙勫垯鐨勭畻娉昳d鍜屽尯鍩熺殑绠楁硶id锛�", rule.SdkId, "===", am.sdkId)
 		if rule.PolygonId == am.areaId { // 绠楁硶鍜屽尯鍩熼兘寰楀鐨勪笂
 
-			if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && rule.SdkArgAlias != "time_rule"{
+			if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && rule.SdkArgAlias != "time_rule" {
 				if rule.RuleWithPre == "||" {
 					return LittleRuleResult{}
 				} else {
@@ -631,17 +647,15 @@
 						} else {
 							return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "false", rule.Sort}
 						}
-					} else {
-						return LittleRuleResult{}
 					}
-				} else {
-					return LittleRuleResult{}
+				} else if rule.SdkArgAlias == "" { // 浠�涔堝弬鏁伴兘涓嶉厤鐨勬儏鍐�
+					if am.targetNum > 0 {
+						return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "true", rule.Sort}
+					} else {
+						return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "false", rule.Sort}
+					}
 				}
-			} else {
-				return LittleRuleResult{}
 			}
-		} else {
-			return LittleRuleResult{}
 		}
 	} else {
 		// 澶勭悊鐨勯兘鏄痽olo鏁版嵁
@@ -681,14 +695,16 @@
 					return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "false", rule.Sort}
 				}
 
-			} else {
-				return LittleRuleResult{}
+			} else if rule.SdkArgAlias == "" {
+				if am.targetNum > 0 {
+					return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "true", rule.Sort}
+				} else {
+					return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "false", rule.Sort}
+				}
 			}
-
-		} else {
-			return LittleRuleResult{}
 		}
 	}
+	return LittleRuleResult{}
 }
 
 // 濡傛灉鏈夋寔缁椂闂存潯浠剁淮鎶ゅ紑鍚竴涓畾鏃跺櫒
@@ -697,6 +713,7 @@
 		if rule.SdkArgAlias == "duration" { //
 			logger.Info("褰撳墠灏忚鍒欐槸锛�---------", rule)
 			// 鍏堢湅鐪嬪畾鏃跺櫒鍏冪礌闃熷垪涓槸鍚︽湁杩欐潯瑙勫垯鐨勫畾鏃跺櫒,濡傛灉鏈夊氨涓嶈兘鍐嶆鍒涘缓浜�
+			rw.Lock()
 			var flag bool = true
 			for k, _ := range TimeEleList {
 				if k == groupId+"+"+rule.Id {
@@ -712,6 +729,7 @@
 				TimeEleList[groupId+"+"+rule.Id] = &timeEle // 瀹氭椂鍣ㄥ厓绱犱互褰撳墠鎸佺画鏃堕棿灏忚鍒檌d涓洪敭
 				logger.Info("鍒涘缓浜嗚鏁板櫒")
 			}
+			rw.Unlock()
 		}
 	}
 }
@@ -737,18 +755,6 @@
 			result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
 			return LittleRuleResult{am.sdkName, rule.RuleWithPre + " " + strconv.FormatBool(result.(bool)), rule.Sort}
 			// 鍔犱笂鍏充簬绠楁硶鐨勫垽鏂潯浠讹紝涓嶈兘鍙湁鍏充簬瑙勫垯鐨勶紝鏈夌殑绠楁硶鏈韩灏辨槸涓�涓鍒欙紝濡備釜浣撻潤姝紝闈犲彸琛�,鎵�浠ワ紝鎷垮埌褰撳墠瀛愯鍒欑殑sdkid鏉ュ垽鏂槸鍚︽槸閭d簺鐗规畩鐨勮鍒�
-		} else if rule.SdkId == "IsStatic" { // 闈欐绠楁硶
-			if am.isStatic {
-				return LittleRuleResult{}
-			} else {
-				return LittleRuleResult{}
-			}
-		} else if rule.SdkId == "KeepRight" { // 闈犲彸琛岀畻娉�
-			if am.keepRight {
-				return LittleRuleResult{}
-			} else {
-				return LittleRuleResult{}
-			}
 		}
 	}
 	return LittleRuleResult{}

--
Gitblit v1.8.0