From 6ed5521a978b330b990f2c4092e729207fca2412 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期五, 11 十月 2019 13:48:54 +0800
Subject: [PATCH] 除了架构把代码跟主分支同步一下

---
 algorithm/middleware/middleware.go     |   20 
 algorithm/intrusion/intrusion.go       |   78 ++-
 util/upload.go                         |    2 
 util/simpleCV.go                       |   32 +
 ruleserver/server.go                   |    4 
 go.mod                                 |    3 
 ruleserver/personTrack.go              |  121 ++--
 algorithm/personUnsual/personUnsual.go |   76 ++-
 insertdata/config.go                   |   63 +++
 insertdata/insertDataToEs.go           |  455 ++++++---------------
 algorithm/face/face.go                 |   60 +-
 labelFilter/ruleForLabel.go            |    2 
 util/simpleCV_test.go                  |   10 
 ruleserver/ruleToformula.go            |   45 -
 algorithm/static/static.go             |    2 
 ruleserver/readyDataForRule.go         |   14 
 structure/gragh.go                     |    2 
 labelFilter/req.go                     |    8 
 /dev/null                              |    0 
 go.sum                                 |  120 +++++
 algorithm/timeSlot/timeSlot.go         |    2 
 main.go                                |   51 +
 labelFilter/readyDataForLabel.go       |    2 
 structure/rule.go                      |    8 
 ruleserver/timeTicker.go               |    6 
 ruleserver/geoPolygon.go               |   32 +
 26 files changed, 643 insertions(+), 575 deletions(-)

diff --git a/algorithm/face/face.go b/algorithm/face/face.go
index 1e4ba5f..d692b01 100644
--- a/algorithm/face/face.go
+++ b/algorithm/face/face.go
@@ -2,8 +2,8 @@
 
 import (
 	"basic.com/pubsub/protomsg.git"
+	"basic.com/valib/logger.git"
 	"github.com/knetic/govaluate"
-	"ruleprocess/logger"
 	"ruleprocess/structure"
 	"strconv"
 )
@@ -15,42 +15,48 @@
 
 // 杩囨护瑙勫垯鍏堢瓫閫夊嚭绗﹀悎鏉′欢鐨勭洰鏍囨暟閲�
 func filterRule(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult {
+	if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a972" {
 		// 澶勭悊鐨勬槸浜鸿劯绠楁硶 濡傛灉杩欐潯瑙勫垯閰嶇疆鐨勬槸浜鸿劯绠楁硶锛岃繃婊ゅ畬鏉′欢涔嬪悗鐩存帴寰楀嚭缁撴灉锛屽洜涓鸿偗瀹氭病鏈夋暟閲忔潯浠讹紝鑷繁鎷兼帴
 		//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"{ // 浜鸿劯姣斿
-				//logger.Debug("褰撳墠灏忚鍒欐槸锛�",rule)
-				flag := "false"
-				// 鎶婃病鏈夌浉浼艰�呯殑浜鸿劯浠巉ilterData涓垹闄�
-				for index := 0; index < len(am.FilterData); {
-					// 灏嗚揪涓嶅埌闃堝�肩殑鐩镐技鑰呬粠鐩镐技鑰呮暟缁勪腑鍒犻櫎
-					logger.Info("鐪嬬湅鐩镐技鑰呬汉鏁帮細",len(am.FilterData[index].Liker))
-					if len(am.FilterData[index].Liker) == 0 {
-						// Go 璇█涓垏鐗囧垹闄ゅ厓绱犵殑鏈川鏄細浠ヨ鍒犻櫎鍏冪礌涓哄垎鐣岀偣锛屽皢鍓嶅悗涓や釜閮ㄥ垎鐨勫唴瀛橀噸鏂拌繛鎺ヨ捣鏉ャ�備笉鐢ㄦ��鐤戯紝鏁扮粍鍒犻櫎鍏冪礌灏辫繖涔堝潙鐖�
-						am.FilterData = append(am.FilterData[:index], am.FilterData[index+1:]...)
-					} else {
-						index++
+			if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && rule.SdkArgAlias != "time_rule" {
+				if rule.RuleWithPre == "||" {
+					return structure.LittleRuleResult{}
+				} else {
+					//logger.Debug("褰撳墠灏忚鍒欐槸锛�",rule)
+					flag := "false"
+					// 鎶婃病鏈夌浉浼艰�呯殑浜鸿劯浠巉ilterData涓垹闄�
+					for index := 0; index < len(am.FilterData); {
+						// 灏嗚揪涓嶅埌闃堝�肩殑鐩镐技鑰呬粠鐩镐技鑰呮暟缁勪腑鍒犻櫎
+						logger.Info("鐪嬬湅鐩镐技鑰呬汉鏁帮細",len(am.FilterData[index].Liker))
+						if len(am.FilterData[index].Liker) == 0 {
+							// Go 璇█涓垏鐗囧垹闄ゅ厓绱犵殑鏈川鏄細浠ヨ鍒犻櫎鍏冪礌涓哄垎鐣岀偣锛屽皢鍓嶅悗涓や釜閮ㄥ垎鐨勫唴瀛橀噸鏂拌繛鎺ヨ捣鏉ャ�備笉鐢ㄦ��鐤戯紝鏁扮粍鍒犻櫎鍏冪礌灏辫繖涔堝潙鐖�
+							am.FilterData = append(am.FilterData[:index], am.FilterData[index+1:]...)
+						} else {
+							index++
+						}
 					}
+					if len(am.FilterData) > 0 {
+						flag = "true"
+					}
+					logger.Info("---------浜鸿劯姣斿绗﹀悎鏉′欢鐨勬暟閲忎负锛�",len(am.FilterData))
+					return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + flag, rule.Sort}
 				}
-				if len(am.FilterData) > 0 {
-					flag = "true"
-				}
-				logger.Info("---------浜鸿劯姣斿绗﹀悎鏉′欢鐨勬暟閲忎负锛�",len(am.FilterData))
-				return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + flag, rule.Sort}
 			}
 			if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" { // 浜鸿劯妫�娴�
 				//logger.Debug("褰撳墠灏忚鍒欐槸锛�",rule)
 				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("-----------------------杩囪鍒欎箣鍓嶅尯鍩熷唴鐨勪汉鑴告暟閲忎负锛�",am.TargetNum,"--鍖哄煙--",am.AreaJson)
+						logger.Info("-----------------------杩囪鍒欎箣鍓嶅尯鍩熷唴鐨勪汉鑴告暟閲忎负锛�",am.TargetNum)
 						var args []*structure.Arg
 						if rule.RuleWithPre == "&&" {
 							args = am.FilterData
 							//logger.Info("杩囨护鍚庣殑args鐨勯暱搴︿负锛�",len(args))
 						} else {
 							args = am.Args
+							//涓嶆竻绌轰箣鍓嶇殑杩囨护鏁版嵁锛岀户缁
 							//logger.Info("娌¤繃婊ょ殑args鐨勯暱搴︿负锛�",len(args))
 						}
 						// 鍏堟竻绌鸿繃婊ゅ悗鐨勬暟鎹紝鍐嶅線閲屽鏈杩囨护鍚庣殑鏁版嵁
@@ -82,16 +88,16 @@
 						} else {
 							return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
 						}
-					} else {
-						return structure.LittleRuleResult{}
 					}
-				} else {
-					return structure.LittleRuleResult{}
+				} else if rule.SdkArgAlias == "" { // 浠�涔堝弬鏁伴兘涓嶉厤鐨勬儏鍐�
+					if am.TargetNum > 0 {
+						return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
+					} else {
+						return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
+					}
 				}
-			} else {
-				return structure.LittleRuleResult{}
 			}
-		} else {
-			return structure.LittleRuleResult{}
 		}
+	}
+	return structure.LittleRuleResult{}
 }
\ No newline at end of file
diff --git a/algorithm/intrusion/intrusion.go b/algorithm/intrusion/intrusion.go
index df003f4..714e899 100644
--- a/algorithm/intrusion/intrusion.go
+++ b/algorithm/intrusion/intrusion.go
@@ -2,8 +2,8 @@
 
 import (
 	"basic.com/pubsub/protomsg.git"
+	"basic.com/valib/logger.git"
 	"github.com/knetic/govaluate"
-	"ruleprocess/logger"
 	"ruleprocess/structure"
 	"strconv"
 )
@@ -11,12 +11,7 @@
 //鍏ヤ镜绠楁硶
 func Entrance(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult {
 	if rule.PolygonId == am.AreaId { // 棣栧厛杩欐潯瑙勫垯寰楁槸杩欎釜绠楁硶鐨勮鍒欙紝鍏舵瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
-		if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔�
-			logger.Debug("---------璧颁簡鍏ヤ镜绠楁硶",rule.Id,rule.SdkArgAlias,rule.Operator,rule.SdkArgValue,am.AreaId)
-			return filterRule(rule, am)
-		} else {
-			return structure.LittleRuleResult{}
-		}
+		return filterRule(rule, am)
 	} else {
 		return structure.LittleRuleResult{}
 	}
@@ -25,37 +20,48 @@
 // 杩囨护瑙勫垯鍏堢瓫閫夊嚭绗﹀悎鏉′欢鐨勭洰鏍囨暟閲�
 func filterRule(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult {
 	// 澶勭悊鐨勯兘鏄痽olo鏁版嵁
-	var args []*structure.Arg
-	if rule.RuleWithPre == "&&" {
-		args = am.FilterData
-	} else {
-		args = am.Args
-	}
-	// 鍏堟竻绌鸿繃婊ゅ悗鐨勬暟鎹紝鍐嶅線閲屽鏈杩囨护鍚庣殑鏁版嵁
-	am.FilterData = am.FilterData[0:0]
-	//logger.Debug("鐪嬬湅args锛氾細锛氾細锛�", args)
-	for _, arg := range args {
-		var formula string
-		if rule.SdkArgAlias == "score" {
-			formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
-			logger.Info("褰撳墠鐩镐技搴﹀皬鍏紡锛�", formula)
-		} else if rule.SdkArgAlias == "proportion" {
-			formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
-			logger.Info("褰撳墠鍗犳瘮灏忓叕寮忥細", formula)
+	if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔�
+		logger.Debug("---------璧颁簡鍏ヤ镜绠楁硶",rule.Id,rule.SdkArgAlias,rule.Operator,rule.SdkArgValue,am.AreaId)
+		var args []*structure.Arg
+		if rule.RuleWithPre == "&&" {
+			args = am.FilterData
 		} else {
-			formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
-			logger.Info("褰撳墠灏哄灏忓叕寮忥細", formula)
+			args = am.Args
 		}
-		expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
-		result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
-		if result.(bool) {
-			am.FilterData = append(am.FilterData, arg) // 寰楀埌绗﹀悎鏉′欢鐨勮繃婊ゆ暟鎹�
+		// 鍏堟竻绌鸿繃婊ゅ悗鐨勬暟鎹紝鍐嶅線閲屽鏈杩囨护鍚庣殑鏁版嵁
+		am.FilterData = am.FilterData[0:0]
+		//logger.Debug("鐪嬬湅args锛氾細锛氾細锛�", args)
+		for _, arg := range args {
+			var formula string
+			if rule.SdkArgAlias == "score" {
+				formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
+				logger.Info("褰撳墠鐩镐技搴﹀皬鍏紡锛�", formula)
+			} else if rule.SdkArgAlias == "proportion" {
+				formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
+				logger.Info("褰撳墠鍗犳瘮灏忓叕寮忥細", formula)
+			} else {
+				formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
+				logger.Info("褰撳墠灏哄灏忓叕寮忥細", formula)
+			}
+			expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
+			result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
+			if result.(bool) {
+				am.FilterData = append(am.FilterData, arg) // 寰楀埌绗﹀悎鏉′欢鐨勮繃婊ゆ暟鎹�
+			}
+		}
+		am.TargetNum = len(am.FilterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁
+		if am.TargetNum > 0 {
+			return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
+		} else {
+			return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
+		}
+
+	} else if rule.SdkArgAlias == "" {
+		if am.TargetNum > 0 {
+			return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
+		} else {
+			return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
 		}
 	}
-	am.TargetNum = len(am.FilterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁
-	if am.TargetNum > 0 {
-		return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
-	} else {
-		return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
-	}
+	return structure.LittleRuleResult{}
 }
diff --git a/algorithm/middleware/middleware.go b/algorithm/middleware/middleware.go
index 30e951f..928d6e8 100644
--- a/algorithm/middleware/middleware.go
+++ b/algorithm/middleware/middleware.go
@@ -2,11 +2,11 @@
 
 import (
 	"basic.com/pubsub/protomsg.git"
+	"basic.com/valib/logger.git"
 	"encoding/json"
 	"github.com/knetic/govaluate"
 	"plugin"
 	"ruleprocess/cache"
-	"ruleprocess/logger"
 	"ruleprocess/structure"
 	"strings"
 	"time"
@@ -40,11 +40,10 @@
 							}
 							// 濡傛灉姝ょ粨鏋滀负鐪熶笖褰撳墠杩囩殑鏄痽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 + ","
+								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 + ","
+								polygonId = groupRule.Rules[j].PolygonId + " "
 							}
 							resultSplice = append(resultSplice, &ruleResult)
 						}
@@ -76,11 +75,10 @@
 							}
 							// 濡傛灉姝ょ粨鏋滀负鐪熶笖褰撳墠杩囩殑鏄痽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 + ","
+								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 + ","
+								polygonId = groupRule.Rules[j].PolygonId + " "
 							}
 							resultSplice = append(resultSplice, &ruleResult)
 						}
@@ -109,10 +107,10 @@
 							}
 							logger.Info("鏁伴噺瑙勫垯缁撴灉锛�", ruleResult.Result)
 							if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
-								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 + ","
+								polygonId = groupRule.Rules[j].PolygonId + " "
 							}
 							resultSplice = append(resultSplice, &ruleResult)
 						}
@@ -139,10 +137,10 @@
 						}
 						logger.Info("鏃堕棿瑙勫垯缁撴灉锛�", ruleResult.Result)
 						if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
-							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 + ","
+							polygonId = groupRule.Rules[j].PolygonId + " "
 						}
 						resultSplice = append(resultSplice, &ruleResult)
 					}
diff --git a/algorithm/personUnsual/personUnsual.go b/algorithm/personUnsual/personUnsual.go
index f8eb0d2..d110d6f 100644
--- a/algorithm/personUnsual/personUnsual.go
+++ b/algorithm/personUnsual/personUnsual.go
@@ -2,8 +2,8 @@
 
 import (
 	"basic.com/pubsub/protomsg.git"
+	"basic.com/valib/logger.git"
 	"github.com/knetic/govaluate"
-	"ruleprocess/logger"
 	"ruleprocess/structure"
 	"strconv"
 )
@@ -27,39 +27,51 @@
 // 杩囨护瑙勫垯鍏堢瓫閫夊嚭绗﹀悎鏉′欢鐨勭洰鏍囨暟閲�
 func filterRule(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult {
 	// 澶勭悊鐨勯兘鏄痽olo鏁版嵁
-	var args []*structure.Arg
-	if rule.RuleWithPre == "&&" {
-		args = am.FilterData
-	} else {
-		args = am.Args
-	}
-	// 鍏堟竻绌鸿繃婊ゅ悗鐨勬暟鎹紝鍐嶅線閲屽鏈杩囨护鍚庣殑鏁版嵁
-	am.FilterData = am.FilterData[0:0]
-	//logger.Debug("鐪嬬湅args锛氾細锛氾細锛�", args)
-	for _, arg := range args {
-		var formula string
-		if rule.SdkArgAlias == "score" {
-			formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
-			logger.Info("褰撳墠鐩镐技搴﹀皬鍏紡锛�", formula)
-		} else if rule.SdkArgAlias == "proportion" {
-			formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
-			logger.Info("褰撳墠鍗犳瘮灏忓叕寮忥細", formula)
-		} else {
-			formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
-			logger.Info("褰撳墠灏哄灏忓叕寮忥細", formula)
-		}
-		expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
-		result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
-		if result.(bool) {
-			am.FilterData = append(am.FilterData, arg) // 寰楀埌绗﹀悎鏉′欢鐨勮繃婊ゆ暟鎹�
+	if rule.PolygonId == am.AreaId { // 棣栧厛杩欐潯瑙勫垯寰楁槸杩欎釜绠楁硶鐨勮鍒欙紝鍏舵瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
+		if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔�
+			var args []*structure.Arg
+			if rule.RuleWithPre == "&&" {
+				args = am.FilterData
+			} else {
+				args = am.Args
+			}
+			// 鍏堟竻绌鸿繃婊ゅ悗鐨勬暟鎹紝鍐嶅線閲屽鏈杩囨护鍚庣殑鏁版嵁
+			am.FilterData = am.FilterData[0:0]
+			//logger.Debug("鐪嬬湅args锛氾細锛氾細锛�", args)
+			for _, arg := range args {
+				var formula string
+				if rule.SdkArgAlias == "score" {
+					formula = strconv.FormatFloat(arg.Score, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
+					logger.Info("褰撳墠鐩镐技搴﹀皬鍏紡锛�", formula)
+				} else if rule.SdkArgAlias == "proportion" {
+					formula = strconv.FormatFloat(arg.Proportion, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
+					logger.Info("褰撳墠鍗犳瘮灏忓叕寮忥細", formula)
+				} else {
+					formula = strconv.FormatFloat(arg.Size, 'f', -1, 64) + " " + rule.Operator + " " + rule.SdkArgValue // 寰楀埌瀛楃涓插叕寮�
+					logger.Info("褰撳墠灏哄灏忓叕寮忥細", formula)
+				}
+				expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
+				result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
+				if result.(bool) {
+					am.FilterData = append(am.FilterData, arg) // 寰楀埌绗﹀悎鏉′欢鐨勮繃婊ゆ暟鎹�
+				}
+			}
+			am.TargetNum = len(am.FilterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁
+			if am.TargetNum > 0 {
+				return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
+			} else {
+				return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
+			}
+
+		} else if rule.SdkArgAlias == "" {
+			if am.TargetNum > 0 {
+				return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
+			} else {
+				return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
+			}
 		}
 	}
-	am.TargetNum = len(am.FilterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁
-	if am.TargetNum > 0 {
-		return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
-	} else {
-		return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
-	}
+	return structure.LittleRuleResult{}
 }
 
 // 缁欐暟鎹簱鐨勮鍒欒〃杈惧紡浠e弬 args: 涓�鏉″瓙瑙勫垯锛屽尯鍩熸暟鎹�
diff --git a/algorithm/static/static.go b/algorithm/static/static.go
index 774d97a..88b4e33 100644
--- a/algorithm/static/static.go
+++ b/algorithm/static/static.go
@@ -2,8 +2,8 @@
 
 import (
 	"basic.com/pubsub/protomsg.git"
+	"basic.com/valib/logger.git"
 	"github.com/knetic/govaluate"
-	"ruleprocess/logger"
 	"ruleprocess/ruleserver"
 	"ruleprocess/structure"
 	"strconv"
diff --git a/algorithm/timeSlot/timeSlot.go b/algorithm/timeSlot/timeSlot.go
index 4c3150d..11673f4 100644
--- a/algorithm/timeSlot/timeSlot.go
+++ b/algorithm/timeSlot/timeSlot.go
@@ -2,10 +2,10 @@
 
 import (
 	"basic.com/pubsub/protomsg.git"
+	"basic.com/valib/logger.git"
 	"encoding/json"
 	"github.com/knetic/govaluate"
 	"ruleprocess/cache"
-	"ruleprocess/logger"
 	"ruleprocess/structure"
 	"time"
 )
diff --git a/go.mod b/go.mod
index 3ebe584..06fe23f 100644
--- a/go.mod
+++ b/go.mod
@@ -10,15 +10,16 @@
 	basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051
 	basic.com/valib/gopherdiscovery.git v0.0.0-20190605034340-15d89d8b4e28
 	basic.com/valib/gosdk.git v0.0.0-20190531034110-0062fdaaa05a // indirect
+	basic.com/valib/logger.git v0.0.0-20190928113028-4907b08c4159 // indirect
 	github.com/Microsoft/go-winio v0.4.12 // indirect
 	github.com/ajg/form v1.5.1 // indirect
 	github.com/go-yaml/yaml v2.1.0+incompatible
 	github.com/gogo/protobuf v1.2.1
 	github.com/golang/protobuf v1.3.1
-	github.com/gorilla/websocket v1.4.0 // indirect
 	github.com/knetic/govaluate v3.0.0+incompatible
 	github.com/pierrec/lz4 v2.2.3+incompatible
 	github.com/satori/go.uuid v1.2.0
+	github.com/spf13/viper v1.4.0 // indirect
 	github.com/tmthrgd/go-sem v0.0.0-20160607101025-0214dbf53877 // indirect
 	github.com/tmthrgd/go-shm v0.0.0-20170117044846-90afcfcd5ee9 // indirect
 	github.com/tmthrgd/shm-go v0.0.0-20170130075737-7207ca97b290 // indirect
diff --git a/go.sum b/go.sum
index c82c1fe..84a6c9d 100644
--- a/go.sum
+++ b/go.sum
@@ -9,50 +9,170 @@
 basic.com/valib/gopherdiscovery.git v0.0.0-20190605034340-15d89d8b4e28/go.mod h1:CQ+UJyZV8MRzwwckncdUDu6/RDTKAzSIPCxc9tFcwPs=
 basic.com/valib/gosdk.git v0.0.0-20190531034110-0062fdaaa05a h1:6QxKVo+2wR1fgqGVgpGJoQt9XZOqVkmxJCs1r7hJfJ8=
 basic.com/valib/gosdk.git v0.0.0-20190531034110-0062fdaaa05a/go.mod h1:mT/jbyl3++GmYjh/jBF65Ein6O6/yd4qIQbSFMCZoE4=
+basic.com/valib/logger.git v0.0.0-20190928113028-4907b08c4159 h1:e5KopUEW/E9qmE3gUS6m7uO+/ti/N2m8rMMHB/HVqPk=
+basic.com/valib/logger.git v0.0.0-20190928113028-4907b08c4159/go.mod h1:SPlOGUUlxCscwF1dkqmLb0oJXVqg1uJ8hsPXLFxrw1M=
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 code.cloudfoundry.org/bytefmt v0.0.0-20180906201452-2aa6f33b730c/go.mod h1:wN/zk7mhREp/oviagqUXY3EwuHhWyOvAdsn5Y4CzOrc=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/Microsoft/go-winio v0.4.12 h1:xAfWHN1IrQ0NJ9TBC0KBZoqLjzDTr1ML+4MywiUOryc=
 github.com/Microsoft/go-winio v0.4.12/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
+github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
 github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU=
 github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
+github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
+github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
+github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
+github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
+github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/go-yaml/yaml v2.1.0+incompatible h1:RYi2hDdss1u4YE7GwixGzWwVo47T8UQwnTLB6vQiq+o=
 github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE=
 github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
 github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
+github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
+github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
+github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
+github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
+github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
+github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
+github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
 github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
 github.com/knetic/govaluate v3.0.0+incompatible h1:wtCEE87YYq68awKAV9kYkNDvxS7MDzO3ABbKgDqO+tI=
 github.com/knetic/govaluate v3.0.0+incompatible/go.mod h1:7QMc3skGbZuD4ZSe6bVN885uWCaxvhpo1Fvwvgp7bF8=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY=
+github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
 github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
+github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
+github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
+github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
+github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
 github.com/pierrec/lz4 v2.2.3+incompatible h1:YpgKDCFg5dd0Eb+XlgrfJtH4fAqoRA1kBcKnBZ4EFSE=
 github.com/pierrec/lz4 v2.2.3+incompatible/go.mod h1:g2rHQ0wsQlPM7GZ66p1EVBh+VdeJ8s60jWWxl1M9t1Q=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
+github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
+github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
 github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
 github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
 github.com/schollz/progressbar/v2 v2.12.1/go.mod h1:fBI3onORwtNtwCWJHsrXtjE3QnJOtqIZrvr3rDaF7L0=
+github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
+github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
+github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI=
+github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
+github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
+github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
+github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
+github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
+github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
+github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/viper v1.4.0 h1:yXHLWeravcrgGyFSyCgdYpXQ9dR9c/WED3pg1RhxqEU=
+github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/tmthrgd/go-sem v0.0.0-20160607101025-0214dbf53877 h1:n65+IT/xy5+trHm3Zpg9+j7IO4n8pBcPzvaKbMolW8U=
 github.com/tmthrgd/go-sem v0.0.0-20160607101025-0214dbf53877/go.mod h1:sgTk9wg3WurMlziuB3hcfgHYTz3pEkjQpSCTT8V2pW8=
 github.com/tmthrgd/go-shm v0.0.0-20170117044846-90afcfcd5ee9 h1:uVRQSWD6TOlWlLJ7IYYmbjRr0Xg35ADFN89HGQLPFGI=
 github.com/tmthrgd/go-shm v0.0.0-20170117044846-90afcfcd5ee9/go.mod h1:vy1jksyhzuQOMkHXMEi+X2bZ47ZeCn3QTnYdFBesABs=
 github.com/tmthrgd/shm-go v0.0.0-20170130075737-7207ca97b290 h1:5zW+TRr0WH4uN72/E/XYwb1PcaYN5BIB/FUbcQ0nHr0=
 github.com/tmthrgd/shm-go v0.0.0-20170130075737-7207ca97b290/go.mod h1:e9PZQr6zVezMTwj1v0j1YhGCNdS2zTCjXU9q9K+HHGk=
+github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
+github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
+github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
+go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
+go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
+go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
+go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
 gocv.io/x/gocv v0.20.0 h1:2q75zQ8Zel2tB69G6qrmf/E7EdvaCs90qvkHzdSBOAg=
 gocv.io/x/gocv v0.20.0/go.mod h1:vZETJRwLnl11muQ6iL3q4ju+0oJRrdmYdv5xJTH7WYA=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
 golang.org/x/net v0.0.0-20190603091049-60506f45cf65 h1:+rhAzEzT3f4JtomfC371qB+0Ola2caSKcY69NUBZrRQ=
 golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed h1:uPxWBzB3+mlnjy9W58qY1j/cjyFjutgw/Vhan2zLy/A=
 golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
+gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 nanomsg.org/go-mangos v1.4.0 h1:pVRLnzXePdSbhWlWdSncYszTagERhMG5zK/vXYmbEdM=
 nanomsg.org/go-mangos v1.4.0/go.mod h1:MOor8xUIgwsRMPpLr9xQxe7bT7rciibScOqVyztNxHQ=
diff --git a/insertdata/config.go b/insertdata/config.go
new file mode 100644
index 0000000..64c6b67
--- /dev/null
+++ b/insertdata/config.go
@@ -0,0 +1,63 @@
+package insertdata
+
+import (
+	"github.com/spf13/viper"
+	"log"
+)
+
+
+
+
+type weedfs struct {
+	Ip string `mapstructure: "ip"`
+	UploadPort int `mapstructure: "uploadport"`
+	VisitPort int `mapstructure: "visitport"`
+}
+
+var WeedFs = &weedfs{}
+
+// wp add es 绱㈠紩 浠ュ強 IP port
+type esinfo struct {
+	Masterip string      `mapstructure:"masterip"`
+	Httpport string      `mapstructure:"httpport"`
+	Shards string         `mapstructure:"shards"`
+	EsIndex  esindexlist `mapstructure:"index"`
+}
+
+type esindexlist struct {
+	VideoPersons   index `mapstructure:"videopersons"`
+	DbTables       index `mapstructure:"dbtables"`
+	Dbtablepersons index `mapstructure:"dbtablepersons"`
+	Personaction   index `mapstructure:"personaction"`
+}
+type index struct {
+	IndexName string `mapstructure:"index"`
+	IndexType string `mapstructure:"type"`
+}
+
+type sopath struct {
+	Ip string `mapstructure:"ip"`
+	Port string `mapstructure:"port"`
+}
+
+var SoPath = &sopath{}
+
+var EsInfo = &esinfo{}
+
+// Init is an exported method that takes the environment starts the viper
+// (external lib) and returns the configuration struct.
+func Init(env string) {
+	var err error
+	viper.SetConfigType("yaml")
+	viper.SetConfigName(env)
+	viper.AddConfigPath("/opt/vasystem/config/")
+	viper.AddConfigPath("")
+	err = viper.ReadInConfig()
+	if err != nil {
+		log.Fatal("error on parsing configuration file")
+	}
+	viper.UnmarshalKey("es", EsInfo)
+	viper.UnmarshalKey("weedfs", WeedFs)
+	viper.UnmarshalKey("sopath",SoPath)
+	//InitInsertEs()
+}
\ No newline at end of file
diff --git a/insertdata/insertDataToEs.go b/insertdata/insertDataToEs.go
index b3196e1..9704795 100644
--- a/insertdata/insertDataToEs.go
+++ b/insertdata/insertDataToEs.go
@@ -1,23 +1,21 @@
 package insertdata
 
 import (
+	"basic.com/valib/logger.git"
 	"encoding/base64"
 	"encoding/json"
 	"errors"
-	"fmt"
-	"io/ioutil"
 	"net"
 	"ruleprocess/cache"
-	"ruleprocess/logger"
+	"ruleprocess/structure"
+	"strconv"
 	"time"
 
 	"basic.com/pubsub/protomsg.git"
-	"github.com/go-yaml/yaml"
 	"github.com/golang/protobuf/proto"
 	"github.com/satori/go.uuid"
 	"ruleprocess/ruleserver"
 	"ruleprocess/util"
-	"ruleprocess/structure"
 )
 
 var weedfsUrl, videoPersonUrl, personAction string
@@ -31,55 +29,63 @@
 	DbTablePersons string `yaml:"dbTablePersons"`
 }
 
-func init() {
-	data, err := ioutil.ReadFile("./config/conf.yml")
-	if err != nil {
-		fmt.Println("璇诲彇閰嶇疆鏂囦欢鍑洪敊--", err)
-		logger.Error("璇诲彇閰嶇疆鏂囦欢鍑洪敊--", err)
-	}
-	c := conf{}
-	//鎶妝aml褰㈠紡鐨勫瓧绗︿覆瑙f瀽鎴恠truct绫诲瀷
-	yaml.Unmarshal(data, &c)
-	weedfsUrl = c.PhotoUrl
-	videoPersonUrl = c.VideoPersons
-	personAction = c.PersonAction
-}
+//func InitInsertEs() {
+//	weedfsUrl = "http://"+WeedFs.Ip+":"+strconv.Itoa(WeedFs.UploadPort)+"/submit"
+//	videoPersonUrl = "http://"+EsInfo.Masterip+":"+EsInfo.Httpport+"/"+EsInfo.EsIndex.VideoPersons.IndexName+"/"+EsInfo.EsIndex.VideoPersons.IndexType
+//	personAction = "http://"+EsInfo.Masterip+":"+EsInfo.Httpport+"/"+EsInfo.EsIndex.Personaction.IndexName+"/"+EsInfo.EsIndex.Personaction.IndexType
+//}
 
 // 浜鸿劯鐨勬暟鎹粨鏋�
 type PerVideoPicture struct {
-	Id              string                 `json:"id"`
-	CameraId        string                 `json:"cameraId"`
-	CameraAddr      string                 `json:"cameraAddr"`
-	PicDate         string                 `json:"picDate"`
-	PicMaxUrl       string                 `json:"picMaxUrl"`
-	TaskId          string                 `json:"taskId"`
-	TaskName        string                 `json:"taskName"`
-	SdkName         string                 `json:"sdkName"`
-	Content         string                 `json:"content"`
-	AlarmRules      []AlarmRule            `json:"alarmRules"`
-	LikeDate        string                 `json:"likeDate"`
-	Sex             string                 `json:"sex"`
-	Age             int32                  `json:"age"`
-	AgeDescription  string                 `json:"ageDescription"`
-	Race            string                 `json:"race"`
-	SmileLevel      int32                  `json:"smileLevel"`
-	BeautyLevel     int32                  `json:"beautyLevel"`
-	FaceFeature     string                 `json:"faceFeature"`
-	PicSmUrl        []string               `json:"picSmUrl"`
-	VideoUrl        string                 `json:"videoUrl"`
-	AnalyServerId   string                 `json:"analyServerId"`
-	AnalyServerName string                 `json:"analyServerName"`
-	AnalyServerIp   string                 `json:"analyServerIp"`
-	ClusterId       string                 `json:"clusterId"`
-	LinkId          string                 `json:"linkId"`
-	DetectScore     float64                `json:"detectScore"`
-	IsAlarm         int                    `json:"isAlarm"`
-	IsAckAlarm      int                    `json:"isAckAlarm"`
-	IsCollect       int                    `json:"isCollect"`
-	IsDelete        int                    `json:"isDelete"`
+	Id              string                `json:"id"`
+	CameraId        string                `json:"cameraId"`
+	CameraAddr      string                `json:"cameraAddr"`
+	PicDate         string                `json:"picDate"`
+	PicMaxUrl       string                `json:"picMaxUrl"`
+	TaskId          string                `json:"taskId"`
+	TaskName        string                `json:"taskName"`
+	SdkName         string                `json:"sdkName"`
+	Content         string                `json:"content"`
+	AlarmRules      []AlarmRule           `json:"alarmRules"`
+	LikeDate        string                `json:"likeDate"`
+	Sex             string                `json:"sex"`
+	Age             int32                 `json:"age"`
+	AgeDescription  string                `json:"ageDescription"`
+	Race            string                `json:"race"`
+	SmileLevel      int32                 `json:"smileLevel"`
+	BeautyLevel     int32                 `json:"beautyLevel"`
+	FaceFeature     string                `json:"faceFeature"`
+	PicSmUrl        []string              `json:"picSmUrl"`
+	VideoUrl        string                `json:"videoUrl"`
+	AnalyServerId   string                `json:"analyServerId"`
+	AnalyServerName string                `json:"analyServerName"`
+	AnalyServerIp   string                `json:"analyServerIp"`
+	ClusterId       string                `json:"clusterId"`
+	LinkId          string                `json:"linkId"`
+	DetectScore     float64               `json:"detectScore"`
+	IsAlarm         int                   `json:"isAlarm"`
+	IsAckAlarm      int                   `json:"isAckAlarm"`
+	IsCollect       int                   `json:"isCollect"`
+	IsDelete        int                   `json:"isDelete"`
 	BaseInfo        []*structure.BaseInfo `json:"baseInfo"`
+	TargetInfo      Target
 }
 
+type Target struct {
+	TargetId       string `json:"targetId"`
+	TargetScore    float64 `json:"targetScore"`
+	TargetLocation Points
+}
+
+type Points struct {
+	TopLeft  Point `json:"topLeft"`
+	BottomRight Point `json:"bottomRight"`
+}
+
+type Point struct {
+	Lat float64 `json:"lat"`
+	Lon float64 `json:"lon"`
+}
 //  yolo琛屼负鐨勬暟鎹粨鏋�
 type Personaction struct {
 	Id              string      `json:"id"`
@@ -103,6 +109,7 @@
 	IsAckAlarm      int         `json:"isAckAlarm"`
 	IsCollect       int         `json:"isCollect"`
 	IsDelete        int         `json:"isDelete"`
+	TargetInfo		[]Target
 }
 
 type AlarmRule struct {
@@ -110,8 +117,8 @@
 	AlarmLevel   string `json:"alarmLevel"`
 	RuleText     string `json:"ruleText"`
 	DefenceState bool   `json:"defenceState"`
-	IsLink		 bool	`json:"isLink"`
-	LinkInfo	 string `json:"linkInfo"`
+	IsLink       bool   `json:"isLink"`
+	LinkInfo     string `json:"linkInfo"`
 }
 
 // 涓�涓猣ace瀵瑰涓鍒欑粍鐨勫綊缃汉鑴哥殑缁撴瀯浣�
@@ -145,6 +152,18 @@
 //	//}
 //}
 func InsertToEs(msg structure.ResultMsg) {
+	defer func() {
+		if err := recover(); err != nil {
+			logger.Error("es妯″潡鍎跨殑寮傚父鎹曡幏锛�", err)
+		}
+	}()
+	localConfig1, err := cache.GetServerInfo()
+	if err != nil {
+		panic("閰嶇疆鏂囦欢涓嶅悎娉�")
+	}
+	weedfsUrl = "http://" + localConfig1.WebPicIp + ":" + strconv.Itoa(int(localConfig1.WebPicPort)) + "/submit"
+	videoPersonUrl = "http://" + localConfig1.AlarmIp + ":" + strconv.Itoa(int(localConfig1.AlarmPort)) + "/" + EsInfo.EsIndex.VideoPersons.IndexName + "/" + EsInfo.EsIndex.VideoPersons.IndexType
+	personAction = "http://" + localConfig1.AlarmIp + ":" + strconv.Itoa(int(localConfig1.AlarmPort)) + "/" + EsInfo.EsIndex.Personaction.IndexName + "/" + EsInfo.EsIndex.Personaction.IndexType
 	InsertFace(msg, "")
 	// 濡傛灉鏍囩涓惈鏈夋寔缁椂闂撮娆℃姤璀︾殑timeLabel鐨勮瘽鍒欎笉闇�瑕佽繃浜轰綋杩借釜锛屼笉鐒跺氨娌$殑鎻掑叆浜�
 	fk := ruleserver.TrackOrNot(msg.RuleResult)
@@ -167,10 +186,12 @@
 	if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]structure.FaceResult)) > 0 {
 		logger.Info("寰�ES鎻掍汉鑴告暟鎹�")
 		faces := []*FaceAndRules{}
-		faces = PutFace(faces,msg)
+		faces = PutFace(faces, msg)
 		//logger.Info("鏁寸悊鍚庣殑鏁版嵁锛�",faces)
 		if faces != nil {
-			for _,face := range faces {
+			var imgMaxUrl string = ""
+			var picTime string = ""
+			for _, face := range faces {
 				// 涓婁紶澶у浘
 				// 瑙e帇缂╁苟涓婁紶鍥剧墖
 				bdata, err := util.UnCompress(msg.Data)
@@ -178,17 +199,21 @@
 					panic("瑙e帇缂╁浘鐗囨椂鍑虹幇閿欒")
 				}
 				alarmRules := []AlarmRule{}
-				logger.Warn("浜鸿劯id涓猴細",face.Id,"浜鸿劯鐨勮鍒欓暱搴︿负锛�",len(face.rules))
+				logger.Warn("浜鸿劯id涓猴細", face.Id, "浜鸿劯鐨勮鍒欓暱搴︿负锛�", len(face.rules))
 				//os.Exit(1)
-				for _,faceResult := range face.rules {
+				for _, faceResult := range face.rules {
 					alarm := ChangeToString(faceResult.DefenceState, faceResult.AlarmLevel)
-					alarmRules = append(alarmRules, AlarmRule{faceResult.RuleGroupId, alarm, faceResult.RuleText, faceResult.DefenceState,faceResult.IsLink,""})
+					alarmRules = append(alarmRules, AlarmRule{faceResult.RuleGroupId, alarm, faceResult.RuleText, faceResult.DefenceState, faceResult.IsLink, ""})
 				}
 				i := protomsg.Image{}
 				err = proto.Unmarshal(bdata, &i)
-				bigPhotoUrl := make(map[string]interface{})
-				bigPhotoUrl, err = util.PostFormBufferData(weedfsUrl, i, uuid.NewV4().String())
-				logger.Debug("========澶у浘璺緞锛�", bigPhotoUrl)
+				if imgMaxUrl == "" {
+					bigPhotoUrl := make(map[string]interface{})
+					bigPhotoUrl, err = util.DrawPolygonOnImageForFace(msg.Cid, i, msg.RuleResult["face"].([]structure.FaceResult), weedfsUrl)
+					logger.Debug("========澶у浘璺緞锛�", bigPhotoUrl)
+					imgMaxUrl = bigPhotoUrl["fileUrl"].(string)
+					picTime = i.Timestamp
+				}
 				// 浜鸿劯妫�娴嬶紝娌℃湁鐩镐技鐨勫簳搴撲汉鍛�
 				localConfig, err := cache.GetServerInfo()
 				if err != nil {
@@ -207,6 +232,7 @@
 				}
 				//logger.Info("================灏忓浘鍦板潃:", resp["fileUrl"].(string))
 				sex := ""
+				logger.Info(sex)
 				if face.ThftRes.Gender == 1 {
 					sex = "鐢�"
 				} else {
@@ -214,26 +240,33 @@
 				}
 				race := getRaceString(face.ThftRes.Race)
 				ageDescription := getDescription(face.ThftRes.Age)
+				logger.Info(ageDescription)
 				esDataId := uuid.NewV4().String()
 				linksId := ""
 				if linkId != "" {
 					linksId = linkId
 				}
+				var target = new(Target)
+				target.TargetId = strconv.FormatUint(face.Id, 10)
+				target.TargetScore = face.Score
+				target.TargetLocation = Points{TopLeft:Point{face.Location.X,face.Location.Y},BottomRight:Point{face.Location.X+face.Location.Width,face.Location.Y+face.Location.Height}}
+				//logger.Info("浜鸿劯鐨刬d:",strconv.FormatUint(face.Id, 10))
+				logger.Info("%%%%%%%%%%%%%%%%%%%%%鐩爣淇℃伅锛�",*target)
 				pervideo := PerVideoPicture{
 					esDataId,
 					msg.Cid,
 					camera.Addr,
-					i.Timestamp,
-					bigPhotoUrl["fileUrl"].(string),
+					picTime,
+					imgMaxUrl,
 					msg.Tasklab.Taskid,
 					msg.Tasklab.Taskname,
 					"浜鸿劯",
 					"",
 					alarmRules,
 					time.Now().Format("2006-01-02 15:04:05"), // 鍙娴嬶紝娌℃湁姣斿鏃堕棿
-					sex,
+					sex,                                      //鏆傛敼涓轰汉鑴竔d strconv.FormatUint(face.Id, 10)
 					face.ThftRes.Age,
-					ageDescription,
+					ageDescription, // 鏆傛敼涓哄垎鍊糵mt.Sprintf("%.2f",face.Score)
 					race,
 					face.ThftRes.Smile,
 					face.ThftRes.Beauty,
@@ -251,6 +284,7 @@
 					0,
 					0,
 					face.Liker,
+					*target,
 				}
 				requstbody, err := json.Marshal(pervideo)
 
@@ -272,7 +306,7 @@
 }
 
 // 褰掔疆浜鸿劯
-func PutFace(faces []*FaceAndRules,msg structure.ResultMsg)[]*FaceAndRules{
+func PutFace(faces []*FaceAndRules, msg structure.ResultMsg) []*FaceAndRules {
 	if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]structure.FaceResult)) > 0 {
 		for _, faceResult := range msg.RuleResult["face"].([]structure.FaceResult) {
 			faces = hebingFace(faces, faceResult)
@@ -282,28 +316,28 @@
 		return nil
 	}
 }
-func hebingFace(faces []*FaceAndRules, faceResult structure.FaceResult) []*FaceAndRules{
+func hebingFace(faces []*FaceAndRules, faceResult structure.FaceResult) []*FaceAndRules {
 	for _, arg := range faceResult.Args {
 		// 鎷垮埌姣忎竴寮犱汉鑴�
-		logger.Info("褰掔疆浜鸿劯鏃剁浉浼艰�呯殑鏁伴噺锛�",len(arg.Liker))
+		logger.Info("褰掔疆浜鸿劯鏃剁浉浼艰�呯殑鏁伴噺锛�", len(arg.Liker))
 		flag := false
 		for _, face := range faces {
-			for _,lik := range face.Liker {
-				logger.Warn("--------鍚堝苟浜鸿劯鏃剁浉浼艰�咃細",lik.PersonId,lik.TableName)
+			for _, lik := range face.Liker {
+				logger.Warn("--------鍚堝苟浜鸿劯鏃剁浉浼艰�咃細", lik.PersonId, lik.TableName)
 			}
 			if arg.Id == face.Id {
 				flag = true
-				face.rules = append(face.rules,faceResult.Result)
+				face.rules = append(face.rules, faceResult.Result)
 				// 鐩镐技鑰呭幓閲嶅綊骞�
-				for _,liker := range arg.Liker {
+				for _, liker := range arg.Liker {
 					flag1 := true
-					for _,liker1 := range face.Liker {
+					for _, liker1 := range face.Liker {
 						if liker.PersonId == liker1.PersonId {
 							flag1 = false
 						}
 					}
 					if flag1 {
-						face.Liker = append(face.Liker,liker)
+						face.Liker = append(face.Liker, liker)
 					}
 				}
 				//face.Liker = append(face.Liker,arg.Liker...)
@@ -331,6 +365,7 @@
 			logger.Info("寰�ES鎻抷olo鏁版嵁")
 			var sdkNames string = ""
 			alarmRules := []AlarmRule{}
+			var targetInfos []Target
 			url := []string{}
 			for _, yoloResult := range msg.RuleResult["yolo"].([]structure.Result) {
 				if yoloResult.Others.TimeLabel == "01" || yoloResult.Others.TimeLabel == "10" {
@@ -342,7 +377,7 @@
 					if yoloResult.IsLink {
 						linkInfo = "鑱斿姩浠诲姟"
 					}
-					alarmRules = append(alarmRules, AlarmRule{yoloResult.RuleGroupId, alarm, yoloResult.RuleText, yoloResult.DefenceState,yoloResult.IsLink,linkInfo})
+					alarmRules = append(alarmRules, AlarmRule{yoloResult.RuleGroupId, alarm, yoloResult.RuleText, yoloResult.DefenceState, yoloResult.IsLink, linkInfo})
 					// 涓婁紶缂撳瓨鏁版嵁鐨勫浘鐗囨嬁鍒皍rl
 					if yoloResult.Others.CacheData != nil {
 						//InsertYolo(msg.RuleResult["cacheData"].(ruleserver.ResultMsg))
@@ -356,13 +391,34 @@
 							}
 							i := protomsg.Image{}
 							err = proto.Unmarshal(bdata, &i)
-							resp1, err1 := util.DrawPolygonOnImage(msg1.Cid, i, msg1.RuleResult["yolo"].([]structure.Result), weedfsUrl)
+							resp1, err1 := util.DrawPolygonOnImageForYolo(msg1.Cid, i, msg1.RuleResult["yolo"].([]structure.Result), weedfsUrl)
 							if err1 != nil {
 								logger.Error("缂撳瓨鏁版嵁鐢绘鎴栦笂浼犲浘鐗囨湇鍔″櫒鍑洪敊", err)
 							} else {
 								logger.Info("涓婁紶鐨勫浘鐗囦俊鎭細", resp1)
 							}
-							url = append(url, resp1["fileUrl"].(string))
+							if resp1["fileUrl"] != nil {
+								url = append(url, resp1["fileUrl"].(string))
+							}
+						}
+					}
+					// 瑁呴厤鐩爣淇℃伅鏁版嵁
+					for _,target := range yoloResult.Location  {
+						// 鍘婚噸娣诲姞
+						logger.Info("瑁呴厤鍓嶇殑鍘熷鏁版嵁鏄細",target)
+						var flag = true
+						for _,selectTarget := range targetInfos  {
+							if strconv.FormatUint(target.TargetId, 10) == selectTarget.TargetId {
+								flag = false
+								break
+							}
+						}
+						if flag {
+							var target1 = new(Target)
+							target1.TargetId = strconv.FormatUint(target.TargetId, 10)
+							target1.TargetScore = target.TargetScore
+							target1.TargetLocation = Points{TopLeft:Point{target.X,target.Y},BottomRight:Point{target.X+target.Width,target.Y+target.Height}}
+							targetInfos = append(targetInfos,*target1)
 						}
 					}
 				}
@@ -397,7 +453,7 @@
 			if len(alarmRules) > 0 {
 				isAlarm = 1
 				//resp, err = util.PostFormBufferData(weedfsUrl, i, uuid.NewV4().String())
-				resp, err = util.DrawPolygonOnImage(msg.Cid, i, msg.RuleResult["yolo"].([]structure.Result), weedfsUrl)
+				resp, err = util.DrawPolygonOnImageForYolo(msg.Cid, i, msg.RuleResult["yolo"].([]structure.Result), weedfsUrl)
 				if err != nil {
 					logger.Error("鐢绘鎴栦笂浼犲浘鐗囨湇鍔″櫒鍑洪敊", err)
 					return
@@ -420,7 +476,9 @@
 			if err != nil {
 				logger.Error("鏌ヨ鎽勫儚鏈轰俊鎭け璐�")
 			}
+
 			serverIp, err := GetLocalIP()
+			logger.Info("%%%%%%%%%%%%%%%%%yolo鐨則arget淇℃伅锛�",targetInfos)
 			if resp["fileUrl"] != nil {
 				url = append(url, resp["fileUrl"].(string))
 				esDataId := uuid.NewV4().String()
@@ -450,6 +508,7 @@
 					0,
 					0,
 					0,
+					targetInfos,
 				}
 				requstbody, err := json.Marshal(peraction)
 
@@ -473,155 +532,6 @@
 			logger.Debug("timeLabel鏉′欢閮戒笉绗﹀悎锛�")
 		}
 	}
-}
-func ChangeStatusYolo(msg structure.ResultMsg) {
-	logger.Info("寰�ES鎻抷olo闈炴姤璀︾姸鎬佹敼鍙樻暟鎹�")
-	var sdkNames string = ""
-	alarmRules := []AlarmRule{}
-	bdata, err := util.UnCompress(msg.Data)
-	if err != nil {
-		panic("瑙e帇缂╁浘鐗囨椂鍑虹幇閿欒")
-	}
-	i := protomsg.Image{}
-	err = proto.Unmarshal(bdata, &i)
-	//resp, err = util.PostFormBufferData(weedfsUrl, i, uuid.NewV4().String())
-	resp, err := util.DrawPolygonOnImage(msg.Cid, i, msg.RuleResult["yolo"].([]structure.Result), weedfsUrl)
-	if err != nil {
-		logger.Error("鐢绘鎴栦笂浼犲浘鐗囨湇鍔″櫒鍑洪敊", err)
-	} else {
-		logger.Info("涓婁紶鐨勫浘鐗囦俊鎭細", resp)
-	}
-	// logger.Println("鍥剧墖涓婁紶杩斿洖鍊硷細", resp)
-	// 鏌ヨ鏈満淇℃伅
-	localConfig, err := cache.GetServerInfo()
-	if err != nil {
-		logger.Error("鏌ヨ鏈満淇℃伅澶辫触锛�")
-	}
-	// 鏌ヨcameraName
-	camera, err := cache.GetCameraById(msg.Cid)
-	if err != nil {
-		logger.Error("鏌ヨ鎽勫儚鏈轰俊鎭け璐�")
-	}
-	serverIp, err := GetLocalIP()
-	esDataId := uuid.NewV4().String()
-	peraction := Personaction{
-		esDataId,
-		msg.Cid,
-		camera.Name,
-		camera.Addr,
-		msg.Tasklab.Taskid,
-		msg.Tasklab.Taskname,
-		sdkNames,
-		"yolo闈炴姤璀︾姸鎬佹敼鍙樻暟鎹�",
-		alarmRules,
-		localConfig.ServerId,
-		localConfig.ServerName,
-		serverIp,
-		"",
-		[]string{resp["fileUrl"].(string)},
-		i.Timestamp,
-		"",
-		"",
-		0,
-		0,
-		0,
-		0,
-	}
-	requstbody, err := json.Marshal(peraction)
-
-	if err != nil {
-		logger.Info("json parse error ", err)
-		return
-
-	}
-	resp1, err1 := EsReq("POST", personAction, requstbody)
-	if err1 != nil {
-		logger.Error("寰�ES鎻掑叆鏁版嵁澶辫触", err)
-	} else {
-		logger.Info("鎻掑叆es杩斿洖鐨勪俊鎭細", resp1)
-		// 鍙戝嚭褰曞儚淇″彿
-		ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: esDataId, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid, ImgId: i.Id, SdkIds: []string{}, Type: 2})
-		logger.Warn("__________________________________________寰�ES鎻掑叆yolo鏁版嵁鎴愬姛")
-		//os.Exit(1)
-	}
-}
-func ChangeStatusFace(msg structure.ResultMsg) {
-	logger.Info("寰�ES鎻掑叆浜鸿劯闈炴姤璀︿絾鏄姸鎬佽浆鎹㈡暟鎹�")
-	// 涓婁紶澶у浘
-	// 瑙e帇缂╁苟涓婁紶鍥剧墖
-	bdata, err := util.UnCompress(msg.Data)
-	if err != nil {
-		panic("瑙e帇缂╁浘鐗囨椂鍑虹幇閿欒")
-	}
-	i := protomsg.Image{}
-	err = proto.Unmarshal(bdata, &i)
-	bigPhotoUrl := make(map[string]interface{})
-	bigPhotoUrl, err = util.PostFormBufferData(weedfsUrl, i, uuid.NewV4().String())
-	logger.Debug("========澶у浘璺緞锛�", bigPhotoUrl)
-	// 浜鸿劯妫�娴嬶紝娌℃湁鐩镐技鐨勫簳搴撲汉鍛�
-	localConfig, err := cache.GetServerInfo()
-	if err != nil {
-		logger.Error("鏌ヨ鏈満淇℃伅澶辫触锛�")
-	}
-	serverIp, err := GetLocalIP()
-	// 鏌ヨcameraName
-	camera, err := cache.GetCameraById(msg.Cid)
-	if err != nil {
-		logger.Error("鏌ヨ鎽勫儚鏈轰俊鎭け璐�")
-	}
-
-	esDataId := uuid.NewV4().String()
-	pervideo := PerVideoPicture{
-		esDataId,
-		msg.Cid,
-		camera.Addr,
-		i.Timestamp,
-		bigPhotoUrl["fileUrl"].(string),
-		msg.Tasklab.Taskid,
-		msg.Tasklab.Taskname,
-		"浜鸿劯",
-		"鐘舵�佽浆鎹㈡暟鎹紝闈炴姤璀︽暟鎹�",
-		[]AlarmRule{},
-		time.Now().Format("2006-01-02 15:04:05"), // 鍙娴嬶紝娌℃湁姣斿鏃堕棿
-		"",
-		0,
-		"",
-		"",
-		0,
-		0,
-		"",
-		[]string{""},
-		"鏆傛棤闆嗙兢",
-		localConfig.ServerId,
-		localConfig.ServerName,
-		serverIp,
-		"",
-		"",
-		0,
-		1,
-		0,
-		0,
-		0,
-		[]*structure.BaseInfo{},
-	}
-	requstbody, err := json.Marshal(pervideo)
-
-	if err != nil {
-		logger.Info("json parse error ", err)
-		return
-	}
-	resp1, err1 := EsReq("POST", videoPersonUrl, requstbody)
-
-	if err1 != nil {
-		logger.Error("涓婁紶ES鍑洪敊锛�---", err1)
-	} else {
-		logger.Info("鎻掑叆es杩斿洖鐨勪俊鎭細", resp1)
-		// 鍙戝嚭褰曞儚淇″彿
-		ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: esDataId, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid, ImgId: i.Id, SdkIds: []string{}, Type: 1})
-	}
-	//if msg.RuleResult["cacheData"] != nil {
-	//	InsertFace(msg.RuleResult["cacheData"].(ruleserver.ResultMsg))
-	//}
 }
 
 // 鑾峰彇鏈満ip
@@ -706,100 +616,3 @@
 	}
 	return race
 }
-
-
-//for _, faceResult := range msg.RuleResult["face"].([]ruleserver.FaceResult) {
-//	for _, face := range faceResult.Args {
-//		// 涓婁紶澶у浘
-//		// 瑙e帇缂╁苟涓婁紶鍥剧墖
-//		bdata, err := util.UnCompress(msg.Data)
-//		if err != nil {
-//			panic("瑙e帇缂╁浘鐗囨椂鍑虹幇閿欒")
-//		}
-//		alarmRules := []AlarmRule{}
-//		alarm := ChangeToString(faceResult.DefenceState, faceResult.AlarmLevel)
-//		alarmRules = append(alarmRules, AlarmRule{faceResult.RuleGroupId, alarm, faceResult.RuleText, faceResult.DefenceState})
-//		i := protomsg.Image{}
-//		err = proto.Unmarshal(bdata, &i)
-//		bigPhotoUrl := make(map[string]interface{})
-//		bigPhotoUrl, err = util.PostFormBufferData(weedfsUrl, i, uuid.NewV4().String())
-//		logger.Debug("========澶у浘璺緞锛�", bigPhotoUrl)
-//		// 浜鸿劯妫�娴嬶紝娌℃湁鐩镐技鐨勫簳搴撲汉鍛�
-//		localConfig, err := cache.GetServerInfo()
-//		if err != nil {
-//			logger.Error("鏌ヨ鏈満淇℃伅澶辫触锛�")
-//		}
-//		serverIp, err := GetLocalIP()
-//		// 鏌ヨcameraName
-//		camera, err := cache.GetCameraById(msg.Cid)
-//		if err != nil {
-//			logger.Error("鏌ヨ鎽勫儚鏈轰俊鎭け璐�")
-//		}
-//		bytes := util.SubImg(i, int(face.Location.X), int(face.Location.Y), int(face.Location.X+face.Location.Width), int(face.Location.Y+face.Location.Height))
-//		resp, err := util.PostFormBufferData1(weedfsUrl, bytes, uuid.NewV4().String())
-//		if err != nil {
-//			logger.Error("涓婁紶灏忓浘鍑洪敊")
-//		}
-//		logger.Info("================灏忓浘鍦板潃:", resp["fileUrl"].(string))
-//		sex := ""
-//		if face.ThftRes.Gender == 1 {
-//			sex = "鐢�"
-//		} else {
-//			sex = "濂�"
-//		}
-//		race := getRaceString(face.ThftRes.Race)
-//		ageDescription := getDescription(face.ThftRes.Age)
-//		esDataId := uuid.NewV4().String()
-//		linksId := ""
-//		if linkId != "" {
-//			linksId = linkId
-//		}
-//		pervideo := PerVideoPicture{
-//			esDataId,
-//			msg.Cid,
-//			camera.Addr,
-//			i.Timestamp,
-//			strings.Split(bigPhotoUrl["fileUrl"].(string), "/")[1],
-//			msg.Tasklab.Taskid,
-//			msg.Tasklab.Taskname,
-//			"浜鸿劯",
-//			"",
-//			alarmRules,
-//			time.Now().Format("2006-01-02 15:04:05"), // 鍙娴嬶紝娌℃湁姣斿鏃堕棿
-//			sex,
-//			face.ThftRes.Age,
-//			ageDescription,
-//			race,
-//			face.ThftRes.Smile,
-//			face.ThftRes.Beauty,
-//			base64.StdEncoding.EncodeToString(face.Feature),
-//			[]string{strings.Split(resp["fileUrl"].(string), "/")[1]},
-//			"鏆傛棤闆嗙兢",
-//			localConfig.ServerId,
-//			localConfig.ServerName,
-//			serverIp,
-//			"",
-//			linksId,
-//			face.Score,
-//			1,
-//			0,
-//			0,
-//			0,
-//			face.Liker,
-//		}
-//		requstbody, err := json.Marshal(pervideo)
-//
-//		if err != nil {
-//			logger.Info("json parse error ", err)
-//			return
-//		}
-//		resp1, err1 := EsReq("POST", videoPersonUrl, requstbody)
-//		if err1 != nil {
-//			logger.Error("涓婁紶ES鍑洪敊锛�---", err1)
-//		} else {
-//			logger.Info("鎻掑叆es杩斿洖鐨勪俊鎭細", resp1)
-//			// 鍙戝嚭褰曞儚淇″彿
-//			ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: esDataId, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid, ImgId: i.Id, SdkIds: []string{}, Type: 1})
-//		}
-//	}
-//}
\ No newline at end of file
diff --git a/labelFilter/readyDataForLabel.go b/labelFilter/readyDataForLabel.go
index ff4fef3..c7f405d 100644
--- a/labelFilter/readyDataForLabel.go
+++ b/labelFilter/readyDataForLabel.go
@@ -1,8 +1,8 @@
 package labelFilter
 
 import (
+	"basic.com/valib/logger.git"
 	"ruleprocess/cache"
-	"ruleprocess/logger"
 	"ruleprocess/structure"
 	"time"
 )
diff --git a/labelFilter/req.go b/labelFilter/req.go
index 8066479..dd34d69 100644
--- a/labelFilter/req.go
+++ b/labelFilter/req.go
@@ -1,16 +1,16 @@
 package labelFilter
 
 import (
+	"basic.com/valib/logger.git"
 	"fmt"
+	"github.com/golang/protobuf/proto"
 	"nanomsg.org/go-mangos"
 	"nanomsg.org/go-mangos/protocol/rep"
 	"nanomsg.org/go-mangos/protocol/req"
 	"nanomsg.org/go-mangos/transport/ipc"
 	"nanomsg.org/go-mangos/transport/tcp"
 	"os"
-	"github.com/golang/protobuf/proto"
-	"ruleprocess/logger"
-	"ruleprocess/ruleserver"
+	"ruleprocess/structure"
 	"time"
 )
 
@@ -53,7 +53,7 @@
 	}
 }
 
-func Push(url string,data ruleserver.ResultMsg) {
+func Push(url string,data structure.ResultMsg) {
 	var sock mangos.Socket
 	var err error
 	var msg []byte
diff --git a/labelFilter/ruleForLabel.go b/labelFilter/ruleForLabel.go
index e2ad4ec..3b03b8d 100644
--- a/labelFilter/ruleForLabel.go
+++ b/labelFilter/ruleForLabel.go
@@ -3,8 +3,8 @@
 import (
 	"basic.com/dbapi.git"
 	"basic.com/pubsub/protomsg.git"
+	"basic.com/valib/logger.git"
 	"github.com/knetic/govaluate"
-	"ruleprocess/logger"
 	"ruleprocess/structure"
 	"strconv"
 	"time"
diff --git a/logger/logger.go b/logger/logger.go
deleted file mode 100644
index 125d649..0000000
--- a/logger/logger.go
+++ /dev/null
@@ -1,217 +0,0 @@
-package logger
-
-import (
-	"fmt"
-	"log"
-	"os"
-	"os/exec"
-	"strings"
-	"time"
-)
-
-const (
-	PanicLevel int = iota
-	FatalLevel
-	ErrorLevel
-	WarnLevel
-	InfoLevel
-	DebugLevel
-)
-
-const (
-	color_red = uint8(iota + 91)
-	color_green		//	缁�
-	color_yellow		//	榛�
-	color_blue			// 	钃�
-	color_magenta 		//	娲嬬孩
-)
-
-const (
-	fatalPrefix		=	"[FATAL] "
-	errorPrefix		=	"[ERROR] "
-	warnPrefix		=	"[WARN] "
-	infoPrefix		=	"[INFO] "
-	debugPrefix		=	"[DEBUG] "
-)
-
-const (
-	ByDay	int = iota
-	ByWeek
-	ByMonth
-	BySize
-)
-
-type LogFile struct {
-	level    int		// 鏃ュ織绛夌骇
-	saveMode int		// 淇濆瓨妯″紡
-	saveDays int		// 鏃ュ織淇濆瓨澶╂暟
-	logTime  int64		//
-	fileName string		// 鏃ュ織鏂囦欢鍚�
-	filesize int64		// 鏂囦欢澶у皬, 闇�瑕佽缃� saveMode 涓� BySize 鐢熸晥
-	fileFd   *os.File
-}
-
-var logFile LogFile
-
-func init()  {
-	logFile.saveMode = ByDay	// 榛樿鎸夊ぉ淇濆瓨
-	logFile.saveDays = 7		// 榛樿淇濆瓨涓夊ぉ鐨�
-	logFile.level = DebugLevel
-	//logFile.filesize = 1024 * 1024 * 10	// 榛樿10M锛� 闇�瑕佽缃� saveMode 涓� BySize
-}
-
-func Config(logFolder string, level int) {
-	logFile.fileName = logFolder
-	logFile.level = level
-
-	log.SetOutput(logFile)
-	//log.SetFlags(log.Lmicroseconds | log.Lshortfile)
-	log.SetFlags(log.Ldate | log.Ltime)
-}
-func GetLogFile() (*LogFile) {
-	return &logFile
-}
-
-func SetLevel(level int) {
-	logFile.level = level
-}
-
-func SetSaveMode(saveMode int)  {
-	logFile.saveMode = saveMode
-}
-
-func SetSaveDays(saveDays int)  {
-	logFile.saveDays = saveDays
-}
-
-func SetSaveSize(saveSize int64)  {
-	logFile.filesize = saveSize
-}
-
-func Debug(args ...interface{}) {
-	if logFile.level >= DebugLevel {
-		log.SetPrefix(blue(debugPrefix))
-		_ = log.Output(2, fmt.Sprintln(args...))
-	}
-}
-
-func Info(args ...interface{}) {
-	if logFile.level >= InfoLevel {
-		log.SetPrefix(green(infoPrefix))
-		_ = log.Output(2, fmt.Sprintln(args...))
-	}
-}
-
-func Warn(args ...interface{}) {
-	if logFile.level >= WarnLevel {
-		log.SetPrefix(magenta(warnPrefix))
-		_ = log.Output(2, fmt.Sprintln(args...))
-	}
-}
-
-func Error(args ...interface{}) {
-	if logFile.level >= ErrorLevel {
-		log.SetPrefix(red(errorPrefix))
-		_ = log.Output(2, fmt.Sprintln(args...))
-	}
-}
-
-func Fatal(args ...interface{}) {
-	if logFile.level >= FatalLevel {
-		log.SetPrefix(red(fatalPrefix))
-		_ = log.Output(2, fmt.Sprintln(args...))
-	}
-}
-
-func GetRedPrefix(s string) string {
-	return fmt.Sprintf("\x1b[%dm%s\x1b[0m", color_red, s)
-}
-
-func red(s string) string {
-	return fmt.Sprintf("\x1b[%dm%s\x1b[0m", color_red, s)
-}
-
-func green(s string) string {
-	return fmt.Sprintf("\x1b[%dm%s\x1b[0m", color_green, s)
-}
-
-func yellow(s string) string {
-	return fmt.Sprintf("\x1b[%dm%s\x1b[0m", color_yellow, s)
-}
-
-func blue(s string) string {
-	return fmt.Sprintf("\x1b[%dm%s\x1b[0m", color_blue, s)
-}
-
-func magenta(s string) string {
-	return fmt.Sprintf("\x1b[%dm%s\x1b[0m", color_magenta, s)
-}
-
-func (me LogFile) Write(buf []byte) (n int, err error) {
-	if me.fileName == "" {
-		fmt.Printf("consol: %s", buf)
-		return len(buf), nil
-	}
-
-	switch logFile.saveMode {
-	case BySize:
-		fileInfo, err := os.Stat(logFile.fileName)
-		if  err != nil {
-			logFile.createLogFile()
-			logFile.logTime = time.Now().Unix()
-		}else {
-			filesize:= fileInfo.Size();
-			if logFile.fileFd == nil ||
-				filesize > logFile.filesize {
-				logFile.createLogFile()
-				logFile.logTime = time.Now().Unix()
-			}
-		}
-	default:	// 榛樿鎸夊ぉ  ByDay
-		if logFile.logTime+3600 < time.Now().Unix() {
-			logFile.createLogFile()
-			logFile.logTime = time.Now().Unix()
-		}
-	}
-
-	if logFile.fileFd == nil {
-		fmt.Printf("log fileFd is nil !\n")
-		return len(buf), nil
-	}
-
-	return logFile.fileFd.Write(buf)
-}
-
-func (me *LogFile) createLogFile() {
-	logdir := "./"
-	if index := strings.LastIndex(me.fileName, "/"); index != -1 {
-		logdir = me.fileName[0:index] + "/"
-		os.MkdirAll(me.fileName[0:index], os.ModePerm)
-	}
-
-	now := time.Now()
-	filename := fmt.Sprintf("%s_%04d%02d%02d",
-		me.fileName, now.Year(), now.Month(), now.Day())
-	if err := os.Rename(me.fileName, filename); err == nil {
-		go func() {
-			tarCmd := exec.Command("tar", "-zcf", filename+".tar.gz", filename, "--remove-files")
-			tarCmd.Run()
-
-			rmCmd := exec.Command("/bin/sh", "-c",
-				"find "+logdir+` -type f -mtime +` +string(logFile.saveDays)+ ` -exec rm {} \;`)
-			rmCmd.Run()
-		}()
-	}
-
-	for index := 0; index < 10; index++ {
-		if fd, err := os.OpenFile(me.fileName, os.O_CREATE|os.O_APPEND|os.O_WRONLY, os.ModeExclusive); nil == err {
-			me.fileFd.Sync()
-			me.fileFd.Close()
-			me.fileFd = fd
-			break
-		}else {
-			fmt.Println("Open logfile error! err: ", err.Error())
-		}
-		me.fileFd = nil
-	}
-}
\ No newline at end of file
diff --git a/main.go b/main.go
index a8adc1a..895f5bc 100644
--- a/main.go
+++ b/main.go
@@ -16,7 +16,7 @@
 	"flag"
 	"fmt"
 	"github.com/golang/protobuf/proto"
-	"ruleprocess/logger"
+	"basic.com/valib/logger.git"
 	//"gocv.io/x/gocv"
 	//"image"
 	//"image/color"
@@ -24,6 +24,7 @@
 	"ruleprocess/cache"
 	"ruleprocess/ruleserver"
 	"sync"
+	"github.com/spf13/viper"
 )
 
 var dbIp = flag.String("dbIp", "127.0.0.1", "dbserver ip")
@@ -31,12 +32,22 @@
 var surveyPort = flag.Int("surveyPort", 40007, "survey port") //蹇冭烦
 var pubPort = flag.Int("pubPort", 50007, "pubsub port")       //鏁版嵁鏇存柊
 var initchan = make(chan bool)
+var env =  flag.String("env","pro","env set")
 
 func init() {
+	flag.Parse()
 	// 鏃ュ織鍒濆鍖�
-	logger.Config("./info.log", logger.DebugLevel)
-	logger.Info("鏃ュ織鍒濆鍖栨垚鍔燂紒")
 
+	insertdata.Init(*env)
+	var logFile = "./logger/"
+	if viper.GetString("LogBasePath") != "" {
+		logFile = viper.GetString("LogBasePath")
+	}
+	logFile = logFile + "ruleprocess.log"
+	fmt.Println("鏃ュ織鍦板潃锛�",logFile)
+	logger.Config(logFile, logger.DebugLevel)
+	logger.SetSaveDays(7)
+	logger.Info("鏃ュ織鍒濆鍖栨垚鍔燂紒")
 }
 func main() {
 	//fmt.Println("缂撳瓨鍒濆鍖栧畬鎴�",<- initchan)//dbserver鍒濆鍖栧畬姣�
@@ -81,21 +92,21 @@
 				//runtime.GOMAXPROCS(runtime.NumCPU())
 				//logger.Debug("浣跨敤鐨刢pu涓暟锛�",runtime.NumCPU())
 				//go func(msg []byte) {
-					logger.Debug("褰撳墠鏃堕棿鎴筹細", time.Now().Unix())
-					arg := structure.SdkDatas{}
-					//paramFormat(msg, &arg)
-					start := time.Now()
-					m := paramFormat(msg, &arg)
-					// 杩涜瑙勫垯澶勭悊鍒ゆ柇(鎵撲笂瑙勫垯鐨勬爣绛�)
-					ruleserver.Judge(&arg, &m) // 鎶妔dkMessage浼犺繘鍘伙紝鏂逛究缂撳瓨鏁版嵁鏃舵嫾鍑轰竴涓猺esultMag
-					// 鎶奱rg閲岀殑鎵撶殑鏍囩鎷垮嚭鏉ョ粰m鍐嶅皝瑁呬竴灞�
-					resultMsg := structure.ResultMsg{SdkMessage: &m, RuleResult: arg.RuleResult}
-					logger.Debug("瑙勫垯鍒ゆ柇瀹屾墍鐢ㄦ椂闂达細", time.Since(start))
-					// 灏嗘墦瀹屾爣绛剧殑鏁版嵁鎻掑叆鍒癊S
-					insertdata.InsertToEs(resultMsg)
-					logger.Debug("鎻掑叆瀹孍s鎵�鐢ㄦ椂闂达細", time.Since(start))
-					//浜嬩欢鎺ㄩ��
-					//go labelFilter.Judge(resultMsg)
+				logger.Debug("褰撳墠鏃堕棿鎴筹細", time.Now().Unix())
+				arg := structure.SdkDatas{}
+				//paramFormat(msg, &arg)
+				start := time.Now()
+				m := paramFormat(msg, &arg)
+				// 杩涜瑙勫垯澶勭悊鍒ゆ柇(鎵撲笂瑙勫垯鐨勬爣绛�)
+				ruleserver.Judge(&arg, &m) // 鎶妔dkMessage浼犺繘鍘伙紝鏂逛究缂撳瓨鏁版嵁鏃舵嫾鍑轰竴涓猺esultMag
+				// 鎶奱rg閲岀殑鎵撶殑鏍囩鎷垮嚭鏉ョ粰m鍐嶅皝瑁呬竴灞�
+				resultMsg := structure.ResultMsg{SdkMessage: &m, RuleResult: arg.RuleResult}
+				logger.Debug("瑙勫垯鍒ゆ柇瀹屾墍鐢ㄦ椂闂达細", time.Since(start))
+				// 灏嗘墦瀹屾爣绛剧殑鏁版嵁鎻掑叆鍒癊S
+				insertdata.InsertToEs(resultMsg)
+				logger.Debug("鎻掑叆瀹孍s鎵�鐢ㄦ椂闂达細", time.Since(start))
+				//浜嬩欢鎺ㄩ��
+				//go labelFilter.Judge(resultMsg)
 				//}(msg)
 			}
 		}
@@ -118,7 +129,7 @@
 func paramFormat(msg []byte, args *structure.SdkDatas) protomsg.SdkMessage {
 	defer func() {
 		if err := recover(); err != nil {
-			logger.Info("瑙e寘杩囩▼鐨勯敊璇�", err.(string))
+			logger.Info("瑙e寘杩囩▼鐨勫紓甯告崟鑾�", err.(string))
 		}
 
 	}()
@@ -172,7 +183,7 @@
 				for _, info := range yoloParam.Infos {
 					if info.Typ == 0 {
 						//logger.Debug("-------------yolo鐨勫潗鏍囨湁鍑犱釜",info.RcObj)
-						photoMap := structure.PhotoMap{Rects: rectFormat(info.RcObj), Score: float64(info.Prob) * 100, IsYolo: true}
+						photoMap := structure.PhotoMap{Rects: rectFormat(info.RcObj), Score: float64(info.Prob) * 100, IsYolo: true,Id:info.ObjID}
 						arg.Photo = append(arg.Photo, photoMap)
 						yoloNum++
 					}
diff --git a/ruleserver/geoPolygon.go b/ruleserver/geoPolygon.go
index bfe8efe..7421add 100644
--- a/ruleserver/geoPolygon.go
+++ b/ruleserver/geoPolygon.go
@@ -20,10 +20,30 @@
 	return num1
 }
 
+//Point 鍧愭爣鐐�
+type Point struct {
+	X float64 `json:"x"`
+	Y float64 `json:"y"`
+}
+
+//Rect 妫�娴嬬洰鏍�
+type Rect struct {
+	X      float64
+	Y      float64
+	Width  float64
+	Height float64
+}
+
+//Pointfloat 鍧愭爣鐐�
+type Pointfloat struct {
+	X float64 `json:"x"`
+	Y float64 `json:"y"`
+}
+
 //PintIsInPolygon 鍒ゆ柇鐐规槸鍚﹀湪澶氳竟褰㈠唴閮�
 //point涓鸿鍒ゆ柇鐨勫潗鏍囩偣
 //polygon鏄杈瑰舰鍚勭偣鏁扮粍
-func pintIsInPolygon(point structure.Pointfloat, polygon []structure.Point, widthScale float64, heightScale float64) bool {
+func pintIsInPolygon(point Pointfloat, polygon []Point, widthScale float64, heightScale float64) bool {
 	var nCross int = 0
 	for i := 0; i < len(polygon); i++ {
 
@@ -53,17 +73,17 @@
 }
 
 //GetLocation 灏嗕竴涓粰瀹氳捣濮嬪潗鏍囷紝瀹藉害闀垮害鐨勭煩褰㈠尯鍩熷潎鍒嗕负n鏂逛唤骞惰繑鍥炰腑蹇冨潗鏍囷紙n涓哄崟杈瑰钩鍒嗘暟鍊硷級鍜岄潰绉�
-func getLocation(rect structure.Rect, n int) ([]structure.Pointfloat, float64) {
+func getLocation(rect structure.Rect, n int) ([]Pointfloat, float64) {
 	xArr := make([]float64, n) // 鐢ㄥ垏鐗囦笉鐢ㄦ暟缁勶紝鏁扮粍涓嶈兘鐢ㄥ彉閲忓畾涔夐暱搴�
 	yArr := make([]float64, n)
-	pointArr := make([]structure.Pointfloat, 0, n*n)
+	pointArr := make([]Pointfloat, 0, n*n)
 	for i := 0; i < n; i++ {
 		xArr[i] = rect.X + (rect.Width/float64(2*n))*float64(2*i+1)
 		yArr[i] = rect.Y + (rect.Height/float64(2*n))*float64(2*i+1)
 	}
 	for i := 0; i < n; i++ {
 		for j := 0; j < n; j++ {
-			point := structure.Pointfloat{X: xArr[i], Y: yArr[j]}
+			point := Pointfloat{X: xArr[i], Y: yArr[j]}
 			pointArr = append(pointArr, point)
 		}
 	}
@@ -72,7 +92,7 @@
 }
 
 //ComputePolygonArea 璁$畻浠绘剰澶氳竟褰㈤潰绉�
-func computePolygonArea(polygon []structure.Point) float64 {
+func computePolygonArea(polygon []Point) float64 {
 	pointNum := len(polygon)
 	var s float64 = 0
 	if pointNum < 3 {
@@ -86,7 +106,7 @@
 }
 
 //PgsInterPercent calculate percent of two polygon intersection  璁$畻涓や釜澶氳竟褰㈢殑閲嶅彔鍗犳瘮
-func PgsInterPercent(pgpts []structure.Point, box structure.Rect, widthScale float64, heightScale float64) (percent float64) {
+func PgsInterPercent(pgpts []Point, box structure.Rect, widthScale float64, heightScale float64) (percent float64) {
 
 	areapts, areaBox := getLocation(box, 10)
 	var count = 0
diff --git a/ruleserver/personTrack.go b/ruleserver/personTrack.go
index cac682a..029170f 100644
--- a/ruleserver/personTrack.go
+++ b/ruleserver/personTrack.go
@@ -3,7 +3,7 @@
 import (
 	"basic.com/pubsub/protomsg.git"
 	"github.com/golang/protobuf/proto"
-	"ruleprocess/logger"
+	"basic.com/valib/logger.git"
 	"ruleprocess/structure"
 )
 
@@ -21,11 +21,7 @@
 var num int = 25
 // 妫�鏌ユ槸鍚﹀墠鍚庝袱娆$殑鏁版嵁id鏄惁瀹屽叏鐩稿悓锛堜汉鑴革級
 func FaceIsSame(msg *protomsg.SdkMessage) {
-	logger.Debug("+++++++++++++++++++++杩借釜寮�濮�+++++++++++++++鎽勫儚鏈篿d涓猴細", msg.Cid, "---缂撳瓨姹犱负锛�", TrackPond)
-	if msg.Tasklab == nil {
-		logger.Info("鏁版嵁涓虹┖锛屼笉蹇呰拷韪�")
-		return
-	}
+	logger.Debug("+++++++++++++++++++++浜鸿劯杩借釜寮�濮�+++++++++++++++鎽勫儚鏈篿d涓猴細", msg.Cid, "---缂撳瓨姹犱负锛�", TrackPond)
 	for _, sdkinfo := range msg.Tasklab.Sdkinfos { // 閬嶅巻鍚勭畻娉曠殑sdkData
 		if sdkinfo.Sdktype == "FaceDetect" { // 浜鸿劯妫�娴�
 			logger.Info("鏁版嵁闀垮害涓猴細", len(sdkinfo.Sdkdata))
@@ -55,57 +51,57 @@
 
 //  杩借釜浜轰綋锛屾鏌ユ暟閲忔槸鍚︿竴鑷�
 func BodyIsSame(msg *protomsg.SdkMessage) bool{
-	logger.Debug("+++++++++++++++++++++杩借釜寮�濮�+++++++++++++++鎽勫儚鏈篿d涓猴細", msg.Cid, "---缂撳瓨姹犱负锛�", TrackPond)
+	logger.Debug("+++++++++++++++++++++浜轰綋杩借釜寮�濮�+++++++++++++++鎽勫儚鏈篿d涓猴細", msg.Cid, "---缂撳瓨姹犱负锛�", TrackPond)
 	for _, sdkinfo := range msg.Tasklab.Sdkinfos { // 閬嶅巻鍚勭畻娉曠殑sdkData
 		if sdkinfo.Sdktype == "Yolo" {
-					if len(sdkinfo.Sdkdata) > 1 {
-						yoloParam := protomsg.ParamYoloObj{}
-						err := proto.Unmarshal(sdkinfo.Sdkdata, &yoloParam)
-						if err != nil {
-							logger.Info("瑙f瀽yolo鏁版嵁鏃跺嚭鐜伴敊璇�", err)
-							continue
-						}
-						var yoloNum int = 0
-						for i := 0; i < len(yoloParam.Infos); i++ {
-							if yoloParam.Infos[i].Typ == 0 {
-								yoloNum++
-							}
-						}
-						if TrackPond[msg.Cid] != nil {
-							logger.Info("================杩借釜涔嬪墠yolo鐨勪釜鏁帮細", yoloNum, "鐜板湪缂撳瓨姹犱腑璁板綍鐨勪釜鏁帮細", TrackPond[msg.Cid].Yolo)
-						} else {
-							logger.Info("================杩借釜涔嬪墠yolo鐨勪釜鏁帮細", yoloNum, "杩樻病鏈夎繖涓憚鍍忔満鐨勭紦瀛�")
-						}
-						if yoloParam.Infos != nil && TrackPond[msg.Cid] != nil && yoloNum == TrackPond[msg.Cid].Yolo { // yolo鐨勫鏋滄暟閲忕浉鍚屽垯瑙嗕负涓嶅彉銆佹妸yolo鐨剆dkData娓呯┖
-							//yoloParam.Infos = (yoloParam.Infos)[0:0]
-							//sdkinfo.Sdkdata, err = proto.Marshal(&yoloParam)
-							//if err != nil {
-							//	logger.Error("yolo搴忓垪鍖栭敊璇�", err)
-							//}
-							logger.Info("璺熶箣鍓嶇浉鍚岋紝娓呯┖yolo鏁版嵁")
-							return true
-						} else {
-							if TrackPond[msg.Cid] != nil {
-								logger.Info("鏇存柊褰撳墠鎽勫儚鏈虹紦瀛樻睜涓殑yolo涓暟锛�", yoloNum)
-								TrackPond[msg.Cid].Yolo = yoloNum
-							} else {
-								logger.Info("鏂板缓褰撳墠鎽勫儚鏈虹紦瀛樻睜涓殑yolo涓暟锛�", yoloNum)
-								TrackPond[msg.Cid] = &PersonTrack{Yolo: yoloNum}
-							}
-							return false
-						}
+			if len(sdkinfo.Sdkdata) > 1 {
+				yoloParam := protomsg.ParamYoloObj{}
+				err := proto.Unmarshal(sdkinfo.Sdkdata, &yoloParam)
+				if err != nil {
+					logger.Info("瑙f瀽yolo鏁版嵁鏃跺嚭鐜伴敊璇�", err)
+					continue
+				}
+				var yoloNum int = 0
+				for i := 0; i < len(yoloParam.Infos); i++ {
+					if yoloParam.Infos[i].Typ == 0 {
+						yoloNum++
+					}
+				}
+				if TrackPond[msg.Cid] != nil {
+					logger.Info("================杩借釜涔嬪墠yolo鐨勪釜鏁帮細", yoloNum, "鐜板湪缂撳瓨姹犱腑璁板綍鐨勪釜鏁帮細", TrackPond[msg.Cid].Yolo)
+				} else {
+					logger.Info("================杩借釜涔嬪墠yolo鐨勪釜鏁帮細", yoloNum, "杩樻病鏈夎繖涓憚鍍忔満鐨勭紦瀛�")
+				}
+				if yoloParam.Infos != nil && TrackPond[msg.Cid] != nil && yoloNum == TrackPond[msg.Cid].Yolo { // yolo鐨勫鏋滄暟閲忕浉鍚屽垯瑙嗕负涓嶅彉銆佹妸yolo鐨剆dkData娓呯┖
+					//yoloParam.Infos = (yoloParam.Infos)[0:0]
+					//sdkinfo.Sdkdata, err = proto.Marshal(&yoloParam)
+					//if err != nil {
+					//	logger.Error("yolo搴忓垪鍖栭敊璇�", err)
+					//}
+					logger.Info("璺熶箣鍓嶇浉鍚岋紝娓呯┖yolo鏁版嵁")
+					return true
+				} else {
+					if TrackPond[msg.Cid] != nil {
+						logger.Info("鏇存柊褰撳墠鎽勫儚鏈虹紦瀛樻睜涓殑yolo涓暟锛�", yoloNum)
+						TrackPond[msg.Cid].Yolo = yoloNum
 					} else {
-						if TrackPond[msg.Cid] != nil {
-							TrackPond[msg.Cid].Yolo = 0
-						} else {
-							TrackPond[msg.Cid] = &PersonTrack{Yolo: 0}
-						}
-						logger.Info("鎽勫儚鏈�:" + msg.Cid + "-娌℃湁yolo锛岃閲嶇疆涓�0")
-						continue
+						logger.Info("鏂板缓褰撳墠鎽勫儚鏈虹紦瀛樻睜涓殑yolo涓暟锛�", yoloNum)
+						TrackPond[msg.Cid] = &PersonTrack{Yolo: yoloNum}
+					}
+					return false
+				}
+			} else {
+				if TrackPond[msg.Cid] != nil {
+					TrackPond[msg.Cid].Yolo = 0
+				} else {
+					TrackPond[msg.Cid] = &PersonTrack{Yolo: 0}
+				}
+				logger.Info("鎽勫儚鏈�:" + msg.Cid + "-娌℃湁yolo锛岃閲嶇疆涓�0")
+				continue
 			}
 		}
 	}
-	logger.Debug("---------------------------------杩借釜缁撴潫--------------------------------------")
+	logger.Debug("---------------------------------浜轰綋杩借釜缁撴潫--------------------------------------")
 	return false
 }
 func TrackOrNot(label map[string]interface{}) bool{
@@ -120,7 +116,7 @@
 }
 
 // 杩囨护鎺夐偅浜涘凡鍦ㄧ紦瀛樹腑涓斿垎鍊兼洿浣庣殑浜鸿劯锛屾洿鏂扮紦瀛橈紙娌℃湁鐨勫姞涓婏紝鍒嗗�兼洿鏂颁负鏇撮珮鐨勶紝澶氱殑鍒犻櫎锛�
-func FaceIsInPond(cameraId string, sdkinfor *protomsg.SdkmsgWithTask) string {
+func FaceIsInPond(cameraId string, sdkinfor *protomsg.SdkmsgWithTask) {
 	if TrackPond[cameraId] != nil {
 		logger.Info("----椹墠鐐細", TrackPond[cameraId], "=====", len(TrackPond[cameraId].Faces))
 		for _,face := range TrackPond[cameraId].Faces  {
@@ -135,7 +131,11 @@
 		for _,face := range faceParam.Faces  {
 			logger.Info("鏂版潵鐨勭殑face鏁版嵁锛�",face.Pos.FaceID,face.Pos.FAngle.Confidence)
 		}
-		var facesTemp = faceParam.Faces // 鍏堟妸鏁版嵁杞瓨涓�浠斤紝涓嶇劧涓�浼氬効鏁版嵁鍒犲噺涔嬪悗鎵句笉鍒板師濮嬫暟鎹紝涓嶈兘璁╃紦瀛樻暟鎹洿鏂颁簡
+		var facesTemp []protomsg.ResultFaceDetect
+		for _,face := range faceParam.Faces {
+			facesTemp = append(facesTemp,*face) // 鍏堟妸鏁版嵁杞瓨涓�浠斤紝涓嶇劧涓�浼氬効鏁版嵁鍒犲噺涔嬪悗鎵句笉鍒板師濮嬫暟鎹紝涓嶈兘璁╃紦瀛樻暟鎹洿鏂颁簡
+		}
+
 		for i := 0; i < len(faceParam.Faces); {
 			faceFlag := false
 			for _, val := range TrackPond[cameraId].Faces {
@@ -159,17 +159,15 @@
 			}
 		}
 		logger.Info("鍙嶅簭鍒楀寲閲嶆柊瑁呴厤涔嬪墠浜鸿劯鐨勪釜鏁帮細",len(faceParam.Faces))
-
-		sdkinfor.Sdkdata, err = proto.Marshal(&faceParam)
-		if err != nil {
-			logger.Error("face搴忓垪鍖栭敊璇�", err)
-		}
-		//logger.Info("璺熶箣鍓嶇浉鍚岋紝娓呯┖浜鸿劯鏁版嵁")
-		// 鍙嶅悜寰幆 锛岀湅閭d簺缂撳瓨鏈夎�屾暟鎹病鏈夌殑灏卞垹闄ゆ睜瀛愪腑鐨勬暟鎹洿鏂扮紦瀛�
 		logger.Info("涓存椂瀛樺偍鐨勬柊鏉ユ暟鎹細")
 		for _, temp := range facesTemp {
 			logger.Info("涓存椂瀛樺偍鐨勬柊鏉ョ殑鐨刦ace鏁版嵁锛�",temp.Pos.FaceID,temp.Pos.FAngle.Confidence)
 		}
+		sdkinfor.Sdkdata, err = proto.Marshal(&faceParam)
+		if err != nil {
+			logger.Error("浜鸿劯搴忓垪鍖栭敊璇�", err)
+		}
+		// 鍙嶅悜寰幆 锛岀湅閭d簺缂撳瓨鏈夎�屾暟鎹病鏈夌殑灏卞垹闄ゆ暟鎹洿鏂扮紦瀛�
 		for i := 0; i < len(TrackPond[cameraId].Faces); {
 			flag := false
 			for _, temp := range facesTemp {
@@ -186,7 +184,6 @@
 			}
 		}
 	} else {
-		return "false"
+		TrackPond[cameraId] = &PersonTrack{Faces: nil}
 	}
-	return "false"
 }
diff --git a/ruleserver/readyDataForRule.go b/ruleserver/readyDataForRule.go
index 5859d9b..2b97579 100644
--- a/ruleserver/readyDataForRule.go
+++ b/ruleserver/readyDataForRule.go
@@ -3,6 +3,7 @@
 import (
 	"basic.com/dbapi.git"
 	"basic.com/pubsub/protomsg.git"
+	"basic.com/valib/logger.git"
 	"encoding/json"
 	"errors"
 	"fmt"
@@ -15,7 +16,6 @@
 	"nanomsg.org/go-mangos/transport/tcp"
 	"net"
 	"ruleprocess/cache"
-	"ruleprocess/logger"
 	"ruleprocess/structure"
 	"strconv"
 	"time"
@@ -143,14 +143,14 @@
 
 
 // 灏嗗瓧绗︿覆鏍煎紡鐨勫潗鏍囧簭鍒楀寲涓篜oint鏍煎紡
-func Json2points(areaPoints string) []structure.Point {
-	var pts []structure.Point
+func Json2points(areaPoints string) []Point {
+	var pts []Point
 	if areaPoints == "[]" || areaPoints == "" {
 		logger.Error("=====================姝ゅ尯鍩熶负鍏ㄩ儴鍖哄煙")
-		pts = append(pts, structure.Point{0, 0})
-		pts = append(pts, structure.Point{0, 540})
-		pts = append(pts, structure.Point{960, 540})
-		pts = append(pts, structure.Point{960, 0})
+		pts = append(pts, Point{0, 0})
+		pts = append(pts, Point{0, 540})
+		pts = append(pts, Point{960, 540})
+		pts = append(pts, Point{960, 0})
 	} else {
 		err := json.Unmarshal([]byte(areaPoints), &pts)
 		if err != nil {
diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index 0b6b606..8b429a6 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -1,9 +1,9 @@
 package ruleserver
 
 import (
+	"basic.com/valib/logger.git"
 	"plugin"
 	"ruleprocess/cache"
-	"ruleprocess/logger"
 	"ruleprocess/structure"
 	"sort"
 	"strconv"
@@ -16,6 +16,11 @@
 
 // 瀵瑰崟甯у浘鍍忕殑鍒ゆ柇 thisSdkDatas  褰撳墠浼犲叆鐨勮繖甯ф暟鎹紝cacheSdkData 瀹氭椂鍣ㄩ噷缂撳瓨鐨勪竴甯ф暟鎹� 娌℃湁灏辫繑鍥瀗il  (thisSdkDatas SdkDatas, cacheSdkDatas SdkDatas)
 func Judge(args *structure.SdkDatas, message *protomsg.SdkMessage) {
+	defer func() {
+		if err := recover(); err != nil {
+			logger.Error("瑙勫垯妯″潡鍎跨殑寮傚父鎹曡幏锛�",err)
+		}
+	}()
 	if len(args.Sdkdata) > 0 {
 		// 鎷垮埌鏈憚鍍忔満鐨勫尯鍩�
 		cameraPolygons := GetPolygons(args.CameraId)
@@ -62,30 +67,6 @@
 			}
 		}
 	}
-}
-
-func CallSo(sdkId string,rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult{
-	// 鏍规嵁sdkId鏌ュ嚭鍏跺搴旂殑sdk鐨剆oName锛岃皟鐢ㄧ浉搴攕o鐨凟ntrance鏂规硶
-	var soName = ""
-	if sdkId == "812b674b-2375-4589-919a-5c1c3278a97e" {
-		soName = "face.so"
-	} else if sdkId == "812b674b-2375-4589-919a-5c1c3278a975"{
-		soName = "intrusion.so"
-	} else if sdkId == "812b674b-2375-4589-919a-5c1c3278a976" {
-		soName = "personUnsual.so"
-	} else if sdkId == "812b674b-2375-4589-919a-5c1c3278a972" {
-		soName = "faceCompare.so"
-	}
-	p,err :=  plugin.Open("./algorithm/"+soName)
-	if err != nil {
-		panic(err)
-	}
-	f,err1 := p.Lookup("Entrance")
-	if err1 != nil {
-		panic("娌℃湁鎵惧埌鍏ュ彛鍑芥暟")
-	}
-	ruleResult := f.(func(rule *protomsg.Rule, am *structure.AreaMap)structure.LittleRuleResult)(rule,am)
-	return ruleResult
 }
 
 func CallMiddleware(args *structure.SdkDatas,rule protomsg.GroupRule) ([]*structure.LittleRuleResult, string, string){
@@ -186,7 +167,7 @@
 				//}
 				logger.Warn("___________________________________________________________________________缁堜簬璧板畬涓囬噷闀垮緛")
 				// 鎶婁粬浠殑浣嶇疆鏁版嵁涔熶紶涓嬪幓
-				locations := []structure.Rect{}
+				locations := []structure.TargetInfo{}
 				for _, sdkData := range args.Sdkdata {
 					if sdkData.IpcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && sdkNames != "" { // 鎶妝olo鏁版嵁鐨勫悇涓洰鏍囩殑鍧愭爣杈撳嚭鏂逛究鍚庨潰鐢绘
 						for _, areaMap := range sdkData.AreaMapList {
@@ -208,7 +189,7 @@
 					//logger.Info("-------------------yolo缁撴灉鏍囩闀垮害", len(args.RuleResult["yolo"].([]Result)))
 				}
 				if faceFlag {
-					args.RuleResult["face"] = append(args.RuleResult["face"].([]structure.FaceResult), structure.FaceResult{structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, []structure.Rect{}, polygonId, islink, label,}, faces})
+					args.RuleResult["face"] = append(args.RuleResult["face"].([]structure.FaceResult), structure.FaceResult{structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, []structure.TargetInfo{}, polygonId, islink, label,}, faces})
 					//logger.Info("-------------------face缁撴灉鏍囩", len(args.RuleResult["face"].([]FaceResult)))
 					labelTypes = append(labelTypes,1)
 				}
@@ -247,11 +228,15 @@
 	return faces
 }
 
-func putYolosToResult(am *structure.AreaMap) []structure.Rect {
-	locations := []structure.Rect{}
+func putYolosToResult(am *structure.AreaMap) []structure.TargetInfo {
+	locations := []structure.TargetInfo{}
 	if len(am.FilterData) > 0 {
 		for _, data := range am.FilterData {
-			locations = append(locations, data.Location)
+			location := structure.TargetInfo{}
+			location.Rect = data.Location
+			location.TargetId = data.Id
+			location.TargetScore = data.Score
+			locations = append(locations, location)
 		}
 	}
 	//logger.Println("-----------------------------------------------鍚浣犳槸绌虹殑锛�",faces)
diff --git a/ruleserver/server.go b/ruleserver/server.go
index b3ac5dc..37bd0ac 100644
--- a/ruleserver/server.go
+++ b/ruleserver/server.go
@@ -4,7 +4,7 @@
 	"basic.com/pubsub/protomsg.git"
 	"basic.com/valib/gopherdiscovery.git"
 	"github.com/gogo/protobuf/proto"
-	"ruleprocess/logger"
+	"basic.com/valib/logger.git"
 	"time"
 )
 
@@ -14,7 +14,7 @@
 
 const (
 	Discovery_Server = "tcp://0.0.0.0:40009"
-    Discovery_UrlPubSub = "tcp://0.0.0.0:50009"
+	Discovery_UrlPubSub = "tcp://0.0.0.0:50009"
 )
 
 //鍚姩discovery鐨剆erver
diff --git a/ruleserver/timeTicker.go b/ruleserver/timeTicker.go
index ac959e6..7650091 100644
--- a/ruleserver/timeTicker.go
+++ b/ruleserver/timeTicker.go
@@ -2,7 +2,7 @@
 
 import (
 	"fmt"
-	"ruleprocess/logger"
+	"basic.com/valib/logger.git"
 	"ruleprocess/structure"
 	"strings"
 	"time"
@@ -42,6 +42,7 @@
 				logger.Info("瀹氭椂鍣ㄦ墽琛屽崟鍏�", time.Now().Unix())
 				fmt.Println("瀹氭椂鍣ㄦ墽琛屽崟鍏�", time.Now().Unix())
 				// 姣忕閽熻鏁板櫒姹犲瓙閲屾墍鏈夌殑璁℃暟鍣ㄥ厓绱犻兘鍑忎竴锛屽噺鍒�0鐨勬槸璇ユ姤璀︾殑
+				rw.Lock()
 				for k, timeEle := range TimeEleList {
 					if timeEle.N > 0 {
 						timeEle.N = timeEle.N - 1
@@ -52,6 +53,7 @@
 						delete(TimeEleList, k)
 					}
 				}
+				rw.Unlock()
 			case stop := <-stopChan:
 				if stop {
 					logger.Info("瀹氭椂鍣ㄧ粨鏉�")
@@ -72,6 +74,7 @@
 	var flagTime string //
 	// 鍒ゆ柇鏈夋棤姝よ鍒欑粍鐨勫畾鏃跺櫒
 	flag := false
+	rw.Lock()
 	for k, _ := range TimeEleList {
 		//logger.Debug("-----------------鐪嬬湅杩欎釜key鍜実roupId", k, groupId)
 		if strings.Contains(k, groupId) && k != groupId{
@@ -133,6 +136,7 @@
 			flagTime = "00"
 		}
 	}
+	rw.Unlock()
 	return flagTime
 }
 
diff --git a/structure/gragh.go b/structure/gragh.go
index f8bfd92..ba583d9 100644
--- a/structure/gragh.go
+++ b/structure/gragh.go
@@ -18,4 +18,4 @@
 type Pointfloat struct {
 	X float64 `json:"x"`
 	Y float64 `json:"y"`
-}
\ No newline at end of file
+}
diff --git a/structure/rule.go b/structure/rule.go
index e1e3104..60fe306 100644
--- a/structure/rule.go
+++ b/structure/rule.go
@@ -79,7 +79,7 @@
 	DefenceState bool   // 鏄惁甯冮槻
 	AlarmLevel   int32  // 鎶ヨ绛夌骇
 	RuleText     string // 鏂囧瓧鐗堣鍒欑粍
-	Location     []Rect // 鐩爣鐨勫潗鏍�
+	Location     []TargetInfo // 鐩爣鐨勫潗鏍�
 	AlarmPolygon string // 瑙﹀彂鐨勬姤璀︽
 	IsLink       bool   // 鏄惁鏄仈鍔ㄤ换鍔�
 	Others
@@ -90,6 +90,12 @@
 	TimeLabel string
 }
 
+type TargetInfo struct {
+	Rect
+	TargetId    uint64
+	TargetScore float64
+}
+
 // 杩囪鍒欏簱鎵撲笂鐨勬爣绛�
 type FaceResult struct {
 	Result
diff --git a/util/105.jpg b/util/105.jpg
deleted file mode 100644
index c5e3e68..0000000
--- a/util/105.jpg
+++ /dev/null
Binary files differ
diff --git a/util/simpleCV.go b/util/simpleCV.go
index 21e551f..9e48691 100644
--- a/util/simpleCV.go
+++ b/util/simpleCV.go
@@ -9,7 +9,7 @@
 	"image/color"
 	"os"
 	"ruleprocess/cache"
-	"ruleprocess/logger"
+	"basic.com/valib/logger.git"
 	"ruleprocess/ruleserver"
 	"ruleprocess/structure"
 	"strings"
@@ -156,7 +156,7 @@
 	}
 }
 
-func DrawPolygonOnImage(cameraId string, img protomsg.Image, results []structure.Result,url string) (maps map[string]interface{}, err0 error) {
+func DrawPolygonOnImageForYolo(cameraId string, img protomsg.Image, results []structure.Result,url string) (maps map[string]interface{}, err0 error) {
 
 	rook, _ := gocv.NewMatFromBytes(int(img.Height), int(img.Width), gocv.MatTypeCV8UC3, img.Data)
 	//rook := gocv.IMRead("/home/user/workspace/ruleprocess/util/105.jpg",gocv.IMReadColor)
@@ -171,7 +171,8 @@
 		logger.Info("-----------------------鐪嬬湅鎶ヨ鍖哄煙id锛�",polygonIds)
 		for i := 0; i < len(polygonIds)-1; i++ {
 			polygon := getPolygonById(polygonIds[i],cameraId)
-			if polygon.Polygon != "[]" {
+			if polygon.Polygon != "[]" && polygon.Polygon != ""{
+				logger.Debug("鎵�鐢诲尯鍩燂細",polygon.Polygon)
 				DrawAPolygon(&rook,polygon.Polygon,yellow)
 			}
 		}
@@ -187,6 +188,31 @@
 	return
 }
 
+func DrawPolygonOnImageForFace(cameraId string, img protomsg.Image, results []structure.FaceResult,url string) (maps map[string]interface{}, err0 error) {
+
+	rook, _ := gocv.NewMatFromBytes(int(img.Height), int(img.Width), gocv.MatTypeCV8UC3, img.Data)
+	//rook := gocv.IMRead("/home/user/workspace/ruleprocess/util/105.jpg",gocv.IMReadColor)
+	defer rook.Close()
+
+	yellow := color.RGBA{255, 255, 0, 0}
+
+	// 鍒嗗壊鍖哄煙id闆嗗悎骞舵牴鎹甶d鏌ヨ鍖哄煙鐒跺悗鐢绘
+	for _,result := range results  {
+		polygonIds := strings.Split(result.AlarmPolygon,",")
+		logger.Info("-----------------------鐪嬬湅鎶ヨ鍖哄煙id锛�",polygonIds)
+		for i := 0; i < len(polygonIds)-1; i++ {
+			polygon := getPolygonById(polygonIds[i],cameraId)
+			if polygon.Polygon != "[]" && polygon.Polygon != ""{
+				logger.Debug("鎵�鐢诲尯鍩燂細",polygon.Polygon)
+				DrawAPolygon(&rook,polygon.Polygon,yellow)
+			}
+		}
+	}
+	//return nil,nil
+	maps,err0 = UploadFromMat(url,rook)
+	return
+}
+
 // 鎶婂浘鐗囪浆鎴愪簩杩涘埗娴�
 func RetrieveROM(filename string) ([]byte, error) {
 	file, err := os.Open(filename)
diff --git a/util/simpleCV_test.go b/util/simpleCV_test.go
index 4f8f7c8..04d62ce 100644
--- a/util/simpleCV_test.go
+++ b/util/simpleCV_test.go
@@ -5,9 +5,9 @@
 )
 
 func TestDrawPolygonOnImage(t *testing.T)  {
-	resp,err := DrawPolygonOnImage()
-	if err != nil {
-		t.Error("鐢绘鎴栬�呬笂浼犳湁闂")
-	}
-	t.Log("------=============",resp)
+	//resp,err := DrawPolygonOnImage()
+	//if err != nil {
+	//	t.Error("鐢绘鎴栬�呬笂浼犳湁闂")
+	//}
+	//t.Log("------=============",resp)
 }
\ No newline at end of file
diff --git a/util/upload.go b/util/upload.go
index 0407f53..e864d53 100644
--- a/util/upload.go
+++ b/util/upload.go
@@ -10,7 +10,7 @@
 	"log"
 	"mime/multipart"
 	"net/http"
-	"ruleprocess/logger"
+	"basic.com/valib/logger.git"
 	"time"
 	"gocv.io/x/gocv"
 )

--
Gitblit v1.8.0