From ff521a22d519a822fdac224c4571d6a2a2ad7f19 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期六, 13 七月 2019 11:38:02 +0800
Subject: [PATCH] 报警标志位接口转string

---
 ruleserver/ruleToformula.go |  351 +++++++++++++++++++++++++++++----------------------------
 1 files changed, 179 insertions(+), 172 deletions(-)

diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index 8be94d4..938f6a1 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,14 +115,14 @@
 	IsStatic    bool       // 鏄惁闈欐
 	ImageWidth  int        // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚瀹� 鍍忕礌
 	ImageHeight int        // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚楂� 鍍忕礌
-	AreaMapList []AreaMap  // 鏈瑂dk鎻愬彇鐨勬暟鎹寜鐓у尯鍩熷垝鍒嗗悗鐨勬暟鎹泦鍚�
+	AreaMapList []*AreaMap // 鏈瑂dk鎻愬彇鐨勬暟鎹寜鐓у尯鍩熷垝鍒嗗悗鐨勬暟鎹泦鍚�
 }
 
 // 浠庣畻娉曟ā鍧楀効鎷挎潵鐨勫涓�甯у浘鍍忓悇涓畻娉曟彁鍙栫殑鏁版嵁闆嗗悎
 type SdkDatas struct {
 	CameraId   string
 	Sdkdata    []*SdkData
-	RuleResult map[string]interface{} // 杩囧畬瑙勫垯鍚庢墦鐨勬爣绛� face: []Arg  yolo: []Result
+	RuleResult map[string]interface{} // 杩囧畬瑙勫垯鍚庢墦鐨勬爣绛� face: []Arg, yolo: []Result, cacheData: SdkDatas, timeLabel: 0,1,2,3,4,5
 }
 
 // 灏嗕紶閫掕繃鏉ョ殑鍙傛暟杞寲涓�
@@ -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鐨勭粨鏋�
@@ -163,22 +164,9 @@
 
 // 鏍规嵁鎽勫儚鏈篿d鎷垮埌鎽勫儚鏈烘墍鏈夊尯鍩�
 func GetPolygons(cameraId string) []protomsg.CameraPolygon {
-	//var api dbapi.CameraApi
-	//data := api.FindAllPolygons()
-	////logger.Info("鏌ュ埌鐨勬墍鏈夊尯鍩燂細", data)
-	//// 鏍规嵁id浠巑ap涓嬁鍒板尯鍩�
 	var cameraPolygons []protomsg.CameraPolygon
-	//for _, item := range data {
-	//	if item.CameraId == cameraId && item.Type != "line" {
-	//		// 闇�瑕佹牴鎹瘮渚嬫妸鍓嶅彴鐢荤殑鍖哄煙鐨勫潗鏍囪浆鍖栦负鐩稿簲鎽勫儚鏈烘媿鎽勭殑鍥惧儚鐨勫ぇ灏�   x鍧愭爣鍒嗗埆*image.width/椤甸潰鍖哄煙瀹�  y鍧愭爣鍒嗗埆*image.height/椤甸潰鍖哄煙楂�
-	//		// 鍓嶅彴瀹介珮鍥哄畾
-	//		//logger.Println("------------绗﹀悎鏉′欢鐨勫尯鍩燂細",item)
-	//		cameraPolygons = append(cameraPolygons, item)
-	//	}
-	//}
 	cameraPolygons = cache.GetPolygonsByCameraId(cameraId)
-
-	//logger.Println("鏍规嵁鎽勫儚鏈篿d鏌ュ埌鐨勫尯鍩�", cameraPolygons, "--鍖哄煙鏁伴噺涓猴細", len(cameraPolygons))
+	logger.Debug("------=======鏌ョ湅涓嬪叏閮ㄥ尯鍩燂細",cameraPolygons)
 	return cameraPolygons
 }
 
@@ -186,18 +174,18 @@
 func SdkDataFormat(cameraId string, arg *SdkData, cameraPolygons []protomsg.CameraPolygon) {
 	logger.Info("==================================鏈瑂dkData涓В鍑烘潵鐨勭洰鏍囨暟鎹�=======================================")
 	for _, photo := range arg.Photo {
-		logger.Info("--------鐪嬬湅瑙f瀽鍑烘潵鐨勬暟鎹�---", cameraId, arg.IpcId, photo.Rects, photo.Score)
+		logger.Info("--------瑙f瀽鍑烘潵鐨勬暟鎹�---", cameraId, arg.IpcId, photo.Rects, photo.Score)
 	}
 	for _, polygon := range cameraPolygons {
 		//logger.Println("++++++鍦ㄨ繖鍎跨湅涓�涓嬪尯鍩熷晩:", polygon.Polygon)
 		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)
 	}
 }
 
-// 瀵瑰崟甯у浘鍍忕殑鍒ゆ柇 鏄垗寮冿紙鎴栬�呰瀵逛簬鏌愪簺闇�姹傚彲浠ユ斁ES鏁版嵁搴撲竴浠斤級杩樻槸杩斿洖
+// 瀵瑰崟甯у浘鍍忕殑鍒ゆ柇 thisSdkDatas  褰撳墠浼犲叆鐨勮繖甯ф暟鎹紝cacheSdkData 瀹氭椂鍣ㄩ噷缂撳瓨鐨勪竴甯ф暟鎹� 娌℃湁灏辫繑鍥瀗il  (thisSdkDatas SdkDatas, cacheSdkDatas SdkDatas)
 func Judge(args *SdkDatas) {
 	if len(args.Sdkdata) > 0 {
 		// 鎷垮埌鏈憚鍍忔満鐨勫尯鍩�
@@ -235,6 +223,35 @@
 		}
 	}
 }
+
+// 缁欑洰鏍囧~鍏卨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 {
+		baseinfo, err1 := esutil.Dbpersoninfosbyid(key)
+		if err1 != nil {
+			logger.Error("鏌ヨ搴曞簱浜哄憳淇℃伅鍑洪敊", err1)
+		}
+		baseinfo.CompareScore = Retain(val)
+		arg.Liker = append(arg.Liker, &baseinfo)
+	}
+	//logger.Info("------------------绗竴娆$湅args:",*arg)
+}
+// 淇濈暀鍥涗綅灏忔暟
+func Retain(f float32)(float32) {
+	s:= strconv.FormatFloat(float64(f), 'f', 4, 64)
+	v, err := strconv.ParseFloat(s, 32)
+	if err != nil {
+		logger.Error("淇濈暀鍥涗綅灏忔暟杞崲閿欒")
+	}
+	return float32(v)
+}
 func Compare(args *SdkDatas, groupRule *protomsg.GroupRule) {
 	compareFlag := 0
 	tableIds := ""
@@ -250,59 +267,39 @@
 			}
 		}
 	}
-	// 浣滃紛锛岀洿鎺ヨ鍏舵瘮瀵瑰叏閮ㄥ簳搴�
-	compareFlag = 1
+	// 涓轰簡娴嬭瘯浣滀笅寮婏紝鐩存帴璁╁叾姣斿鍏ㄩ儴搴曞簱
+	//compareFlag = 1
 	if compareFlag == 0 {
 		logger.Info("娌℃湁閰嶇疆瀵规瘮搴曞簱鍙傛暟")
 		return
 	}
 	for j := 0; j < len(groupRule.Rules); j++ {
-		// 鍙湁鏄汉鑴稿姣斿苟涓旈厤缃殑鍙傛暟鏄姣斿簳搴撴墠璧帮紙鑻ラ厤鐨勫姣旈槇鍊煎垯涓嶈蛋锛�
 		if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" {
 			for _, sdkData := range args.Sdkdata {
-				if sdkData.IpcId == "812b674b-2375-4589-919a-5c1c3278a97e" { // 鎼滅储鍒颁汉鑴告娴嬬殑sdkdata 鐜板湪鍏充簬浜鸿劯鐨勫彧鏈変粬涓�涓猻dk锛屽叏鎵句粬
+				if sdkData.IpcId == "A8B73405-373D-4F23-CED2-A617EBD7EC55" { // 鎼滅储鍒颁汉鑴告娴嬬殑sdkdata 鐜板湪鍏充簬浜鸿劯鐨勫彧鏈変粬涓�涓猻dk锛屽叏鎵句粬
+					logger.Info("============================================杩涜浜鸿劯瀵规瘮")
 					for _, areaMap := range sdkData.AreaMapList {
+						logger.Info("-------------浜鸿劯姣斿涔嬪墠鐩爣鏁伴噺",len(areaMap.args))
 						// 鎷垮尯鍩熶腑姣忎釜浜鸿劯鐗瑰緛鍊煎幓瀵规瘮锛屽~鍏呭叾liker
 						if groupRule.Rules[j].PolygonId == areaMap.areaId {
+							logger.Info("--------------鐪嬬湅compareFlag鐨勫�硷細",compareFlag)
 							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)
-									}
-									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()
 								}
 								if compareFlag == 2 {
 									array := strings.Split(tableIds, ",")
+									logger.Info("--------------------------鐪嬬湅瀵规瘮搴曞簱鐨勫��;",array)
 									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璧嬪�硷細", arg.Liker)
+								logger.Info("-------------------鎴愬姛缁檒iker璧嬪��,闀垮害涓猴細", len(arg.Liker))
 							}
+							areaMap.filterData = areaMap.args
+							//logger.Info("=======绗竴娆$湅args锛�",(areaMap.filterData))
 						}
+						logger.Info("-------------------------------浜鸿劯瀵规瘮涔嬪悗鐨勭洰鏍囨暟閲�",len(areaMap.args))
 					}
 				}
 			}
@@ -315,10 +312,11 @@
 			logger.Error("姣斿瑙勫垯鏈夎", err.(string))
 		}
 	}()
-	logger.Info("+++++++++++瑙勫垯寮�濮嬭繍琛�+++++++++++++++++褰撳墠瑙勫垯--锛�", *groupRule)
+	logger.Info("+++++++++++瑙勫垯寮�濮嬭繍琛�+++++++++++++++++褰撳墠澶ц鍒�--锛�", *groupRule)
 	Compare(args, groupRule)
 	resultSplice := []*LittleRuleResult{}
 	sdkNames := ""
+	polygonId := ""
 	// 鍏堣繃瀹屾潯浠惰鍒�
 	for j := 0; j < len(groupRule.Rules); j++ {
 		for _, sdkData := range args.Sdkdata {
@@ -329,16 +327,24 @@
 			}
 			ipcId := sdk.IpcId
 			sdkName := sdk.SdkName
-
+			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{
+					logger.Info("妫�鏌ヤ竴涓嬪尯鍩熺殑鍏蜂綋鏁版嵁锛�",areaMap.areaJson)
+				}
 				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)
 					}
@@ -359,11 +365,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)
 					}
@@ -382,11 +391,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)
 					}
@@ -404,7 +416,8 @@
 			ipcId := sdk.IpcId
 			if ipcId == sdkData.IpcId {
 				for _, areaMap := range sdkData.AreaMapList {
-					duration(groupRule.Rules[j], &areaMap)
+					// 鍘诲紑鍚竴涓畾鏃跺櫒
+					duration(groupRule.Rules[j], groupRule.GroupId, areaMap, args)
 				}
 			}
 		}
@@ -436,18 +449,11 @@
 			panic("瑙勫垯鏈夎锛屽緱鍒扮殑鏁板鍏紡涓嶅彲瑙f瀽")
 		}
 		result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
-		if !result.(bool) {
-			// 缁欒繖甯ф暟鎹墦涓婅鍒欑粍鏍囩
-			//args.RuleResult = append(args.RuleResult, Result{TaskId: taskId, RuleGroupId: groupRule.GroupId})
-			for k, timeEle := range TimeEleList {
-				if strings.Contains(k, taskId) {
-					timeEle.N = timeEle.InitN // 閲嶇疆瀹氭椂鍣�
-				}
-			}
-			logger.Info("-------------------閲嶇疆鍙兘瀛樺湪鐨勫畾鏃跺櫒骞惰繑鍥瀎alse---------------")
-			return false
-		} else {
+		// 杩涜瀹氭椂鍣ㄧ殑澶勭悊鍜屽垽鏂�
+		timeFlag := TimerAlarm(args,groupRule.GroupId,result.(bool))
+		if timeFlag == "01" || timeFlag == "10" || timeFlag == "11" {
 			// 鏈�鍚庢垚鍔熸姤璀︽墠鎶婄鍚堟潯浠剁殑浜鸿劯鏁版嵁濉炶繘缁撴灉鏍囩閲�
+			// 閰嶄簡浜鸿劯鐨勭畻娉曟墠鎶婁汉鑴哥殑鏁版嵁鐢╁嚭鏉ユ墦鏍囩
 			faces := []Arg{}
 			faceFlag := false
 			for j := 0; j < len(groupRule.Rules); j++ {
@@ -458,57 +464,98 @@
 			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)...)
 					}
 				}
 			}
-			// 閰嶄簡浜鸿劯鐨勭畻娉曟墠鎶婁汉鑴哥殑鏁版嵁鐢╁嚭鏉ユ墦鏍囩
 			if faceFlag {
 				args.RuleResult["face"] = faces
 			}
-			// 鍘荤湅姹犲瓙閲屾槸鍚︽湁涓庢湰甯ф暟鎹湁鍏崇殑瀹氭椂鍣紝濡傛灉鏈夛紝鐪嬫鏃舵槸鍚﹁蛋鍒�0锛屾病鏈夋瀹氭椂鍣ㄦ垨鏈夊畾鏃跺櫒璧板埌0鐨勮瘽杩斿洖鎴愬姛鎶ヨ
-			var flag bool = true
-			for k, timeEle := range TimeEleList {
-				if strings.Contains(k, taskId) {
-					if timeEle.N != 0 { // 璺熻繖涓换鍔℃湁鍏崇殑瀹氭椂鍣ㄨ鍏ㄩ儴绛変簬0
-						logger.Info("鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺��-------------涓嶅啢锛屼綘鏄瀹氭椂鍣ㄦ墦璐ョ殑锛�")
-						flag = false
+			logger.Warn("___________________________________________________________________________缁堜簬璧板畬涓囬噷闀垮緛")
+			// 鎶婁粬浠殑浣嶇疆鏁版嵁涔熶紶涓嬪幓
+			locations := []Rect{}
+			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 flag {
-				logger.Warn("___________________________________________________________________________缁堜簬璧板畬涓囬噷闀垮緛")
-				// 鎶婁粬浠殑浣嶇疆鏁版嵁涔熶紶涓嬪幓
-				locations := []Rect{}
-				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 sdkNames != "" {
-					args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkNames, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, locations})
-					logger.Info("-------------------yolo缁撴灉鏍囩", args.RuleResult["yolo"].([]Result))
-				}
-				if args.RuleResult["face"] != nil {
-					logger.Info("-------------------face缁撴灉鏍囩", args.RuleResult["face"].([]Arg))
-				}
-				return true
-			} else {
-				return false
+			logger.Debug("------locations鐨勫唴瀹癸細",locations)
+			if sdkNames != "" {
+				args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkNames, groupRule.GroupId, groupRule.AlarmLevel, groupRule.GroupText, locations,polygonId})
+				logger.Info("-------------------yolo缁撴灉鏍囩闀垮害", len(args.RuleResult["yolo"].([]Result)))
 			}
+			if args.RuleResult["face"] != nil {
+				logger.Info("-------------------face缁撴灉鏍囩", len(args.RuleResult["face"].([]Arg)))
+			}
+			return true
+		} else {
+			return false
 		}
 	} else {
 		return false
 	}
+}
+// 鍒ゆ柇鏄惁绗﹀悎瀹氭椂鍣ㄦ潯浠�
+func TimerAlarm(args *SdkDatas,groupId string,result bool) (string) {
+	var flagTime string  //
+	// 鍒ゆ柇鏈夋棤姝よ鍒欑粍鐨勫畾鏃跺櫒
+	flag := false
+	for k,_ := range TimeEleList {
+		logger.Debug("-----------------鐪嬬湅杩欎釜key鍜実roupId",k,groupId)
+		if strings.Contains(k, groupId) {
+			flag = true
+		}
+	}
+	if flag {     // 鏈夊畾鏃跺櫒
+		if result { // 缁撴灉涓虹湡
+			for k, timeEle := range TimeEleList {
+				if strings.Contains(k, groupId) {
+					if timeEle.N == 0 && timeEle.AlarmFlag {
+						logger.Debug("-------------------------绗﹀悎鎸佺画鏃堕棿瑙勫垯浣嗗苟涓嶆槸棣栨锛屼笉鎶ヨ")
+						flagTime = "11"
+						args.RuleResult["timeLabel"] = flagTime
+					}
+					if timeEle.N == 0 && !timeEle.AlarmFlag { // 杩欑粍瑙勫垯鐨勫畾鏃跺櫒瑕佸叏閮ㄧ瓑浜�0   鏆備笖璁や负涓�缁勮鍒欏彧鏈変竴涓畾鏃跺櫒
+						logger.Debug("鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺��-------------棣栨绗﹀悎鎸佺画鏃堕棿瑙勫垯骞舵姤璀�")
+						flagTime = "10"
+						timeEle.AlarmFlag = true
+						args.RuleResult["cacheData"] = timeEle.CacheSdkData
+						args.RuleResult["timeLabel"] = flagTime
+					}
+					if timeEle.N != 0 {
+						flagTime = "00"
+						logger.Debug("------------------------缁撴灉涓虹湡浣嗚鏁板櫒涓嶅埌0锛屼笉鎶ヨ,姝ゆ椂鐨勮鏁板櫒鐨勫�间负锛�",timeEle.N)
+					}
+				}
+			}
+		} else { // 缁撴灉涓哄亣
+			for k, timeEle := range TimeEleList {
+				if strings.Contains(k, groupId) {
+					logger.Debug("------------------------------閲嶇疆瀹氭椂鍣紝姝ゆ椂鐨勮鏁板櫒鐨勫�间负",timeEle.N)
+					timeEle.N = timeEle.InitN // 閲嶇疆瀹氭椂鍣�
+					timeEle.CacheSdkData = SdkDatas{} // 鎶婄紦瀛樻暟鎹墧浜�
+					flagTime = "12"
+				}
+			}
+
+		}
+	} else { // 鏃犲畾鏃跺櫒
+		if result {
+			flagTime = "01"
+		} else {
+			flagTime = "00"
+		}
+	}
+	return flagTime
 }
 
 func putFaceToResult(am *AreaMap) []Arg {
 	faces := []Arg{}
 	if len(am.filterData) > 0 {
 		for _, data := range am.filterData {
-			faces = append(faces, data)
+			faces = append(faces, *data)
 		}
 	}
 
@@ -538,12 +585,6 @@
 	areaPoints := Json2points(a.areaJson)
 	widthScale := float64(arg.ImageWidth / 960)
 	heigthScale := float64(arg.ImageHeight / 540)
-	// for _, sdkInfo := range arg.SdkMessage.Tasklab.Sdkinfos {
-	// 	if sdkInfo.Sdktype == "yolo" {
-	// 		//sdkInfo.Sdkdata.
-	// 	}
-
-	// }
 	for _, obj := range arg.Photo {
 		//logger.Info("------------------鐪嬬湅sdkData:", arg.SdkName, "鐨凱hoto鏁版嵁----------------", obj, "----椤轰究鐪嬬湅鍗犳瘮-----锛�", PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale))
 		if threshold <= obj.Score && size <= float64(obj.Rects.Width*obj.Rects.Height) && intersectionper <= PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale) {
@@ -551,8 +592,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]
@@ -564,7 +605,8 @@
 // 灏嗗瓧绗︿覆鏍煎紡鐨勫潗鏍囧簭鍒楀寲涓篜oint鏍煎紡
 func Json2points(areaPoints string) []Point {
 	var pts []Point
-	if areaPoints == "" {
+	if areaPoints == "[]" {
+		logger.Error("=====================姝ゅ尯鍩熶负鍏ㄩ儴鍖哄煙")
 		pts = append(pts, Point{0, 0})
 		pts = append(pts, Point{0, 540})
 		pts = append(pts, Point{960, 540})
@@ -581,17 +623,6 @@
 
 // 浠ユ憚鍍忔満id鏌ュ嚭璺熷叾鐩稿叧鐨勬墍鏈変换鍔′笅鐨勬墍鏈夎鍒欑粍
 func GetRuleGroup(cameraId string) []*protomsg.TaskGroupArgs {
-	// 鏌ヨ鏁版嵁搴�
-	// 绗竴姝ユ煡鍑鸿窡杩欎釜鎽勫儚鏈虹浉鍏崇殑group_id(澶ц鍒�)
-	//var api dbapi.CameraTaskArgsApi
-	//
-	////logger.Info("鎵�鏈夎鍒�:", all)
-	//var taskArgs []*protomsg.TaskGroupArgs
-	//for _, camArg := range all {
-	//	if camArg.CameraId == cameraId {
-	//		taskArgs = camArg.TaskArgs
-	//	}
-	//}
 	all := cache.GetCameraTaskRulesByCameraId(cameraId)
 	return all
 }
@@ -660,10 +691,10 @@
 				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{}})
-					logger.Info("-------------------yolo缁撴灉鏍囩", args.RuleResult["yolo"].([]Result))
+					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缁撴灉鏍囩", args.RuleResult["face"].([]Arg))
+						logger.Info("-------------------face缁撴灉鏍囩鏈夊嚑涓�", len(args.RuleResult["face"].([]Arg)))
 					}
 					//os.Exit(0)
 				}
@@ -675,7 +706,7 @@
 		logger.Info("杩欏抚鍥惧儚鍦ㄤ换鍔′笅鐨勪竴鏁存潯瑙勫垯涓嬶紙鑱斿姩浠诲姟涓嬪氨鏄窡鏈憚鍍忔満鍍忕浉鍏崇殑灏忚鍒欙級鐨勫垽鏂粨鏋滀负false")
 		// 鎵�浠ヤ篃瑕佸幓缁撴灉鏁扮粍閲屾斁鍊兼垨鏇存柊
 		for _, va := range timeEle.RuleResults {
-			if args.CameraId != "" && va.CameraId == args.CameraId { // arg.CameraId 闅忎究鎵句竴涓暟鎹�
+			if args.CameraId != "" && va.CameraId == args.CameraId {
 				va.Result = strconv.FormatBool(isOk)
 			}
 		}
@@ -690,8 +721,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" {
-				// 鍙渶瑕佽繃婊ら槇鍊硷紝杩囨护瀹屽悗鏁扮粍闀垮害澶т簬0鍗充负鎶ヨ锛屼絾瑕佽�冭檻濡備綍瀵规瘡涓�寮犻兘鎶ヨ鍛�
+			if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && rule.SdkArgAlias != "time_rule" && rule.SdkArgAlias != "compareBase"{
 				argValue, err := strconv.ParseFloat(rule.SdkArgValue, 64)
 				if err != nil {
 					logger.Error("瑙勫垯閰嶇疆鐨勯槇鍊奸潪娉�")
@@ -701,7 +731,7 @@
 				for _, obj := range am.filterData {
 					for index := 0; index < len(obj.Liker); {
 						// 灏嗚揪涓嶅埌闃堝�肩殑鐩镐技鑰呬粠鐩镐技鑰呮暟缁勪腑鍒犻櫎
-						logger.Warn("=======================鐩镐技鍊硷細", float64(obj.Liker[index].CompareScore*100))
+						logger.Debug("=======================鐩镐技鍊硷細", float64(obj.Liker[index].CompareScore*100))
 						if float64(obj.Liker[index].CompareScore*100) < argValue {
 							// Go 璇█涓垏鐗囧垹闄ゅ厓绱犵殑鏈川鏄細浠ヨ鍒犻櫎鍏冪礌涓哄垎鐣岀偣锛屽皢鍓嶅悗涓や釜閮ㄥ垎鐨勫唴瀛橀噸鏂拌繛鎺ヨ捣鏉ャ�備笉鐢ㄦ��鐤戯紝鏁扮粍鍒犻櫎鍏冪礌灏辫繖涔堝潙鐖�
 							obj.Liker = append(obj.Liker[:index], obj.Liker[index+1:]...)
@@ -726,12 +756,11 @@
 				return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + flag, rule.Sort}
 			}
 			if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" { // 浜鸿劯妫�娴�
-				logger.Info("------------------------------------------------------------------------------------------------------------------------------------缁堜簬绛夊埌浣�")
 				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("--------------------缁堜簬绛夊埌浣犵殑涓嬫枃")
-						var args []Arg
+						//logger.Info("---------------------------缁堜簬绛夊埌浣�")
+						var args []*Arg
 						if rule.RuleWithPre == "&&" {
 							args = am.filterData
 						} else {
@@ -739,7 +768,7 @@
 						}
 						// 鍏堟竻绌鸿繃婊ゅ悗鐨勬暟鎹紝鍐嶅線閲屽鏈杩囨护鍚庣殑鏁版嵁
 						am.filterData = am.filterData[0:0]
-						logger.Info("-----------------------浜鸿劯杩囨护鐨刟rgs锛�", args)
+						//logger.Info("-----------------------浜鸿劯杩囨护鐨刟rgs閲岀殑鏁伴噺锛�", len(args))
 						for _, arg := range args {
 							var formula string
 							if rule.SdkArgAlias == "score" {
@@ -780,7 +809,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 {
@@ -788,6 +817,7 @@
 				}
 				// 鍏堟竻绌鸿繃婊ゅ悗鐨勬暟鎹紝鍐嶅線閲屽鏈杩囨护鍚庣殑鏁版嵁
 				am.filterData = am.filterData[0:0]
+				logger.Debug("鐪嬬湅args锛氾細锛氾細锛�",args)
 				for _, arg := range args {
 					var formula string
 					if rule.SdkArgAlias == "score" {
@@ -823,14 +853,14 @@
 	}
 }
 
-// 閮借繃婊ゅ畬鏉′欢涔嬪悗鐪嬬湅鏄惁瑕佸垱寤轰竴涓畾鏃跺櫒鍏冪礌 鍒涘缓瀹氭椂鍣ㄧ殑鏉′欢锛氭槸鍚︽湁闈犲彸琛岋紝涓綋闈欐绛夎嚜甯﹀畾鏃跺櫒鍚箟鐨勭畻娉曚互鍙婃槸鍚︽湁鎸佺画鏃堕棿
-func duration(rule *protomsg.Rule, am *AreaMap) {
+// 濡傛灉鏈夋寔缁椂闂存潯浠剁淮鎶ゅ紑鍚竴涓畾鏃跺櫒
+func duration(rule *protomsg.Rule, groupId string, am *AreaMap, args *SdkDatas) {
 	if rule.PolygonId == am.areaId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�  閰嶇疆鐨勭畻娉曡瀵圭殑涓�
 		if rule.SdkArgAlias == "duration" { //
 			// 鍏堢湅鐪嬪畾鏃跺櫒鍏冪礌闃熷垪涓槸鍚︽湁杩欎釜鎽勫儚鏈鸿繖涓尯鍩熺殑瀹氭椂鍣�,濡傛灉鏈夊氨涓嶈兘鍐嶆鍒涘缓浜�
 			var flag bool = true
 			for k, _ := range TimeEleList {
-				if k == am.taskId+" "+am.sdkId+" "+am.areaId {
+				if k == groupId+" "+rule.Id {
 					flag = false // 鏈夊氨缃负false
 					logger.Info("鏈夎繖涓畾鏃跺櫒锛屼笉鍐嶅垱寤轰簡锛�")
 				}
@@ -838,29 +868,14 @@
 
 			if flag {
 				timeLength, _ := strconv.Atoi(rule.SdkArgValue)
-				timeEle := TimeElement{N: timeLength, InitN: timeLength} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌
+				timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false, CacheSdkData: *args} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌锛堝苟缂撳瓨褰撳墠鐢婚潰甯ф暟鎹級
 				//TimeEleList = make(map[string]timeElement)
-				TimeEleList[am.taskId+" "+am.sdkId+" "+am.areaId] = &timeEle // 瀹氭椂鍣ㄥ厓绱犱互鎽勫儚鏈篿d鎷兼帴鍖哄煙id涓洪敭
+				TimeEleList[groupId+" "+rule.Id] = &timeEle // 瀹氭椂鍣ㄥ厓绱犱互鎽勫儚鏈篿d鎷兼帴鍖哄煙id涓洪敭
 				logger.Info("鍒涘缓浜嗚鏁板櫒骞朵笖璁℃暟鍣ㄩ泦鍚堜负锛�", TimeEleList)
 			}
 		}
 	}
 }
-
-//// 鍐椾綑鎷兼帴涓�涓洰鏍囨暟閲忓ぇ浜�0
-//func splice1(am *AreaMap) string {
-//	var num int = 0
-//	for _, data := range am.filterData {
-//		if data.isYolo {
-//			num++
-//		}
-//	}
-//	logger.Println("鐪嬬湅鍖哄煙鍐呯鍚堟潯浠剁殑鐩爣鏁伴噺锛�----------", num)
-//	formula := strconv.Itoa(num) + " " + ">" + "0"
-//	expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
-//	result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
-//	return strconv.FormatBool(result.(bool))
-//}
 
 // 缁欐暟鎹簱鐨勮鍒欒〃杈惧紡浠e弬 args: 涓�鏉″瓙瑙勫垯锛屽尯鍩熸暟鎹�
 func transferParameters(rule *protomsg.Rule, am *AreaMap) LittleRuleResult {
@@ -977,14 +992,6 @@
 
 // 鍙栧嚭鏌愪釜鏃堕棿瑙勫垯鐨勭鍑犲ぉ鐨勮鍒欐闆嗗悎
 func GetTimeById(id string, index int) []TimeRange {
-	//var cameraTimeRule protomsg.CameraTimerule
-	//var api dbapi.CameraApi
-	//_, rules := api.FindAllTimeRules()
-	//for _, rule := range rules {
-	//	if rule.Id == id {
-	//		cameraTimeRule = rule
-	//	}
-	//}
 	_, cameraTimeRule := cache.GetTimeRuleById(id)
 	var timeRangeList []day
 	err := json.Unmarshal([]byte(cameraTimeRule.TimeRule), &timeRangeList)

--
Gitblit v1.8.0