From e9d0ba14154d623898803a294a25db634a9ceec7 Mon Sep 17 00:00:00 2001
From: panlei <2799247126@qq.com>
Date: 星期五, 23 八月 2019 11:14:30 +0800
Subject: [PATCH] add download so

---
 controllers/cluster.go        |  240 +++++++++++++++
 extend/code/code.go           |    1 
 middlewares/auth/auth.go      |   32 -
 service/CamraUpdatesnashot.go |   16 
 config/dev.yaml               |    8 
 service/FaceCompareService.go |   53 ++
 controllers/dbtableperson.go  |  179 ++++------
 controllers/task.go           |   13 
 controllers/sdk.go            |    2 
 router/router.go              |   15 
 controllers/dbtablesCon.go    |  169 +++------
 controllers/fileController.go |   55 ++-
 config/test.yaml              |   63 ++-
 controllers/taglist.go        |   88 +---
 extend/config/config.go       |   13 
 15 files changed, 578 insertions(+), 369 deletions(-)

diff --git a/config/dev.yaml b/config/dev.yaml
index 00b6c79..0a5ece6 100644
--- a/config/dev.yaml
+++ b/config/dev.yaml
@@ -4,11 +4,13 @@
     jwtExpire: 24  
     url: http://127.0.0.1:8080
     imageUrl: http://192.168.1.203:6080
-    publicDomain: bsic.asuscomm.com
+    publicDomain: http://bsic.asuscomm.com
     networkAdapter: enp8s0
-compare:
+dbpersoncompare:
+    url: 127.0.0.1:40010
+espersoncompare:
     url:
-     - 127.0.0.1:40010
+     - 127.0.0.1:40011
 weedfs:
     ip: 192.168.1.203
     uploadport: 6333
diff --git a/config/test.yaml b/config/test.yaml
index a2d7be2..cd8dca9 100644
--- a/config/test.yaml
+++ b/config/test.yaml
@@ -1,24 +1,49 @@
-runmode: test
-timezone: Asia/Chongqing
-dbLogMode: true
-addr: :8080
-name: albedo
-url: http://127.0.0.1:8080
+server:
+    runmode: debug
+    jwtSecret: BASIC
+    jwtExpire: 24
+    url: http://127.0.0.1:8080
+    imageUrl: http://192.168.1.203:6080
+    publicDomain: http://192.168.1.203
+    networkAdapter: enp8s0
+dbpersoncompare:
+    url: 127.0.0.1:40010
+espersoncompare:
+    url:
+    - 127.0.0.1:40011
+weedfs:
+    ip: 192.168.1.203
+    uploadport: 6333
+    visitport: 6080
 redis:
     host: 127.0.0.1
     port: 6379
     password: password
     db: 1
-db:
-# 鍙�夊�硷細mysql銆乻qlite
-    driver: mysql
-    name: db_apiserver
-    addr: 127.0.0.1:3306
-    username: root
-    password: root
-docker_db:
-    driver: mysql
-    name: db_apiserver
-    addr: 127.0.0.1:3306
-    username: root
-    password: root
+database:
+    driver: sqlite
+    name: sqlite3
+    filepath: config/testdb
+# es 鏁版嵁 绱㈠紩 浠ュ強 ip 绔彛 閰嶇疆
+es:
+    masterip: 192.168.1.182
+    httpport: 9200
+    index:
+        # 浜鸿劯鎶撴媿璁板綍
+        videopersons:
+            index: videopersons
+            type: perVideoPicture
+        # 搴曞簱 鍒楄〃
+        dbtables:
+            index: dbtables
+            type: dbpersontables
+        # 搴曞簱浜哄憳搴�
+        dbtablepersons:
+            index: dbtablepersons
+            type: dbpersons
+        # 琛屼负鎶撴媿璁板綍*
+        personaction:
+            index: personaction
+            type: perVideoAction
+
+
diff --git a/controllers/cluster.go b/controllers/cluster.go
new file mode 100644
index 0000000..7ac903d
--- /dev/null
+++ b/controllers/cluster.go
@@ -0,0 +1,240 @@
+package controllers
+
+import (
+	"basic.com/dbapi.git"
+	"fmt"
+	"github.com/gin-gonic/gin"
+	"math/rand"
+	"time"
+	"webserver/extend/code"
+	"webserver/extend/util"
+)
+
+type ClusterController struct {
+
+}
+
+type Cluster struct {
+	ClusterId string `json:"cluster_id"`
+	ClusterName string `json:"cluster_name"`
+	Password string `json:"password"`
+	VirtualIp string `json:"virtual_ip"`
+}
+
+type Node struct {
+	Id string `json:"id"`
+	ClusterId string `json:"cluster_id"`
+	NodeName string `json:"node_name"`
+	NodeId string `json:"node_id"`
+	NodeIp string `json:"node_ip"`
+	CreateTime string `json:"create_time"`
+	IsAlive int
+}
+
+type ClusterVo struct {
+	ClusterInfo Cluster `json:"clusterInfo"`
+	Nodes []Node `json:"nodes"`
+}
+
+type ClusterCreateVo struct {
+	Password string `json:"password"`
+	ClusterName string `json:"clusterName"`
+	ClusterId string `json:"clusterId"`
+}
+
+type ClusterSearchVo struct {
+	Password string `json:"password"`
+	SearchNum string `json:"searchNum"`
+}
+
+type ClusterJoinVo struct {
+	ClusterId string `json:"clusterId"`
+	Password string `json:"password"`
+	NodeIps []string `json:"nodeIps"`
+}
+
+// @Summary 鍒涘缓闆嗙兢
+// @Description 鍒涘缓闆嗙兢
+// @Accept json
+// @Produce json
+// @Tags cluster
+// @Param  clusterArg body controllers.ClusterCreateVo true "闆嗙兢鍒涘缓鍙傛暟"
+// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
+// @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
+// @Router /data/api-v/cluster/create [post]
+func (cc ClusterController) Create(c *gin.Context) {
+	var clusterVo ClusterCreateVo
+	err := c.BindJSON(&clusterVo)
+	if err !=nil || clusterVo.Password == "" || clusterVo.ClusterName == "" {
+		util.ResponseFormat(c,code.RequestParamError, "鍙傛暟鏈夎")
+		return
+	}
+	var api dbapi.ClusterApi
+	b, d := api.Create(clusterVo.ClusterName, clusterVo.Password)
+	if b {
+		util.ResponseFormat(c,code.Success, d)
+	} else {
+		util.ResponseFormat(c,code.ComError,"鍒涘缓澶辫触")
+	}
+}
+
+// @Summary 鐢熸垚闆嗙兢6浣嶉殢鏈哄瘑鐮�
+// @Description 鐢熸垚闆嗙兢6浣嶉殢鏈哄瘑鐮�
+// @Produce json
+// @Tags cluster
+// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
+// @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
+// @Router /data/api-v/cluster/randomPwd [get]
+func (cc ClusterController) RandomPwd(c *gin.Context) {
+	pwd := fmt.Sprintf("%06v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(1000000))
+	util.ResponseFormat(c,code.Success,pwd)
+}
+
+// @Summary 鏌ヨ鏈湴闆嗙兢
+// @Description 鏌ヨ鏈湴闆嗙兢
+// @Produce json
+// @Tags cluster
+// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
+// @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
+// @Router /data/api-v/cluster/findCluster [get]
+func (cc ClusterController) FindCluster(c *gin.Context) {
+	var clusterApi dbapi.ClusterApi
+	b, d := clusterApi.FindCluster()
+	if b {
+		util.ResponseFormat(c,code.Success, d)
+	} else {
+		util.ResponseFormat(c,code.ComError,"闆嗙兢鏌ヨ澶辫触")
+	}
+}
+
+// @Summary 鎼滅储闆嗙兢
+// @Description 鎼滅储闆嗙兢
+// @Accept json
+// @Produce json
+// @Tags cluster
+// @Param searchArg body controllers.ClusterSearchVo true "闆嗙兢鎼滅储鍙傛暟"
+// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
+// @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
+// @Router /data/api-v/cluster/search [post]
+func (cc ClusterController) Search(c *gin.Context) {
+	var csv ClusterSearchVo
+	err := c.BindJSON(&csv)
+	if err !=nil || csv.Password == ""{
+		util.ResponseFormat(c,code.RequestParamError, "鍙傛暟鏈夎")
+		return
+	}
+	var api dbapi.ClusterApi
+	b,d := api.Search(csv.SearchNum, csv.Password)
+	if b {
+		util.ResponseFormat(c,code.Success, d)
+	} else {
+		util.ResponseFormat(c,code.ComError,"鎼滅储澶辫触")
+	}
+}
+
+// @Summary 閫氳繃searchNum寮傛鑾峰彇闆嗙兢鑺傜偣淇℃伅
+// @Description 閫氳繃searchNum寮傛鑾峰彇闆嗙兢鑺傜偣淇℃伅
+// @Accept json
+// @Produce json
+// @Tags cluster
+// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
+// @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
+// @Router /data/api-v/cluster/getNodesByNum [get]
+func (cc ClusterController) GetSearchNodes(c *gin.Context) {
+	var api dbapi.ClusterApi
+	b, d := api.GetSearchNodes()
+	if b {
+		util.ResponseFormat(c,code.Success,d)
+	} else {
+		util.ResponseFormat(c,code.ClusterNodesEmpty,[]interface{}{})
+	}
+}
+
+// @Summary 閫氳繃searchNum鍋滄鎼滅储
+// @Description 閫氳繃searchNum鍋滄鎼滅储
+// @Produce json
+// @Tags cluster
+// @Param searchNum query string true "鎼滅储缂栧彿"
+// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
+// @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
+// @Router /data/api-v/cluster/stopSearching [post]
+func (cc ClusterController) StopSearching(c *gin.Context) {
+	searchNum := c.Query("searchNum")
+	if searchNum == "" {
+		util.ResponseFormat(c,code.RequestParamError, "鍙傛暟鏈夎")
+		return
+	}
+	var api dbapi.ClusterApi
+	b, d := api.StopSearching(searchNum)
+	if b {
+		util.ResponseFormat(c,code.Success, d)
+	} else {
+		util.ResponseFormat(c,code.ComError,"鍋滄澶辫触")
+	}
+}
+
+
+// @Summary 鍔犲叆闆嗙兢
+// @Description 鍔犲叆闆嗙兢
+// @Accept json
+// @Produce json
+// @Tags cluster
+// @Param  clusterArg body controllers.ClusterCreateVo true "闆嗙兢鍒涘缓鍙傛暟"
+// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
+// @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
+// @Router /data/api-v/cluster/joinCluster [post]
+func (cc ClusterController) JoinCluster(c *gin.Context) {
+	var arg ClusterJoinVo
+	err := c.BindJSON(&arg)
+	if err!=nil || arg.ClusterId == "" || arg.Password == "" || len(arg.NodeIps) == 0{
+		util.ResponseFormat(c,code.RequestParamError, "鍙傛暟鏈夎")
+		return
+	}
+	var api dbapi.ClusterApi
+	paramBody := util.Struct2Map(arg)
+	b, d := api.JoinCluster(paramBody)
+	if b {
+		util.ResponseFormat(c,code.Success,d)
+	} else {
+		util.ResponseFormat(c,code.ComError,"鍔犲叆澶辫触")
+	}
+}
+
+// @Summary 淇濆瓨闆嗙兢鍚嶇О
+// @Description 淇濆瓨闆嗙兢鍚嶇О
+// @Produce json
+// @Tags cluster
+// @Param  clusterName query string true "闆嗙兢鍚嶇О"
+// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
+// @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
+// @Router /data/api-v/cluster/updateClusterName [post]
+func (cc ClusterController) UpdateClusterName(c *gin.Context) {
+	clusterName := c.PostForm("clusterName")
+	if clusterName == "" {
+		util.ResponseFormat(c,code.RequestParamError, "鍙傛暟鏈夎")
+		return
+	}
+	var api dbapi.ClusterApi
+	b,_ := api.UpdateClusterName(clusterName)
+	if b {
+		util.ResponseFormat(c,code.UpdateSuccess,"鏇存柊鎴愬姛")
+	} else {
+		util.ResponseFormat(c,code.ComError, "鏇存柊澶辫触")
+	}
+}
+
+// @Summary 閫�鍑洪泦缇�
+// @Description 閫�鍑洪泦缇�
+// @Produce json
+// @Tags cluster
+// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
+// @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
+// @Router /data/api-v/cluster/leave [post]
+func (cc ClusterController) Leave(c *gin.Context) {
+	var api dbapi.ClusterApi
+	if b,_:= api.Leave();b {
+		util.ResponseFormat(c,code.Success,"閫�鍑烘垚鍔�")
+	} else {
+		util.ResponseFormat(c,code.ComError,"閫�鍑哄け璐�")
+	}
+}
\ No newline at end of file
diff --git a/controllers/dbtableperson.go b/controllers/dbtableperson.go
index ca4a0d9..9afabe9 100644
--- a/controllers/dbtableperson.go
+++ b/controllers/dbtableperson.go
@@ -1,10 +1,9 @@
 package controllers
 
 import (
+	"basic.com/dbapi.git"
 	"encoding/json"
-	"log"
 	"strconv"
-	"time"
 	"webserver/extend/logger"
 
 	"github.com/gin-gonic/gin"
@@ -31,38 +30,45 @@
 // @Router /data/api-v/dbperson/addDbPerson [PUT]
 func (dbc DbPersonController) AddDbPerson(c *gin.Context) {
 	dbperson := new(models.Dbtablepersons)
-	c.BindJSON(&dbperson)
-	if dbperson.TableId == "" {
+	err := c.BindJSON(&dbperson)
+	if err!=nil || dbperson.TableId == "" {
 		// 搴曞簱id涓嶅瓨鍦�
-		c.JSON(401, "TableId 涓嶅瓨鍦�")
+		util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
 		return
 	}
-	result := addDbPerson(dbperson)
-	if result["success"].(bool) {
-		//code.Success.Message = "娣诲姞搴曞簱浜哄憳鎴愬姛"
-		util.ResponseFormat(c, code.Success, result["data"])
+	var pApi dbapi.DbPersonApi
+	paramBody := util.Struct2Map(dbperson)
+	b, data := pApi.AddDbPerson(paramBody)
+	if b {
+		util.ResponseFormat(c, code.Success, data)
 	} else {
-		//code.ServiceInsideError.Message += result["msg"].(string)
-		util.ResponseFormat(c, code.ServiceInsideError, result["data"])
+		util.ResponseFormat(c, code.ServiceInsideError, "")
 	}
 }
 
 func addDbPerson(dbperson *models.Dbtablepersons) (result map[string]interface{}) {
 
-	personId := uuid.NewV4().String() //  浠ュ悗鏇夸唬 渚濇嵁鐢熸垚瑙勫垯
+	personId := uuid.NewV4().String()
 	dbperson.Id = personId
 	dbperson.PriInsert()
-	url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport +
-		"/" + config.EsInfo.EsIndex.Dbtablepersons.IndexName + "/" + config.EsInfo.EsIndex.Dbtablepersons.IndexType + "/" + personId + "?refresh=wait_for"
-	personbytes, e := json.Marshal(dbperson)
-	if e != nil {
-		logger.Debug("Json marshaling failed锛�%s\n", e)
-	}
-	params := string(personbytes)
-	data, _ := esutil.PutEsDataReq(url, params)
 
-	//c.JSON(200, changeEsRespData(data, "娣诲姞浜哄憳鎴愬姛"))
-	result = changeEsRespData(data, "娣诲姞鎴愬姛")
+	var pApi dbapi.DbPersonApi
+	paramBody := util.Struct2Map(dbperson)
+	b, _ := pApi.AddDbPerson(paramBody)
+	result = map[string]interface{}{}
+	if b {
+		result["code"] = 200
+		data := make(map[string]interface{})
+		data["uuid"] = personId
+		result["data"] = data
+		result["success"] = true
+		result["msg"] = "娣诲姞鎴愬姛"
+	} else {
+		result["data"] = nil
+		result["success"] = false
+		result["msg"] = "鏈嶅姟鍣ㄥ紓甯�"
+		result["code"] = 500
+	}
 	return result
 }
 
@@ -77,30 +83,19 @@
 // @Router /data/api-v/dbperson/updateDbPerson [POST]
 func (dbc DbPersonController) UpdateDbPerson(c *gin.Context) {
 	var dbperson models.Dbtablepersons
-	c.BindJSON(&dbperson)
-	personid := dbperson.Id
-	if personid == "" {
+	err := c.BindJSON(&dbperson)
+	if err !=nil || dbperson.Id == "" {
 		util.ResponseFormat(c, code.RequestParamError, nil)
 		return
 	}
 	dbperson.PriUpdate()
-	url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport +
-		"/" + config.EsInfo.EsIndex.Dbtablepersons.IndexName + "/" + config.EsInfo.EsIndex.Dbtablepersons.IndexType + "/" + personid + "/_update?refresh=wait_for"
-	dbTableByte, err := json.Marshal(dbperson)
-	if err != nil {
-		log.Fatalf("Json marshaling failed锛�%s", err)
-	}
-	//logger.Debugf("%s\n", dbTableByte)
-	params := "{\"doc\":" + string(dbTableByte) + "}"
-	logger.Debug("璇锋眰url:%s;\n 璇锋眰鍙傛暟params:%s", url, params)
-	data := esutil.GetEsDataReq(url, params, false)
-	//c.JSON(200,  changeEsRespData(data,"淇敼鎴愬姛"))
-	result := changeEsRespData(data, "淇敼鎴愬姛")
-	if result["success"].(bool) {
-		util.ResponseFormat(c, code.Success, result["data"])
+	var pApi dbapi.DbPersonApi
+	paramBody := util.Struct2Map(dbperson)
+	b, data := pApi.UpdateDbPerson(paramBody)
+	if b {
+		util.ResponseFormat(c, code.Success, data)
 	} else {
-		//code.ServiceInsideError.Message += result["msg"].(string)
-		util.ResponseFormat(c, code.ServiceInsideError, result["data"])
+		util.ResponseFormat(c, code.ServiceInsideError, "")
 	}
 }
 
@@ -155,21 +150,17 @@
 // @Router /data/api-v/dbperson/deleteDbPersonById/{uuid} [POST]
 
 func (dbc DbPersonController) DeleteDbPerson(c *gin.Context) {
-	uuid := c.Params.ByName("uuid")
-	url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport +
-		"/" + config.EsInfo.EsIndex.Dbtablepersons.IndexName + "/" + config.EsInfo.EsIndex.Dbtablepersons.IndexType + "/" + uuid + "/_update?refresh=wait_for"
-	params := "{\"doc\":{\"isDelete\":\"1\",\"updateTime\":\"" + time.Now().Format("2006-01-02 15:04:05") + "\"}}"
-	logger.Debug("鍒犻櫎璇锋眰url:%s;\n 璇锋眰鍙傛暟params:%s", url, params)
-
-	data := esutil.GetEsDataReq(url, params, false)
-
-	//c.JSON(200, changeEsRespData(data,"鍒犻櫎鎴愬姛"))
-	result := changeEsRespData(data, "鍒犻櫎鎴愬姛")
-	if result["success"].(bool) {
-		util.ResponseFormat(c, code.Success, result["data"])
+	id := c.Params.ByName("uuid")
+	if id == "" {
+		util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
+		return
+	}
+	var pApi dbapi.DbPersonApi
+	b, data := pApi.DeleteDbPerson(id)
+	if b {
+		util.ResponseFormat(c, code.Success, data)
 	} else {
-		//code.ServiceInsideError.Message += result["msg"].(string)
-		util.ResponseFormat(c, code.ServiceInsideError, result["data"])
+		util.ResponseFormat(c, code.ServiceInsideError, "鍒犻櫎澶辫触")
 	}
 }
 
@@ -184,37 +175,18 @@
 // @Router /data/api-v/dbperson/deleteMoreDbPerson [POST]
 func (dbc DbPersonController) DeleteMoreDbPerson(c *gin.Context) {
 	uuids := make([]string, 0, 5)
-	c.BindJSON(&uuids)
-	bytes, _ := json.Marshal(uuids)
-	s := string(bytes)
-	url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport +
-		"/" + config.EsInfo.EsIndex.Dbtablepersons.IndexName + "/_update_by_query?refresh" //   + config.EsInfo.EsIndex.Dbtablepersons.IndexType + "/"  + "/" + s
-	params := "{\"script\":{\"lang\":\"painless\",\"inline\":\"ctx._source.isDelete = \\\"1\\\";" +
-		"ctx._source.updateTime = \\\"" + time.Now().Format("2006-01-02 15:04:05") + "\\\"\"},\"query\":{\"terms\":{\"_id\":" + s + "}}}"
-	logger.Debug("鍒犻櫎璇锋眰url:%s;\n 璇锋眰鍙傛暟params:%s", url, params)
-	data := esutil.GetEsDataReq(url, params, false)
-	//c.JSON(200, changeEsRespData(data,"鍒犻櫎鎴愬姛"))
-	//result := changeEsRespData(data, "鍒犻櫎鎴愬姛")
-	if data["error"] == nil {
-		//code.Success.Message = "鍒犻櫎搴曞簱浜哄憳鎴愬姛"
-		//dbperArr, e := esApi.Dbpersoninfosbyid(uuids, config.EsInfo.EsIndex.Dbtablepersons.IndexName, config.EsInfo.Masterip, config.EsInfo.Httpport)
-		//if e ==nil && len(dbperArr) > 0{
-		//	for _,esPer :=range dbperArr {
-		//		if esPer.TableId !=""{
-		//			discovery.AddDbMessage(&protomsg.EsPersonCacheChange{
-		//				Type: protomsg.EsCacheChanged_T_DbTablePerson,
-		//				PersonId: esPer.Id,
-		//				TableId: []string{ esPer.TableId },
-		//				Feature: "",
-		//				Action: protomsg.DbAction_Delete,
-		//			})
-		//		}
-		//	}
-		//}
+	err := c.BindJSON(&uuids)
+	if err !=nil || len(uuids)==0{
+		util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
+		return
+	}
+	var pApi dbapi.DbPersonApi
+	paramBody := util.Struct2Map(uuids)
+	b, _ := pApi.DeleteMoreDbPerson(paramBody)
+	if b {
 		util.ResponseFormat(c, code.Success, "鍒犻櫎搴曞簱浜哄憳鎴愬姛")
 	} else {
-		//code.ServiceInsideError.Message += result["msg"].(string)
-		util.ResponseFormat(c, code.ServiceInsideError, data["error"])
+		util.ResponseFormat(c, code.ServiceInsideError, "鍒犻櫎澶辫触")
 	}
 }
 
@@ -228,15 +200,17 @@
 // @Failure 500 {string} json "{code:500,  msg:"杩斿洖閿欒淇℃伅", success:false,data:{}}"
 // @Router /data/api-v/dbperson/queryDbPersonsByTbId [POST]
 func (dbc DbPersonController) QueryDbPersonsByTbId(c *gin.Context) {
-	url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport +
-		"/" + config.EsInfo.EsIndex.Dbtablepersons.IndexName + "/_search"
 	reqBody := make(map[string]interface{}, 5)
 	c.BindJSON(&reqBody)
 	tableId := ""
 	if reqBody["tableId"] != nil {
 		tableId = reqBody["tableId"].(string)
 	}
-	orderName := "_id"
+	if tableId == "" {
+		util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎锛屽簳搴搃d涓嶈兘涓虹┖")
+		return
+	}
+	orderName := "id"
 	if reqBody["orderName"] != nil {
 		orderName = reqBody["orderName"].(string)
 	} // 鍒楀悕
@@ -256,17 +230,9 @@
 	if reqBody["size"] != nil {
 		size = int(reqBody["size"].(float64))
 	} // 鏉℃暟
-	from := (page - 1) * size
-	syncTerm := ""
-	contentParam := ""
+
 	if tableId == "all" || tableId == "" {
 		// / 鎵�鏈変汉鍛�
-	} else {
-		syncTerm = "{\"term\":{\"tableId\":\"" + tableId + "\"}}" // 搴曞簱浜哄憳
-	}
-	if contentValue != "" {
-		contentParam = ",\"must\":[{\"multi_match\":{\"query\":\"" + contentValue + "\",\"type\":\"best_fields\"," +
-			"\"fields\":[\"personName\",\"sex\",\"idCard\",\"phoneNum\"],\"tie_breaker\":0.3}}]"
 	}
 
 	if orderType == "desc" {
@@ -274,12 +240,21 @@
 	} else {
 		orderType = "asc"
 	}
-
-	params := "{\"query\":{\"bool\":{\"must_not\":[" +
-		"{\"term\":{\"isDelete\":\"1\"}}],\"filter\":[" + syncTerm + "]" + contentParam + "}},\"from\":" + strconv.Itoa(from) + ",\"size\":" + strconv.Itoa(size) + ",\"sort\":{\"" + orderName + "\":{\"order\":\"" + orderType + "\"}}}"
-	data := esutil.GetEsDataReq(url, params, true)
-	//c.JSON(200, data)
-	util.ResponseFormat(c, code.Success, data)
+	var pApi dbapi.DbPersonApi
+	paramBody := map[string]interface{}{
+		"tableId":tableId,
+		"orderName":orderName,
+		"orderType":orderType,
+		"contentValue":contentValue,
+		"page":page,
+		"size":size,
+	}
+	b, data := pApi.QueryDbPersonsByTbId(paramBody)
+	if b{
+		util.ResponseFormat(c,code.Success,data)
+	} else {
+		util.ResponseFormat(c,code.ComError,[]interface{}{})
+	}
 }
 
 // @Summary 鏌ヨ搴曞簱浜哄憳鍒楄〃
diff --git a/controllers/dbtablesCon.go b/controllers/dbtablesCon.go
index 82daabe..fd8ddd0 100644
--- a/controllers/dbtablesCon.go
+++ b/controllers/dbtablesCon.go
@@ -6,7 +6,6 @@
 	"fmt"
 	"github.com/gin-gonic/gin"
 	"github.com/satori/go.uuid"
-	"log"
 	"time"
 	"webserver/extend/code"
 	"webserver/extend/config"
@@ -29,28 +28,14 @@
 // @Failure 500 {string} json "{"code":500,  msg:"杩斿洖閿欒淇℃伅", success:false}"
 // @Router /data/api-v/dbtable/queryDbTables/{isSync} [POST]
 func (dbt DbTableController) QueryDbTables(c *gin.Context) {
-	url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport +
-		"/" + config.EsInfo.EsIndex.DbTables.IndexName + "/_search"
 	isSync := c.Params.ByName("isSync")
-	var setApi dbapi.SysSetApi
-	_, sysconf := setApi.GetServerInfo()
-	analyServerFilterStr := ""
-	if isSync == "1" {
-		analyServerFilterStr = "{\"term\":{\"analyServerId\":\"\"}}" // / 鍚屾搴�
-	} else if isSync == "2" {
-		analyServerFilterStr = "{\"term\":{\"analyServerId\":\"" + sysconf.ServerId + "\"}}" // 鏈湴搴�
+	var tApi dbapi.DbTableApi
+	b, data := tApi.QueryDbTables(isSync)
+	if b{
+		util.ResponseFormat(c, code.Success, data)
+	} else {
+		util.ResponseFormat(c,code.ComError,[]interface{}{})
 	}
-	if analyServerFilterStr != "" {
-		analyServerFilterStr = "," + analyServerFilterStr
-	}
-	params := "{\"query\":{\"bool\":{\"must\":[" +
-		"{\"term\":{\"isDelete\":\"0\"}}" + analyServerFilterStr + "]}}," +
-		"\"from\":0,\"size\":1000,\"sort\":{\"id\":{\"order\":\"asc\"}}}"
-	logger.Debug("璇锋眰url:%s;\n 璇锋眰鍙傛暟params:%s", url, params)
-
-	data := esutil.GetEsDataReq(url, params, true)
-	//c.JSON(200, data)
-	util.ResponseFormat(c, code.Success, data)
 }
 
 // 渚濇嵁搴曞簱id  鏌ヨ鏁版嵁
@@ -73,60 +58,35 @@
 // @Router /data/api-v/dbtable/updateDbTables [POST]
 func (dbt DbTableController) UpdateDbTables(c *gin.Context) {
 	dbtable := new(models.Dbtables)
-	c.BindJSON(&dbtable)
-	uuid := c.Params.ByName("id")
-	if uuid == "" {
-		uuid = dbtable.Id
-		logger.Debug("body涓幏鍙栧簳搴搃d")
+	err := c.BindJSON(&dbtable)
+	if err !=nil || dbtable.Id == "" || dbtable.TableName == "" {
+		util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
+		return
 	}
-	if dbtable.EndTime == "" {
-		flag := UpdateEndTime(dbtable.Id)
-		if flag == false {
-			util.ResponseFormat(c, code.ServiceInsideError, "淇敼澶辫触")
-		}
-	}
-	url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport +
-		"/" + config.EsInfo.EsIndex.DbTables.IndexName + "/" + config.EsInfo.EsIndex.DbTables.IndexType + "/" + uuid + "/_update?refresh=wait_for"
-	dbtable.PriUpdate()
-	dbTableByte, err := json.Marshal(dbtable)
-	if err != nil {
-		log.Fatalf("Json marshaling failed锛�%s", err)
-	}
-	logger.Debug("%s\n", dbTableByte)
-	params := "{\"doc\":" + string(dbTableByte) + "}"
-	logger.Debug("璇锋眰url:%s;\n 璇锋眰鍙傛暟params:%s", url, params)
-	data := esutil.GetEsDataReq(url, params, false)
-	//c.JSON(200, changeEsRespData(data, "淇敼鎴愬姛"))
-	result := changeEsRespData(data, "淇敼鎴愬姛")
-	if dbtable.Enable == 0 {
-		res := UpdateDbPersonsOfDbTable(dbtable.Id)
-		//fmt.Println("鍚屾淇敼浜哄憳鐘舵�佹垚鍔�----",res)
-		logger.Debug("鍚屾淇敼浜哄憳鐘舵�佹垚鍔�----", res)
-	}
-	if result["success"].(bool) {
-		//code.Success.Message = "淇敼搴曞簱鎴愬姛"
-		//if dbtable.Enable ==1 {
-		//	discovery.AddDbMessage(&protomsg.EsPersonCacheChange{
-		//		Type: protomsg.EsCacheChanged_T_DbTable,
-		//		PersonId: "",
-		//		TableId: []string{ dbtable.Id },
-		//		Feature: "",
-		//		Action: protomsg.DbAction_Insert,
-		//	})
-		//} else {
-		//	discovery.AddDbMessage(&protomsg.EsPersonCacheChange{
-		//		Type: protomsg.EsCacheChanged_T_DbTable,
-		//		PersonId: "",
-		//		TableId: []string{ dbtable.Id },
-		//		Feature: "",
-		//		Action: protomsg.DbAction_Delete,
-		//	})
-		//}
-		util.ResponseFormat(c, code.Success, result["data"])
+	paramBody := util.Struct2Map(dbtable)
+	var tApi dbapi.DbTableApi
+	b, data := tApi.UpdateDbTables(paramBody)
+	if b{
+		util.ResponseFormat(c,code.UpdateSuccess,data)
 	} else {
-		//code.ServiceInsideError.Message += result["msg"].(string)
-		util.ResponseFormat(c, code.ServiceInsideError, result["data"])
+		util.ResponseFormat(c,code.ComError,"鏇存柊澶辫触")
 	}
+
+	//if dbtable.EndTime == "" {
+	//	flag := UpdateEndTime(dbtable.Id)
+	//	if flag == false {
+	//		util.ResponseFormat(c, code.ServiceInsideError, "淇敼澶辫触")
+	//	}
+	//}
+	//
+	//if dbtable.Enable == 0 {
+	//	res := UpdateDbPersonsOfDbTable(dbtable.Id)
+	//}
+	//if result["success"].(bool) {
+	//	util.ResponseFormat(c, code.Success, result["data"])
+	//} else {
+	//	util.ResponseFormat(c, code.ServiceInsideError, result["data"])
+	//}
 }
 
 func UpdateEndTime(id string) (flag bool) {
@@ -168,19 +128,25 @@
 // @Router /data/api-v/dbtable/addDbTableInfo [PUT]
 func (dbt DbTableController) AddDbTableInfo(c *gin.Context) {
 	dbtable := new(models.Dbtables)
-	c.BindJSON(&dbtable)
-	tableId := uuid.NewV4().String()
-	dbtable.Id = tableId
+	err := c.BindJSON(&dbtable)
+	if err!=nil || dbtable.TableName==""{
+		util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
+		return
+	}
+	dbtable.Id = uuid.NewV4().String()
 	if dbtable.AnalyServerId == "sync" {
 		dbtable.AnalyServerId = ""
 	}
 	if dbtable.AnalyServerId == "local" {
 		var setApi dbapi.SysSetApi
-		_, sysconf := setApi.GetServerInfo()
+		flag, sysconf := setApi.GetServerInfo()
+		if !flag {
+			util.ResponseFormat(c,code.ComError,"鏈嶅姟鍣ㄥ熀鏈厤缃湁璇�,璇锋鏌�")
+			return
+		}
 		dbtable.AnalyServerId = sysconf.ServerId
 	}
-	url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport +
-		"/" + config.EsInfo.EsIndex.DbTables.IndexName + "/" + config.EsInfo.EsIndex.DbTables.IndexType + "/" + tableId + "?refresh=wait_for"
+
 	dbtable.PriInsert() // 娣诲姞鏃堕棿鍜屽垱寤轰汉
 
 	currentTime := time.Now()
@@ -202,22 +168,14 @@
 	} else {
 		dbtable.Enable = 0
 	}
-	dbTableByte, err := json.Marshal(dbtable)
-	if err != nil {
-		log.Fatalf("Json marshaling failed锛�%s", err)
-	}
-	//logger.Debugf("%s\n", dbTableByte)
-	params := string(dbTableByte)
-	logger.Debug("璇锋眰url:%s;\n 璇锋眰鍙傛暟params:%s", url, params)
-	data, _ := esutil.PutEsDataReq(url, params)
-	//c.JSON(200, changeEsRespData(data, "娣诲姞鎴愬姛"))
-	result := changeEsRespData(data, "娣诲姞鎴愬姛")
-	if result["success"].(bool) {
-		//code.Success.Message = "娣诲姞搴曞簱鎴愬姛"
-		util.ResponseFormat(c, code.Success, result["data"])
+
+	paramBody := util.Struct2Map(dbtable)
+	var tApi dbapi.DbTableApi
+	b, data := tApi.AddDbTableInfo(paramBody)
+	if b {
+		util.ResponseFormat(c,code.AddSuccess, data)
 	} else {
-		//code.ServiceInsideError.Message += result["msg"].(string)
-		util.ResponseFormat(c, code.ServiceInsideError, result["data"])
+		util.ResponseFormat(c,code.ComError,"鏂板澶辫触")
 	}
 }
 
@@ -226,25 +184,22 @@
 // @Accept  x-www-form-urlencoded
 // @Produce json
 // @Tags dbtable
-// @Param uuid path string true "搴曞簱id "
+// @Param id path string true "搴曞簱id "
 // @Success 200 {string} json "{"code":200, msg:"鐩綍缁撴瀯鏁版嵁", success:true}"
 // @Failure 500 {string} json "{"code":500,  msg:"杩斿洖閿欒淇℃伅", success:false}"
 // @Router /data/api-v/dbtable/deleteDBtablesById/{id} [POST]
 func (dbt DbTableController) DeleteDbTables(c *gin.Context) {
-	uuid := c.Params.ByName("id")
-	url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport +
-		"/" + config.EsInfo.EsIndex.DbTables.IndexName + "/" + config.EsInfo.EsIndex.DbTables.IndexType + "/" + uuid + "/_update?refresh=wait_for"
-	params := "{\"doc\":{\"isDelete\":1}}"
-	logger.Debug("鍒犻櫎璇锋眰url:%s;\n 璇锋眰鍙傛暟params:%s", url, params)
-	data := esutil.GetEsDataReq(url, params, false)
-	//c.JSON(200, changeEsRespData(data, "鍒犻櫎鎴愬姛"))
-	result := changeEsRespData(data, "鍒犻櫎鎴愬姛")
-	if result["success"].(bool) {
-		//code.Success.Message = "鍒犻櫎搴曞簱鎴愬姛"
-		util.ResponseFormat(c, code.Success, result["data"])
+	id := c.Params.ByName("id")
+	if id == "" {
+		util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
+		return
+	}
+	var tApi dbapi.DbTableApi
+	b, data := tApi.DeleteById(id)
+	if b {
+		util.ResponseFormat(c,code.DelSuccess,data)
 	} else {
-		//code.ServiceInsideError.Message += result["msg"].(string)
-		util.ResponseFormat(c, code.ServiceInsideError, result["data"])
+		util.ResponseFormat(c,code.ComError,"鍒犻櫎澶辫触")
 	}
 }
 
diff --git a/controllers/fileController.go b/controllers/fileController.go
index b1b1ba4..a4c67ae 100644
--- a/controllers/fileController.go
+++ b/controllers/fileController.go
@@ -214,15 +214,15 @@
 	}
 	logger.Debug("comp len(personIds):", len(personIds))
 	logger.Debug("comp len(captureIds):", len(captureIds))
-	esServerIp := config.EsInfo.Masterip
-	esServerPort := config.EsInfo.Httpport
-	index := config.EsInfo.EsIndex.Dbtablepersons.IndexName
+
 	var dbpersons []protomsg.Dbperson
 	if len(personIds) >0 {
-		dbpersons, _ = esApi.Dbpersoninfosbyid(personIds, index, esServerIp, esServerPort)
+		var dbpApi dbapi.DbPersonApi
+		dbpersons, _ = dbpApi.Dbpersoninfosbyid(personIds)
 	}
 
 	if len(dbpersons) >0 {
+		var dtApi dbapi.DbTableApi
 		for _,p :=range dbpersons {
 			var dbP = DbPersonVo {
 				PersonId: p.Id,
@@ -236,7 +236,7 @@
 				TableId: p.TableId,
 				Enable: p.Enable,
 			}
-			dbTableInfos, _ := esApi.Dbtablefosbyid([]string{p.TableId}, config.EsInfo.EsIndex.DbTables.IndexName, esServerIp, esServerPort)
+			dbTableInfos, _ := dtApi.DbtablesById([]string{ p.TableId })
 			if dbTableInfos !=nil{
 				dbP.BwType = dbTableInfos[0].BwType
 				dbP.TableName = dbTableInfos[0].TableName
@@ -368,11 +368,12 @@
 		CompareThreshold: searchBody.Threshold,
 	}
 
+	var hasCompEsPerson = false
 	if searchBody.DataBases !=nil {
 		for idx,tableId :=range searchBody.DataBases {
 			if tableId == "esData" {
 				searchBody.DataBases = append(searchBody.DataBases[:idx], searchBody.DataBases[idx+1:]...)
-				searchBody.DataBases = append(searchBody.DataBases,service.CaptureTable)
+				hasCompEsPerson = true
 				break
 			}
 		}
@@ -395,22 +396,38 @@
 	timeStart := time.Now()
 
 	compareService := service.NewFaceCompareService(arg)
-	compareOnce := compareService.Compare()
-	totalData := compareOnce.CompareData
+	var totalData service.CompareList
+	if len(arg.TableIds) >0 {//鏈夋瘮瀵瑰簳搴�
+		dbPersonTargets := compareService.CompareDbPersons()
+		if dbPersonTargets !=nil {
+			totalData = append(totalData,*dbPersonTargets...)
+		}
+	}
+	if hasCompEsPerson {//鏈夋瘮瀵笶s鎶撴媿
+		esPersons := compareService.CompareVideoPersons()
+		if esPersons !=nil {
+			totalData = append(totalData, *esPersons...)
+		}
+	}
 
 	logger.Debug("comp 姣斿缁撴潫锛岀敤鏃讹細",time.Since(timeStart))
+	service.SetCompResultByNum(&service.CompareOnce{
+		CompareNum: compareService.CompareNum,
+		CompareData: &totalData,
+	})
+
 	m := make(map[string]interface{},3)
 	if totalData != nil && totalData.Len() > 0{
 		sort.Sort(totalData)
 		total := totalData.Len()
 
-		m["compareNum"] = compareOnce.CompareNum
+		m["compareNum"] = compareService.CompareNum
 		m["total"] = total
 		var sCompResult protomsg.SdkCompareResult
 		if total <= searchBody.Size {
-			sCompResult.CompareResult = *totalData
+			sCompResult.CompareResult = totalData
 		} else {
-			sCompResult.CompareResult = (*totalData)[0:searchBody.Size]
+			sCompResult.CompareResult = totalData[0:searchBody.Size]
 		}
 		resultList := FillDataToCompareResult(&sCompResult)
 		m["totalList"] = resultList
@@ -418,7 +435,7 @@
 
 	} else {
 		m["total"] = 0
-		m["compareNum"] = searchBody.CompareNum
+		m["compareNum"] = compareService.CompareNum
 		m["totalList"] = []CompareResult{}
 	}
 	util.ResponseFormat(c,code.Success,m)
@@ -548,7 +565,6 @@
 
 func uploadFileReturnAddr(file multipart.File, filename string, tableId string) (string, map[string]interface{}, error) {
 	defer file.Close()
-	field := ""
 	// weedfs 涓婁紶
 	fileBytes, err := ioutil.ReadAll(file)
 	if err !=nil {
@@ -580,29 +596,22 @@
 	cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom))
 	logger.Debug("SubImg鐢ㄦ椂锛�", time.Since(t1))
 	t1 = time.Now()
-	fileInfo, e := esutil.PostFormData(weedfsUri, filename, "file", cutFaceImgData)
+	weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, filename, cutFaceImgData)
 	logger.Debug("涓婁紶鍒皐eedfs鐢ㄦ椂:", time.Since(t1))
 	t1 = time.Now()
 	if e != nil {
 		fmt.Println(e.Error())
 		return "", nil, e
-	} else {
-		field = fileInfo[picUrlField].(string) // 鏂囦欢璺緞
 	}
-	if strings.Contains(field,"/"){
-		idx := strings.Index(field, "/")
-		field = field[idx+1:]
-	}
+
 	ext := path.Ext(filename)
 	fileNameOnly := strings.TrimSuffix(filename, ext)
 
 	dbperson := new(models.Dbtablepersons)
-	dbperson.PersonPicUrl = field //  鍥剧墖璺粡
+	dbperson.PersonPicUrl = weedFilePath //  鍥剧墖璺粡
 	dbperson.TableId = tableId           //
 	dbperson.PersonName = fileNameOnly       // 鍥剧墖鍚�
 	dbperson.Enable = 1 //榛樿鏈夋晥
-	// 婕旂ずbase64缂栫爜
-
 	dbperson.FaceFeature = faceBase64 // 鐗瑰緛鍊糱ase64 鐮�
 
 	result := addDbPerson(dbperson)
diff --git a/controllers/sdk.go b/controllers/sdk.go
index c95e36f..de1930b 100644
--- a/controllers/sdk.go
+++ b/controllers/sdk.go
@@ -34,7 +34,9 @@
 	Name  string `json:"name"`  //鍙傛暟鍚嶇О
 	Type  string `json:"type"`  //鍙傛暟绫诲瀷(鏁存暟锛屽瓧绗︿覆鎴栨暟缁�)
 	Must  bool   `json:"must"`  //鏄惁蹇呭~
+	Unit  string `json:"unit"`
 	Range string `json:"range"` //鍊肩殑鑼冨洿锛宔g锛�0,100琛ㄧず浠�0鍒�100
+	DefaultValue string `json:"default_value"`
 	Sort  int    `json:"sort"`  //鍙傛暟椤哄簭
 }
 
diff --git a/controllers/taglist.go b/controllers/taglist.go
index 802b018..107532e 100644
--- a/controllers/taglist.go
+++ b/controllers/taglist.go
@@ -2,81 +2,45 @@
 
 import (
 	"basic.com/dbapi.git"
-	"encoding/json"
-	"fmt"
+	"webserver/extend/code"
+	"webserver/extend/util"
 
 	"github.com/gin-gonic/gin"
-	"webserver/extend/code"
-	"webserver/extend/config"
-	"webserver/extend/esutil"
-	"webserver/extend/util"
 )
 
-//鏍囩鍒楄〃
-//浠诲姟鍒楄〃
 // @Summary 鏍囩鍒楄〃
 // @Description 杩斿洖搴曞簱鏍囩
 // @Accept  json
 // @Produce json
 // @Tags es
-// @Success 200 {string} json "{"code":200, msg:"鐩綍缁撴瀯鏁版嵁", success:true}"
-// @Failure 500 {string} json "{"code":500,  msg:"杩斿洖閿欒淇℃伅", success:false}"
+// @Success 200 {string} json "{"code":200, msg:"", success:true}"
+// @Failure 500 {string} json "{"code":500, msg:"", success:false}"
 // @Router /data/api-v/es/taskList [POST]
 func (sc *EsSearchController) PostEsTagList(c *gin.Context) {
 
-	url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport +
-		"/" + config.EsInfo.EsIndex.DbTables.IndexName + "/_search"
-	var setApi dbapi.SysSetApi
-	_, sysconf := setApi.GetServerInfo()
-	prama := "{\"query\":{\"bool\":{\"filter\":[{\"terms\":{\"analyServerId\":[\"\",\"" + sysconf.ServerId + "\"]}}]}},\"size\":1000}"
-	tokenRes := esutil.GetEsDataReq(url, prama, true)
-	sources := make([]map[string]interface{}, 0)
-	for _, value := range tokenRes["datalist"].([]interface{}) {
-		tokenRes := make(map[string]interface{})
-		tr := value.(map[string]interface{})
-		key := tr["id"].(string)
-		tokenRes["key"] = key
-		tokenRes["title"] = tr["tableName"].(string)
-		tokenRes["value"] = tr["id"].(string)
-		status := int(tr["isDelete"].(float64))
-		tokenRes["status"] = status
-		if status == 1 {
-			if GetTotalFromDb(key) == false {
-				continue
+	var dtApi dbapi.DbTableApi
+	var dbpApi dbapi.DbPersonApi
+	dts, err := dtApi.FindAllDbTablesByCurServer()
+	if err == nil {
+		if dts !=nil {
+			sources := make([]map[string]interface{}, 0)
+			for _, dt := range dts {
+				tokenRes := make(map[string]interface{})
+				tokenRes["key"] = dt.Id
+				tokenRes["title"] = dt.TableName
+				tokenRes["value"] = dt.Id
+				tokenRes["status"] = dt.IsDelete
+				if dt.IsDelete == 1 {
+					personTotal,_ := dbpApi.GetPersonTotal(dt.Id)
+					if personTotal == 0 {
+						continue
+					}
+				}
+				sources = append(sources, tokenRes)
 			}
+			util.ResponseFormat(c, code.Success, sources)
+			return
 		}
-		sources = append(sources, tokenRes)
 	}
-	util.ResponseFormat(c, code.Success, sources)
-}
-
-//鍒ゆ柇搴曞簱鏄惁鏈夋暟鎹�
-func GetTotalFromDb(id string) (flag bool) {
-	flag = false
-	url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport +
-		"/" + config.EsInfo.EsIndex.VideoPersons.IndexName + "/_search"
-	prama := "{\"query\":{\"bool\":{\"filter\":[{\"term\":{\"baseInfo.tableId\":\"" + id + "\"}}]}},\"size\":0}"
-	buf, err := esutil.EsReq("POST", url, []byte(prama))
-	if err != nil {
-		fmt.Println("http request info is err!")
-		return
-	}
-	var info interface{}
-	json.Unmarshal(buf, &info)
-	out, ok := info.(map[string]interface{})
-	if !ok {
-		fmt.Println("http response interface can not change map[string]interface{}")
-		return
-	}
-	middle, ok := out["hits"].(map[string]interface{})
-	if !ok {
-		fmt.Println("first hits change error!")
-		return
-	}
-
-	total := int(middle["total"].(float64))
-	if total > 0 {
-		flag = true
-	}
-	return flag
+	util.ResponseFormat(c,code.ComError,"鏌ヨ搴曞簱鏍囩澶辫触")
 }
diff --git a/controllers/task.go b/controllers/task.go
index ccd33ca..f27e9d0 100644
--- a/controllers/task.go
+++ b/controllers/task.go
@@ -256,7 +256,7 @@
 func (tc TaskController) SaveTaskSdkRule(c *gin.Context) {
 	var rules TaskSdkRules
 	err := c.BindJSON(&rules)
-	if err !=nil {
+	if err !=nil || rules.TaskId == "" || rules.SdkId == "" || len(rules.Rules) == 0 {
 		util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
 		return
 	}
@@ -277,15 +277,16 @@
 // @Param id query string true "id"
 // @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
 // @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
-// @Router /data/api-v/task/deleteTaskSdkRuleById [post]
-func (tc TaskController) DeleteTaskSdkRuleById(c *gin.Context) {
-	id := c.PostForm("id")
-	if id == "" {
+// @Router /data/api-v/task/deleteTaskSdkRule [post]
+func (tc TaskController) DeleteTaskSdkRule(c *gin.Context) {
+	taskId := c.PostForm("taskId")
+	sdkId := c.PostForm("sdkId")
+	if taskId == "" || sdkId == "" {
 		util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
 		return
 	}
 	var api dbapi.TaskSdkRuleApi
-	if api.DeleteTaskSdkRuleById(id) {
+	if api.DeleteTaskSdkRule(taskId, sdkId) {
 		util.ResponseFormat(c,code.Success,"鍒犻櫎鎴愬姛")
 	} else {
 		util.ResponseFormat(c,code.ComError, "鍒犻櫎澶辫触")
diff --git a/extend/code/code.go b/extend/code/code.go
index 0a5380d..93a4341 100644
--- a/extend/code/code.go
+++ b/extend/code/code.go
@@ -57,4 +57,5 @@
 	TaskStoped = &Code{http.StatusOK, false, "姝や换鍔′负鍋滅敤鐘舵�侊紝璇峰湪浠诲姟绠$悊涓紑鍚紒"}
 
 	ComError = &Code{http.StatusInternalServerError, false, ""}
+	ClusterNodesEmpty = &Code{http.StatusOK, true, "闆嗙兢鑺傜偣涓虹┖"}
 )
diff --git a/extend/config/config.go b/extend/config/config.go
index 488ce86..35e83f6 100644
--- a/extend/config/config.go
+++ b/extend/config/config.go
@@ -69,11 +69,17 @@
 
 var DBconf = &database{}
 
-type CompareServer struct {
+type dbpersoncompare struct {
+	Url string `mapstructure:"url"`
+}
+
+type espersoncompare struct {
 	Url []string `mapstructure:"url"`
 }
 
-var CompServerInfo = &CompareServer{}
+var DbPersonCompInfo = &dbpersoncompare{}
+
+var EsCompServerInfo = &espersoncompare{}
 
 
 // Init is an exported method that takes the environment starts the viper
@@ -93,6 +99,7 @@
 	viper.UnmarshalKey("redis", RedisConf)
 	viper.UnmarshalKey("database", DBconf)
 	viper.UnmarshalKey("weedfs", WeedFs)
-	viper.UnmarshalKey("compare", CompServerInfo)
 	viper.UnmarshalKey("sopath",SoPath)
+	viper.UnmarshalKey("dbpersoncompare",DbPersonCompInfo)
+	viper.UnmarshalKey("espersoncompare", EsCompServerInfo)
 }
diff --git a/middlewares/auth/auth.go b/middlewares/auth/auth.go
index 3bac107..8a23438 100644
--- a/middlewares/auth/auth.go
+++ b/middlewares/auth/auth.go
@@ -3,7 +3,6 @@
 import (
 	"github.com/gin-gonic/gin"
 	"net/http"
-	"regexp"
 	"strings"
 	"webserver/extend/config"
 	"webserver/extend/logger"
@@ -38,30 +37,27 @@
 			//}
 			c.Next()
 		} else if strings.Contains(urlPath,"/httpImage") {
-			host := c.Request.URL.Host
-			logger.Debug("host:", host)
-
-			imgUrl := config.Server.ImageUrl
-
 			domain := config.Server.PublicDomain
-			domainReg := regexp.MustCompile(``+domain+``)
-			if domainReg.MatchString(host) {//鍩熷悕璁块棶
-				imgUrl = domain
-			}
+			//domainReg := regexp.MustCompile(``+domain+``)
+			//if domainReg.MatchString(host) {//鍩熷悕璁块棶
+			//   imgUrl = domain
+			//}
 
 			urlPath = strings.Replace(urlPath, "/httpImage", "", -1)
-			idx := strings.Index(urlPath, ":")
-			tmpPath := urlPath
+			if strings.Contains(urlPath,domain) {
+				urlPath = strings.Replace(urlPath,"/"+domain,"",-1)
+			}
+			logger.Debug("urlPath:",urlPath)
+			idx := strings.LastIndex(urlPath, ":")
+			tmpPath := ""
 			if idx >-1 {//璺緞涓寘鍚湁绔彛,鍙栫鍙d互鍚庤矾寰�
 				tmpPath = urlPath[idx:]
-				imgIndx := strings.LastIndex(imgUrl, ":")
-				if imgIndx > -1 {
-					imgUrl = imgUrl[:imgIndx]
-				}
+			} else {
+				tmpPath = ":6080"+tmpPath
 			}
-			logger.Debug("imgUrl+tmpPath:", imgUrl+tmpPath)
 			c.Header("Access-Control-Allow-Origin","*")
-			c.Redirect(http.StatusMovedPermanently, imgUrl+tmpPath)
+			logger.Debug("domain+tmpPath:",domain+tmpPath)
+			c.Redirect(http.StatusMovedPermanently, domain+tmpPath)
 			return
 		} else {
 			c.Next()
diff --git a/router/router.go b/router/router.go
index 95b892e..97ef72f 100644
--- a/router/router.go
+++ b/router/router.go
@@ -39,6 +39,7 @@
 	pollConfigController := new(controllers.PollConfigController)
 	fileController := new(controllers.FileController)
 	sysMenuController :=new(controllers.SysMenuController)
+	clusterController :=new(controllers.ClusterController)
 
 
 	sysApi := r.Group(  "/data/api-u/sys")
@@ -123,7 +124,7 @@
 		task.GET("/delTaskSdk", taskController.DeleteTaskSdk)
 		task.POST("/updateTaskName", taskController.UpdateTaskName)
 		task.GET("/getRulesByTaskSdk", taskController.GetRulesByTaskSdk)
-		task.POST("/deleteTaskSdkRuleById", taskController.DeleteTaskSdkRuleById)
+		task.POST("/deleteTaskSdkRule", taskController.DeleteTaskSdkRule)
 		task.POST("/saveTaskSdkRule", taskController.SaveTaskSdkRule)
 	}
 
@@ -224,6 +225,18 @@
 		pollCApi.GET("/getPollConfig", pollConfigController.GetPollConfig)
 		pollCApi.POST("/updateEnable", pollConfigController.UpdateEnable)
 	}
+	clusterApi := r.Group(urlPrefix+"/cluster")
+	{
+		clusterApi.GET("/findCluster", clusterController.FindCluster)
+		clusterApi.GET("/randomPwd", clusterController.RandomPwd)
+		clusterApi.POST("/create", clusterController.Create)
+		clusterApi.POST("/search", clusterController.Search)
+		clusterApi.POST("/stopSearching", clusterController.StopSearching)
+		clusterApi.GET("/getSearchNodes", clusterController.GetSearchNodes)
+		clusterApi.POST("/joinCluster", clusterController.JoinCluster)
+		clusterApi.POST("/updateClusterName", clusterController.UpdateClusterName)
+		clusterApi.POST("/leave", clusterController.Leave)
+	}
 
 	// 鏂囦欢 涓婁紶
 	r.Static("static", "./static") // 闈欐�佹枃浠�
diff --git a/service/CamraUpdatesnashot.go b/service/CamraUpdatesnashot.go
index ad5ab9f..0ca5c58 100644
--- a/service/CamraUpdatesnashot.go
+++ b/service/CamraUpdatesnashot.go
@@ -1,14 +1,12 @@
 package service
 
 import (
+	"basic.com/dbapi.git"
+	"basic.com/fileServer/WeedFSClient.git"
+	"basic.com/valib/capture.git"
 	"errors"
-	"path/filepath"
 	"strconv"
 	"webserver/extend/config"
-	"webserver/extend/esutil"
-
-	"basic.com/dbapi.git"
-	"basic.com/valib/capture.git"
 )
 /*浠ヤ笅灞炰簬鏃х増鏈湴鎽勫儚鏈鸿幏鍙栨埅鍥撅紙鍥芥爣鎽勫儚鏈哄簳鍥炬棤娉曞埛鏂帮級
 func PostFormBufferData(uri string, filepath string, fileName string) (maps map[string]interface{}, err0 error) {
@@ -148,17 +146,15 @@
 	b,err := capture.Capture("./runtime/libcffmpeg.so",m,camera.Rtsp,capture.JPEGFileExt,1280,720,10)
 	if err == nil{
 		var weedfsUri = "http://"+config.WeedFs.Ip+":"+strconv.Itoa(config.WeedFs.UploadPort)+"/submit"
-		resp, err := esutil.PostFormBufferData(weedfsUri, camera.Name+".jpg", "file", b)
+		weedFilePath, err := WeedFSClient.UploadFile(weedfsUri, camera.Name+".jpg", b)
 		if err != nil {
 			return "",err
 		} else {
-			fileurl := resp["fileUrl"].(string) // 鏂囦欢璺緞
-			filename := filepath.Base(fileurl)
-			ok := cameraApi.UpdateSnapshotUrl(cid, filename)
+			ok := cameraApi.UpdateSnapshotUrl(cid, weedFilePath)
 			if !ok {
 				return "", errors.New("update camera's snapshot fail")
 			}
-			return filename, nil
+			return weedFilePath, nil
 		}
 	}else{
 		return "",err
diff --git a/service/FaceCompareService.go b/service/FaceCompareService.go
index bc94ee3..04d5040 100644
--- a/service/FaceCompareService.go
+++ b/service/FaceCompareService.go
@@ -63,21 +63,22 @@
 
 var CaptureTable = "capturetable" // 鎶撴媿搴�
 
-func (sv *FaceCompareService) Compare() *CompareOnce{
+func (sv *FaceCompareService) CompareVideoPersons() *CompareList{
+	sv.CompareArgs.TableIds = []string { CaptureTable }
 	b, err := proto.Marshal(&sv.CompareArgs)
-	compServerList := config.CompServerInfo.Url
-	logger.Debug("compServerList:", compServerList)
-	//1.鍚戝悇涓猚ompare杩涚▼鍙戣捣璇锋眰鎷垮埌姣斿缁撴灉
+	esCompServerList := config.EsCompServerInfo.Url
+	logger.Debug("compServerList:", esCompServerList)
+	//1.鍚戝悇涓狤s compare杩涚▼鍙戣捣璇锋眰鎷垮埌姣斿缁撴灉
 	var resultList CompareList
-	//resultList :=make([]*protomsg.SdkCompareEach,0)
-	for _,str :=range compServerList{
+
+	for _,str :=range esCompServerList{
 		reqUrl := "tcp://"+str
 		resultB := doCompareRequest(reqUrl,b)
 		if resultB == nil || len(*resultB) ==0 {
 			continue
 		}
 		var sdkCompResult protomsg.SdkCompareResult
-		//rList :=make([]protomsg.Esinfo,0)
+
 		err = proto.Unmarshal(*resultB, &sdkCompResult)
 		if err !=nil {
 			logger.Debug("comp sdkCompareResult unmarshal err:", err)
@@ -87,19 +88,41 @@
 		logger.Debug("comp len(rList):", len(sdkCompResult.CompareResult))
 		if len(sdkCompResult.CompareResult) >0 {
 			resultList = append(resultList, sdkCompResult.CompareResult...)
-			//resultList = append(resultList, FillDataToCompareResult(&sdkCompResult)...)
 		}
 	}
 	logger.Debug("comp totalList.len:", len(resultList))
 
-	//2.缂撳瓨姣斿缁撴灉
-	co := &CompareOnce{
-		CompareNum: sv.CompareNum,
-		CompareData: &resultList,
-	}
-	SetCompResultByNum(co)
+	return &resultList
+}
 
-	return co
+//姣斿搴曞簱
+func (sv *FaceCompareService) CompareDbPersons() *CompareList{
+	b, err := proto.Marshal(&sv.CompareArgs)
+	dbPersonCompServerUrl := config.DbPersonCompInfo.Url
+	logger.Debug("comp Server url:", dbPersonCompServerUrl)
+
+	var resultList CompareList
+
+	reqUrl := "tcp://"+dbPersonCompServerUrl
+	resultB := doCompareRequest(reqUrl,b)
+	if resultB == nil || len(*resultB) ==0 {
+		return nil
+	}
+	var sdkCompResult protomsg.SdkCompareResult
+	err = proto.Unmarshal(*resultB, &sdkCompResult)
+	if err !=nil {
+		logger.Debug("comp sdkCompareResult unmarshal err:", err)
+		return nil
+	}
+
+	logger.Debug("comp len(rList):", len(sdkCompResult.CompareResult))
+	if len(sdkCompResult.CompareResult) >0 {
+		resultList = append(resultList, sdkCompResult.CompareResult...)
+	}
+
+	logger.Debug("comp totalList.len:", len(resultList))
+
+	return &resultList
 }
 
 func doCompareRequest(url string,args []byte) *[]byte{

--
Gitblit v1.8.0