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