From 49eaf6fcf782ea66cce284ca910bff7455e67e4b Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期三, 09 十月 2019 18:44:49 +0800
Subject: [PATCH] 把结构体提出来单独模块儿

---
 util/simpleCV.go                 |    5 
 go.mod                           |    2 
 ruleserver/ruleToformula.go      |  309 +++++++++------------------
 ruleserver/personTrack.go        |    5 
 ruleserver/readyDataForRule.go   |   45 ++--
 structure/gragh.go               |   21 +
 labelFilter/req.go               |    8 
 /dev/null                        |    0 
 go.sum                           |   16 -
 insertdata/insertDataToEs.go     |   37 +-
 labelFilter/readyDataForLabel.go |   22 +-
 labelFilter/ruleForLabel.go      |    8 
 structure/rule.go                |  132 ++++++++++++
 ruleserver/timeTicker.go         |   11 
 util/simpleCV_test.go            |   10 
 ruleserver/geoPolygon.go         |    5 
 16 files changed, 340 insertions(+), 296 deletions(-)

diff --git a/105.jpg b/105.jpg
deleted file mode 100644
index c5e3e68..0000000
--- a/105.jpg
+++ /dev/null
Binary files differ
diff --git a/go.mod b/go.mod
index 5c019fc..2fba45b 100644
--- a/go.mod
+++ b/go.mod
@@ -5,7 +5,7 @@
 require (
 	basic.com/dbapi.git v0.0.0-20190822081128-ce924b8a905f
 	basic.com/pubsub/cache.git v0.0.0-20190718093725-6a413e1d7d48
-	basic.com/pubsub/protomsg.git v0.0.0-20190824080957-7b44351cb40b
+	basic.com/pubsub/protomsg.git v0.0.0-20190905061607-7b96dafe8f99
 	basic.com/pubsub/sdkcompare.git v0.0.0-20190715013640-f536a4647d00
 	basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051
 	basic.com/valib/gopherdiscovery.git v0.0.0-20190605034340-15d89d8b4e28
diff --git a/go.sum b/go.sum
index d9ba200..6f7db51 100644
--- a/go.sum
+++ b/go.sum
@@ -1,21 +1,9 @@
-basic.com/dbapi.git v0.0.0-20190701055817-73bca225181f h1:CVB4pmUXTPPFN7w/DQfU1YWg2Tp2gG93TTr1M5W86sE=
-basic.com/dbapi.git v0.0.0-20190701055817-73bca225181f/go.mod h1:eDXPnxaz6jZPDvBSk7ya7oSASWPCuUEgRTJCjsfKt/Q=
-basic.com/dbapi.git v0.0.0-20190724082851-b6ae90344405 h1:BJzdtGipKxQAaptrwUNOVQZ3Qx4jbeAf72wkqBmm5vE=
-basic.com/dbapi.git v0.0.0-20190724082851-b6ae90344405/go.mod h1:eDXPnxaz6jZPDvBSk7ya7oSASWPCuUEgRTJCjsfKt/Q=
 basic.com/dbapi.git v0.0.0-20190822081128-ce924b8a905f h1:m7ONW0VqagpmWppr6GSa2Gykid202vCbV9worYCM+pg=
 basic.com/dbapi.git v0.0.0-20190822081128-ce924b8a905f/go.mod h1:eDXPnxaz6jZPDvBSk7ya7oSASWPCuUEgRTJCjsfKt/Q=
-basic.com/pubsub/cache.git v0.0.0-20190712095028-e73efb4afc3b h1:UAasACFqEYUBCuZkkdxYVc1QmSyB7McvNHS36QxDJp4=
-basic.com/pubsub/cache.git v0.0.0-20190712095028-e73efb4afc3b/go.mod h1:gHLJZz2ee1cGL0X0ae69fs56bAxkDgEQwDhhXZJNUcY=
-basic.com/pubsub/cache.git v0.0.0-20190718024458-be52360c4814 h1:KoSik/aiJNDt3d+qRKExLW4pNHZ7vU1wXHhWXxZi4qo=
-basic.com/pubsub/cache.git v0.0.0-20190718024458-be52360c4814/go.mod h1:gHLJZz2ee1cGL0X0ae69fs56bAxkDgEQwDhhXZJNUcY=
 basic.com/pubsub/cache.git v0.0.0-20190718093725-6a413e1d7d48 h1:BBA30Rgljn6MRieC4gUncETJDyna3ObyubTo9HEQ2M0=
 basic.com/pubsub/cache.git v0.0.0-20190718093725-6a413e1d7d48/go.mod h1:gHLJZz2ee1cGL0X0ae69fs56bAxkDgEQwDhhXZJNUcY=
-basic.com/pubsub/protomsg.git v0.0.0-20190801122504-ad6c105f7a2b h1:2eskhTo22eo07AmAj3xVo31U/+qRFf6P1qhlfxoaFOc=
-basic.com/pubsub/protomsg.git v0.0.0-20190801122504-ad6c105f7a2b/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
-basic.com/pubsub/protomsg.git v0.0.0-20190822060153-dc8ca60fc531 h1:XsygHuAqvEovNNOiG80qLoV9OtdcN8IPP+xv/Ajx+Eg=
-basic.com/pubsub/protomsg.git v0.0.0-20190822060153-dc8ca60fc531/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
-basic.com/pubsub/protomsg.git v0.0.0-20190824080957-7b44351cb40b h1:sstFc5QNzIuMnRANTpWn+2LGQnHwyQ8kG0TvZDZMw2s=
-basic.com/pubsub/protomsg.git v0.0.0-20190824080957-7b44351cb40b/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
+basic.com/pubsub/protomsg.git v0.0.0-20190905061607-7b96dafe8f99 h1:YSmWZPp/mHoq+/L5d0iTsqjiCcVwZqEQRQAXxQFSbvY=
+basic.com/pubsub/protomsg.git v0.0.0-20190905061607-7b96dafe8f99/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
 basic.com/pubsub/sdkcompare.git v0.0.0-20190715013640-f536a4647d00 h1:sK+Tx7rvM9J2WnNIwrzMDjZSylWiKNfQO0prUBfKsDk=
 basic.com/pubsub/sdkcompare.git v0.0.0-20190715013640-f536a4647d00/go.mod h1:8by33F9E1w17Pw/rDgJGJXAo122w0wDENG14hiMS+RE=
 basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051 h1:9flC2o3kasaM2Y6I+mY+mxmve/pyAY/UzGQZLT3lFHM=
diff --git a/insertdata/insertDataToEs.go b/insertdata/insertDataToEs.go
index 26bb24b..f3eda88 100644
--- a/insertdata/insertDataToEs.go
+++ b/insertdata/insertDataToEs.go
@@ -2,6 +2,7 @@
 
 import (
 	"basic.com/valib/logger.git"
+	"ruleprocess/structure"
 	"encoding/base64"
 	"encoding/json"
 	"errors"
@@ -66,7 +67,7 @@
 	IsAckAlarm      int                    `json:"isAckAlarm"`
 	IsCollect       int                    `json:"isCollect"`
 	IsDelete        int                    `json:"isDelete"`
-	BaseInfo        []*ruleserver.BaseInfo `json:"baseInfo"`
+	BaseInfo        []*structure.BaseInfo `json:"baseInfo"`
 }
 
 //  yolo琛屼负鐨勬暟鎹粨鏋�
@@ -105,8 +106,8 @@
 
 // 涓�涓猣ace瀵瑰涓鍒欑粍鐨勫綊缃汉鑴哥殑缁撴瀯浣�
 type FaceAndRules struct {
-	ruleserver.Arg
-	rules []ruleserver.Result
+	structure.Arg
+	rules []structure.Result
 }
 
 // 寰�ES鎻掓暟鎹�
@@ -133,7 +134,7 @@
 //	//	ChangeStatusYolo(msg)
 //	//}
 //}
-func InsertToEs(msg ruleserver.ResultMsg) {
+func InsertToEs(msg structure.ResultMsg) {
 	defer func() {
 		if err := recover(); err != nil {
 			logger.Error("es妯″潡鍎跨殑寮傚父鎹曡幏锛�",err)
@@ -164,8 +165,8 @@
 }
 
 // 寰�es涓彃鍏ヤ汉鑴告暟鎹�
-func InsertFace(msg ruleserver.ResultMsg, linkId string) {
-	if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]ruleserver.FaceResult)) > 0 {
+func InsertFace(msg structure.ResultMsg, linkId string) {
+	if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]structure.FaceResult)) > 0 {
 		logger.Info("寰�ES鎻掍汉鑴告暟鎹�")
 		faces := []*FaceAndRules{}
 		faces = PutFace(faces,msg)
@@ -191,7 +192,7 @@
 				err = proto.Unmarshal(bdata, &i)
 				if imgMaxUrl == "" {
 					bigPhotoUrl := make(map[string]interface{})
-					bigPhotoUrl, err = util.DrawPolygonOnImageForFace(msg.Cid, i, msg.RuleResult["face"].([]ruleserver.FaceResult), weedfsUrl)
+					bigPhotoUrl, err = util.DrawPolygonOnImageForFace(msg.Cid, i, msg.RuleResult["face"].([]structure.FaceResult), weedfsUrl)
 					logger.Debug("========澶у浘璺緞锛�", bigPhotoUrl)
 					imgMaxUrl = bigPhotoUrl["fileUrl"].(string)
 					picTime = i.Timestamp
@@ -283,9 +284,9 @@
 }
 
 // 褰掔疆浜鸿劯
-func PutFace(faces []*FaceAndRules,msg ruleserver.ResultMsg)[]*FaceAndRules{
-	if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]ruleserver.FaceResult)) > 0 {
-		for _, faceResult := range msg.RuleResult["face"].([]ruleserver.FaceResult) {
+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)
 		}
 		return faces
@@ -293,7 +294,7 @@
 		return nil
 	}
 }
-func hebingFace(faces []*FaceAndRules, faceResult ruleserver.FaceResult) []*FaceAndRules{
+func hebingFace(faces []*FaceAndRules, faceResult structure.FaceResult) []*FaceAndRules{
 	for _, arg := range faceResult.Args {
 		// 鎷垮埌姣忎竴寮犱汉鑴�
 		logger.Info("褰掔疆浜鸿劯鏃剁浉浼艰�呯殑鏁伴噺锛�",len(arg.Liker))
@@ -321,18 +322,18 @@
 			}
 		}
 		if !flag {
-			faces = append(faces, &FaceAndRules{arg, []ruleserver.Result{faceResult.Result}})
+			faces = append(faces, &FaceAndRules{arg, []structure.Result{faceResult.Result}})
 		}
 	}
 	return faces
 }
 
 // 寰�es涓彃鍏olo鏁版嵁
-func InsertYolo(msg ruleserver.ResultMsg, linkId string) {
-	if msg.RuleResult["yolo"] != nil && len(msg.RuleResult["yolo"].([]ruleserver.Result)) > 0 {
+func InsertYolo(msg structure.ResultMsg, linkId string) {
+	if msg.RuleResult["yolo"] != nil && len(msg.RuleResult["yolo"].([]structure.Result)) > 0 {
 		// 鍏堝垽鏂竴涓嬫暟鎹甫鐨勮鍒欐爣绛炬槸鍚︽湁鍙互鎻掑叆鐨�
 		flag := false
-		for _, res := range msg.RuleResult["yolo"].([]ruleserver.Result) {
+		for _, res := range msg.RuleResult["yolo"].([]structure.Result) {
 			//logger.Info("瀹氭椂鍣ㄦ墦鐨勬暟瀛楁爣绛撅細",res.Others.TimeLabel)
 			if res.Others.TimeLabel == "01" || res.Others.TimeLabel == "10" {
 				flag = true
@@ -343,7 +344,7 @@
 			var sdkNames string = ""
 			alarmRules := []AlarmRule{}
 			url := []string{}
-			for _, yoloResult := range msg.RuleResult["yolo"].([]ruleserver.Result) {
+			for _, yoloResult := range msg.RuleResult["yolo"].([]structure.Result) {
 				if yoloResult.Others.TimeLabel == "01" || yoloResult.Others.TimeLabel == "10" {
 					// 鎷煎嚭sdkname
 					//logger.Info("搴旇杩涙潵鎵嶅鐨�")
@@ -367,7 +368,7 @@
 							}
 							i := protomsg.Image{}
 							err = proto.Unmarshal(bdata, &i)
-							resp1, err1 := util.DrawPolygonOnImageForYolo(msg1.Cid, i, msg1.RuleResult["yolo"].([]ruleserver.Result), weedfsUrl)
+							resp1, err1 := util.DrawPolygonOnImageForYolo(msg1.Cid, i, msg1.RuleResult["yolo"].([]structure.Result), weedfsUrl)
 							if err1 != nil {
 								logger.Error("缂撳瓨鏁版嵁鐢绘鎴栦笂浼犲浘鐗囨湇鍔″櫒鍑洪敊", err)
 							} else {
@@ -381,7 +382,7 @@
 				}
 			}
 			linkFlag := false
-			for _, yoloResult := range msg.RuleResult["yolo"].([]ruleserver.Result) {
+			for _, yoloResult := range msg.RuleResult["yolo"].([]structure.Result) {
 				if (yoloResult.Others.TimeLabel == "01" || yoloResult.Others.TimeLabel == "10") && yoloResult.Others.LinkCache != nil && len(yoloResult.Others.LinkCache) > 1 {
 					linkId := uuid.NewV4().String()
 					for _, msg2 := range yoloResult.Others.LinkCache {
diff --git a/labelFilter/readyDataForLabel.go b/labelFilter/readyDataForLabel.go
index 67888f0..c7f405d 100644
--- a/labelFilter/readyDataForLabel.go
+++ b/labelFilter/readyDataForLabel.go
@@ -1,9 +1,9 @@
 package labelFilter
 
 import (
-	"ruleprocess/cache"
 	"basic.com/valib/logger.git"
-	"ruleprocess/ruleserver"
+	"ruleprocess/cache"
+	"ruleprocess/structure"
 	"time"
 )
 
@@ -13,14 +13,14 @@
 	CameraAddr    string
 	TaskId        string
 	Time		  string
-	Persons       []ruleserver.FaceResult
+	Persons       []structure.FaceResult
 	DefenceLevel  []int32
 }
 // 鎶婃暟鎹閰嶅埌label
-func (label *Label)DataFormatToLabel(result ruleserver.ResultMsg) {
-	logger.Debug("face缁撴灉锛�",result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]ruleserver.FaceResult)) > 0)
-	logger.Debug("yolo缁撴灉锛�",result.RuleResult["yolo"] != nil && len(result.RuleResult["yolo"].([]ruleserver.Result)) > 0)
-	if (result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]ruleserver.FaceResult)) > 0) || (result.RuleResult["yolo"] != nil && len(result.RuleResult["yolo"].([]ruleserver.Result)) > 0) {
+func (label *Label)DataFormatToLabel(result structure.ResultMsg) {
+	logger.Debug("face缁撴灉锛�",result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]structure.FaceResult)) > 0)
+	logger.Debug("yolo缁撴灉锛�",result.RuleResult["yolo"] != nil && len(result.RuleResult["yolo"].([]structure.Result)) > 0)
+	if (result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]structure.FaceResult)) > 0) || (result.RuleResult["yolo"] != nil && len(result.RuleResult["yolo"].([]structure.Result)) > 0) {
 		logger.Info("---------------鏍囩杩囨护鍣ㄨ祴鍊�")
 		label.CameraId = result.Cid
 		camera, err := cache.GetCameraById(result.Cid)
@@ -31,14 +31,14 @@
 		label.CameraAddr = camera.Addr
 		label.TaskId = result.Tasklab.Taskid
 		label.Time = time.Now().Format("2006-01-02 15:04:05")
-		if result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]ruleserver.FaceResult)) > 0 {
-			for _,faceGroup := range result.RuleResult["face"].([]ruleserver.FaceResult) {
+		if result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]structure.FaceResult)) > 0 {
+			for _,faceGroup := range result.RuleResult["face"].([]structure.FaceResult) {
 				label.Persons = append(label.Persons,faceGroup)
 				label.DefenceLevel = append(label.DefenceLevel,faceGroup.AlarmLevel)
 			}
 		}
-		if result.RuleResult["yolo"] != nil && len(result.RuleResult["yolo"].([]ruleserver.Result)) > 0 {
-			for _,yoloGroup := range result.RuleResult["yolo"].([]ruleserver.Result) {
+		if result.RuleResult["yolo"] != nil && len(result.RuleResult["yolo"].([]structure.Result)) > 0 {
+			for _,yoloGroup := range result.RuleResult["yolo"].([]structure.Result) {
 				label.DefenceLevel = append(label.DefenceLevel,yoloGroup.AlarmLevel)
 			}
 		}
diff --git a/labelFilter/req.go b/labelFilter/req.go
index c137e65..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"
-	"basic.com/valib/logger.git"
-	"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 ea8d3ae..3b03b8d 100644
--- a/labelFilter/ruleForLabel.go
+++ b/labelFilter/ruleForLabel.go
@@ -3,14 +3,14 @@
 import (
 	"basic.com/dbapi.git"
 	"basic.com/pubsub/protomsg.git"
-	"github.com/knetic/govaluate"
 	"basic.com/valib/logger.git"
-	"ruleprocess/ruleserver"
+	"github.com/knetic/govaluate"
+	"ruleprocess/structure"
 	"strconv"
 	"time"
 )
 
-func Judge(msg ruleserver.ResultMsg) {
+func Judge(msg structure.ResultMsg) {
 	// 瑁呴厤鎴愯嚜宸卞彲浠ヨ瘑鍒殑鏁版嵁
 	label := new(Label)
 	label.DataFormatToLabel(msg)
@@ -311,7 +311,7 @@
 }
 
 // 璋冪敤鐩爣鏈嶅姟鍣ㄧ殑鎻掑叆鎺ュ彛
-func pushData(urls []*protomsg.PushUrl, data ruleserver.ResultMsg) {
+func pushData(urls []*protomsg.PushUrl, data structure.ResultMsg) {
 	for _, url := range urls {
 		logger.Debug("鐪嬬湅鎺ㄩ�佸湴鍧�锛�",url.Url)
 		Push("tcp://192.168.1.123:40012", data)
diff --git a/ruleserver/geoPolygon.go b/ruleserver/geoPolygon.go
index f55719c..7421add 100644
--- a/ruleserver/geoPolygon.go
+++ b/ruleserver/geoPolygon.go
@@ -2,6 +2,7 @@
 
 import (
 	"math"
+	"ruleprocess/structure"
 )
 
 func min(num1 float64, num2 float64) float64 {
@@ -72,7 +73,7 @@
 }
 
 //GetLocation 灏嗕竴涓粰瀹氳捣濮嬪潗鏍囷紝瀹藉害闀垮害鐨勭煩褰㈠尯鍩熷潎鍒嗕负n鏂逛唤骞惰繑鍥炰腑蹇冨潗鏍囷紙n涓哄崟杈瑰钩鍒嗘暟鍊硷級鍜岄潰绉�
-func getLocation(rect Rect, n int) ([]Pointfloat, float64) {
+func getLocation(rect structure.Rect, n int) ([]Pointfloat, float64) {
 	xArr := make([]float64, n) // 鐢ㄥ垏鐗囦笉鐢ㄦ暟缁勶紝鏁扮粍涓嶈兘鐢ㄥ彉閲忓畾涔夐暱搴�
 	yArr := make([]float64, n)
 	pointArr := make([]Pointfloat, 0, n*n)
@@ -105,7 +106,7 @@
 }
 
 //PgsInterPercent calculate percent of two polygon intersection  璁$畻涓や釜澶氳竟褰㈢殑閲嶅彔鍗犳瘮
-func PgsInterPercent(pgpts []Point, box 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 eaaf927..dc69af8 100644
--- a/ruleserver/personTrack.go
+++ b/ruleserver/personTrack.go
@@ -4,6 +4,7 @@
 	"basic.com/pubsub/protomsg.git"
 	"github.com/golang/protobuf/proto"
 	"basic.com/valib/logger.git"
+	"ruleprocess/structure"
 )
 
 var TrackPond = make(map[string]*PersonTrack)
@@ -104,8 +105,8 @@
 	return false
 }
 func TrackOrNot(label map[string]interface{}) bool{
-	if label["yolo"] != nil && len(label["yolo"].([]Result)) > 0 {
-		for _,res := range label["yolo"].([]Result) {
+	if label["yolo"] != nil && len(label["yolo"].([]structure.Result)) > 0 {
+		for _,res := range label["yolo"].([]structure.Result) {
 			if res.TimeLabel == "10" {
 				return true
 			}
diff --git a/ruleserver/readyDataForRule.go b/ruleserver/readyDataForRule.go
index bc5e59d..66e2632 100644
--- a/ruleserver/readyDataForRule.go
+++ b/ruleserver/readyDataForRule.go
@@ -14,6 +14,7 @@
 	"net"
 	"ruleprocess/cache"
 	"basic.com/valib/logger.git"
+	"ruleprocess/structure"
 	"strconv"
 	"time"
 )
@@ -151,7 +152,7 @@
 }
 
 // 缁欑洰鏍囧~鍏卨iker
-func (arg *Arg) fillLiker(tableId []string, compareThreshold float32) {
+func fillLiker(tableId []string, compareThreshold float32,arg *structure.Arg) {
 	//bytes := bigCache.GetComparePersonBaseInfo(tableId, arg.Feature, compareThreshold)
 	comArg := &protomsg.CompareArgs{
 		TableIds:tableId,
@@ -196,7 +197,7 @@
 				logger.Error("鏍规嵁id鏌ヨ搴曞簱淇℃伅鍑洪敊锛�", err, "--杩斿洖鍊奸暱搴︿负锛�", len(table))
 			}
 			logger.Debug("鐪嬬湅杩欎釜base鐨勫姣斿�兼槸澶氬皯锛�", Decimal(m[baseinfo.Id].CompareScore))
-			base := BaseInfo{TableId: baseinfo.TableId, TableName: table[0].TableName, BwType: table[0].BwType, CompareScore: Decimal(m[baseinfo.Id].CompareScore), PersonId: baseinfo.Id, PersonName: baseinfo.PersonName, PersonPicUrl: baseinfo.PersonPicUrl, PhoneNum: baseinfo.PhoneNum, Sex: baseinfo.Sex, IdCard: baseinfo.IdCard, MonitorLevel: baseinfo.MonitorLevel, Content: baseinfo.Reserved}
+			base := structure.BaseInfo{TableId: baseinfo.TableId, TableName: table[0].TableName, BwType: table[0].BwType, CompareScore: Decimal(m[baseinfo.Id].CompareScore), PersonId: baseinfo.Id, PersonName: baseinfo.PersonName, PersonPicUrl: baseinfo.PersonPicUrl, PhoneNum: baseinfo.PhoneNum, Sex: baseinfo.Sex, IdCard: baseinfo.IdCard, MonitorLevel: baseinfo.MonitorLevel, Content: baseinfo.Reserved}
 			//os.Exit(1)
 			arg.Liker = append(arg.Liker, &base)
 		}
@@ -205,7 +206,7 @@
 }
 
 // 浜鸿劯姣斿
-func Compare(args *SdkDatas, groupRule *protomsg.GroupRule) {
+func Compare(args *structure.SdkDatas, groupRule *protomsg.GroupRule) {
 	compareFlag := 0
 	var tableIds []string
 	var threshold float32 = 50 // 榛樿闃堝�间负50
@@ -242,9 +243,9 @@
 					logger.Info("============================================杩涜浜鸿劯瀵规瘮")
 					for _, areaMap := range sdkData.AreaMapList {
 						// 鎷垮尯鍩熶腑姣忎釜浜鸿劯鐗瑰緛鍊煎幓瀵规瘮锛屽~鍏呭叾liker
-						if groupRule.Rules[j].PolygonId == areaMap.areaId {
+						if groupRule.Rules[j].PolygonId == areaMap.AreaId {
 							//logger.Info("--------------鐪嬬湅compareFlag鐨勫�煎拰tableId鍜宎reaMap.args鐨勯暱搴︼細",compareFlag,tableIds,len(areaMap.args))
-							for _, arg := range areaMap.args {
+							for _, arg := range areaMap.Args {
 								arg.Liker = arg.Liker[0:0]
 								//logger.Info("娓呯┖涔嬪悗鐪嬬湅涔嬪墠鎵撶殑浜鸿劯鏍囩鍙樹簡娌★細")
 								//if args.RuleResult["face"] != nil && len(args.RuleResult["face"].([]FaceResult)) > 0 {
@@ -255,14 +256,14 @@
 								//	}
 								//}
 								if compareFlag == 1 {
-									arg.fillLiker(nil, threshold)
+									fillLiker(nil, threshold, arg)
 								}
 								if compareFlag == 2 {
-									arg.fillLiker(tableIds, threshold)
+									fillLiker(tableIds, threshold, arg)
 								}
 								//logger.Info("-------------------鎴愬姛缁檒iker璧嬪��,闀垮害涓猴細", len(arg.Liker))
 							}
-							areaMap.filterData = areaMap.args
+							areaMap.FilterData = areaMap.Args
 							//logger.Info("=======绗竴娆$湅args锛�",(areaMap.filterData))
 						}
 						//logger.Info("-------------------------------浜鸿劯瀵规瘮涔嬪悗鐨勭洰鏍囨暟閲�",len(areaMap.args))
@@ -275,45 +276,45 @@
 }
 
 // 璁$畻鍖哄煙鍐呯殑鐩爣鏁伴噺浠ュ強灏嗙浉浼煎害銆佸崰姣斻�佸昂瀵哥瓑鎵撳寘
-func (a *AreaMap) CountAreaObjs(arg *SdkData) {
+func CountAreaObjs(a *structure.AreaMap,arg *structure.SdkData) {
 
-	a.targetNum = 0
+	a.TargetNum = 0
 	threshold := 80.0       // 鐩镐技搴�
 	intersectionper := 0.2 // 鍗犳瘮
 	size := 0.0            // 灏哄
 
-	areaPoints := Json2points(a.areaJson)
+	areaPoints := Json2points(a.AreaJson)
 	widthScale := float64(arg.ImageWidth / 960)
 	heigthScale := float64(arg.ImageHeight / 540)
 	for _, obj := range arg.Photo {
 		//logger.Info("------------------鐪嬬湅sdkData:", arg.SdkName, "鐨凱hoto鏁版嵁----------------", obj, "----椤轰究鐪嬬湅鍗犳瘮-----锛�", PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale))
 		if threshold <= obj.Score && size <= float64(obj.Rects.Width*obj.Rects.Height) && intersectionper <= PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale) {
 			// 杩欐瑕佸榻愯〃杈惧紡閲屾墍闇�瑕佺殑鎵�鏈夊弬鏁�
-			a.targetNum++
-			arg1 := Arg{obj.Id,obj.Score, PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), obj.IsYolo, obj.Rects, obj.Feature, obj.ThftRes, []*BaseInfo{}}
+			a.TargetNum++
+			arg1 := structure.Arg{obj.Id,obj.Score, PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale), float64(obj.Rects.Width * obj.Rects.Height), obj.IsYolo, obj.Rects, obj.Feature, obj.ThftRes, []*structure.BaseInfo{}}
 			//logger.Println("鏀捐繘鍘荤殑arg锛�-------", arg1)
-			a.args = append(a.args, &arg1)
-			a.filterData = append(a.filterData, &arg1)
+			a.Args = append(a.Args, &arg1)
+			a.FilterData = append(a.FilterData, &arg1)
 		}
 	}
-	logger.Info("鍖哄煙鏄細",areaPoints,"鍖哄煙鍐呯洰鏍囨暟閲忎负锛�",a.targetNum,"---",len(a.filterData))
-	a.time = time.Unix(time.Now().Unix(), 0).String()[11:16]
-	a.keepRight = arg.KeepRight
-	a.isStatic = arg.IsStatic
+	logger.Info("鍖哄煙鏄細",areaPoints,"鍖哄煙鍐呯洰鏍囨暟閲忎负锛�",a.TargetNum,"---",len(a.FilterData))
+	a.Time = time.Unix(time.Now().Unix(), 0).String()[11:16]
+	a.KeepRight = arg.KeepRight
+	a.IsStatic = arg.IsStatic
 	//logger.Println("--------------------鐪嬬湅鍖哄煙鏁版嵁锛�",*a)
 }
 
 // 鎶妔dk浠庢暟鎹抚涓婃彁鍙栫殑鎸夌収鍖哄煙鍒嗙被褰掔疆
-func SdkDataFormat(cameraId string, arg *SdkData, cameraPolygons []protomsg.CameraPolygon) {
+func SdkDataFormat(cameraId string, arg *structure.SdkData, cameraPolygons []protomsg.CameraPolygon) {
 	logger.Info("==================================鏈瑂dkData涓В鍑烘潵鐨勭洰鏍囨暟鎹�=======================================")
 	for _, photo := range arg.Photo {
 		logger.Info("--------瑙f瀽鍑烘潵鐨勬暟鎹�---", cameraId, arg.IpcId, photo.Rects, photo.Score)
 	}
 	for _, polygon := range cameraPolygons {
 		//logger.Println("++++++鍦ㄨ繖鍎跨湅涓�涓嬪尯鍩熷晩:", polygon.Polygon)
-		areaMap := AreaMap{cameraId: cameraId, areaId: polygon.Id, areaJson: polygon.Polygon, triggerLine: polygon.TriggerLine, directionLine: polygon.DirectionLine}
+		areaMap := structure.AreaMap{CameraId: cameraId, AreaId: polygon.Id, AreaJson: polygon.Polygon, TriggerLine: polygon.TriggerLine, DirectionLine: polygon.DirectionLine}
 		// 涓烘瘡涓憚鍍忔満鍖哄煙濉厖鏁版嵁
-		areaMap.CountAreaObjs(arg)
+		CountAreaObjs(&areaMap,arg)
 		arg.AreaMapList = append(arg.AreaMapList, &areaMap)
 	}
 }
diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index da722fc..1e5682c 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -2,6 +2,7 @@
 
 import (
 	"ruleprocess/cache"
+	"ruleprocess/structure"
 	"basic.com/valib/logger.git"
 	"sort"
 	"strconv"
@@ -13,114 +14,10 @@
 	"github.com/knetic/govaluate"
 )
 
-// 姣忎釜鐩爣鐨勫弬鏁帮細鐩镐技搴︼紝鍗犳瘮锛屽昂瀵�
-type Arg struct {
-	Id         uint64
-	Score      float64 // 鍖哄煙鍐呯殑鐩爣鐨勭浉浼煎害
-	Proportion float64 // 鍖哄煙鍐呯殑鐩爣鐨勫崰姣�
-	Size       float64 // 鍖哄煙鍐呯殑鐩爣鐨勫昂瀵�
-	IsYolo     bool    // 鏄惁鏄痽olo鏁版嵁
-	Location   Rect    // 璁颁笅姣忎釜鐩爣鐨勪綅缃弬鏁帮紝鏈�鍚庣粰缁撴灉瑁呴厤浜鸿劯鏁版嵁鐨勬椂鍊欑敤鐨勫埌
-	Feature    []byte
-	ThftRes    protomsg.ThftResult
-	Liker      []*BaseInfo
-}
-
-// 姣忎釜鍖哄煙鍐呯殑鍥剧墖鏁版嵁闆嗗悎
-type AreaMap struct {
-	cameraId      string
-	areaId        string
-	groupId       string
-	taskId        string
-	sdkId         string
-	sdkName       string
-	areaJson      string
-	triggerLine   string
-	directionLine string
-	targetNum     int    // 鍖哄煙鍐呯洰鏍囨暟閲�
-	args          []*Arg // 鍖哄煙鍐呯洰鏍囬泦鍚�
-	filterData    []*Arg // 杩囨护鍚庡尯鍩熷唴鐩爣闆嗗悎
-	time          string // 褰撳墠鏃堕棿锛堢敤浠ュ尮閰嶆椂闂磋鍒欙級
-	isEffective	  bool	 // 瑙勫垯涓槸鍚︾敤鍒颁簡姝ゅ尯鍩�
-	keepRight     bool   // 鏄惁闈犲彸琛�
-	isStatic      bool   // 鏄惁闈欐
-}
-
-// sdk杈撳嚭鐨勫浘鐗囦笂鍗曚釜鐩爣鐨勬暟鎹�
-type PhotoMap struct {
-	Id      uint64
-	Rects   Rect    // 鐭╁舰鍖哄煙鍙傛暟
-	Score   float64 // 鐩镐技搴﹀緱鍒嗭紙鏈夊澶х▼搴﹀儚涓�涓洰鏍囥�備汉鑴革紝浜轰綋鎴栬溅绛夌瓑锛�
-	IsYolo  bool    // 鏄惁鏄痽olo鏁版嵁
-	ThftRes protomsg.ThftResult
-	Feature []byte
-}
-
-// 姣忎釜绠楁硶瀵逛簬褰撳墠甯х敾闈㈣嚜宸辨彁鍙栫殑鏁版嵁
-type SdkData struct {
-	TaskId      string
-	IpcId       string
-	IsYolo      bool
-	Photo       []PhotoMap // yolo绠楁硶缁撴瀯锛屼篃鍙互瀛樹汉鑴哥殑鏁版嵁锛屾瘯绔熶汉鑴镐腑鑳界敤瑙勫垯鏉ユ祴鐨勮繕鏄偅浜涘弬鏁�
-	KeepRight   bool       // 鏄惁闈犲彸琛� 绠楁硶鍒ゆ柇鐨勪笌涓婁竴甯у浘鍍忕殑姣旇緝缁撴灉
-	IsStatic    bool       // 鏄惁闈欐
-	ImageWidth  int        // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚瀹� 鍍忕礌
-	ImageHeight int        // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚楂� 鍍忕礌
-	AreaMapList []*AreaMap // 鏈瑂dk鎻愬彇鐨勬暟鎹寜鐓у尯鍩熷垝鍒嗗悗鐨勬暟鎹泦鍚�
-}
-
-// 浠庣畻娉曟ā鍧楀効鎷挎潵鐨勫涓�甯у浘鍍忓悇涓畻娉曟彁鍙栫殑鏁版嵁闆嗗悎
-type SdkDatas struct {
-	CameraId   string
-	TaskId     string
-	Sdkdata    []*SdkData
-	RuleResult map[string]interface{} // 杩囧畬瑙勫垯鍚庢墦鐨勬爣绛� face: []FaceResult, yolo: []Result
-}
-
-type ResultMsg struct {
-	*protomsg.SdkMessage
-	RuleResult map[string]interface{} // 杩囧畬瑙勫垯鍚庢墦鐨勬爣绛� face: []FaceResult, yolo: []Result
-}
-
-type TargetInfo struct {
-	Rect
-	TargetId    uint64
-	TargetScore float64
-}
-// 杩囪鍒欏簱鎵撲笂鐨勬爣绛�
-type Result struct {
-	TaskId       string // 浠诲姟id
-	SdkName      string
-	RuleGroupId  string // 瑙勫垯缁刬d
-	DefenceState bool   // 鏄惁甯冮槻
-	AlarmLevel   int32  // 鎶ヨ绛夌骇
-	RuleText     string // 鏂囧瓧鐗堣鍒欑粍
-	Location     []TargetInfo // 鐩爣鐨勫潗鏍�
-	AlarmPolygon string // 瑙﹀彂鐨勬姤璀︽
-	IsLink		 bool   // 鏄惁鏄仈鍔ㄤ换鍔�
-	Others
-}
-type Others struct {
-	CacheData []ResultMsg //(鏈粍瑙勫垯涓惈鏈夋寔缁椂闂寸殑瑙勫垯寮�鍚殑瀹氭椂鍣ㄧ紦瀛樼殑鏁版嵁甯�)
-	LinkCache []ResultMsg
-	TimeLabel string
-}
-
-// 杩囪鍒欏簱鎵撲笂鐨勬爣绛�
-type FaceResult struct {
-	Result
-	Args []Arg
-}
-type LittleRuleResult struct {
-	SdkName string // 璁板綍涓嬫缁撴灉鏄摢涓猻dk鐨勭粨鏋�
-	Result  string // 宸插寘鍚簡鍓嶇疆杩炴帴绗�
-	Sort    int32
-}
-
 var rw sync.RWMutex // 璇诲啓閿�
 
 // 瀵瑰崟甯у浘鍍忕殑鍒ゆ柇 thisSdkDatas  褰撳墠浼犲叆鐨勮繖甯ф暟鎹紝cacheSdkData 瀹氭椂鍣ㄩ噷缂撳瓨鐨勪竴甯ф暟鎹� 娌℃湁灏辫繑鍥瀗il  (thisSdkDatas SdkDatas, cacheSdkDatas SdkDatas)
-func Judge(args *SdkDatas, message *protomsg.SdkMessage) {
+func Judge(args *structure.SdkDatas, message *protomsg.SdkMessage) {
 	defer func() {
 		if err := recover(); err != nil {
 			logger.Error("瑙勫垯妯″潡鍎跨殑寮傚父鎹曡幏锛�",err)
@@ -139,8 +36,8 @@
 		//logger.Println("鐪嬩笅鎽勫儚鏈轰笅鐨勪换鍔$粍锛�",taskRuleList)
 		// 寰楀埌灞炰簬璇ユ憚鍍忔満鐨勮嫢骞茬粍浠诲姟鐨勫畬鏁磋鍒欙紙璺熸瘡涓�鏉″畬鏁磋鍒欐瘮杈冧箣鍚庡緱鍑烘湰寮犲浘鍍忓浜庢煇涓鍒欐槸鍚︽姤璀︾殑缁撴灉銆傛斁杩沵ap锛屾瘮濡傛湰甯у浘鍍忕殑id锛屾墍纰版挒鎴愬姛鐨勮鍒檌d锛�
 		args.RuleResult = make(map[string]interface{})
-		args.RuleResult["yolo"] = []Result{}
-		args.RuleResult["face"] = []FaceResult{}
+		args.RuleResult["yolo"] = []structure.Result{}
+		args.RuleResult["face"] = []structure.FaceResult{}
 		//logger.Warn("浼犺繘鍘讳箣鍓嶆槸浠�涔堝痉琛岋細",args.RuleResult["yolo"])
 		if taskGroup != nil && len(taskGroup.GroupRules) > 0 {
 			// 鍏堣繃鐙珛锛屽啀杩囪仈鍔�
@@ -149,7 +46,7 @@
 				taskId := taskGroup.TaskId
 				//logger.Println("------------鏈粍浠诲姟涓嬬殑瑙勫垯缁勭殑鏁伴噺锛�",len(ruleList))
 				temp := group.Rules // temp涓轰竴缁勫畬鏁磋鍒� 鍦ㄦ闇�瑕佸垽鏂鍒欐槸鍚︽槸鑱斿姩瑙勫垯
-				label := Others{}
+				label := structure.Others{}
 				if len(temp) > 0 {
 					if group.SetType != "linkTask" {
 						// 鐙珛浠诲姟鐨勫鐞�
@@ -162,7 +59,7 @@
 				taskId := taskGroup.TaskId
 				//logger.Println("------------鏈粍浠诲姟涓嬬殑瑙勫垯缁勭殑鏁伴噺锛�",len(ruleList))
 				temp := group.Rules // temp涓轰竴缁勫畬鏁磋鍒� 鍦ㄦ闇�瑕佸垽鏂鍒欐槸鍚︽槸鑱斿姩瑙勫垯
-				label := Others{}
+				label := structure.Others{}
 				if len(temp) > 0 {
 					if group.SetType == "linkTask" {
 						// groupId涓惈鏈塴ink鍒欎负鑱斿姩浠诲姟
@@ -174,7 +71,7 @@
 	}
 }
 
-func RunRule(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string, message *protomsg.SdkMessage, label Others) (bool,[]int) {
+func RunRule(args *structure.SdkDatas, groupRule *protomsg.GroupRule, taskId string, message *protomsg.SdkMessage, label structure.Others) (bool,[]int) {
 	defer func() {
 		if err := recover(); err != nil {
 			logger.Error("姣斿瑙勫垯鏈夎", err.(string))
@@ -183,7 +80,7 @@
 	logger.Info("+++++++++++瑙勫垯寮�濮嬭繍琛�+++++++++++++++++褰撳墠澶ц鍒�--锛�", (*groupRule).GroupText)
 	//logger.Warn("浼犺繘鍘讳箣鍚庢槸浠�涔堝痉琛岋細",args.RuleResult["yolo"])
 	Compare(args, groupRule)
-	resultSplice := []*LittleRuleResult{}
+	resultSplice := []*structure.LittleRuleResult{}
 	sdkNames := ""
 	polygonId := ""
 	// 鍏堣繃瀹屾潯浠惰鍒�
@@ -205,7 +102,7 @@
 						logger.Info("鏉′欢瑙勫垯缁撴灉锛�", ruleResult.Result)
 						// 濡傛灉缁撴灉涓虹湡锛屾妸杩欐潯瑙勫垯涓殑鍖哄煙缃负鏈夋晥
 						if strings.Contains(ruleResult.Result,"true") {
-							areaMap.isEffective = true
+							areaMap.IsEffective = true
 						}
 						// 濡傛灉姝ょ粨鏋滀负鐪熶笖褰撳墠杩囩殑鏄痽olo绠楁硶锛屽簲璁颁笅姝よ鍒欐墍瀵瑰簲鐨剆dkName,鍙﹀锛岃繕瑕佸幓閲� (鍚庡姞锛氭妸姝ゆ潯瑙︾鐨勫尯鍩焛d涔熻褰曚笅鏉�)
 						if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
@@ -235,7 +132,7 @@
 					ruleResult := transferParameters(groupRule.Rules[j], areaMap)
 					if ruleResult.Result != "" {
 						if strings.Contains(ruleResult.Result,"true") {
-							areaMap.isEffective = true
+							areaMap.IsEffective = true
 						}
 						logger.Info("鏁伴噺瑙勫垯缁撴灉锛�", ruleResult.Result)
 						if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
@@ -264,7 +161,7 @@
 					ruleResult := timeRuleResult(groupRule.Rules[j], areaMap)
 					if ruleResult.Result != "" {
 						if strings.Contains(ruleResult.Result,"true") {
-							areaMap.isEffective = true
+							areaMap.IsEffective = true
 						}
 						logger.Info("鏃堕棿瑙勫垯缁撴灉锛�", ruleResult.Result)
 						if strings.Contains(ruleResult.Result, "true") && ipcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && !strings.Contains(sdkNames, sdkName) {
@@ -331,7 +228,7 @@
 				// 鎵撲汉鑴告爣绛惧拰yolo鏍囩
 				// 鏈�鍚庢垚鍔熸姤璀︽墠鎶婄鍚堟潯浠剁殑浜鸿劯鏁版嵁濉炶繘缁撴灉鏍囩閲�
 				// 閰嶄簡浜鸿劯鐨勭畻娉曟墠鎶婁汉鑴哥殑鏁版嵁鐢╁嚭鏉ユ墦鏍囩
-				faces := []Arg{}
+				faces := []structure.Arg{}
 				faceFlag := false
 				for j := 0; j < len(groupRule.Rules); j++ {
 					if groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" || groupRule.Rules[j].SdkId == "812b674b-2375-4589-919a-5c1c3278a972" {
@@ -341,7 +238,7 @@
 				for _, sdkData := range args.Sdkdata {
 					if sdkData.IpcId == "A8B73405-373D-4F23-CED2-A617EBD7EC55" && faceFlag { // sdkData閲屾湁浜鸿劯鏁版嵁涓旈厤缃簡绠楁硶鎵嶆妸绗﹀悎鏉′欢鐨勬暟鎹杩涙爣绛鹃噷鍘�
 						for _, areaMap := range sdkData.AreaMapList {
-							if areaMap.isEffective {
+							if areaMap.IsEffective {
 								faces = append(faces, putFaceToResult(areaMap, faces)...)
 							}
 						}
@@ -353,7 +250,7 @@
 				//}
 				logger.Warn("___________________________________________________________________________缁堜簬璧板畬涓囬噷闀垮緛")
 				// 鎶婁粬浠殑浣嶇疆鏁版嵁涔熶紶涓嬪幓
-				locations := []TargetInfo{}
+				locations := []structure.TargetInfo{}
 				for _, sdkData := range args.Sdkdata {
 					if sdkData.IpcId == "02D54B61-0F16-C604-8567-FC4BE493C523" && sdkNames != "" { // 鎶妝olo鏁版嵁鐨勫悇涓洰鏍囩殑鍧愭爣杈撳嚭鏂逛究鍚庨潰鐢绘
 						for _, areaMap := range sdkData.AreaMapList {
@@ -370,12 +267,12 @@
 				}
 				var labelTypes []int // 0涓簓olo鏍囩锛�1涓篺ace鏍囩 2涓轰袱鑰呮爣绛�
 				if sdkNames != "" {
-					args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]Result), Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, locations, polygonId, islink,label,})
+					args.RuleResult["yolo"] = append(args.RuleResult["yolo"].([]structure.Result), structure.Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, locations, polygonId, islink,label,})
 					labelTypes = append(labelTypes,0)
 					//logger.Info("-------------------yolo缁撴灉鏍囩闀垮害", len(args.RuleResult["yolo"].([]Result)))
 				}
 				if faceFlag {
-					args.RuleResult["face"] = append(args.RuleResult["face"].([]FaceResult), FaceResult{Result{taskId, sdkNames, groupRule.GroupId, groupRule.DefenceState, groupRule.AlarmLevel, groupRule.GroupText, []TargetInfo{}, 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)
 				}
@@ -395,10 +292,10 @@
 	}
 }
 
-func putFaceToResult(am *AreaMap, faceList []Arg) []Arg {
-	faces := []Arg{}
-	if len(am.filterData) > 0 {
-		for _, data := range am.filterData {
+func putFaceToResult(am *structure.AreaMap, faceList []structure.Arg) []structure.Arg {
+	faces := []structure.Arg{}
+	if len(am.FilterData) > 0 {
+		for _, data := range am.FilterData {
 			flag := true
 			for _, face := range faceList {
 				if data.Location.X == face.Location.X && data.Location.Y == face.Location.Y && data.Location.Width == face.Location.Width && data.Location.Height == face.Location.Height {
@@ -414,11 +311,11 @@
 	return faces
 }
 
-func putYolosToResult(am *AreaMap) []TargetInfo {
-	locations := []TargetInfo{}
-	if len(am.filterData) > 0 {
-		for _, data := range am.filterData {
-			location := TargetInfo{}
+func putYolosToResult(am *structure.AreaMap) []structure.TargetInfo {
+	locations := []structure.TargetInfo{}
+	if len(am.FilterData) > 0 {
+		for _, data := range am.FilterData {
+			location := structure.TargetInfo{}
 			location.Rect = data.Location
 			location.TargetId = data.Id
 			location.TargetScore = data.Score
@@ -430,7 +327,7 @@
 }
 
 // 鑱斿姩浠诲姟鐨勫鐞�
-func LinkTask(args *SdkDatas, groupRule *protomsg.GroupRule, taskId string, message *protomsg.SdkMessage, label Others) {
+func LinkTask(args *structure.SdkDatas, groupRule *protomsg.GroupRule, taskId string, message *protomsg.SdkMessage, label structure.Others) {
 	// new涓�涓畾鏃跺櫒锛屽鏋滀互姝roupId涓烘爣蹇楃殑瀹氭椂鍣ㄤ笉瀛樺湪鐨勮瘽
 	logger.Info("------------------------------------------褰撳墠鏄仈鍔ㄤ换鍔★紝瑙勫垯鏄細", groupRule.GroupText)
 	var flag bool = true
@@ -461,7 +358,7 @@
 				}
 			}
 			if flag1 {
-				TimeEleList[groupRule.GroupId].RuleResults = append(TimeEleList[groupRule.GroupId].RuleResults, &RuleResult{groupRule.Rules[j].CameraId, groupRule.Rules[j].Sort, "", groupRule.Rules[j].RuleWithPre, ResultMsg{}})
+				TimeEleList[groupRule.GroupId].RuleResults = append(TimeEleList[groupRule.GroupId].RuleResults, &RuleResult{groupRule.Rules[j].CameraId, groupRule.Rules[j].Sort, "", groupRule.Rules[j].RuleWithPre, structure.ResultMsg{}})
 			}
 		}
 	}
@@ -478,19 +375,19 @@
 				tempMap := make(map[string]interface{})
 				for k, result := range args.RuleResult {
 					if k == "yolo" {
-						tempMap[k] = []Result{}
-						for _, res := range result.([]Result) {
-							tempMap[k] = append(tempMap[k].([]Result), res)
+						tempMap[k] = []structure.Result{}
+						for _, res := range result.([]structure.Result) {
+							tempMap[k] = append(tempMap[k].([]structure.Result), res)
 						}
 					}
 					if k == "face" {
-						tempMap[k] = []FaceResult{}
-						for _, res := range result.([]FaceResult) {
-							tempMap[k] = append(tempMap[k].([]FaceResult), res)
+						tempMap[k] = []structure.FaceResult{}
+						for _, res := range result.([]structure.FaceResult) {
+							tempMap[k] = append(tempMap[k].([]structure.FaceResult), res)
 						}
 					}
 				}
-				va.CacheData = ResultMsg{message, tempMap}
+				va.CacheData = structure.ResultMsg{message, tempMap}
 				logger.Info("杩欎釜鎽勫儚鏈�--", args.CameraId, "--琚祴浜堜簡result", va.Result)
 			}
 		}
@@ -520,19 +417,19 @@
 					rw.RLock()
 					if TimeEleList[groupRule.GroupId] != nil {  // 鏋佸伓灏旀湁鎯呭喌浼氱瓑浜巒il锛屼笉鐭ラ亾涓哄暐锛屽仛涓垽鏂互闃插畷鏈�
 						// 鎶婃暟缁勯噷缂撳瓨鐨勬暟鎹彇鍑烘潵涓�璧锋姤璀�
-						label.LinkCache = []ResultMsg{}
+						label.LinkCache = []structure.ResultMsg{}
 						for _, ruleRes := range TimeEleList[groupRule.GroupId].RuleResults {
 							label.LinkCache = append(label.LinkCache, ruleRes.CacheData)
 						}
 						logger.Debug("鑱斿姩浠诲姟缂撳瓨浜嗗嚑涓暟鎹�", len(label.LinkCache))
-						for i := 0; i < len(args.RuleResult["yolo"].([]Result)); i++ {
-							if args.RuleResult["yolo"].([]Result)[i].RuleGroupId == groupRule.GroupId { // 鎶婅仈鍔ㄦ暟鎹拷鍔犱笂
-								args.RuleResult["yolo"].([]Result)[i].Others.LinkCache = label.LinkCache
+						for i := 0; i < len(args.RuleResult["yolo"].([]structure.Result)); i++ {
+							if args.RuleResult["yolo"].([]structure.Result)[i].RuleGroupId == groupRule.GroupId { // 鎶婅仈鍔ㄦ暟鎹拷鍔犱笂
+								args.RuleResult["yolo"].([]structure.Result)[i].Others.LinkCache = label.LinkCache
 							}
 						}
-						for i := 0; i < len(args.RuleResult["face"].([]FaceResult)); i++ {
-							if args.RuleResult["face"].([]FaceResult)[i].RuleGroupId == groupRule.GroupId { // 鎶婅仈鍔ㄦ暟鎹拷鍔犱笂
-								args.RuleResult["face"].([]FaceResult)[i].Others.LinkCache = label.LinkCache
+						for i := 0; i < len(args.RuleResult["face"].([]structure.FaceResult)); i++ {
+							if args.RuleResult["face"].([]structure.FaceResult)[i].RuleGroupId == groupRule.GroupId { // 鎶婅仈鍔ㄦ暟鎹拷鍔犱笂
+								args.RuleResult["face"].([]structure.FaceResult)[i].Others.LinkCache = label.LinkCache
 							}
 						}
 					}
@@ -544,15 +441,15 @@
 			// 鍊掓槸鎶婃墦鐨勭粍瑙勫垯鏍囩缁欏幓鎺変簡鍟�
 			for _,val := range labelTypes {
 				if val == 0 {
-					if len(args.RuleResult["yolo"].([]Result)) >= 1 {
-						lens := len(args.RuleResult["yolo"].([]Result))-1
-						args.RuleResult["yolo"] = args.RuleResult["yolo"].([]Result)[0:lens]
+					if len(args.RuleResult["yolo"].([]structure.Result)) >= 1 {
+						lens := len(args.RuleResult["yolo"].([]structure.Result))-1
+						args.RuleResult["yolo"] = args.RuleResult["yolo"].([]structure.Result)[0:lens]
 					}
 				}
 				if val == 1 {
-					if len(args.RuleResult["face"].([]FaceResult)) >= 1 {
-						lens := len(args.RuleResult["face"].([]FaceResult))-1
-						args.RuleResult["face"] = args.RuleResult["face"].([]FaceResult)[0:lens]
+					if len(args.RuleResult["face"].([]structure.FaceResult)) >= 1 {
+						lens := len(args.RuleResult["face"].([]structure.FaceResult))-1
+						args.RuleResult["face"] = args.RuleResult["face"].([]structure.FaceResult)[0:lens]
 					}
 				}
 			}
@@ -581,34 +478,34 @@
 }
 
 // 杩囨护瑙勫垯鍏堢瓫閫夊嚭绗﹀悎鏉′欢鐨勭洰鏍囨暟閲�
-func filterRule(rule *protomsg.Rule, am *AreaMap) LittleRuleResult {
+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.PolygonId == am.AreaId { // 绠楁硶鍜屽尯鍩熼兘寰楀鐨勪笂
 
 			if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a972" && rule.SdkArgAlias != "time_rule" {
 				if rule.RuleWithPre == "||" {
-					return LittleRuleResult{}
+					return structure.LittleRuleResult{}
 				} else {
 					//logger.Debug("褰撳墠灏忚鍒欐槸锛�",rule)
 					flag := "false"
 					// 鎶婃病鏈夌浉浼艰�呯殑浜鸿劯浠巉ilterData涓垹闄�
-					for index := 0; index < len(am.filterData); {
+					for index := 0; index < len(am.FilterData); {
 						// 灏嗚揪涓嶅埌闃堝�肩殑鐩镐技鑰呬粠鐩镐技鑰呮暟缁勪腑鍒犻櫎
-						logger.Info("鐪嬬湅鐩镐技鑰呬汉鏁帮細",len(am.filterData[index].Liker))
-						if len(am.filterData[index].Liker) == 0 {
+						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:]...)
+							am.FilterData = append(am.FilterData[:index], am.FilterData[index+1:]...)
 						} else {
 							index++
 						}
 					}
-					if len(am.filterData) > 0 {
+					if len(am.FilterData) > 0 {
 						flag = "true"
 					}
-					logger.Info("---------浜鸿劯姣斿绗﹀悎鏉′欢鐨勬暟閲忎负锛�",len(am.filterData))
-					return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + flag, rule.Sort}
+					logger.Info("---------浜鸿劯姣斿绗﹀悎鏉′欢鐨勬暟閲忎负锛�",len(am.FilterData))
+					return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + flag, rule.Sort}
 				}
 			}
 			if rule.SdkId == "812b674b-2375-4589-919a-5c1c3278a97e" { // 浜鸿劯妫�娴�
@@ -616,18 +513,18 @@
 				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)
-						var args []*Arg
+						logger.Info("-----------------------杩囪鍒欎箣鍓嶅尯鍩熷唴鐨勪汉鑴告暟閲忎负锛�",am.TargetNum)
+						var args []*structure.Arg
 						if rule.RuleWithPre == "&&" {
-							args = am.filterData
+							args = am.FilterData
 							//logger.Info("杩囨护鍚庣殑args鐨勯暱搴︿负锛�",len(args))
 						} else {
-							args = am.args
+							args = am.Args
 							//涓嶆竻绌轰箣鍓嶇殑杩囨护鏁版嵁锛岀户缁
 							//logger.Info("娌¤繃婊ょ殑args鐨勯暱搴︿负锛�",len(args))
 						}
 						// 鍏堟竻绌鸿繃婊ゅ悗鐨勬暟鎹紝鍐嶅線閲屽鏈杩囨护鍚庣殑鏁版嵁
-						am.filterData = am.filterData[0:0]
+						am.FilterData = am.FilterData[0:0]
 						//logger.Info("-----------------------浜鸿劯杩囨护鐨刟rgs閲岀殑鏁伴噺锛�", len(args))
 						for _, arg := range args {
 							var formula string
@@ -644,39 +541,39 @@
 							expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
 							result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
 							if result.(bool) {
-								am.filterData = append(am.filterData, arg) // 寰楀埌绗﹀悎鏉′欢鐨勮繃婊ゆ暟鎹�
+								am.FilterData = append(am.FilterData, arg) // 寰楀埌绗﹀悎鏉′欢鐨勮繃婊ゆ暟鎹�
 							}
 						}
-						am.targetNum = len(am.filterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁
-						logger.Info("杩囧畬鏉′欢鍚庣殑鐩爣鏁伴噺涓猴細",am.targetNum)
-						if am.targetNum > 0 {
+						am.TargetNum = len(am.FilterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁
+						logger.Info("杩囧畬鏉′欢鍚庣殑鐩爣鏁伴噺涓猴細",am.TargetNum)
+						if am.TargetNum > 0 {
 							logger.Info("锛侊紒锛侊紒锛侊紒锛侊紒锛佷汉鑴告娴嬫垚鍔�")
-							return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "true", rule.Sort}
+							return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
 						} else {
-							return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "false", rule.Sort}
+							return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
 						}
 					}
 				} else if rule.SdkArgAlias == "" { // 浠�涔堝弬鏁伴兘涓嶉厤鐨勬儏鍐�
-					if am.targetNum > 0 {
-						return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "true", rule.Sort}
+					if am.TargetNum > 0 {
+						return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
 					} else {
-						return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "false", rule.Sort}
+						return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
 					}
 				}
 			}
 		}
 	} else {
 		// 澶勭悊鐨勯兘鏄痽olo鏁版嵁
-		if rule.PolygonId == am.areaId { // 棣栧厛杩欐潯瑙勫垯寰楁槸杩欎釜绠楁硶鐨勮鍒欙紝鍏舵瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
+		if rule.PolygonId == am.AreaId { // 棣栧厛杩欐潯瑙勫垯寰楁槸杩欎釜绠楁硶鐨勮鍒欙紝鍏舵瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
 			if rule.SdkArgAlias == "score" || rule.SdkArgAlias == "proportion" || rule.SdkArgAlias == "size" { // 鍒ゆ柇鐨勬槸鐩镐技鍊硷紝鍗犳瘮锛屽昂瀵哥瓑杩囨护鏉′欢锛屽鏋滃啀鏈夛紝杩樺彲浠ュ啀鍔�
-				var args []*Arg
+				var args []*structure.Arg
 				if rule.RuleWithPre == "&&" {
-					args = am.filterData
+					args = am.FilterData
 				} else {
-					args = am.args
+					args = am.Args
 				}
 				// 鍏堟竻绌鸿繃婊ゅ悗鐨勬暟鎹紝鍐嶅線閲屽鏈杩囨护鍚庣殑鏁版嵁
-				am.filterData = am.filterData[0:0]
+				am.FilterData = am.FilterData[0:0]
 				//logger.Debug("鐪嬬湅args锛氾細锛氾細锛�", args)
 				for _, arg := range args {
 					var formula string
@@ -693,31 +590,31 @@
 					expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
 					result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
 					if result.(bool) {
-						am.filterData = append(am.filterData, arg) // 寰楀埌绗﹀悎鏉′欢鐨勮繃婊ゆ暟鎹�
+						am.FilterData = append(am.FilterData, arg) // 寰楀埌绗﹀悎鏉′欢鐨勮繃婊ゆ暟鎹�
 					}
 				}
-				am.targetNum = len(am.filterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁
-				if am.targetNum > 0 {
-					return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "true", rule.Sort}
+				am.TargetNum = len(am.FilterData) // 鎶婄鍚堟潯浠剁殑鐩爣鏁伴噺鏇存柊鍒皌argetNum瀛楁
+				if am.TargetNum > 0 {
+					return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
 				} else {
-					return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "false", rule.Sort}
+					return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
 				}
 
 			} else if rule.SdkArgAlias == "" {
-				if am.targetNum > 0 {
-					return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "true", rule.Sort}
+				if am.TargetNum > 0 {
+					return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "true", rule.Sort}
 				} else {
-					return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + "false", rule.Sort}
+					return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + "false", rule.Sort}
 				}
 			}
 		}
 	}
-	return LittleRuleResult{}
+	return structure.LittleRuleResult{}
 }
 
 // 濡傛灉鏈夋寔缁椂闂存潯浠剁淮鎶ゅ紑鍚竴涓畾鏃跺櫒
-func duration(rule *protomsg.Rule, groupId string, am *AreaMap, args *SdkDatas, message *protomsg.SdkMessage) {
-	if rule.PolygonId == am.areaId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�  閰嶇疆鐨勭畻娉曡瀵圭殑涓�
+func duration(rule *protomsg.Rule, groupId string, am *structure.AreaMap, args *structure.SdkDatas, message *protomsg.SdkMessage) {
+	if rule.PolygonId == am.AreaId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�  閰嶇疆鐨勭畻娉曡瀵圭殑涓�
 		if rule.SdkArgAlias == "duration" { //
 			logger.Info("褰撳墠灏忚鍒欐槸锛�---------", rule)
 			// 鍏堢湅鐪嬪畾鏃跺櫒鍏冪礌闃熷垪涓槸鍚︽湁杩欐潯瑙勫垯鐨勫畾鏃跺櫒,濡傛灉鏈夊氨涓嶈兘鍐嶆鍒涘缓浜�
@@ -732,7 +629,7 @@
 
 			if flag {
 				timeLength, _ := strconv.Atoi(rule.SdkArgValue)
-				timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false, BufferFlag: 10, CacheSdkData: ResultMsg{message, args.RuleResult}} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌锛堝苟缂撳瓨褰撳墠鐢婚潰甯ф暟鎹級
+				timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false, BufferFlag: 10, CacheSdkData: structure.ResultMsg{message, args.RuleResult}} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌锛堝苟缂撳瓨褰撳墠鐢婚潰甯ф暟鎹級
 				//TimeEleList = make(map[string]timeElement)
 				TimeEleList[groupId+"+"+rule.Id] = &timeEle // 瀹氭椂鍣ㄥ厓绱犱互褰撳墠鎸佺画鏃堕棿灏忚鍒檌d涓洪敭
 				logger.Info("鍒涘缓浜嗚鏁板櫒")
@@ -743,17 +640,17 @@
 }
 
 // 缁欐暟鎹簱鐨勮鍒欒〃杈惧紡浠e弬 args: 涓�鏉″瓙瑙勫垯锛屽尯鍩熸暟鎹�
-func transferParameters(rule *protomsg.Rule, am *AreaMap) LittleRuleResult {
-	if rule.PolygonId == am.areaId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
+func transferParameters(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult {
+	if rule.PolygonId == am.AreaId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
 		if rule.SdkArgAlias == "objCount" { // 濡傛灉鍙傛暟鏄鍖哄煙鍐呯洰鏍囨暟閲� 鍗硑olo 浜鸿劯涓嶄細鏈夋暟閲�
 			//logger.Info("褰撳墠灏忚鍒欐槸锛�---------", rule)
 			//logger.Info("寰楀嚭缁撴灉闃舵", "姣旇緝鐨勮鍒欐槸锛�", rule)
 			if rule.Operator == "" {
-				return LittleRuleResult{am.sdkName, strconv.Itoa(am.targetNum) + "" + rule.RuleWithPre, rule.Sort} // 濡傛灉鍚庨潰涓嶈窡鎿嶄綔绗﹀氨鐩存帴杩斿洖鏁伴噺  姣斿瑕佽窡涓嬩竴涓尯鍩熸瘮杈冩暟閲忕殑灏辩洿鎺ヨ繑鍥炴湰鍖哄煙鐨勬暟閲�
+				return structure.LittleRuleResult{am.SdkName, strconv.Itoa(am.TargetNum) + "" + rule.RuleWithPre, rule.Sort} // 濡傛灉鍚庨潰涓嶈窡鎿嶄綔绗﹀氨鐩存帴杩斿洖鏁伴噺  姣斿瑕佽窡涓嬩竴涓尯鍩熸瘮杈冩暟閲忕殑灏辩洿鎺ヨ繑鍥炴湰鍖哄煙鐨勬暟閲�
 			}
 			//args := am.targetNum     targetNum 宸叉垚鎵�鏈夌洰鏍囩殑鎬绘暟閲忥紝杩欓噷鍙畻yolo鐨�
 			var num int = 0
-			for _, data := range am.filterData {
+			for _, data := range am.FilterData {
 				if data.IsYolo {
 					num++
 				}
@@ -761,14 +658,14 @@
 			formula := strconv.Itoa(num) + " " + rule.Operator + " " + rule.SdkArgValue
 			expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
 			result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
-			return LittleRuleResult{am.sdkName, rule.RuleWithPre + " " + strconv.FormatBool(result.(bool)), rule.Sort}
+			return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + " " + strconv.FormatBool(result.(bool)), rule.Sort}
 			// 鍔犱笂鍏充簬绠楁硶鐨勫垽鏂潯浠讹紝涓嶈兘鍙湁鍏充簬瑙勫垯鐨勶紝鏈夌殑绠楁硶鏈韩灏辨槸涓�涓鍒欙紝濡備釜浣撻潤姝紝闈犲彸琛�,鎵�浠ワ紝鎷垮埌褰撳墠瀛愯鍒欑殑sdkid鏉ュ垽鏂槸鍚︽槸閭d簺鐗规畩鐨勮鍒�
 		}
 	}
-	return LittleRuleResult{}
+	return structure.LittleRuleResult{}
 }
-func timeRuleResult(rule *protomsg.Rule, am *AreaMap) LittleRuleResult {
-	if rule.PolygonId == am.areaId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
+func timeRuleResult(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult {
+	if rule.PolygonId == am.AreaId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�
 		if rule.SdkArgAlias == "time_rule" { // 鍒ゆ柇鏄惁绗﹀悎鏃堕棿瑙�
 			//logger.Info("----------褰撳墠鏃堕棿瑙勫垯锛�---------", rule)
 			// 鏍规嵁鏀惧�煎瓧娈甸噷瀛樼殑鏃堕棿瑙勫垯鐨刬d鍘诲彟涓�涓〃閲屾煡闇�瑕佹瘮瀵圭殑鏃堕棿娈碉紙姣斿褰撳墠鏃堕棿鏄懆涓夛紝搴旀牴鎹尯鍩焛d鏌ュ嚭鍏跺懆涓夌殑鍑犱釜甯冮槻鏃堕棿娈碉紝鏁扮粍锛�
@@ -783,11 +680,11 @@
 			if rule.Operator == "satisfy" || rule.Operator == "==" { // 婊¤冻鎵�閫夌殑鏃堕棿瑙勫垯
 				flag := "false"
 				for _, timeSlot := range timeList {
-					formula := "'" + timeSlot.Start + "'" + "<" + "'" + am.time + "'"
+					formula := "'" + timeSlot.Start + "'" + "<" + "'" + am.Time + "'"
 					expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
 					result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
 
-					formula1 := "'" + timeSlot.End + "'" + ">" + "'" + am.time + "'"
+					formula1 := "'" + timeSlot.End + "'" + ">" + "'" + am.Time + "'"
 					expression1, _ := govaluate.NewEvaluableExpression(formula1) // 寰楀埌鏁板鍏紡
 					result1, _ := expression1.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
 					//logger.Info("鐪嬬湅杩欎袱灏婂ぇ绁�", result, result1)
@@ -796,18 +693,18 @@
 						break
 					}
 				}
-				return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + flag, rule.Sort}
+				return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + flag, rule.Sort}
 			}
 
 			if rule.Operator == "unsatisfy" || rule.Operator == "!=" { // 涓嶆弧瓒虫墍閫夌殑鏃堕棿瑙勫垯
 				flag := "true"
 				for _, timeSlot := range timeList {
-					formula := "'" + timeSlot.Start + "'" + " < " + "'" + am.time + "'"
+					formula := "'" + timeSlot.Start + "'" + " < " + "'" + am.Time + "'"
 					//logger.Info("-----------------鏃堕棿瑙勫垯涓嶆弧瓒崇殑鍏紡start锛�", formula)
 					expression, _ := govaluate.NewEvaluableExpression(formula) // 寰楀埌鏁板鍏紡
 					result, _ := expression.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
 
-					formula1 := "'" + timeSlot.End + "'" + " > " + "'" + am.time + "'"
+					formula1 := "'" + timeSlot.End + "'" + " > " + "'" + am.Time + "'"
 					//logger.Info("-----------------鏃堕棿瑙勫垯涓嶆弧瓒崇殑鍏紡end锛�", formula1)
 					expression1, _ := govaluate.NewEvaluableExpression(formula1) // 寰楀埌鏁板鍏紡
 					result1, _ := expression1.Evaluate(nil)                      // 寰楀埌鏁板鍏紡鐨勭粨鏋�
@@ -816,10 +713,10 @@
 						break
 					}
 				}
-				return LittleRuleResult{am.sdkName, rule.RuleWithPre + "" + flag, rule.Sort}
+				return structure.LittleRuleResult{am.SdkName, rule.RuleWithPre + "" + flag, rule.Sort}
 			}
 
 		}
 	}
-	return LittleRuleResult{}
+	return structure.LittleRuleResult{}
 }
diff --git a/ruleserver/timeTicker.go b/ruleserver/timeTicker.go
index 3913b20..7650091 100644
--- a/ruleserver/timeTicker.go
+++ b/ruleserver/timeTicker.go
@@ -3,6 +3,7 @@
 import (
 	"fmt"
 	"basic.com/valib/logger.git"
+	"ruleprocess/structure"
 	"strings"
 	"time"
 )
@@ -18,7 +19,7 @@
 	InitN        int       // 璧嬪�煎悗灏变笉鍙樼殑鍒濆鍊�
 	BufferFlag   int       // 缂撳啿瀹归敊浣� 杩炵画n甯alse鎵嶄负false
 	AlarmFlag    bool      // 鎶ヨ鏍囧織浣� 瀹氭椂鍣ㄥ紑鍚悗绗竴娆℃姤璀︽椂浼氳缃负true 寰�鍚庡啀鏉ユ姤璀︿篃涓嶄細鎻掕繘ES
-	CacheSdkData ResultMsg // 瀹氭椂鍣ㄧ殑缂撳瓨鏁版嵁 鎸佺画鏃堕棿绫荤殑寮�鍚畾鏃跺櫒鏃惰缂撳瓨涓�甯�
+	CacheSdkData structure.ResultMsg // 瀹氭椂鍣ㄧ殑缂撳瓨鏁版嵁 鎸佺画鏃堕棿绫荤殑寮�鍚畾鏃跺櫒鏃惰缂撳瓨涓�甯�
 	GroupId      string    // 鑱斿姩瑙勫垯闇�瑕佽褰曚笅姝ゆ椂鐨勮鍒欑粍id
 	RuleResults  []*RuleResult
 }
@@ -28,7 +29,7 @@
 	Sort        int32     // 鎽勫儚鏈哄湪瑙勫垯缁勪腑搴忓彿
 	Result      string    // 鎽勫儚鏈鸿繃婊ゆ暟鎹緱鍑虹殑缁撴灉
 	RuleWithPre string    // 鎽勫儚鏈轰箣闂寸殑杩炴帴绗�
-	CacheData   ResultMsg // 缂撳瓨褰撳墠甯ф暟鎹�
+	CacheData   structure.ResultMsg // 缂撳瓨褰撳墠甯ф暟鎹�
 }
 
 func TimeTicker() {
@@ -69,7 +70,7 @@
 }
 
 // 鍒ゆ柇鏄惁绗﹀悎瀹氭椂鍣ㄦ潯浠�
-func TimerAlarm(oth *Others, groupId string, result bool) (string) {
+func TimerAlarm(oth *structure.Others, groupId string, result bool) (string) {
 	var flagTime string //
 	// 鍒ゆ柇鏈夋棤姝よ鍒欑粍鐨勫畾鏃跺櫒
 	flag := false
@@ -93,7 +94,7 @@
 						logger.Debug("鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺��-------------棣栨绗﹀悎鎸佺画鏃堕棿瑙勫垯骞舵姤璀�")
 						flagTime = "10"
 						timeEle.AlarmFlag = true
-						oth.CacheData = []ResultMsg{}
+						oth.CacheData = []structure.ResultMsg{}
 						oth.CacheData = append(oth.CacheData,timeEle.CacheSdkData)
 						oth.TimeLabel = flagTime
 					}
@@ -147,7 +148,7 @@
 func (p SubList) Less(i, j int) bool { return p[i].Sort < p[j].Sort }
 
 // 缁撴瀯浣撴牴鎹煇瀛楁鎺掑簭
-type resultList []*LittleRuleResult
+type resultList []*structure.LittleRuleResult
 
 func (p resultList) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }
 func (p resultList) Len() int           { return len(p) }
diff --git a/structure/gragh.go b/structure/gragh.go
new file mode 100644
index 0000000..ba583d9
--- /dev/null
+++ b/structure/gragh.go
@@ -0,0 +1,21 @@
+package structure
+
+//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"`
+}
diff --git a/structure/rule.go b/structure/rule.go
new file mode 100644
index 0000000..60fe306
--- /dev/null
+++ b/structure/rule.go
@@ -0,0 +1,132 @@
+package structure
+
+import "basic.com/pubsub/protomsg.git"
+
+// 姣忎釜鐩爣鐨勫弬鏁帮細鐩镐技搴︼紝鍗犳瘮锛屽昂瀵�
+type Arg struct {
+	Id         uint64
+	Score      float64 // 鍖哄煙鍐呯殑鐩爣鐨勭浉浼煎害
+	Proportion float64 // 鍖哄煙鍐呯殑鐩爣鐨勫崰姣�
+	Size       float64 // 鍖哄煙鍐呯殑鐩爣鐨勫昂瀵�
+	IsYolo     bool    // 鏄惁鏄痽olo鏁版嵁
+	Location   Rect    // 璁颁笅姣忎釜鐩爣鐨勪綅缃弬鏁帮紝鏈�鍚庣粰缁撴灉瑁呴厤浜鸿劯鏁版嵁鐨勬椂鍊欑敤鐨勫埌
+	Feature    []byte
+	ThftRes    protomsg.ThftResult
+	Liker      []*BaseInfo
+}
+
+// 姣忎釜鍖哄煙鍐呯殑鍥剧墖鏁版嵁闆嗗悎
+type AreaMap struct {
+	CameraId      string
+	AreaId        string
+	GroupId       string
+	TaskId        string
+	SdkId         string
+	SdkName       string
+	AreaJson      string
+	TriggerLine   string
+	DirectionLine string
+	TargetNum     int    // 鍖哄煙鍐呯洰鏍囨暟閲�
+	Args          []*Arg // 鍖哄煙鍐呯洰鏍囬泦鍚�
+	FilterData    []*Arg // 杩囨护鍚庡尯鍩熷唴鐩爣闆嗗悎
+	Time          string // 褰撳墠鏃堕棿锛堢敤浠ュ尮閰嶆椂闂磋鍒欙級
+	IsEffective   bool   // 瑙勫垯涓槸鍚︾敤鍒颁簡姝ゅ尯鍩�
+	KeepRight     bool   // 鏄惁闈犲彸琛�
+	IsStatic      bool   // 鏄惁闈欐
+}
+
+// sdk杈撳嚭鐨勫浘鐗囦笂鍗曚釜鐩爣鐨勬暟鎹�
+type PhotoMap struct {
+	Id      uint64
+	Rects   Rect    // 鐭╁舰鍖哄煙鍙傛暟
+	Score   float64 // 鐩镐技搴﹀緱鍒嗭紙鏈夊澶х▼搴﹀儚涓�涓洰鏍囥�備汉鑴革紝浜轰綋鎴栬溅绛夌瓑锛�
+	IsYolo  bool    // 鏄惁鏄痽olo鏁版嵁
+	ThftRes protomsg.ThftResult
+	Feature []byte
+}
+
+// 姣忎釜绠楁硶瀵逛簬褰撳墠甯х敾闈㈣嚜宸辨彁鍙栫殑鏁版嵁
+type SdkData struct {
+	TaskId      string
+	IpcId       string
+	IsYolo      bool
+	Photo       []PhotoMap // yolo绠楁硶缁撴瀯锛屼篃鍙互瀛樹汉鑴哥殑鏁版嵁锛屾瘯绔熶汉鑴镐腑鑳界敤瑙勫垯鏉ユ祴鐨勮繕鏄偅浜涘弬鏁�
+	KeepRight   bool       // 鏄惁闈犲彸琛� 绠楁硶鍒ゆ柇鐨勪笌涓婁竴甯у浘鍍忕殑姣旇緝缁撴灉
+	IsStatic    bool       // 鏄惁闈欐
+	ImageWidth  int        // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚瀹� 鍍忕礌
+	ImageHeight int        // 鎽勫儚鏈烘媿鎽勭殑鍥惧儚楂� 鍍忕礌
+	AreaMapList []*AreaMap // 鏈瑂dk鎻愬彇鐨勬暟鎹寜鐓у尯鍩熷垝鍒嗗悗鐨勬暟鎹泦鍚�
+}
+
+// 浠庣畻娉曟ā鍧楀効鎷挎潵鐨勫涓�甯у浘鍍忓悇涓畻娉曟彁鍙栫殑鏁版嵁闆嗗悎
+type SdkDatas struct {
+	CameraId   string
+	TaskId     string
+	Sdkdata    []*SdkData
+	RuleResult map[string]interface{} // 杩囧畬瑙勫垯鍚庢墦鐨勬爣绛� face: []FaceResult, yolo: []Result
+}
+
+type ResultMsg struct {
+	*protomsg.SdkMessage
+	RuleResult map[string]interface{} // 杩囧畬瑙勫垯鍚庢墦鐨勬爣绛� face: []FaceResult, yolo: []Result
+}
+
+// 杩囪鍒欏簱鎵撲笂鐨勬爣绛�
+type Result struct {
+	TaskId       string // 浠诲姟id
+	SdkName      string
+	RuleGroupId  string // 瑙勫垯缁刬d
+	DefenceState bool   // 鏄惁甯冮槻
+	AlarmLevel   int32  // 鎶ヨ绛夌骇
+	RuleText     string // 鏂囧瓧鐗堣鍒欑粍
+	Location     []TargetInfo // 鐩爣鐨勫潗鏍�
+	AlarmPolygon string // 瑙﹀彂鐨勬姤璀︽
+	IsLink       bool   // 鏄惁鏄仈鍔ㄤ换鍔�
+	Others
+}
+type Others struct {
+	CacheData []ResultMsg //(鏈粍瑙勫垯涓惈鏈夋寔缁椂闂寸殑瑙勫垯寮�鍚殑瀹氭椂鍣ㄧ紦瀛樼殑鏁版嵁甯�)
+	LinkCache []ResultMsg
+	TimeLabel string
+}
+
+type TargetInfo struct {
+	Rect
+	TargetId    uint64
+	TargetScore float64
+}
+
+// 杩囪鍒欏簱鎵撲笂鐨勬爣绛�
+type FaceResult struct {
+	Result
+	Args []Arg
+}
+type LittleRuleResult struct {
+	SdkName string // 璁板綍涓嬫缁撴灉鏄摢涓猻dk鐨勭粨鏋�
+	Result  string // 宸插寘鍚簡鍓嶇疆杩炴帴绗�
+	Sort    int32
+}
+
+type TimeRange struct {
+	Start string `json:"start"`
+	End   string `json:"end"`
+}
+type Day struct {
+	Day       int         `json:"day"`        // 鏍囩ず褰撳墠鏄熸湡鍑�
+	TimeRange []TimeRange `json:"time_range"` // 褰撳ぉ鐨勫嚑涓椂闂存
+}
+
+type BaseInfo struct {
+	TableId      string  `json:"tableId"`
+	TableName    string  `json:"tableName"`
+	BwType       string  `json:"bwType"`
+	CompareScore float64 `json:"compareScore"`
+	PersonId     string  `json:"personId"`
+	PersonName   string  `json:"personName"`
+	PersonPicUrl string  `json:"personPicUrl"`
+	PhoneNum     string  `json:"phoneNum"`
+	Sex          string  `json:"sex"`
+	IdCard       string  `json:"idCard"`
+	MonitorLevel string  `json:"monitorLevel"`
+	Content      string  `json:"content"`
+}
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 f3f5b6d..9e48691 100644
--- a/util/simpleCV.go
+++ b/util/simpleCV.go
@@ -11,6 +11,7 @@
 	"ruleprocess/cache"
 	"basic.com/valib/logger.git"
 	"ruleprocess/ruleserver"
+	"ruleprocess/structure"
 	"strings"
 )
 
@@ -155,7 +156,7 @@
 	}
 }
 
-func DrawPolygonOnImageForYolo(cameraId string, img protomsg.Image, results []ruleserver.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)
@@ -187,7 +188,7 @@
 	return
 }
 
-func DrawPolygonOnImageForFace(cameraId string, img protomsg.Image, results []ruleserver.FaceResult,url string) (maps map[string]interface{}, err0 error) {
+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)
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

--
Gitblit v1.8.0