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/dbtableperson.go |  232 +++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 140 insertions(+), 92 deletions(-)

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)
-}*/

--
Gitblit v1.8.0