From a31474f8d650dd5fba2d4c8bbe737c6ba6b17891 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期六, 13 七月 2019 15:40:07 +0800
Subject: [PATCH] ---

---
 ruleserver/ruleToformula.go |   49 ++++++++++++++++++++++++++++++-------------------
 1 files changed, 30 insertions(+), 19 deletions(-)

diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index b35ec43..c392196 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -129,7 +129,7 @@
 //protomsg.SdkMessage.TaskLabel.SdkmsgWithTask.sdkdata
 
 type ResultMsg struct {
-	protomsg.SdkMessage
+	*protomsg.SdkMessage
 	RuleResult map[string]interface{} // 杩囧畬瑙勫垯鍚庢墦鐨勬爣绛�
 }
 
@@ -186,7 +186,7 @@
 }
 
 // 瀵瑰崟甯у浘鍍忕殑鍒ゆ柇 thisSdkDatas  褰撳墠浼犲叆鐨勮繖甯ф暟鎹紝cacheSdkData 瀹氭椂鍣ㄩ噷缂撳瓨鐨勪竴甯ф暟鎹� 娌℃湁灏辫繑鍥瀗il  (thisSdkDatas SdkDatas, cacheSdkDatas SdkDatas)
-func Judge(args *SdkDatas) {
+func Judge(args *SdkDatas,message *protomsg.SdkMessage) {
 	if len(args.Sdkdata) > 0 {
 		// 鎷垮埌鏈憚鍍忔満鐨勫尯鍩�
 		cameraPolygons := GetPolygons(args.CameraId)
@@ -212,10 +212,10 @@
 					if len(temp) > 0 {
 						if ruleList[i].SetType == "linkTask" {
 							// groupId涓惈鏈塴ink鍒欎负鑱斿姩浠诲姟
-							LinkTask(args, ruleList[i], taskId)
+							LinkTask(args, ruleList[i], taskId,message)
 						} else {
 							// 鐙珛浠诲姟鐨勫鐞�
-							RunRule(args, ruleList[i], taskId)
+							RunRule(args, ruleList[i], taskId,message)
 						}
 					}
 				}
@@ -306,7 +306,7 @@
 		}
 	}
 }
-func RunRule(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string) 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))
@@ -417,7 +417,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,message)
 				}
 			}
 		}
@@ -489,6 +489,12 @@
 			if args.RuleResult["face"] != nil {
 				logger.Info("-------------------face缁撴灉鏍囩", len(args.RuleResult["face"].([]Arg)))
 			}
+			// 缁欏畾鏃跺櫒閲岀紦瀛樼殑閭e抚鏁版嵁璧嬬粨鏋滄爣绛�
+			for k, timeEle := range TimeEleList {
+				if strings.Contains(k, groupRule.GroupId) {
+					timeEle.CacheSdkData.RuleResult = args.RuleResult
+				}
+			}
 			return true
 		} else {
 			return false
@@ -512,16 +518,16 @@
 		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 && timeEle.AlarmFlag {
-						logger.Debug("-------------------------绗﹀悎鎸佺画鏃堕棿瑙勫垯浣嗗苟涓嶆槸棣栨锛屼笉鎶ヨ")
-						flagTime = "11"
 						args.RuleResult["timeLabel"] = flagTime
 					}
 					if timeEle.N != 0 {
@@ -533,10 +539,14 @@
 		} else { // 缁撴灉涓哄亣
 			for k, timeEle := range TimeEleList {
 				if strings.Contains(k, groupId) {
-					logger.Debug("------------------------------閲嶇疆瀹氭椂鍣紝姝ゆ椂鐨勮鏁板櫒鐨勫�间负",timeEle.N)
-					timeEle.N = timeEle.InitN // 閲嶇疆瀹氭椂鍣�
-					timeEle.CacheSdkData = SdkDatas{} // 鎶婄紦瀛樻暟鎹墧浜�
-					flagTime = "12"
+					if timeEle.AlarmFlag {
+						logger.Debug("------------------------------鏉�姝诲畾鏃跺櫒锛屾姤璀︽甯х姸鎬佹敼鍙樼殑鏁版嵁锛屾鏃剁殑璁℃暟鍣ㄧ殑鍊间负",timeEle.N)
+						flagTime = "12"
+						args.RuleResult["timeLabel"] = flagTime
+						delete(TimeEleList,k)
+					} else {
+						delete(TimeEleList,k)
+					}
 				}
 			}
 
@@ -544,6 +554,7 @@
 	} else { // 鏃犲畾鏃跺櫒
 		if result {
 			flagTime = "01"
+			args.RuleResult["timeLabel"] = flagTime
 		} else {
 			flagTime = "00"
 		}
@@ -628,7 +639,7 @@
 }
 
 // 鑱斿姩浠诲姟鐨勫鐞�
-func LinkTask(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string) {
+func LinkTask(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string,message *protomsg.SdkMessage) {
 	// new涓�涓畾鏃跺櫒锛屽鏋滀互姝roupId涓烘爣蹇楃殑瀹氭椂鍣ㄤ笉瀛樺湪鐨勮瘽
 	logger.Info("------------------------------------------褰撳墠鏄仈鍔ㄤ换鍔★紝瑙勫垯鏄細", groupRule.GroupText)
 	var flag bool = true
@@ -658,7 +669,7 @@
 		}
 	}
 	// 寰�鏁扮粍閲岃祴鍊�
-	isOk := RunRule(args, groupRule, taskId)
+	isOk := RunRule(args, groupRule, taskId,message)
 	if isOk {
 		logger.Info("杩欏抚鍥惧儚鍦ㄤ换鍔′笅鐨勪竴鏁存潯瑙勫垯涓嬶紙鑱斿姩浠诲姟涓嬪氨鏄窡鏈憚鍍忔満鍍忕浉鍏崇殑灏忚鍒欙級鐨勫垽鏂粨鏋滀负true")
 		// 鏍规嵁cameraId鍘绘洿鏂版垨鑰呮彃鍏ョ粨鏋�,鐒跺悗鍒ゆ柇鏄惁鏁扮粍鏄惁鍙互寰楀嚭鎶ヨ鐨勭粨璁�
@@ -854,7 +865,7 @@
 }
 
 // 濡傛灉鏈夋寔缁椂闂存潯浠剁淮鎶ゅ紑鍚竴涓畾鏃跺櫒
-func duration(rule *protomsg.Rule, groupId string, am *AreaMap, args *SdkDatas) {
+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" { //
 			// 鍏堢湅鐪嬪畾鏃跺櫒鍏冪礌闃熷垪涓槸鍚︽湁杩欎釜鎽勫儚鏈鸿繖涓尯鍩熺殑瀹氭椂鍣�,濡傛灉鏈夊氨涓嶈兘鍐嶆鍒涘缓浜�
@@ -868,7 +879,7 @@
 
 			if flag {
 				timeLength, _ := strconv.Atoi(rule.SdkArgValue)
-				timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false, CacheSdkData: *args} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌锛堝苟缂撳瓨褰撳墠鐢婚潰甯ф暟鎹級
+				timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false, CacheSdkData: ResultMsg{message,nil}} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌锛堝苟缂撳瓨褰撳墠鐢婚潰甯ф暟鎹級
 				//TimeEleList = make(map[string]timeElement)
 				TimeEleList[groupId+" "+rule.Id] = &timeEle // 瀹氭椂鍣ㄥ厓绱犱互鎽勫儚鏈篿d鎷兼帴鍖哄煙id涓洪敭
 				logger.Info("鍒涘缓浜嗚鏁板櫒骞朵笖璁℃暟鍣ㄩ泦鍚堜负锛�", TimeEleList)

--
Gitblit v1.8.0