From 964418cf0fb7b143d16529d879968d7c8381f6f2 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期一, 15 七月 2019 18:30:16 +0800
Subject: [PATCH] 一帧数据只做一个任务

---
 ruleserver/ruleToformula.go    |   69 +++++++++++++++-------------------
 main.go                        |    1 
 ruleserver/readyDataForRule.go |   12 ++++-
 3 files changed, 41 insertions(+), 41 deletions(-)

diff --git a/main.go b/main.go
index 43b93b7..489ccbb 100644
--- a/main.go
+++ b/main.go
@@ -106,6 +106,7 @@
 		panic("瑙f瀽msg鏃跺嚭鐜伴敊璇�")
 	}
 	args.CameraId = m.Cid
+	args.TaskId = m.Tasklab.Taskid
 	// 鎶婂浘鐗囩殑浜岃繘鍒惰В鍘嬬缉杩涜鐢绘鍦ㄥ帇缂╁洖鍘�
 	bdata, err := util.UnCompress(m.Data)
 	if err != nil {
diff --git a/ruleserver/readyDataForRule.go b/ruleserver/readyDataForRule.go
index 6a3718e..1fe314d 100644
--- a/ruleserver/readyDataForRule.go
+++ b/ruleserver/readyDataForRule.go
@@ -31,9 +31,15 @@
 	Content string `json:"content"`
 }
 // 浠ユ憚鍍忔満id鏌ュ嚭璺熷叾鐩稿叧鐨勬墍鏈変换鍔′笅鐨勬墍鏈夎鍒欑粍
-func GetRuleGroup(cameraId string) []*protomsg.TaskGroupArgs {
+func GetRuleGroup(cameraId string,taskId string) *protomsg.TaskGroupArgs {
 	all := cache.GetCameraTaskRulesByCameraId(cameraId)
-	return all
+	var taskGroup  *protomsg.TaskGroupArgs
+	for _,task := range all  {
+		if task.TaskId == taskId {
+			taskGroup = task
+		}
+	}
+	return taskGroup
 }
 // 鏍规嵁鎽勫儚鏈篿d鎷垮埌鎽勫儚鏈烘墍鏈夊尯鍩�
 func GetPolygons(cameraId string) []protomsg.CameraPolygon {
@@ -112,7 +118,7 @@
 
 // 缁欑洰鏍囧~鍏卨iker
 func (arg *Arg) fillLiker() {
-	bytes := sdkcompare.GetComparePersonBaseInfo(nil, arg.Feature, 70)
+	bytes := sdkcompare.GetComparePersonBaseInfo(nil, arg.Feature, 40)
 	var m map[string]float32
 	err1 := json.Unmarshal(bytes, &m)
 	if err1 != nil {
diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index f08c449..75e8050 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -69,6 +69,7 @@
 // 浠庣畻娉曟ā鍧楀効鎷挎潵鐨勫涓�甯у浘鍍忓悇涓畻娉曟彁鍙栫殑鏁版嵁闆嗗悎
 type SdkDatas struct {
 	CameraId   string
+	TaskId     string
 	Sdkdata    []*SdkData
 	RuleResult map[string]interface{} // 杩囧畬瑙勫垯鍚庢墦鐨勬爣绛� face: []Arg, yolo: []Result, cacheData: SdkDatas, timeLabel: 0,1,2,3,4,5
 }
@@ -95,7 +96,7 @@
 }
 
 // 瀵瑰崟甯у浘鍍忕殑鍒ゆ柇 thisSdkDatas  褰撳墠浼犲叆鐨勮繖甯ф暟鎹紝cacheSdkData 瀹氭椂鍣ㄩ噷缂撳瓨鐨勪竴甯ф暟鎹� 娌℃湁灏辫繑鍥瀗il  (thisSdkDatas SdkDatas, cacheSdkDatas SdkDatas)
-func Judge(args *SdkDatas,message *protomsg.SdkMessage) {
+func Judge(args *SdkDatas, message *protomsg.SdkMessage) {
 	if len(args.Sdkdata) > 0 {
 		// 鎷垮埌鏈憚鍍忔満鐨勫尯鍩�
 		cameraPolygons := GetPolygons(args.CameraId)
@@ -104,36 +105,31 @@
 			SdkDataFormat(args.CameraId, arg, cameraPolygons)
 		}
 		// 璺戞湰鎽勫儚鏈虹殑鎵�鏈夎鍒欑粍 涓�缁勪竴缁勮窇
-		taskRuleList := GetRuleGroup(args.CameraId) // 鏈憚鍍忔満涓嬫墍鏈変换鍔$粍
+		taskGroup := GetRuleGroup(args.CameraId, args.TaskId) // 鏈憚鍍忔満涓嬫墍鏈変换鍔$粍
 		//logger.Println("鐪嬩笅鎽勫儚鏈轰笅鐨勪换鍔$粍锛�",taskRuleList)
 		// 寰楀埌灞炰簬璇ユ憚鍍忔満鐨勮嫢骞茬粍浠诲姟鐨勫畬鏁磋鍒欙紙璺熸瘡涓�鏉″畬鏁磋鍒欐瘮杈冧箣鍚庡緱鍑烘湰寮犲浘鍍忓浜庢煇涓鍒欐槸鍚︽姤璀︾殑缁撴灉銆傛斁杩沵ap锛屾瘮濡傛湰甯у浘鍍忕殑id锛屾墍纰版挒鎴愬姛鐨勮鍒檌d锛�
 		args.RuleResult = make(map[string]interface{})
 		args.RuleResult["yolo"] = []Result{}
 		args.RuleResult["face"] = []Arg{}
-		if len(taskRuleList) > 0 {
-			for _, taskRule := range taskRuleList {
-				//logger.Println("------------------------------浠诲姟瑙勫垯锛�",taskRule)
-				ruleList := taskRule.GroupRules // 鑾峰彇鐨勬槸task涓嬮潰鐨勪换鍔$粍
-				taskId := taskRule.TaskId
-				//logger.Println("------------鏈粍浠诲姟涓嬬殑瑙勫垯缁勭殑鏁伴噺锛�",len(ruleList))
-				for i := 0; i < len(ruleList); i++ {
-					temp := ruleList[i].Rules // temp涓轰竴缁勫畬鏁磋鍒� 鍦ㄦ闇�瑕佸垽鏂鍒欐槸鍚︽槸鑱斿姩瑙勫垯
-					if len(temp) > 0 {
-						if ruleList[i].SetType == "linkTask" {
-							// groupId涓惈鏈塴ink鍒欎负鑱斿姩浠诲姟
-							LinkTask(args, ruleList[i], taskId,message)
-						} else {
-							// 鐙珛浠诲姟鐨勫鐞�
-							RunRule(args, ruleList[i], taskId,message)
-						}
-					}
+		for _, group := range taskGroup.GroupRules {
+			//logger.Println("------------------------------浠诲姟瑙勫垯锛�",taskRule)
+			taskId := taskGroup.TaskId
+			//logger.Println("------------鏈粍浠诲姟涓嬬殑瑙勫垯缁勭殑鏁伴噺锛�",len(ruleList))
+			temp := group.Rules // temp涓轰竴缁勫畬鏁磋鍒� 鍦ㄦ闇�瑕佸垽鏂鍒欐槸鍚︽槸鑱斿姩瑙勫垯
+			if len(temp) > 0 {
+				if group.SetType == "linkTask" {
+					// groupId涓惈鏈塴ink鍒欎负鑱斿姩浠诲姟
+					LinkTask(args, group, taskId, message)
+				} else {
+					// 鐙珛浠诲姟鐨勫鐞�
+					RunRule(args, group, taskId, message)
 				}
 			}
 		}
 	}
 }
 
-func RunRule(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string,message *protomsg.SdkMessage) bool {
+func RunRule(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string, message *protomsg.SdkMessage) bool {
 	defer func() {
 		if err := recover(); err != nil {
 			logger.Error("姣斿瑙勫垯鏈夎", err.(string))
@@ -157,9 +153,9 @@
 			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)
+				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)
@@ -292,9 +288,9 @@
 					}
 				}
 			}
-			logger.Debug("------locations鐨勫唴瀹癸細",locations)
+			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})
+				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 {
@@ -311,13 +307,13 @@
 					if ipcId == sdkData.IpcId {
 						for _, areaMap := range sdkData.AreaMapList {
 							// 鍘诲紑鍚竴涓畾鏃跺櫒
-							duration(groupRule.Rules[j], groupRule.GroupId, areaMap, args,message)
+							duration(groupRule.Rules[j], groupRule.GroupId, areaMap, args, message)
 						}
 					}
 				}
 			}
 			// 杩涜瀹氭椂鍣ㄧ殑澶勭悊鍜屽垽鏂�
-			timeFlag := TimerAlarm(args,groupRule.GroupId,result.(bool))
+			timeFlag := TimerAlarm(args, groupRule.GroupId, result.(bool))
 			if timeFlag == "01" || timeFlag == "10" || timeFlag == "11" { // 婊¤冻瀹氭椂鍣ㄦ潯浠�
 				return true
 			} else {
@@ -325,7 +321,7 @@
 			}
 		} else {
 			// 缁撴灉涓哄亣鏃朵篃瑕佽蛋锛屾湁鏃跺�欎负鍋囩殑鐘舵�佸弽杞暟鎹篃闇�瑕佽褰曚笅鏉�
-			timeFlag := TimerAlarm(args,groupRule.GroupId,result.(bool))
+			timeFlag := TimerAlarm(args, groupRule.GroupId, result.(bool))
 			fmt.Println(timeFlag)
 			return false
 		}
@@ -333,7 +329,6 @@
 		return false
 	}
 }
-
 
 func putFaceToResult(am *AreaMap) []Arg {
 	faces := []Arg{}
@@ -359,7 +354,7 @@
 }
 
 // 鑱斿姩浠诲姟鐨勫鐞�
-func LinkTask(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string,message *protomsg.SdkMessage) {
+func LinkTask(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string, message *protomsg.SdkMessage) {
 	// new涓�涓畾鏃跺櫒锛屽鏋滀互姝roupId涓烘爣蹇楃殑瀹氭椂鍣ㄤ笉瀛樺湪鐨勮瘽
 	logger.Info("------------------------------------------褰撳墠鏄仈鍔ㄤ换鍔★紝瑙勫垯鏄細", groupRule.GroupText)
 	var flag bool = true
@@ -389,7 +384,7 @@
 		}
 	}
 	// 寰�鏁扮粍閲岃祴鍊�
-	isOk := RunRule(args, groupRule, taskId,message)
+	isOk := RunRule(args, groupRule, taskId, message)
 	if isOk {
 		logger.Info("杩欏抚鍥惧儚鍦ㄤ换鍔′笅鐨勪竴鏁存潯瑙勫垯涓嬶紙鑱斿姩浠诲姟涓嬪氨鏄窡鏈憚鍍忔満鍍忕浉鍏崇殑灏忚鍒欙級鐨勫垽鏂粨鏋滀负true")
 		// 鏍规嵁cameraId鍘绘洿鏂版垨鑰呮彃鍏ョ粨鏋�,鐒跺悗鍒ゆ柇鏄惁鏁扮粍鏄惁鍙互寰楀嚭鎶ヨ鐨勭粨璁�
@@ -422,7 +417,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)))
@@ -452,7 +447,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" && rule.SdkArgAlias != "compareBase"{
+			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("瑙勫垯閰嶇疆鐨勯槇鍊奸潪娉�")
@@ -548,7 +543,7 @@
 				}
 				// 鍏堟竻绌鸿繃婊ゅ悗鐨勬暟鎹紝鍐嶅線閲屽鏈杩囨护鍚庣殑鏁版嵁
 				am.filterData = am.filterData[0:0]
-				logger.Debug("鐪嬬湅args锛氾細锛氾細锛�",args)
+				logger.Debug("鐪嬬湅args锛氾細锛氾細锛�", args)
 				for _, arg := range args {
 					var formula string
 					if rule.SdkArgAlias == "score" {
@@ -585,7 +580,7 @@
 }
 
 // 濡傛灉鏈夋寔缁椂闂存潯浠剁淮鎶ゅ紑鍚竴涓畾鏃跺櫒
-func duration(rule *protomsg.Rule, groupId string, am *AreaMap, args *SdkDatas,message *protomsg.SdkMessage) {
+func duration(rule *protomsg.Rule, groupId string, am *AreaMap, args *SdkDatas, message *protomsg.SdkMessage) {
 	if rule.PolygonId == am.areaId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�  閰嶇疆鐨勭畻娉曡瀵圭殑涓�
 		if rule.SdkArgAlias == "duration" { //
 			// 鍏堢湅鐪嬪畾鏃跺櫒鍏冪礌闃熷垪涓槸鍚︽湁杩欎釜鎽勫儚鏈鸿繖涓尯鍩熺殑瀹氭椂鍣�,濡傛灉鏈夊氨涓嶈兘鍐嶆鍒涘缓浜�
@@ -599,7 +594,7 @@
 
 			if flag {
 				timeLength, _ := strconv.Atoi(rule.SdkArgValue)
-				timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false,BufferFlag:10, CacheSdkData: ResultMsg{message,args.RuleResult}} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌锛堝苟缂撳瓨褰撳墠鐢婚潰甯ф暟鎹級
+				timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false, BufferFlag: 10, CacheSdkData: ResultMsg{message, args.RuleResult}} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌锛堝苟缂撳瓨褰撳墠鐢婚潰甯ф暟鎹級
 				//TimeEleList = make(map[string]timeElement)
 				TimeEleList[groupId+" "+rule.Id] = &timeEle // 瀹氭椂鍣ㄥ厓绱犱互鎽勫儚鏈篿d鎷兼帴鍖哄煙id涓洪敭
 				logger.Info("鍒涘缓浜嗚鏁板櫒骞朵笖璁℃暟鍣ㄩ泦鍚堜负锛�", TimeEleList)
@@ -700,5 +695,3 @@
 	}
 	return LittleRuleResult{}
 }
-
-

--
Gitblit v1.8.0