From 5ae97eebd0dfcaad32e92f9df7b7f73caad922bf Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期四, 07 十一月 2019 18:20:43 +0800
Subject: [PATCH] merge module

---
 util/upload.go                   |    2 
 util/simpleCV.go                 |   46 +
 go.mod                           |   14 
 ruleserver/ruleToformula.go      |   97 ++
 ruleserver/attachInfo.go         |   42 +
 ruleserver/personTrack.go        |  158 +++--
 ruleserver/readyDataForRule.go   |   58 -
 structure/gragh.go               |    3 
 labelFilter/req.go               |  127 +++-
 /dev/null                        |    0 
 go.sum                           |  147 +++++
 logger/logger.go                 |   50 +
 insertdata/config.go             |   63 ++
 insertdata/insertDataToEs.go     |  548 +++++--------------
 main.go                          |   38 
 ruleserver/geoPolygon_test.go    |   38 +
 labelFilter/readyDataForLabel.go |   52 +
 labelFilter/ruleForLabel.go      |   50 +
 structure/rule.go                |    8 
 ruleserver/timeTicker.go         |   50 +
 util/simpleCV_test.go            |   10 
 ruleserver/geoPolygon.go         |    8 
 22 files changed, 939 insertions(+), 670 deletions(-)

diff --git a/go.mod b/go.mod
index 3ebe584..8a6d4ab 100644
--- a/go.mod
+++ b/go.mod
@@ -3,22 +3,24 @@
 go 1.12
 
 require (
-	basic.com/dbapi.git v0.0.0-20190822081128-ce924b8a905f
+	basic.com/dbapi.git v0.0.0-20191025084729-a04db890e7b5
+	basic.com/fileserver/WeedFSClient.git v0.0.0-20191105073656-98059e699477
 	basic.com/pubsub/cache.git v0.0.0-20190718093725-6a413e1d7d48
-	basic.com/pubsub/protomsg.git v0.0.0-20190824080957-7b44351cb40b
-	basic.com/pubsub/sdkcompare.git v0.0.0-20190715013640-f536a4647d00
-	basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051
+	basic.com/pubsub/protomsg.git v0.0.0-20191105082616-7a5fc5da9c09
+	basic.com/valib/deliver.git v0.0.0-20190927081905-2d390df9ede3
 	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
+	basic.com/valib/shm.git v0.0.0-20190829074754-ad2e00879627 // 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/kirinlabs/HttpRequest v0.1.5 // 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
 	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..e94eaee 100644
--- a/go.sum
+++ b/go.sum
@@ -1,58 +1,203 @@
+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/dbapi.git v0.0.0-20191025084729-a04db890e7b5 h1:OcZOgjBXfzhI1Ukxblacxu5xwKl448ADYyulJ02zdb8=
+basic.com/dbapi.git v0.0.0-20191025084729-a04db890e7b5/go.mod h1:eDXPnxaz6jZPDvBSk7ya7oSASWPCuUEgRTJCjsfKt/Q=
+basic.com/fileserver/WeedFSClient.git v0.0.0-20191105073656-98059e699477 h1:yr95Oko76zjDlPs60aHT2lAqApz8nzli9A6yJB/IrGA=
+basic.com/fileserver/WeedFSClient.git v0.0.0-20191105073656-98059e699477/go.mod h1:oiXPn3wwwOi/Sbm6cDWpNWofoG5iV2Nb1V/DxLEAqYY=
+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-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/protomsg.git v0.0.0-20191025080939-9b30ac3be52d h1:Lhny6vIq3GNjunE+r0ymLnpg+/n0lqwnsOAy6HbARfk=
+basic.com/pubsub/protomsg.git v0.0.0-20191025080939-9b30ac3be52d/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
+basic.com/pubsub/protomsg.git v0.0.0-20191105075705-11a3749018a7 h1:6B15QTE96XgpT2Ry9a3xhJZzxYvP6rClT3l4r2WHrjE=
+basic.com/pubsub/protomsg.git v0.0.0-20191105075705-11a3749018a7/go.mod h1:un5NV5VWQoblVLZfx1Rt5vyLgwR0jI92d3VJhfrJhWU=
+basic.com/pubsub/protomsg.git v0.0.0-20191105082616-7a5fc5da9c09 h1:wktnrfZLxcSEnmu/ptMdn4GF5UiHcUdRSlWQ0EllJxY=
+basic.com/pubsub/protomsg.git v0.0.0-20191105082616-7a5fc5da9c09/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=
 basic.com/valib/deliver.git v0.0.0-20190531095353-25d8c3b20051/go.mod h1:bkYiTUGzckyNOjAgn9rB/DOjFzwoSHJlruuWQ6hu6IY=
+basic.com/valib/deliver.git v0.0.0-20190927081905-2d390df9ede3 h1:VY23IpugB/FsU2hSnVeLjZKX5cSgNmhcSEiw6vxX+bg=
+basic.com/valib/deliver.git v0.0.0-20190927081905-2d390df9ede3/go.mod h1:bkYiTUGzckyNOjAgn9rB/DOjFzwoSHJlruuWQ6hu6IY=
 basic.com/valib/gopherdiscovery.git v0.0.0-20190605034340-15d89d8b4e28 h1:3hejanzPEBvZSSvjIqayB83/6/6SLLrX9oNZAdiYELg=
 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-20190926101623-99e2471fbbf5 h1:kBGQ+7tbDY4kIyZJVK3gLqAFzK8zS7o7323pSgfXXBs=
+basic.com/valib/logger.git v0.0.0-20190926101623-99e2471fbbf5/go.mod h1:SPlOGUUlxCscwF1dkqmLb0oJXVqg1uJ8hsPXLFxrw1M=
+basic.com/valib/logger.git v0.0.0-20190927065828-cb651da7c223 h1:LPTDC1cOb2ZhuAkflqWXrIQ2RPYPS+ntoRgvpnZm4bY=
+basic.com/valib/logger.git v0.0.0-20190927065828-cb651da7c223/go.mod h1:SPlOGUUlxCscwF1dkqmLb0oJXVqg1uJ8hsPXLFxrw1M=
+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=
+basic.com/valib/shm.git v0.0.0-20190829074754-ad2e00879627 h1:y0t0XG2uPSygF+hiSdLP3Lr959tip/FDPYJpHhbKRec=
+basic.com/valib/shm.git v0.0.0-20190829074754-ad2e00879627/go.mod h1:yYRM7bM9y0KKd4IfNt3myjsvkFVFIIWNjsvK14tNbq4=
+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/kirinlabs/HttpRequest v0.1.5 h1:BzOb6AmBii232R93birBsf663kt8N9y8N0TCQKoEzhA=
+github.com/kirinlabs/HttpRequest v0.1.5/go.mod h1:XV38fA4rXZox83tlEV9KIQ7Cdsut319x6NGzVLuRlB8=
 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 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc=
+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 h1:G+97AoqBnmZIT91cLG/EkCoK9NSelj64P8bOHHNmGn0=
+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..a38b48d 100644
--- a/insertdata/insertDataToEs.go
+++ b/insertdata/insertDataToEs.go
@@ -4,15 +4,13 @@
 	"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"
@@ -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瀵瑰涓鍒欑粍鐨勫綊缃汉鑴哥殑缁撴瀯浣�
@@ -120,46 +127,21 @@
 	rules []structure.Result
 }
 
-// 寰�ES鎻掓暟鎹�
-//func InsertToEs(msg ruleserver.ResultMsg) {
-//	var timeLabel string
-//	// 鐩存帴浠庤鍒欑殑鏍囩鏁版嵁閲屾嬁绗﹀悎瑙勫垯鐨勪汉鑴哥粨鏋�
-//	if msg.RuleResult["timeLabel"] != nil {
-//		timeLabel = msg.RuleResult["timeLabel"].(string)
-//	}
-//	logger.Debug("鎻掑叆鏁版嵁鍓嶇湅鐪嬫姤璀︽爣蹇椾綅锛�", timeLabel)
-//	if timeLabel == "01" { // 鏃犲畾鏃跺櫒鐘舵�佽鎻掑叆鐨勬姤璀︽暟鎹�
-//		InsertFace(msg)
-//		flag := ruleserver.BodyIsSame(msg.SdkMessage)
-//		if !flag {
-//			InsertYolo(msg)
-//		}
-//	}
-//	if timeLabel == "10" { // 瀹氭椂鍣ㄧ姸鎬佽鎻掑叆鐨勯甯ф姤璀︽暟鎹�傝繛甯︾潃瀹氭椂鍣ㄥ紑鍚椂鐨勯偅甯�
-//		InsertFace(msg)
-//		InsertYolo(msg)
-//	}
-//	//if timeLabel == "12" { // 骞堕潪鎶ヨ鏁版嵁锛屽彧鏄姸鎬佹敼鍙樼殑鏁版嵁
-//	//	//ChangeStatusFace(msg)
-//	//	ChangeStatusYolo(msg)
-//	//}
-//}
 func InsertToEs(msg structure.ResultMsg) {
-	InsertFace(msg, "")
-	// 濡傛灉鏍囩涓惈鏈夋寔缁椂闂撮娆℃姤璀︾殑timeLabel鐨勮瘽鍒欎笉闇�瑕佽繃浜轰綋杩借釜锛屼笉鐒跺氨娌$殑鎻掑叆浜�
-	fk := ruleserver.TrackOrNot(msg.RuleResult)
-	if fk {
-		InsertYolo(msg, "")
-		//if msg.Cid == "61de081a-7ed9-4970-8432-41d642c35456" {
-		//	logger.Warn("鎹曟崏188鎽勫儚鏈虹殑鎸佺画鏃堕棿浠诲姟.....")
-		//	os.Exit(1)
-		//}
-	} else {
-		flag := ruleserver.BodyIsSame(msg.SdkMessage)
-		if !flag {
-			InsertYolo(msg, "")
+	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, "")
+	InsertYolo(msg, "")
 }
 
 // 寰�es涓彃鍏ヤ汉鑴告暟鎹�
@@ -167,10 +149,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,35 +162,30 @@
 					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)
-				// 浜鸿劯妫�娴嬶紝娌℃湁鐩镐技鐨勫簳搴撲汉鍛�
-				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))
+				// 涓婁紶澶у浘
+				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
+				}
 				sex := ""
+				logger.Info(sex)
 				if face.ThftRes.Gender == 1 {
 					sex = "鐢�"
 				} else {
@@ -214,35 +193,41 @@
 				}
 				race := getRaceString(face.ThftRes.Race)
 				ageDescription := getDescription(face.ThftRes.Age)
-				esDataId := uuid.NewV4().String()
+				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))
 				pervideo := PerVideoPicture{
-					esDataId,
+					msg.Push.PushId,
 					msg.Cid,
-					camera.Addr,
-					i.Timestamp,
-					bigPhotoUrl["fileUrl"].(string),
+					msg.Push.Cam.Addr,
+					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,
 					base64.StdEncoding.EncodeToString(face.Feature),
 					[]string{resp["fileUrl"].(string)},
-					"鏆傛棤闆嗙兢",
-					localConfig.ServerId,
-					localConfig.ServerName,
-					serverIp,
+					"",
+					msg.Push.ServerId,
+					msg.Push.ServerName,
+					msg.Push.LocalIp,
 					"",
 					linksId,
 					face.Score,
@@ -251,6 +236,7 @@
 					0,
 					0,
 					face.Liker,
+					*target,
 				}
 				requstbody, err := json.Marshal(pervideo)
 
@@ -264,7 +250,7 @@
 				} 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})
+					ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: msg.Push.PushId, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid, VideoUrl:msg.Push.VideoUrl,ImgId: i.Id, SdkIds: []string{}, Type: 1})
 				}
 			}
 		}
@@ -272,7 +258,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 +268,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 +317,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 +329,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 +343,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 +405,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
@@ -409,38 +417,26 @@
 				// 涓嶆槸鎶ヨ鏁版嵁涓嶅瓨
 				return
 			}
-			// 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()
 			if resp["fileUrl"] != nil {
 				url = append(url, resp["fileUrl"].(string))
-				esDataId := uuid.NewV4().String()
+				//esDataId := uuid.NewV4().String()
 				linksId := ""
 				if linkId != "" {
 					linksId = linkId
 				}
 				peraction := Personaction{
-					esDataId,
+					msg.Push.PushId,
 					msg.Cid,
-					camera.Name,
-					camera.Addr,
+					msg.Push.Cam.Name,
+					msg.Push.Cam.Addr,
 					msg.Tasklab.Taskid,
 					msg.Tasklab.Taskname,
 					sdkNames,
 					"",
 					alarmRules,
-					localConfig.ServerId,
-					localConfig.ServerName,
-					serverIp,
+					msg.Push.ServerId,
+					msg.Push.ServerName,
+					msg.Push.LocalIp,
 					"",
 					url,
 					i.Timestamp,
@@ -450,13 +446,13 @@
 					0,
 					0,
 					0,
+					targetInfos,
 				}
 				requstbody, err := json.Marshal(peraction)
 
 				if err != nil {
 					logger.Info("json parse error ", err)
 					return
-
 				}
 				resp1, err2 := EsReq("POST", personAction, requstbody)
 				if err2 != nil {
@@ -464,7 +460,7 @@
 				} else {
 					logger.Debug("鎻掑叆es杩斿洖鐨勬暟鎹俊鎭槸锛�", resp1)
 					// 鍙戝嚭褰曞儚淇″彿
-					ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: esDataId, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid, ImgId: i.Id, SdkIds: []string{}, Type: 2})
+					ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: msg.Push.PushId, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid,VideoUrl:msg.Push.VideoUrl, ImgId: i.Id, SdkIds: []string{}, Type: 2})
 					logger.Warn("__________________________________________寰�ES鎻掑叆yolo鏁版嵁鎴愬姛")
 					//os.Exit(1)
 				}
@@ -473,155 +469,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 +553,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..28b5233 100644
--- a/labelFilter/readyDataForLabel.go
+++ b/labelFilter/readyDataForLabel.go
@@ -1,8 +1,8 @@
 package labelFilter
 
 import (
-	"ruleprocess/cache"
 	"ruleprocess/logger"
+	"ruleprocess/cache"
 	"ruleprocess/structure"
 	"time"
 )
@@ -20,29 +20,41 @@
 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)
-		if err != nil {
-			logger.Error("鏌ヨ鎽勫儚鏈轰俊鎭嚭閿�")
-		}
-		label.CameraName = camera.Name
-		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"].([]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["face"] != nil && len(result.RuleResult["face"].([]structure.FaceResult)) > 0) || (result.RuleResult["yolo"] != nil && len(result.RuleResult["yolo"].([]structure.Result)) > 0) { // 寰楁湁浜鸿劯鎴栬�厃olo瑙勫垯鎵嶅彲浠�
+
+		// 鍏堝垽鏂竴涓嬫暟鎹甫鐨勮鍒欐爣绛炬槸鍚︽湁鎶ヨ鐨勫彲浠ユ帹閫佺殑
+		flag := false
+		for _, res := range result.RuleResult["yolo"].([]structure.Result) {
+			//logger.Info("瀹氭椂鍣ㄦ墦鐨勬暟瀛楁爣绛撅細",res.Others.TimeLabel)
+			if res.Others.TimeLabel == "01" || res.Others.TimeLabel == "10" {
+				flag = true
 			}
 		}
-		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)
+		if flag || (result.RuleResult["face"] != nil && len(result.RuleResult["face"].([]structure.FaceResult)) > 0){
+			logger.Info("---------------鏍囩杩囨护鍣ㄨ祴鍊�")
+			label.CameraId = result.Cid
+			camera, err := cache.GetCameraById(result.Cid)
+			if err != nil {
+				logger.Error("鏌ヨ鎽勫儚鏈轰俊鎭嚭閿�")
 			}
+			label.CameraName = camera.Name
+			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"].([]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"].([]structure.Result)) > 0 {
+
+				for _,yoloGroup := range result.RuleResult["yolo"].([]structure.Result) {
+					label.DefenceLevel = append(label.DefenceLevel,yoloGroup.AlarmLevel)
+				}
+			}
+			logger.Info("------------鏍囩杩囨护鍣ㄨ祴鍊煎畬姣�")
 		}
-		logger.Info("------------鏍囩杩囨护鍣ㄨ祴鍊煎畬姣�")
 	}
 }
 
diff --git a/labelFilter/req.go b/labelFilter/req.go
index 8066479..2c08412 100644
--- a/labelFilter/req.go
+++ b/labelFilter/req.go
@@ -1,22 +1,27 @@
 package labelFilter
 
 import (
+	"basic.com/dbapi.git"
+	"basic.com/valib/logger.git"
 	"fmt"
 	"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"
 	"time"
 )
 
+var urlPool = make(map[string]chan []byte,100)
+//var urlChans = make([]urlChan,100)
+//type urlChan struct {
+//	url string
+//	ch chan *structure.ResultMsg
+//}
+//var pool chan *structure.ResultMsg = make(chan *structure.ResultMsg)
 func Die(format string, v ...interface{}) {
-	logger.Info("+++++++",format)
-	os.Exit(1)
+	logger.Info("+++++++",format,v)
+	//os.Exit(1)
 }
 
 func date() string {
@@ -53,42 +58,108 @@
 	}
 }
 
-func Push(url string,data ruleserver.ResultMsg) {
-	var sock mangos.Socket
+func Init(){
+
+	var api dbapi.EventPushApi
+	b, allRules := api.FindAllDetails()
+	logger.Info("鍒濆鍖栦簨浠舵帹閫侊紝鏌ョ湅鎵�鏈夎鍒欑粍锛�", allRules)
+	if !b {
+		logger.Error("鏌ヨ鏃堕棿鎺ㄩ�佽鍒欏け璐ワ紒")
+	}
+	for _, ruleGroup := range allRules {
+		if ruleGroup.Enable { // 澶ц鍒欏紑鍏冲紑鍚姸鎬�
+			for _, url := range ruleGroup.Urls {
+				// 涓烘瘡涓猽rl寤虹珛涓�涓猚han
+				if urlPool[url.Url] == nil {
+					urlPool[url.Url] = make(chan []byte,100)
+					logger.Info("鍒濆鍖栦俊鎭細",urlPool)
+					go GoPush(url.Url)
+				}
+			}
+		}
+	}
+}
+
+func GoPush(url string) {
 	var err error
 	var msg []byte
-
+	var sock mangos.Socket
 	if sock, err = req.NewSocket(); err != nil {
 		Die("鍒涘缓璇锋眰socket澶辫触: %s", err.Error())
 	}
-	errSize := sock.SetOption(mangos.OptionMaxRecvSize,5*1024*1024)
+	errSize := sock.SetOption(mangos.OptionMaxRecvSize,30*1024*1024)
 	if errSize != nil {
-		fmt.Errorf("Failed set MaxRecvSize: %v", err)
+		logger.Error("浼犺緭鐨勬暟鎹秴杩囧ぇ灏忛檺鍒�")
 		return
 	}
-	//sock.AddTransport(ipc.NewTransport())
+	errTimeOut := sock.SetOption(mangos.OptionRecvDeadline,time.Millisecond * 1500)
+	if errTimeOut != nil {
+		logger.Error("鎺ユ敹鍝嶅簲瓒呮椂")
+		return
+	}
+	errTimeOut1 := sock.SetOption(mangos.OptionSendDeadline,time.Millisecond * 1500)
+	if errTimeOut1 != nil {
+		logger.Error("鍙戦�佽秴鏃�")
+		return
+	}
+	errWrite := sock.SetOption(mangos.OptionWriteQLen,5)
+	if errWrite != nil {
+		logger.Error("璁剧疆浼犺緭缂撳瓨澶у皬澶辫触")
+		return
+	}
+	errRead := sock.SetOption(mangos.OptionReadQLen,5)
+	if errRead != nil {
+		logger.Error("璁剧疆浼犺緭缂撳瓨澶у皬澶辫触")
+		return
+	}
 	sock.AddTransport(tcp.NewTransport())
-	if err = sock.Dial(url); err != nil {
-		Die("璇锋眰socket鎷ㄥ彿澶辫触: %s", err.Error())
+	if err = sock.Dial("tcp://"+url); err != nil {
+		logger.Error("璇锋眰socket鎷ㄥ彿澶辫触: ", err.Error())
 	}
 	logger.Info("搴忓垪鍖栨暟鎹�")
-	bytes,err1 := proto.Marshal(data)
-	logger.Info("鏁版嵁闀垮害涓猴細",len(bytes))
-	if err1 != nil {
-		logger.Info("搴忓垪鍖栧け璐ワ細",err1)
+
+	//for v := range pool{
+	//	logger.Info("鏃犻檺寰幆",v.Cid)
+	//}
+	//var ch chan *structure.ResultMsg
+	//for _, v := range urlChans  {
+	//	if v.url == url{
+	//		ch = v.ch
+	//	}
+	//}
+	logger.Info("chan淇℃伅锛�",urlPool[url])
+	for {
+		select {
+		// case <-ctx.Done():
+		// 	return
+		case data := <- urlPool[url]:
+			//logger.Info("鎺ユ敹鍒版暟鎹�",data.Cid)
+			//bytes,err1 := proto.Marshal(data)
+			go func(data []byte) {
+				logger.Info("鏁版嵁闀垮害涓猴細",len(data))
+				//if err1 != nil {
+				//	logger.Info("搴忓垪鍖栧け璐ワ細",err1)
+				//}
+				start := time.Now()
+				logger.Debug("groutine"+url+"鎺ㄩ�佹暟鎹�")
+				//bytes := []byte("ndfasojdfaidsos")
+				if err = sock.Send(data); err != nil {
+					Die("groutine"+url+"鎺ㄩ�乻ocket鍙戦�佹暟鎹け璐�: ", err.Error())
+				}
+				pushTime := time.Since(start)
+				msg, err = sock.Recv();
+				if err != nil {
+					Die("groutine"+url+"鎺ユ敹鍝嶅簲澶辫触: ", err.Error(),pushTime,time.Since(start))
+				} else {
+					logger.Debug("浜嬩欢鎺ㄩ�佹垚鍔燂紒groutine"+url+"鏀跺埌鍝嶅簲",string(msg),pushTime,time.Since(start))
+				}
+			}(data)
+		default:
+
+		}
 	}
-	logger.Debug("鎺ㄩ�佹暟鎹�")
-	//bytes := []byte("ndfasojdfaidsos")
-	if err = sock.Send(bytes); err != nil {
-		Die("鎺ㄩ�乻ocket鍙戦�佹暟鎹け璐�: %s", err.Error())
-	}
-	if msg, err = sock.Recv(); err != nil {
-		Die("鎺ユ敹鍝嶅簲澶辫触: %s", err.Error())
-	}
-	logger.Debug("鏁版嵁鎺ㄩ�佹垚鍔燂紒鏀跺埌鍝嶅簲",string(msg))
 	sock.Close()
 }
-
 //func main() {
 //	url := "tcp://192.168.1.123:40011"
 //	Push(url,"hahahaha")
diff --git a/labelFilter/ruleForLabel.go b/labelFilter/ruleForLabel.go
index e2ad4ec..74a3f98 100644
--- a/labelFilter/ruleForLabel.go
+++ b/labelFilter/ruleForLabel.go
@@ -3,18 +3,33 @@
 import (
 	"basic.com/dbapi.git"
 	"basic.com/pubsub/protomsg.git"
+	"basic.com/valib/logger.git"
+	"github.com/golang/protobuf/proto"
 	"github.com/knetic/govaluate"
+<<<<<<< HEAD
 	"ruleprocess/logger"
+=======
+>>>>>>> master
 	"ruleprocess/structure"
 	"strconv"
 	"time"
 )
 
+<<<<<<< HEAD
 func Judge(msg structure.ResultMsg) {
+=======
+func PushSomthing(msg structure.ResultMsg) {
+	defer func() {
+		if err := recover(); err != nil {
+			logger.Error("浜嬩欢鎺ㄩ�佹ā鍧楀効鐨勫紓甯告崟鑾凤細",err)
+		}
+	}()
+	start := time.Now()
+>>>>>>> master
 	// 瑁呴厤鎴愯嚜宸卞彲浠ヨ瘑鍒殑鏁版嵁
 	label := new(Label)
 	label.DataFormatToLabel(msg)
-	logger.Info("label鐨勪俊鎭細", label.CameraName, label.DefenceLevel, label.Time)
+	//logger.Info("label鐨勪俊鎭細", label.CameraName, label.DefenceLevel, label.Time)
 	if label.CameraName == "" {
 		logger.Error("鏃犳晥鏁版嵁锛岀洿鎺ヨ繑鍥�")
 		return
@@ -22,7 +37,7 @@
 	//鎷垮埌鎵�鏈夎鍒欑粍
 	var api dbapi.EventPushApi
 	b, allRules := api.FindAllDetails()
-	logger.Info("鏌ョ湅鎵�鏈夎鍒欑粍锛�", allRules)
+	//logger.Info("鏌ョ湅鎵�鏈夎鍒欑粍锛�", allRules)
 	if !b {
 		logger.Error("鏌ヨ鏃堕棿鎺ㄩ�佽鍒欏け璐ワ紒")
 	}
@@ -33,7 +48,7 @@
 			timeFlag := timeJudge(label, ruleGroup)
 			if !timeFlag {
 				logger.Info("涓嶅湪瑙勫垯鐨勬椂闂磋寖鍥村唴锛屼笉鎺ㄩ�侊紒")
-				return
+				continue
 			}
 			result := ""
 			var Connector string
@@ -77,6 +92,7 @@
 					logger.Info("閫氳繃瑙勫垯锛岃〃杈惧紡涓猴細", result)
 					// 鎺ㄩ�佹湇鍔″櫒
 					pushData(ruleGroup.Urls, msg)
+					logger.Info("鏃堕棿鎺ㄩ�佹墍鐢ㄦ椂闂达細",time.Since(start))
 					//os.Exit(1)
 				} else {
 					logger.Info("娌¢�氳繃瑙勫垯,琛ㄨ揪寮忎负锛�", result)
@@ -92,7 +108,7 @@
 // 鏄惁绗﹀悎鏃堕棿瑙勫垯
 func timeJudge(label *Label, groupRule protomsg.EventPush) bool {
 	timeNow := time.Now().Format("2006-01-02 15:04:05")
-	logger.Info("鏍囩杩囨护鍣ㄨ捣濮嬫椂闂翠负锛�",groupRule.TimeStart,groupRule.TimeEnd)
+	//logger.Info("鏍囩杩囨护鍣ㄨ捣濮嬫椂闂翠负锛�",groupRule.TimeStart,groupRule.TimeEnd)
 	flag1 := isBefore(groupRule.TimeStart, timeNow)
 	flag2 := isBefore(timeNow, groupRule.TimeEnd)
 	if flag1 && flag2 {
@@ -129,7 +145,7 @@
 	if rule.TopicArg == "addr" {
 		formula = "'" + label.CameraAddr + "'" + rule.Operator + "'" + rule.RuleValue + "'"
 	}
-	logger.Info("-------鎵撳嵃鎽勫儚鏈鸿鍒欏叕寮忥細",formula)
+	//logger.Info("-------鎵撳嵃鎽勫儚鏈鸿鍒欏叕寮忥細",formula)
 	expression, err := govaluate.NewEvaluableExpression(formula);
 	if err != nil {
 		logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒", formula)
@@ -144,7 +160,7 @@
 		logger.Info("绗﹀悎鎽勫儚鏈鸿鍒�!")
 		return "true"
 	}
-	logger.Info("涓嶇鍚堟憚鍍忔満瑙勫垯!")
+	//logger.Info("涓嶇鍚堟憚鍍忔満瑙勫垯!")
 	return "false"
 }
 
@@ -166,7 +182,7 @@
 				for _, liker := range arg.Liker {
 					formula := "'" + liker.TableId + "'" + rule.Operator + "'" + rule.RuleValue + "'"
 					expression, err := govaluate.NewEvaluableExpression(formula);
-					logger.Info("-------鎵撳嵃搴曞簱瑙勫垯鍏紡锛�",formula)
+					//logger.Info("-------鎵撳嵃搴曞簱瑙勫垯鍏紡锛�",formula)
 					if err != nil {
 						logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒", formula)
 						return "false"
@@ -206,7 +222,7 @@
 				// 鍏朵粬杩欎釜鍊煎厛杩欎箞澶勭悊
 				return "true"
 			}
-			logger.Info("-------鎵撳嵃浜哄憳瑙勫垯鍏紡锛�",formula)
+			//logger.Info("-------鎵撳嵃浜哄憳瑙勫垯鍏紡锛�",formula)
 			expression, err := govaluate.NewEvaluableExpression(formula);
 			if err != nil {
 				logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒", formula)
@@ -230,7 +246,7 @@
 				}
 			} else {
 				formula := strconv.Itoa(int(personGroup.AlarmLevel)) + rule.Operator + formate(rule.RuleValue)
-				logger.Info("-------鎵撳嵃浜哄憳绛夌骇瑙勫垯鍏紡锛�",formula)
+				//logger.Info("-------鎵撳嵃浜哄憳绛夌骇瑙勫垯鍏紡锛�",formula)
 				expression, err := govaluate.NewEvaluableExpression(formula);
 				if err != nil {
 					logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒", formula)
@@ -267,7 +283,7 @@
 	} else {
 		for _, def := range label.DefenceLevel {
 			formula := strconv.Itoa(int(def)) + rule.Operator + rule.RuleValue
-			logger.Info("-------鎵撳嵃甯冮槻绛夌骇瑙勫垯鍏紡锛�",formula)
+			//logger.Info("-------鎵撳嵃甯冮槻绛夌骇瑙勫垯鍏紡锛�",formula)
 			expression, err := govaluate.NewEvaluableExpression(formula);
 			if err != nil {
 				logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒", formula)
@@ -292,7 +308,7 @@
 func taskJudge(label *Label, rule *protomsg.EventPushRule) string {
 	formula := "'"+label.TaskId +"'"+ rule.Operator +"'"+ rule.RuleValue+"'"
 	expression, err := govaluate.NewEvaluableExpression(formula);
-	logger.Info("-------鎵撳嵃浠诲姟瑙勫垯鍏紡锛�",formula)
+	//logger.Info("-------鎵撳嵃浠诲姟瑙勫垯鍏紡锛�",formula)
 	if err != nil {
 		logger.Error("琛ㄨ揪寮忔湁璇紝璇锋鏌ワ紒", formula)
 		return "false"
@@ -314,8 +330,18 @@
 func pushData(urls []*protomsg.PushUrl, data structure.ResultMsg) {
 	for _, url := range urls {
 		logger.Debug("鐪嬬湅鎺ㄩ�佸湴鍧�锛�",url.Url)
-		Push("tcp://192.168.1.123:40012", data)
+		bytes,err1 := proto.Marshal(data)
+		if err1 != nil {
+			logger.Info("搴忓垪鍖栧け璐ワ細",err1)
+		}
+		if _, ok := urlPool[url.Url] ; ok {
+			urlPool[url.Url] <- bytes
+			logger.Info("chan淇℃伅鑰岋細 ", urlPool[url.Url])
+		}
+		logger.Info("chan淇℃伅浠ワ細 ", urlPool[url.Url])
+
 	}
+
 }
 
 // 鎶婃姤璀︾瓑绾ц浆鍖栨垚姹夊瓧
diff --git a/logger/logger.go b/logger/logger.go
index 125d649..82d7a77 100644
--- a/logger/logger.go
+++ b/logger/logger.go
@@ -17,47 +17,47 @@
 	InfoLevel
 	DebugLevel
 )
-
+var loggerString string = ""
 const (
 	color_red = uint8(iota + 91)
-	color_green		//	缁�
-	color_yellow		//	榛�
-	color_blue			// 	钃�
-	color_magenta 		//	娲嬬孩
+	color_green        //    缁�
+	color_yellow        //    榛�
+	color_blue            //     钃�
+	color_magenta         //    娲嬬孩
 )
 
 const (
-	fatalPrefix		=	"[FATAL] "
-	errorPrefix		=	"[ERROR] "
-	warnPrefix		=	"[WARN] "
-	infoPrefix		=	"[INFO] "
-	debugPrefix		=	"[DEBUG] "
+	fatalPrefix        =    "[FATAL] "
+	errorPrefix        =    "[ERROR] "
+	warnPrefix        =    "[WARN] "
+	infoPrefix        =    "[INFO] "
+	debugPrefix        =    "[DEBUG] "
 )
 
 const (
-	ByDay	int = iota
+	ByDay    int = iota
 	ByWeek
 	ByMonth
 	BySize
 )
 
 type LogFile struct {
-	level    int		// 鏃ュ織绛夌骇
-	saveMode int		// 淇濆瓨妯″紡
-	saveDays int		// 鏃ュ織淇濆瓨澶╂暟
-	logTime  int64		//
-	fileName string		// 鏃ュ織鏂囦欢鍚�
-	filesize int64		// 鏂囦欢澶у皬, 闇�瑕佽缃� saveMode 涓� BySize 鐢熸晥
+	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.saveMode = ByDay    // 榛樿鎸夊ぉ淇濆瓨
+	logFile.saveDays = 7        // 榛樿淇濆瓨涓夊ぉ鐨�
 	logFile.level = DebugLevel
-	//logFile.filesize = 1024 * 1024 * 10	// 榛樿10M锛� 闇�瑕佽缃� saveMode 涓� BySize
+	//logFile.filesize = 1024 * 1024 * 10    // 榛樿10M锛� 闇�瑕佽缃� saveMode 涓� BySize
 }
 
 func Config(logFolder string, level int) {
@@ -92,6 +92,7 @@
 	if logFile.level >= DebugLevel {
 		log.SetPrefix(blue(debugPrefix))
 		_ = log.Output(2, fmt.Sprintln(args...))
+		//loggerString += fmt.Sprintln(args...)
 	}
 }
 
@@ -99,6 +100,7 @@
 	if logFile.level >= InfoLevel {
 		log.SetPrefix(green(infoPrefix))
 		_ = log.Output(2, fmt.Sprintln(args...))
+		//loggerString += fmt.Sprintln(args...)
 	}
 }
 
@@ -106,6 +108,7 @@
 	if logFile.level >= WarnLevel {
 		log.SetPrefix(magenta(warnPrefix))
 		_ = log.Output(2, fmt.Sprintln(args...))
+		//loggerString += fmt.Sprintln(args...)
 	}
 }
 
@@ -113,6 +116,7 @@
 	if logFile.level >= ErrorLevel {
 		log.SetPrefix(red(errorPrefix))
 		_ = log.Output(2, fmt.Sprintln(args...))
+		//loggerString += fmt.Sprintln(args...)
 	}
 }
 
@@ -120,7 +124,11 @@
 	if logFile.level >= FatalLevel {
 		log.SetPrefix(red(fatalPrefix))
 		_ = log.Output(2, fmt.Sprintln(args...))
+		//loggerString += fmt.Sprintln(args...)
 	}
+}
+func OutPutByPanlei() {
+	_ = log.Output(2, loggerString)
 }
 
 func GetRedPrefix(s string) string {
@@ -167,7 +175,7 @@
 				logFile.logTime = time.Now().Unix()
 			}
 		}
-	default:	// 榛樿鎸夊ぉ  ByDay
+	default:    // 榛樿鎸夊ぉ  ByDay
 		if logFile.logTime+3600 < time.Now().Unix() {
 			logFile.createLogFile()
 			logFile.logTime = time.Now().Unix()
diff --git a/main.go b/main.go
index a8adc1a..32fa0e0 100644
--- a/main.go
+++ b/main.go
@@ -7,20 +7,16 @@
 	"net/http"
 	_ "net/http/pprof"
 	"ruleprocess/insertdata"
+	"ruleprocess/labelFilter"
 	"ruleprocess/structure"
 	"ruleprocess/util"
 	"time"
 
-	//"bufio"
-	//"bytes"
+	"basic.com/valib/logger.git"
 	"flag"
 	"fmt"
 	"github.com/golang/protobuf/proto"
-	"ruleprocess/logger"
-	//"gocv.io/x/gocv"
-	//"image"
-	//"image/color"
-	//"os"
+	"github.com/spf13/viper"
 	"ruleprocess/cache"
 	"ruleprocess/ruleserver"
 	"sync"
@@ -31,12 +27,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鍒濆鍖栧畬姣�
@@ -51,6 +57,7 @@
 	go cache.Init(initchan, *dbIp, *surveyPort, *pubPort)
 	logger.Info("cache init completed!!!", <-initchan) //dbserver鍒濆鍖栧畬姣�
 	ruleserver.Init()
+	labelFilter.Init()
 	go ruleserver.TimeTicker()
 	go ruleserver.StartServer()
 	nReciever("ipc:///tmp/sdk-2-rules-process.ipc", deliver.PushPull, 1)
@@ -90,12 +97,15 @@
 					ruleserver.Judge(&arg, &m) // 鎶妔dkMessage浼犺繘鍘伙紝鏂逛究缂撳瓨鏁版嵁鏃舵嫾鍑轰竴涓猺esultMag
 					// 鎶奱rg閲岀殑鎵撶殑鏍囩鎷垮嚭鏉ョ粰m鍐嶅皝瑁呬竴灞�
 					resultMsg := structure.ResultMsg{SdkMessage: &m, RuleResult: arg.RuleResult}
-					logger.Debug("瑙勫垯鍒ゆ柇瀹屾墍鐢ㄦ椂闂达細", time.Since(start))
+					ruleserver.GetAttachInfo(resultMsg.SdkMessage)
+					ruleEnd := time.Since(start)
+					logger.Debug("瑙勫垯鍒ゆ柇瀹屾墍鐢ㄦ椂闂达細", ruleEnd)
 					// 灏嗘墦瀹屾爣绛剧殑鏁版嵁鎻掑叆鍒癊S
 					insertdata.InsertToEs(resultMsg)
-					logger.Debug("鎻掑叆瀹孍s鎵�鐢ㄦ椂闂达細", time.Since(start))
+					esEnd := time.Since(start)
+					logger.Debug("鎻掑叆瀹孍s鎵�鐢ㄦ椂闂达細", esEnd)
 					//浜嬩欢鎺ㄩ��
-					//go labelFilter.Judge(resultMsg)
+					labelFilter.PushSomthing(resultMsg)
 				//}(msg)
 			}
 		}
@@ -118,7 +128,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 +182,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/attachInfo.go b/ruleserver/attachInfo.go
new file mode 100644
index 0000000..cc2b5ab
--- /dev/null
+++ b/ruleserver/attachInfo.go
@@ -0,0 +1,42 @@
+package ruleserver
+
+import (
+	"basic.com/pubsub/protomsg.git"
+	"basic.com/valib/logger.git"
+	uuid "github.com/satori/go.uuid"
+	"ruleprocess/cache"
+)
+func GetAttachInfo(msg *protomsg.SdkMessage){
+	//浜鸿劯妫�娴嬶紝娌℃湁鐩镐技鐨勫簳搴撲汉鍛�
+	push := new(protomsg.PushAttach)
+	localConfig, err := cache.GetServerInfo()
+	if err != nil {
+		logger.Error("鏌ヨ鏈満淇℃伅澶辫触锛�")
+	}
+	logger.Info("localConfig淇℃伅锛�",localConfig)
+	push.ServerId = localConfig.ServerId
+	push.ServerName = localConfig.ServerName
+	serverIp, err := GetLocalIP()
+	push.LocalIp = serverIp
+	// 鏌ヨcameraName
+	camera, err := cache.GetCameraById(msg.Cid)
+	if err != nil {
+		logger.Error("鏌ヨ鎽勫儚鏈轰俊鎭け璐�")
+	}
+	push.Cam = &camera
+	push.PushId = uuid.NewV4().String()
+	// 瑙嗛鍦板潃鍗犱綅绗�
+	//localConfig1, err := cache.GetServerInfo()
+	//if err != nil {
+	//	panic("閰嶇疆鏂囦欢涓嶅悎娉�")
+	//}
+	//logger.Info("璇锋眰瑙嗛璺緞锛�",msg.Push,serverIp,camera)
+	// weedfsUrl := "http://" + localConfig1.WebPicIp + ":" + strconv.Itoa(int(localConfig1.WebPicPort)) + "/dir/assign"
+	//if path,err := WeedFSClient.GetFid(weedfsUrl);err != nil {
+	//	logger.Info("璇锋眰鏂囦欢鍦板潃澶辫触:",err)
+	//} else {
+	//	logger.Info("瑙嗛璺緞涓猴細",path)
+	//	push.VideoUrl = path
+	//}
+	msg.Push = push
+}
\ No newline at end of file
diff --git a/ruleserver/geoPolygon.go b/ruleserver/geoPolygon.go
index bfe8efe..ae81c44 100644
--- a/ruleserver/geoPolygon.go
+++ b/ruleserver/geoPolygon.go
@@ -53,7 +53,11 @@
 }
 
 //GetLocation 灏嗕竴涓粰瀹氳捣濮嬪潗鏍囷紝瀹藉害闀垮害鐨勭煩褰㈠尯鍩熷潎鍒嗕负n鏂逛唤骞惰繑鍥炰腑蹇冨潗鏍囷紙n涓哄崟杈瑰钩鍒嗘暟鍊硷級鍜岄潰绉�
+<<<<<<< HEAD
 func getLocation(rect structure.Rect, n int) ([]structure.Pointfloat, float64) {
+=======
+func getLocation(rect structure.Rect, n int) ([]Pointfloat, float64) {
+>>>>>>> master
 	xArr := make([]float64, n) // 鐢ㄥ垏鐗囦笉鐢ㄦ暟缁勶紝鏁扮粍涓嶈兘鐢ㄥ彉閲忓畾涔夐暱搴�
 	yArr := make([]float64, n)
 	pointArr := make([]structure.Pointfloat, 0, n*n)
@@ -86,7 +90,11 @@
 }
 
 //PgsInterPercent calculate percent of two polygon intersection  璁$畻涓や釜澶氳竟褰㈢殑閲嶅彔鍗犳瘮
+<<<<<<< HEAD
 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) {
+>>>>>>> master
 
 	areapts, areaBox := getLocation(box, 10)
 	var count = 0
diff --git a/ruleserver/geoPolygon_test.go b/ruleserver/geoPolygon_test.go
new file mode 100644
index 0000000..7f6c9ee
--- /dev/null
+++ b/ruleserver/geoPolygon_test.go
@@ -0,0 +1,38 @@
+package ruleserver
+
+import (
+	"basic.com/valib/logger.git"
+	"encoding/json"
+	"fmt"
+	"ruleprocess/structure"
+
+	"testing"
+)
+
+func TestPgsInterPercent(t *testing.T) {
+	areaPoints := json2points("[{\"x\":582,\"y\":11},{\"x\":582,\"y\":525},{\"x\":943,\"y\":525},{\"x\":943,\"y\":11}]")
+	widthScale := float64(2688) / 960
+	heigthScale := float64(1520) / 540
+	rec := structure.Rect{1333, 594,204,274}
+	per := PgsInterPercent(areaPoints,rec,widthScale,heigthScale)
+	fmt.Println(widthScale,heigthScale,per)
+}
+
+// 灏嗗瓧绗︿覆鏍煎紡鐨勫潗鏍囧簭鍒楀寲涓篜oint鏍煎紡
+func json2points(areaPoints string) []Point {
+	var pts []Point
+	if areaPoints == "[]" || areaPoints == "" {
+		logger.Error("=====================姝ゅ尯鍩熶负鍏ㄩ儴鍖哄煙")
+		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 {
+			logger.Error("json.Unmarshal閿欒", err)
+			panic("搴忓垪鍖栧潗鏍囧紓甯革紝绋嬪簭閫�鍑�")
+		}
+	}
+	return pts
+}
\ No newline at end of file
diff --git a/ruleserver/personTrack.go b/ruleserver/personTrack.go
index cac682a..a86faaf 100644
--- a/ruleserver/personTrack.go
+++ b/ruleserver/personTrack.go
@@ -2,12 +2,14 @@
 
 import (
 	"basic.com/pubsub/protomsg.git"
-	"github.com/golang/protobuf/proto"
 	"ruleprocess/logger"
+	"github.com/golang/protobuf/proto"
 	"ruleprocess/structure"
+	"sync"
 )
 
 var TrackPond = make(map[string]*PersonTrack)
+var lock = sync.RWMutex{}
 
 type PersonTrack struct {
 	Faces []*Face // 浜鸿劯鐨勬暟缁�  鏀逛负鏁伴噺
@@ -19,13 +21,10 @@
 }
 
 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))
@@ -34,14 +33,18 @@
 				FaceIsInPond(msg.Cid, sdkinfo)
 			} else {
 				if num > 0 { // 杩炵画num娆℃病鏈夋暟鎹墠绠楁槸娌℃湁鏁版嵁锛屼笉鐒跺彧绠椾綔涓㈠抚
-					logger.Info("鎴戣涓轰綘鍙槸涓㈠抚浜�,姝ゆ椂鐨刵um鍊间负锛�",num)
+					logger.Info("鎴戣涓轰綘鍙槸涓㈠抚浜�,姝ゆ椂鐨刵um鍊间负锛�", num)
 					num--
 				} else {
 					if TrackPond[msg.Cid] != nil {
 						logger.Info("濡傛灉涓嶄负绌猴細", TrackPond[msg.Cid])
+						lock.Lock()
 						TrackPond[msg.Cid].Faces = nil
+						lock.Unlock()
 					} else {
+						lock.Lock()
 						TrackPond[msg.Cid] = &PersonTrack{Faces: nil}
+						lock.Unlock()
 						logger.Info("濡傛灉涓虹┖锛�", TrackPond[msg.Cid])
 					}
 					logger.Info("鎽勫儚鏈�:" + msg.Cid + "-娌℃湁浜鸿劯锛岃閲嶇疆涓虹┖")
@@ -54,63 +57,67 @@
 }
 
 //  杩借釜浜轰綋锛屾鏌ユ暟閲忔槸鍚︿竴鑷�
-func BodyIsSame(msg *protomsg.SdkMessage) bool{
-	logger.Debug("+++++++++++++++++++++杩借釜寮�濮�+++++++++++++++鎽勫儚鏈篿d涓猴細", msg.Cid, "---缂撳瓨姹犱负锛�", TrackPond)
+func BodyIsSame(args *structure.SdkDatas,msg *protomsg.SdkMessage) bool{
+	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)
+					}
+					delete(args.RuleResult,"yolo")
+					logger.Info("娓呴櫎yolo鏍囩锛�",args.RuleResult["yolo"])
+					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}
+					}
+					logger.Debug("---------------------------------浜轰綋杩借釜缁撴潫--------------------------------------")
+					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{
+
+func TrackOrNot(label map[string]interface{}) bool {
 	if label["yolo"] != nil && len(label["yolo"].([]structure.Result)) > 0 {
-		for _,res := range label["yolo"].([]structure.Result) {
+		for _, res := range label["yolo"].([]structure.Result) {
 			if res.TimeLabel == "10" {
 				return true
 			}
@@ -120,11 +127,11 @@
 }
 
 // 杩囨护鎺夐偅浜涘凡鍦ㄧ紦瀛樹腑涓斿垎鍊兼洿浣庣殑浜鸿劯锛屾洿鏂扮紦瀛橈紙娌℃湁鐨勫姞涓婏紝鍒嗗�兼洿鏂颁负鏇撮珮鐨勶紝澶氱殑鍒犻櫎锛�
-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  {
-			logger.Info("缂撳瓨涓瓨鍌ㄧ殑face鏁版嵁锛�",face.Id,face.Score)
+		for _, face := range TrackPond[cameraId].Faces {
+			logger.Info("缂撳瓨涓瓨鍌ㄧ殑face鏁版嵁锛�", face.Id, face.Score)
 		}
 		faceParam := protomsg.ParamFacePos{}
 		err := proto.Unmarshal(sdkinfor.Sdkdata, &faceParam)
@@ -132,24 +139,29 @@
 			logger.Info("瑙f瀽face sdk鏁版嵁鏃跺嚭鐜伴敊璇�", err)
 		}
 		logger.Info("================杩借釜涔嬪墠浜鸿劯鐨勪釜鏁帮細", len(faceParam.Faces))
-		for _,face := range faceParam.Faces  {
-			logger.Info("鏂版潵鐨勭殑face鏁版嵁锛�",face.Pos.FaceID,face.Pos.FAngle.Confidence)
+		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 {
 				if faceParam.Faces[i].Pos.FaceID == val.Id && faceParam.Faces[i].Pos.FAngle.Confidence <= val.Score { // 鍦ㄦ睜瀛愰噷骞朵笖鍒嗗�兼洿浣庯紝鏄鎶涘純鐨勬暟鎹�
 					faceFlag = true
 					//return "true"
-					logger.Info("鍒嗗�间负锛�",faceParam.Faces[i].Pos.FAngle.Confidence,"--缂撳瓨鐨勫垎鍊间负锛�",val.Score,"姝ゆ暟鎹敱浜庡湪姹犲瓙涓笖鍒嗗�兼洿浣庯紝鏄琚姏寮冪殑鏁版嵁")
+					logger.Info("鍒嗗�间负锛�", faceParam.Faces[i].Pos.FAngle.Confidence, "--缂撳瓨鐨勫垎鍊间负锛�", val.Score, "姝ゆ暟鎹敱浜庡湪姹犲瓙涓笖鍒嗗�兼洿浣庯紝鏄琚姏寮冪殑鏁版嵁")
 					faceParam.Faces = append(faceParam.Faces[:i], faceParam.Faces[i+1:]...)
 					break
 				}
 				if faceParam.Faces[i].Pos.FaceID == val.Id && faceParam.Faces[i].Pos.FAngle.Confidence > val.Score { // 鍦ㄦ睜瀛愰噷骞朵笖鍒嗗�兼洿楂橈紝鏇存柊缂撳瓨
 					faceFlag = true
 					logger.Info("鍒嗗�肩敱", val.Score, "鏇存柊涓猴細", faceParam.Faces[i].Pos.FAngle.Confidence, "姝ゆ暟鎹敱浜庡湪姹犲瓙涓笖鍒嗗�兼洿楂橈紝鏄琚紶閫掍笅鍘荤殑鏁版嵁")
+					lock.Lock()
 					val.Score = faceParam.Faces[i].Pos.FAngle.Confidence
+					lock.Unlock()
 				}
 			}
 			if !faceFlag { // 姝や汉鑴镐笉鍦ㄦ睜瀛愪腑
@@ -158,18 +170,17 @@
 				i++
 			}
 		}
-		logger.Info("鍙嶅簭鍒楀寲閲嶆柊瑁呴厤涔嬪墠浜鸿劯鐨勪釜鏁帮細",len(faceParam.Faces))
+		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)
+			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 {
@@ -182,11 +193,14 @@
 			} else {
 				// 姝ゆ暟鎹湪缂撳瓨涓絾涓嶅湪鏉ョ殑鏁版嵁甯т腑锛屽垹闄ゆ鏁版嵁鏇存柊缂撳瓨
 				logger.Info("鍒犻櫎姹犲瓙涓殑鏁版嵁鏇存柊缂撳瓨")
+				lock.Lock()
 				TrackPond[cameraId].Faces = append(TrackPond[cameraId].Faces[:i], TrackPond[cameraId].Faces[i+1:]...)
+				lock.Unlock()
 			}
 		}
 	} else {
-		return "false"
+		lock.Lock()
+		TrackPond[cameraId] = &PersonTrack{Faces: nil}
+		lock.Unlock()
 	}
-	return "false"
 }
diff --git a/ruleserver/readyDataForRule.go b/ruleserver/readyDataForRule.go
index 5859d9b..8dab014 100644
--- a/ruleserver/readyDataForRule.go
+++ b/ruleserver/readyDataForRule.go
@@ -6,9 +6,7 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	"github.com/go-yaml/yaml"
 	"github.com/golang/protobuf/proto"
-	"io/ioutil"
 	"math"
 	"nanomsg.org/go-mangos"
 	"nanomsg.org/go-mangos/protocol/req"
@@ -33,23 +31,6 @@
 }
 
 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)
-	logger.Debug("閰嶇疆鏂囦欢鐨勫�间负锛�", c)
-	serverIp = c.ServerIp
-	serverPort = c.ServerPort
-	dbTablePersons = c.DbTablePersons
-	localConfig, err1 := cache.GetServerInfo()
-	if err1 != nil {
-		logger.Error("鏌ヨ鏈満淇℃伅澶辫触锛�")
-	}
-	logger.Debug("鏈満淇℃伅鍜宻erver淇℃伅锛�", localConfig, serverIp, serverPort)
 	go Push1()
 }
 
@@ -80,7 +61,6 @@
 			taskGroup = task
 		}
 	}
-	logger.Debug("褰撳墠鏁版嵁甯ц鍖归厤鐨勮鍒欑粍锛�-------------------------","鎽勫儚鏈篿d:",cameraId,"浠诲姟id",taskId)
 	if taskGroup == nil  {
 		return nil
 	} else {
@@ -106,10 +86,10 @@
 }
 func Decimal(value float32) float64 {
 	value1, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", float64(value)), 64)
-	logger.Info("鍒濇淇濈暀涓や綅鎴恠tr:",value1)
+	//logger.Info("鍒濇淇濈暀涓や綅鎴恠tr:",value1)
 	n10 := math.Pow10(4)
 	value2 := math.Trunc((value1+0.5/n10)*n10) / n10
-	logger.Info("鍒濇淇濈暀涓や綅鎴恠tr::::",value2)
+	//logger.Info("鍒濇淇濈暀涓や綅鎴恠tr::::",value2)
 	return value2
 }
 // 鍙栧嚭鏌愪釜鏃堕棿瑙勫垯鐨勭鍑犲ぉ鐨勮鍒欐闆嗗悎
@@ -162,7 +142,7 @@
 }
 
 // 缁欑洰鏍囧~鍏卨iker
-func FillLiker(arg *structure.Arg,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,
@@ -229,7 +209,7 @@
 			if groupRule.Rules[j].SdkArgAlias == "compareBase" && groupRule.Rules[j].SdkArgValue == "" { // 閰嶇殑鍙傛暟鏄瘮瀵瑰叏閮ㄥ簳搴�
 				compareFlag = 1
 			}
-			if groupRule.Rules[j].SdkArgAlias == "threshold" {
+			if groupRule.Rules[j].SdkArgAlias == "cmpThreshold" {
 				v2, err := strconv.ParseFloat(groupRule.Rules[j].SdkArgValue, 32)
 				if err != nil {
 					logger.Error("string杞琭loat32澶辫触锛�")
@@ -256,19 +236,19 @@
 							//logger.Info("--------------鐪嬬湅compareFlag鐨勫�煎拰tableId鍜宎reaMap.args鐨勯暱搴︼細",compareFlag,tableIds,len(areaMap.args))
 							for _, arg := range areaMap.Args {
 								arg.Liker = arg.Liker[0:0]
-								logger.Info("娓呯┖涔嬪悗鐪嬬湅涔嬪墠鎵撶殑浜鸿劯鏍囩鍙樹簡娌★細")
-								if args.RuleResult["face"] != nil && len(args.RuleResult["face"].([]structure.FaceResult)) > 0 {
-									for _, faceResult := range args.RuleResult["face"].([]structure.FaceResult) {
-										for _,arg := range faceResult.Args {
-											logger.Info("浜哄憳鍒嗗�兼槸锛�",arg.Score,"liker鐨勬暟閲忎负",arg.Liker)
-										}
-									}
-								}
+								//logger.Info("娓呯┖涔嬪悗鐪嬬湅涔嬪墠鎵撶殑浜鸿劯鏍囩鍙樹簡娌★細")
+								//if args.RuleResult["face"] != nil && len(args.RuleResult["face"].([]FaceResult)) > 0 {
+								//	for _, faceResult := range args.RuleResult["face"].([]FaceResult) {
+								//		for _,arg := range faceResult.Args {
+								//			logger.Info("浜哄憳鍒嗗�兼槸锛�",arg.Score,"liker鐨勬暟閲忎负",arg.Liker)
+								//		}
+								//	}
+								//}
 								if compareFlag == 1 {
-									FillLiker(arg,nil, threshold)
+									fillLiker(nil, threshold, arg)
 								}
 								if compareFlag == 2 {
-									FillLiker(arg,tableIds, threshold)
+									fillLiker(tableIds, threshold, arg)
 								}
 								//logger.Info("-------------------鎴愬姛缁檒iker璧嬪��,闀垮害涓猴細", len(arg.Liker))
 							}
@@ -288,16 +268,17 @@
 func CountAreaObjs(a *structure.AreaMap,arg *structure.SdkData) {
 
 	a.TargetNum = 0
-	threshold := 0.5       // 鐩镐技搴�
+	threshold := 80.0       // 鐩镐技搴�
 	intersectionper := 0.2 // 鍗犳瘮
 	size := 0.0            // 灏哄
 
 	areaPoints := Json2points(a.AreaJson)
-	widthScale := float64(arg.ImageWidth / 960)
-	heigthScale := float64(arg.ImageHeight / 540)
+	logger.Info("鐪嬬湅鍥剧墖鐨剋idth鍜宧eight:",arg.ImageWidth,arg.ImageHeight)
+	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) {
+		if  obj.Score >= threshold && float64(obj.Rects.Width*obj.Rects.Height) >= size && PgsInterPercent(areaPoints, obj.Rects, widthScale, heigthScale) >= intersectionper {
 			// 杩欐瑕佸榻愯〃杈惧紡閲屾墍闇�瑕佺殑鎵�鏈夊弬鏁�
 			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{}}
@@ -393,6 +374,7 @@
 		// case <-ctx.Done():
 		// 	return
 		case data := <- sender:
+			logger.Info("姣斿杩涚▼鍏ュ弬锛�",data.TableIds,data.CompareThreshold)
 			bytes,err1 := proto.Marshal(data)
 			logger.Info("鏁版嵁闀垮害涓猴細",len(bytes))
 			if err1 != nil {
diff --git a/ruleserver/ruleToformula.go b/ruleserver/ruleToformula.go
index 0b6b606..33e057d 100644
--- a/ruleserver/ruleToformula.go
+++ b/ruleserver/ruleToformula.go
@@ -3,19 +3,29 @@
 import (
 	"plugin"
 	"ruleprocess/cache"
+	"ruleprocess/structure"
 	"ruleprocess/logger"
 	"ruleprocess/structure"
 	"sort"
 	"strconv"
 	"strings"
+	"sync"
 	"time"
 
 	"basic.com/pubsub/protomsg.git"
 	"github.com/knetic/govaluate"
 )
 
+
+var rw sync.RWMutex // 璇诲啓閿�
+
 // 瀵瑰崟甯у浘鍍忕殑鍒ゆ柇 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)
@@ -60,6 +70,12 @@
 					}
 				}
 			}
+			// 浜轰綋杩借釜
+			// 濡傛灉鏍囩涓惈鏈夋寔缁椂闂撮娆℃姤璀︾殑timeLabel鐨勮瘽鍒欎笉闇�瑕佽繃浜轰綋杩借釜锛屼笉鐒跺氨娌$殑鎻掑叆浜�
+			fk := TrackOrNot(args.RuleResult)
+			if !fk {
+				BodyIsSame(args,message)
+			}
 		}
 	}
 }
@@ -100,6 +116,7 @@
 	a,b,c := f.(func(args *structure.SdkDatas,rule protomsg.GroupRule)([]*structure.LittleRuleResult, string, string))(args,rule)
 	return a,b,c
 }
+
 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 {
@@ -143,6 +160,7 @@
 
 		if result.(bool) {
 			// 鏈�鍚庤繃鎸佺画鏃堕棿绛夋椂闂寸淮搴︾殑鏉′欢   鎶婃椂闂磋鍒欎綅缃皟鏁村埌杩欎釜浣嶇疆鏄负浜嗙紦瀛樻暟鎹�
+			cacheId := ""
 			for j := 0; j < len(groupRule.Rules); j++ {
 				for _, sdkData := range args.Sdkdata {
 					sdk, err := cache.GetSdkById(groupRule.Rules[j].SdkId)
@@ -153,14 +171,17 @@
 					if ipcId == sdkData.IpcId {
 						for _, areaMap := range sdkData.AreaMapList {
 							// 鍘诲紑鍚竴涓畾鏃跺櫒
-							duration(groupRule.Rules[j], groupRule.GroupId, areaMap, args, message)
+							cacheid := duration(groupRule.Rules[j], groupRule.GroupId, areaMap, args, message)
+							if cacheid != "" {
+								cacheId = cacheid
+							}
 						}
 					}
 				}
 			}
 			// 杩涜瀹氭椂鍣ㄧ殑澶勭悊鍜屽垽鏂�
 			timeFlag := TimerAlarm(&label, groupRule.GroupId, result.(bool))
-			if timeFlag == "01" || timeFlag == "10" || timeFlag == "11" { // 娌℃湁瀹氭椂鍣ㄦ垨鑰呮弧瓒冲畾鏃跺櫒鏉′欢
+			if timeFlag == "01" || timeFlag == "10" || timeFlag == "11" || cacheId != ""{ // 娌℃湁瀹氭椂鍣ㄦ垨鑰呮弧瓒冲畾鏃跺櫒鏉′欢
 				// 鎵撲汉鑴告爣绛惧拰yolo鏍囩
 				// 鏈�鍚庢垚鍔熸姤璀︽墠鎶婄鍚堟潯浠剁殑浜鸿劯鏁版嵁濉炶繘缁撴灉鏍囩閲�
 				// 閰嶄簡浜鸿劯鐨勭畻娉曟墠鎶婁汉鑴哥殑鏁版嵁鐢╁嚭鏉ユ墦鏍囩
@@ -180,17 +201,19 @@
 						}
 					}
 				}
-				logger.Info("face鏍囩鐨勯暱搴︼細",len(faces))
+				//logger.Info("face鏍囩鐨勯暱搴︼細",len(faces))
 				//for _,face := range faces  {
 				//	//logger.Debug("鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�斺�擾_______________鐪嬬湅浜鸿劯鐨勫潗鏍�:",face.Location)
 				//}
 				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 {
-							locations = append(locations, putYolosToResult(areaMap)...)
+							if areaMap.IsEffective {
+								locations = append(locations, putYolosToResult(areaMap)...)
+							}
 						}
 					}
 				}
@@ -208,10 +231,32 @@
 					//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)
 				}
+				// 缁欐寔缁椂闂寸殑绗竴寮犺祴浜堢紦瀛樻暟鎹紙閬嶅巻澶嶅埗锛�
+				if cacheId != "" { // 鏈夎繖甯ф暟鎹殑缂撳瓨
+					tempMap := make(map[string]interface{})
+					for k, result := range args.RuleResult {
+						if k == "yolo" {
+							tempMap[k] = []structure.Result{}
+							for _, res := range result.([]structure.Result) {
+								tempMap[k] = append(tempMap[k].([]structure.Result), res)
+							}
+						}
+						if k == "face" {
+							tempMap[k] = []structure.FaceResult{}
+							for _, res := range result.([]structure.FaceResult) {
+								tempMap[k] = append(tempMap[k].([]structure.FaceResult), res)
+							}
+						}
+					}
+					rw.Lock()
+					TimeEleList[cacheId].CacheSdkData.RuleResult = tempMap
+					rw.Unlock()
+				}
+
 				return true,labelTypes
 			} else {
 				return false,[]int{}
@@ -247,11 +292,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)
@@ -264,21 +313,27 @@
 	logger.Info("------------------------------------------褰撳墠鏄仈鍔ㄤ换鍔★紝瑙勫垯鏄細", groupRule.GroupText)
 	var flag bool = true
 	var timeEle = TimeElement{N: 2, InitN: 2, GroupId: groupRule.GroupId}
+	rw.Lock()
 	for k, timeEle1 := range TimeEleList {
 		if k == groupRule.GroupId {
 			flag = false // 宸茬粡鏈変簡杩欎釜瀹氭椂鍣ㄥ氨缃负false 涓嶅啀鏂板
 			timeEle = *timeEle1
 		}
 	}
+	//for _,ruleRe := range timeEle.RuleResults {
+	//	logger.Info("鑱斿姩鏁扮粍閲岀殑鏁版嵁----",ruleRe.CameraId,ruleRe.Sort)
+	//}
 	if flag { // 濡傛灉杩樻病鏈夎繖涓畾鏃跺櫒鍏冪礌灏辨柊澧炰竴涓�
 		//timeEle := TimeElement{N: 2, InitN: 2, GroupId: groupRule.GroupId} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌
 		//TimeEleList = make(map[string]timeElement)
 		TimeEleList[groupRule.GroupId] = &timeEle // 瀹氭椂鍣ㄥ厓绱犱互瑙勫垯缁刬d涓洪敭
-		logger.Info("---------------------------------------------鑱斿姩浠诲姟鍒涘缓浜嗚鏁板櫒骞朵笖璁℃暟鍣ㄩ泦鍚堜负锛�", TimeEleList)
+		//logger.Info("---------------------------------------------鑱斿姩浠诲姟鍒涘缓浜嗚鏁板櫒骞朵笖璁℃暟鍣ㄩ泦鍚堜负锛�", TimeEleList)
 		// 寰楀嚭杩欑粍瀹屾暣瑙勫垯閲屾秹鍙婂埌鍑犱釜鎽勫儚鏈猴紝鍐冲畾鐫�鏁扮粍閲屾湁鍑犱釜缁撴瀯浣�,鍘婚噸娣诲姞鏂瑰紡
 		for j := 0; j < len(groupRule.Rules); j++ {
 			var flag1 bool = true
+			//logger.Info("瑙勫垯缁勪俊鎭細",groupRule.Rules[j].CameraId)
 			for _, ruleRes := range TimeEleList[groupRule.GroupId].RuleResults {
+				//logger.Info("鑱斿姩鏁扮粍閲岀殑鏁版嵁锛�",ruleRes.CameraId,ruleRes.Sort)
 				if groupRule.Rules[j].CameraId == ruleRes.CameraId {
 					flag1 = false
 				}
@@ -288,6 +343,7 @@
 			}
 		}
 	}
+	rw.Unlock()
 	// 寰�鏁扮粍閲岃祴鍊�
 	isOk,labelTypes := RunRule(args, groupRule, taskId, message, label)
 	if isOk {
@@ -339,13 +395,14 @@
 				result, _ := expression.Evaluate(nil) // 寰楀埌鏁板鍏紡鐨勭粨鏋�
 				if result.(bool) {
 					logger.Info("___________________________________________________________________鑱斿姩浠诲姟鎶ヨ")
-					if TimeEleList[groupRule.GroupId] != nil { // 鏋佸伓灏旀湁鎯呭喌浼氱瓑浜巒il锛屼笉鐭ラ亾涓哄暐锛屽仛涓垽鏂互闃插畷鏈�
+					rw.RLock()
+					if TimeEleList[groupRule.GroupId] != nil {  // 鏋佸伓灏旀湁鎯呭喌浼氱瓑浜巒il锛屼笉鐭ラ亾涓哄暐锛屽仛涓垽鏂互闃插畷鏈�
 						// 鎶婃暟缁勯噷缂撳瓨鐨勬暟鎹彇鍑烘潵涓�璧锋姤璀�
 						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"].([]structure.Result)); i++ {
 							if args.RuleResult["yolo"].([]structure.Result)[i].RuleGroupId == groupRule.GroupId { // 鎶婅仈鍔ㄦ暟鎹拷鍔犱笂
 								args.RuleResult["yolo"].([]structure.Result)[i].Others.LinkCache = label.LinkCache
@@ -357,6 +414,7 @@
 							}
 						}
 					}
+					rw.RUnlock()
 				}
 			}
 		} else {
@@ -385,40 +443,45 @@
 		//		va.Result = strconv.FormatBool(isOk)
 		//	}
 		//}
+		rw.Lock()
 		for k, _ := range TimeEleList {
 			if k == groupRule.GroupId {
 				delete(TimeEleList, k)
 				logger.Debug("鍥犱负瀹氭椂鍣ㄧ殑涓�甯ф暟鎹粨鏋滀负false锛屽共鎺夊畾鏃跺櫒")
 			}
 		}
+		rw.Unlock()
 		// 鍥犱负鏈抚鏁版嵁涓嶇鍚堣鍒欙紝鎵�浠ヤ篃涓嶇敤缁熻缁撴灉鏁扮粍閲岀殑涓滆タ
-
 	}
 }
 
 // 濡傛灉鏈夋寔缁椂闂存潯浠剁淮鎶ゅ紑鍚竴涓畾鏃跺櫒
-func duration(rule *protomsg.Rule, groupId string, am *structure.AreaMap, args *structure.SdkDatas, message *protomsg.SdkMessage) {
+func duration(rule *protomsg.Rule, groupId string, am *structure.AreaMap, args *structure.SdkDatas, message *protomsg.SdkMessage) string{
 	if rule.PolygonId == am.AreaId { // 棣栧厛瑙勫垯鎵�瀵瑰簲鐨勫尯鍩焛d瑕佽窡鍖哄煙鏁版嵁鐨刬d瀵圭殑涓�  閰嶇疆鐨勭畻娉曡瀵圭殑涓�
 		if rule.SdkArgAlias == "duration" { //
-			logger.Info("褰撳墠灏忚鍒欐槸锛�---------", rule)
+			//logger.Info("褰撳墠灏忚鍒欐槸锛�---------", rule)
 			// 鍏堢湅鐪嬪畾鏃跺櫒鍏冪礌闃熷垪涓槸鍚︽湁杩欐潯瑙勫垯鐨勫畾鏃跺櫒,濡傛灉鏈夊氨涓嶈兘鍐嶆鍒涘缓浜�
+			rw.Lock()
 			var flag bool = true
 			for k, _ := range TimeEleList {
 				if k == groupId+"+"+rule.Id {
 					flag = false // 鏈夊氨缃负false
-					logger.Info("鏈夎繖涓畾鏃跺櫒锛屼笉鍐嶅垱寤轰簡锛�")
+					//logger.Info("鏈夎繖涓畾鏃跺櫒锛屼笉鍐嶅垱寤轰簡锛�")
 				}
 			}
 
 			if flag {
 				timeLength, _ := strconv.Atoi(rule.SdkArgValue)
-				timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false, BufferFlag: 10, CacheSdkData: structure.ResultMsg{message, args.RuleResult}} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌锛堝苟缂撳瓨褰撳墠鐢婚潰甯ф暟鎹級
+				timeEle := TimeElement{N: timeLength, InitN: timeLength, AlarmFlag: false, BufferFlag: 10, CacheSdkData: structure.ResultMsg{message, nil}} // 鎵旇繘鍘讳竴涓畾鏃跺櫒鍏冪礌锛堝苟缂撳瓨褰撳墠鐢婚潰甯ф暟鎹級
 				//TimeEleList = make(map[string]timeElement)
 				TimeEleList[groupId+"+"+rule.Id] = &timeEle // 瀹氭椂鍣ㄥ厓绱犱互褰撳墠鎸佺画鏃堕棿灏忚鍒檌d涓洪敭
 				logger.Info("鍒涘缓浜嗚鏁板櫒")
+				cacheId = groupId+"+"+rule.Id
 			}
+			rw.Unlock()
 		}
 	}
+	return cacheId
 }
 
 func timeRuleResult(rule *protomsg.Rule, am *structure.AreaMap) structure.LittleRuleResult {
diff --git a/ruleserver/timeTicker.go b/ruleserver/timeTicker.go
index ac959e6..f42f3a2 100644
--- a/ruleserver/timeTicker.go
+++ b/ruleserver/timeTicker.go
@@ -34,33 +34,35 @@
 
 func TimeTicker() {
 	ticker := time.NewTicker(1 * time.Second)
-	go func(ticker *time.Ticker) {
-		defer ticker.Stop()
-		for {
-			select {
-			case <-ticker.C:
-				logger.Info("瀹氭椂鍣ㄦ墽琛屽崟鍏�", time.Now().Unix())
-				fmt.Println("瀹氭椂鍣ㄦ墽琛屽崟鍏�", time.Now().Unix())
-				// 姣忕閽熻鏁板櫒姹犲瓙閲屾墍鏈夌殑璁℃暟鍣ㄥ厓绱犻兘鍑忎竴锛屽噺鍒�0鐨勬槸璇ユ姤璀︾殑
-				for k, timeEle := range TimeEleList {
-					if timeEle.N > 0 {
-						timeEle.N = timeEle.N - 1
-						logger.Error("-------------------------------------鎵撳嵃瀹氭椂鍣ㄨ鏁板厓绱犲綋鍓嶅��-----------------------------------------锛�", timeEle.N)
-					}
-					if timeEle.GroupId != "" && timeEle.N == 0 {
-						// 璇存槑鏄仈鍔ㄤ换鍔$殑鏃堕棿绐楀彛 鍒扮偣鍎夸簡璇ラ攢姣佷簡,鍐嶆潵浜嗗啀鍒涘缓
-						delete(TimeEleList, k)
-					}
+	//go func(ticker *time.Ticker) {
+	defer ticker.Stop()
+	for {
+		select {
+		case <-ticker.C:
+			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
+					logger.Error("-------------------------------------鎵撳嵃瀹氭椂鍣ㄨ鏁板厓绱犲綋鍓嶅��-----------------------------------------锛�", timeEle.N)
 				}
-			case stop := <-stopChan:
-				if stop {
-					logger.Info("瀹氭椂鍣ㄧ粨鏉�")
-					return
-					//os.Exit(0)
+				if timeEle.GroupId != "" && timeEle.N == 0 {
+					// 璇存槑鏄仈鍔ㄤ换鍔$殑鏃堕棿绐楀彛 鍒扮偣鍎夸簡璇ラ攢姣佷簡,鍐嶆潵浜嗗啀鍒涘缓
+					delete(TimeEleList, k)
 				}
 			}
+			rw.Unlock()
+		case stop := <-stopChan:
+			if stop {
+				logger.Info("瀹氭椂鍣ㄧ粨鏉�")
+				return
+				//os.Exit(0)
+			}
 		}
-	}(ticker)
+	}
+	//}(ticker)
 }
 func StopTimeTicker() {
 	stopChan <- true
@@ -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..6aae41f 100644
--- a/structure/gragh.go
+++ b/structure/gragh.go
@@ -18,4 +18,5 @@
 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..27e8196 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,8 @@
 	}
 }
 
-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)
@@ -164,15 +165,15 @@
 
 	yellow := color.RGBA{255, 255, 0, 0}
 	red := color.RGBA{255, 0, 0, 0}
-
+	scale := float64(img.Width) / 960 // 鐢诲浘姣斾緥
+	logger.Info("width:",img.Width,"--鐢诲浘姣斾緥锛�",scale)
 	// 鍒嗗壊鍖哄煙id闆嗗悎骞舵牴鎹甶d鏌ヨ鍖哄煙鐒跺悗鐢绘
 	for _,result := range results  {
 		polygonIds := strings.Split(result.AlarmPolygon,",")
-		logger.Info("-----------------------鐪嬬湅鎶ヨ鍖哄煙id锛�",polygonIds)
-		for i := 0; i < len(polygonIds)-1; i++ {
+		for i := 0; i < len(polygonIds); i++ {
 			polygon := getPolygonById(polygonIds[i],cameraId)
-			if polygon.Polygon != "[]" {
-				DrawAPolygon(&rook,polygon.Polygon,yellow)
+			if polygon.Polygon != "[]" && polygon.Polygon != ""{
+				DrawAPolygon(&rook,polygon.Polygon,yellow,scale)
 			}
 		}
 	}
@@ -180,6 +181,29 @@
 	for _,result := range results  {
 		for _,rect := range result.Location {
 			gocv.Rectangle(&rook, image.Rect(int(rect.X), int(rect.Y), int(rect.X+rect.Width), int(rect.Y+rect.Height)), red, 1)
+		}
+	}
+	//return nil,nil
+	maps,err0 = UploadFromMat(url,rook)
+	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}
+	scale := float64(img.Width) / 960 // 鐢诲浘姣斾緥
+	// 鍒嗗壊鍖哄煙id闆嗗悎骞舵牴鎹甶d鏌ヨ鍖哄煙鐒跺悗鐢绘
+	for _,result := range results  {
+		polygonIds := strings.Split(result.AlarmPolygon,",")
+		for i := 0; i < len(polygonIds); i++ {
+			polygon := getPolygonById(polygonIds[i],cameraId)
+			if polygon.Polygon != "[]" && polygon.Polygon != ""{
+				DrawAPolygon(&rook,polygon.Polygon,yellow,scale)
+			}
 		}
 	}
 	//return nil,nil
@@ -215,20 +239,20 @@
 	var cameraPolygons []protomsg.CameraPolygon
 	cameraPolygons = cache.GetPolygonsByCameraId(cameraId)
 	for _, polygon := range cameraPolygons {
-		if polygon.Id == polygonId {
+		if strings.Contains(polygonId,polygon.Id) {
 			return polygon
 		}
 	}
 	return protomsg.CameraPolygon{}
 }
 // 鍦ㄥ浘涓婄敾涓�涓
-func DrawAPolygon(rook *gocv.Mat,polygonString string, color color.RGBA) {
+func DrawAPolygon(rook *gocv.Mat,polygonString string, color color.RGBA,scale float64) {
 	points := ruleserver.Json2points(polygonString)
 	for index := 0; index < len(points); index++ {
 		if index == len(points)-1 { // 闂悎鍥惧舰
-			gocv.Line(rook, image.Pt(int(points[index].X*1.33), int(points[index].Y*1.33)), image.Pt(int(points[0].X*1.33), int(points[0].Y*1.33)), color, 2)
+			gocv.Line(rook, image.Pt(int(points[index].X * scale), int(points[index].Y * scale)), image.Pt(int(points[0].X * scale), int(points[0].Y * scale)), color, 2)
 		} else {
-			gocv.Line(rook, image.Pt(int(points[index].X*1.33), int(points[index].Y*1.33)), image.Pt(int(points[index+1].X*1.33), int(points[index+1].Y*1.33)), color, 2)
+			gocv.Line(rook, image.Pt(int(points[index].X * scale), int(points[index].Y * scale)), image.Pt(int(points[index+1].X * scale), int(points[index+1].Y * scale)), color, 2)
 		}
 	}
 }
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