From 1f46bdbb7a02df39041dfaf4c6b3a76440016f0a Mon Sep 17 00:00:00 2001
From: liuxiaolong <736321739@qq.com>
Date: 星期三, 04 九月 2019 15:16:53 +0800
Subject: [PATCH] add dbpersoncompare query
---
controllers/cluster.go | 8 -
controllers/dbtableperson.go | 232 ++++++++++++++++++++++++++++------------------
router/router.go | 2
3 files changed, 142 insertions(+), 100 deletions(-)
diff --git a/controllers/cluster.go b/controllers/cluster.go
index 7ac903d..5e9314c 100644
--- a/controllers/cluster.go
+++ b/controllers/cluster.go
@@ -154,18 +154,12 @@
// @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)
+ b, d := api.StopSearching("")
if b {
util.ResponseFormat(c,code.Success, d)
} else {
diff --git a/controllers/dbtableperson.go b/controllers/dbtableperson.go
index 966de9d..88766f3 100644
--- a/controllers/dbtableperson.go
+++ b/controllers/dbtableperson.go
@@ -7,6 +7,7 @@
"encoding/base64"
"encoding/json"
"io/ioutil"
+ "sort"
"strconv"
"time"
"webserver/extend/logger"
@@ -104,6 +105,130 @@
}
}
+// @Summary 搴曞簱浜哄憳浠ュ浘鎼滃浘
+// @Description 搴曞簱浜哄憳浠ュ浘鎼滃浘
+// @Accept json
+// @Produce json
+// @Tags dbperson 搴曞簱浜哄憳
+// @Param condition body models.EsSearch true "搴曞簱浠ュ浘鎼滃浘鍙傛暟"
+// @Success 200 {string} json "{"code":200, msg:"", success:true}"
+// @Failure 500 {string} json "{"code":500, msg:"", success:false}"
+// @Router /data/api-v/dbperson/queryDbPersonsByCompare [POST]
+func (dbc DbPersonController) QueryDbPersonsByCompare(c *gin.Context) {
+ var searchBody models.EsSearch
+ err := c.BindJSON(&searchBody)
+ if err !=nil || searchBody.PicUrl == "" || len(searchBody.DataBases) == 0{
+ util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎")
+ return
+ }
+ var faceB []byte
+ if face,ok := faceExtractedMap[searchBody.PicUrl];!ok{
+ util.ResponseFormat(c, code.RequestParamError, "璇烽噸鏂颁笂浼犲浘鐗�")
+ return
+ } else {
+ faceB = face.FaceBytes
+ }
+ var sysSetApi dbapi.SysSetApi
+ analyServerId := ""
+ flag, sysconf := sysSetApi.GetServerInfo()
+ if flag {
+ analyServerId = sysconf.ServerId
+ } else {
+ util.ResponseFormat(c, code.ComError, "analyServerId涓虹┖锛岄厤缃湁璇�")
+ return
+ }
+ arg := protomsg.CompareArgs{
+ FaceFeature: faceB,
+ CompareThreshold: 0.6,
+ }
+ arg.TableIds = searchBody.DataBases
+ arg.AnalyServerId = analyServerId
+ compareService := service.NewFaceCompareService(arg)
+ var totalData service.CompareList
+
+ dbPersonTargets := compareService.CompareDbPersons()
+ if dbPersonTargets !=nil {
+ totalData = append(totalData,*dbPersonTargets...)
+ }
+
+ 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"] = compareService.CompareNum
+ m["total"] = total
+ var sCompResult protomsg.SdkCompareResult
+ if total <= searchBody.Size {
+ sCompResult.CompareResult = totalData
+ } else {
+ sCompResult.CompareResult = totalData[0:searchBody.Size]
+ }
+ resultList := FillDbPersonDataToCompareResult(&sCompResult)
+ m["totalList"] = resultList
+
+ } else {
+ m["total"] = 0
+ m["compareNum"] = compareService.CompareNum
+ m["totalList"] = []CompareResult{}
+ }
+ util.ResponseFormat(c,code.Success,m)
+}
+
+//濉厖鍚戝墠绔繑鍥炵殑鏁版嵁
+func FillDbPersonDataToCompareResult(compResult *protomsg.SdkCompareResult) []DbPersonVo {
+
+ var resultList = make([]DbPersonVo, len(compResult.CompareResult))
+ dbPersonM := make(map[string]ScoreIndex, 0)
+ personIds := make([]string,0)
+
+ for idx,v :=range compResult.CompareResult{
+ dbPersonM[v.Id] = ScoreIndex{
+ Index: idx,
+ CompareScore: v.CompareScore,
+ }
+ personIds = append(personIds,v.Id)
+ }
+ logger.Debug("comp len(personIds):", len(personIds))
+
+ var dbpersons []protomsg.Dbperson
+ if len(personIds) >0 {
+ 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,
+ IdCard: p.IdCard,
+ CompareScore: util.ParseScore(dbPersonM[p.Id].CompareScore),
+ MonitorLevel: p.MonitorLevel,
+ PersonName: p.PersonName,
+ PersonPicUrl: p.PersonPicUrl,
+ PhoneNum: p.PhoneNum,
+ Sex: p.Sex,
+ TableId: p.TableId,
+ Enable: p.Enable,
+ }
+ dbTableInfos, _ := dtApi.DbtablesById([]string{ p.TableId })
+ if dbTableInfos !=nil{
+ dbP.BwType = dbTableInfos[0].BwType
+ dbP.TableName = dbTableInfos[0].TableName
+ }
+ resultList[dbPersonM[p.Id].Index] = dbP
+ }
+ }
+
+ return resultList
+}
+
// @Summary 鏇存柊搴曞簱浜鸿劯鐓х墖
// @Description 鏇存柊搴曞簱浜鸿劯鐓х墖
// @Accept json
@@ -165,13 +290,19 @@
util.ResponseFormat(c,code.ComError,"浜鸿劯涓婁紶澶辫触")
return
}
- var dbpApi dbapi.DbPersonApi
- b,d := dbpApi.UpdateFace(id,faceBase64,weedFilePath)
- if b {
- util.ResponseFormat(c,code.UpdateSuccess,d)
- } else {
- util.ResponseFormat(c,code.UpdateFail,"鏇存柊浜鸿劯澶辫触")
+ m := map[string]interface{} {
+ "faceFeature": faceBase64,
+ "personPicUrl": weedFilePath,
}
+ util.ResponseFormat(c,code.Success, m)
+
+ //var dbpApi dbapi.DbPersonApi
+ //b,d := dbpApi.UpdateFace(id,faceBase64,weedFilePath)
+ //if b {
+ // util.ResponseFormat(c,code.UpdateSuccess,d)
+ //} else {
+ // util.ResponseFormat(c,code.UpdateFail,"鏇存柊浜鸿劯澶辫触")
+ //}
}
func UpdateDbPersonsOfDbTable(id string) (message string) {
@@ -299,8 +430,9 @@
orderType := "desc"
if reqBody.OrderType != "" {
orderType = reqBody.OrderType
- } // 鍒楃被鍨�
- contentValue := ""
+ }
+ //鎼滅储鍐呭
+ contentValue := reqBody.ContentValue
page := 1
if reqBody.Page >1 {
@@ -341,87 +473,3 @@
Page int `json:"page"`
Size int `json:"size"`
}
-
-/*
-// @Summary 鏌ヨ搴曞簱浜哄憳鍒楄〃
-// @Description 鏌ヨ搴撲汉鍛樺垪琛�
-// @Accept json
-// @Produce json
-// @Tags dbperson 搴曞簱浜哄憳
-// @Param reqMap body controllers.DbtSearch false "{"tableId":"","orderName":"id","orderType":"desc","contentValue":"","page":1,"size":8}"
-// @Success 200 {string} json "{"code":200, "msg":"", "success":true,"data":{}}"
-// @Failure 500 {string} json "{code:500, msg:"", success:false,data:{}}"
-// @Router /data/api-v/dbperson/queryDbPersonsByCampare [POST]
-func (dbc DbPersonController) QueryDbPersonsByCampare(c *gin.Context) {
- url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport +
- "/" + config.EsInfo.EsIndex.Dbtablepersons.IndexName + "/_search" // ?refresh=wait_for
- var reqBody DbtSearch
- c.BindJSON(&reqBody)
- tableId := ""
- if reqBody.TableId != "" {
- tableId = reqBody.TableId
- }
- orderName := "_id"
- if reqBody.OrderName != "" {
- orderName = reqBody.OrderName
- } // 鍒楀悕
- orderType := "desc"
- if reqBody.OrderType != "" {
- orderType = reqBody.OrderType
- } // 鍒楃被鍨�
- faceUrl := ""
- var threshold float32
- if reqBody["faceUrl"] != nil && reqBody["threshold"] != nil {
- faceUrl = reqBody["faceUrl"].(string)
- threshold = float32(reqBody["threshold"].(float64))
- } else {
- util.ResponseFormat(c, code.RequestParamError, nil) // 鍥剧墖璺緞鏈夐棶棰�
- return
- }
- //杈撳叆妗嗗唴瀹�
- page := 1
- if reqBody["page"] != nil {
- page = int(reqBody["page"].(float64))
- } // 椤电爜
- size := 8
- 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 orderType == "desc" {
- orderType = "desc"
- } else {
- orderType = "asc"
- }
-
- //params := "{\"query\":{\"bool\":{\"filter\":[" +
- // "{\"term\":{\"isDelete\":\"0\"}}" + syncTerm + "]" + contentParam + "}},\"from\":" + strconv.Itoa(from) + ",\"size\":" + strconv.Itoa(size) + ",\"sort\":{\"" + orderName + "\":{\"order\":\"" + orderType + "\"}}}"
- params := "{\"query\":{\"bool\":{\"must_not\":[" +
- "{\"term\":{\"isDelete\":\"1\"}}],\"filter\":[" + syncTerm + "]" + contentParam + "}},\"from\":" + strconv.Itoa(from) + ",\"size\":" + strconv.Itoa(size) + ",\"sort\":{\"" + orderName + "\":{\"order\":\"" + orderType + "\"}}}"
- logger.Debug("璇锋眰url:%s;\n 璇锋眰鍙傛暟params:%s", url, params)
- data := esutil.GetEsDataReq(url, params, true)
- featByte := make([]byte, 0, 1024)
- if len(faceUrl) > 3 { // linux
-
- }
- to := page * size
- datalist := sourceCompare(data["datalist"].([]interface{}), false, featByte, threshold)
- total := len(datalist)
- if from > total {
- from = total
- }
- if to > total {
- to = total
- }
- data["datalist"] = datalist[from:to]
- data["total"] = len(datalist)
- //c.JSON(200, data)
- util.ResponseFormat(c, code.Success, data)
-}*/
diff --git a/router/router.go b/router/router.go
index a930b81..d4ab184 100644
--- a/router/router.go
+++ b/router/router.go
@@ -159,7 +159,7 @@
vdbperson := r.Group(urlPrefix + "/dbperson")
{
vdbperson.POST("/queryDbPersonsByTbId", dbPersonCont.QueryDbPersonsByTbId)
- //vdbperson.POST("/queryDbPersonsByCampare", dbPersonCont.QueryDbPersonsByCampare)
+ vdbperson.POST("/queryDbPersonsByCompare", dbPersonCont.QueryDbPersonsByCompare)
vdbperson.POST("/updateDbPerson", dbPersonCont.UpdateDbPerson)
vdbperson.POST("/deleteDbPersonById/:uuid", dbPersonCont.DeleteDbPerson)
vdbperson.POST("/deleteMoreDbPerson", dbPersonCont.DeleteMoreDbPerson)
--
Gitblit v1.8.0