From f9c3e6809dc080cd55cfdc7573380aee4cef0b8f Mon Sep 17 00:00:00 2001
From: liuxiaolong <736321739@qq.com>
Date: 星期二, 29 十月 2019 16:41:58 +0800
Subject: [PATCH] fix swagger
---
controllers/dbtableperson.go | 428 +++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 314 insertions(+), 114 deletions(-)
diff --git a/controllers/dbtableperson.go b/controllers/dbtableperson.go
index 9afabe9..18d6ac9 100644
--- a/controllers/dbtableperson.go
+++ b/controllers/dbtableperson.go
@@ -2,9 +2,17 @@
import (
"basic.com/dbapi.git"
+ "basic.com/fileServer/WeedFSClient.git"
+ "basic.com/pubsub/protomsg.git"
+ "encoding/base64"
"encoding/json"
+ "io/ioutil"
+ "sort"
"strconv"
- "webserver/extend/logger"
+ "time"
+ "basic.com/valib/logger.git"
+ "webserver/cache"
+ "webserver/service"
"github.com/gin-gonic/gin"
"github.com/satori/go.uuid"
@@ -13,6 +21,8 @@
"webserver/extend/esutil"
"webserver/extend/util"
"webserver/models"
+
+ esApi "basic.com/pubsub/esutil.git"
)
type DbPersonController struct {
@@ -24,9 +34,8 @@
// @Produce json
// @Tags dbperson 搴曞簱浜哄憳
// @Param obj body models.Dbtablepersons true "搴曞簱浜哄憳鏁版嵁"
-// @Success 200 {object} json "{"code":200, msg:"鐩綍缁撴瀯鏁版嵁", success:true}"
-// @Failure 500 {string} json "{"code":500, msg:"杩斿洖閿欒淇℃伅", success:false}"
-// @Failure 400 {object} json code.RequestParamError
+// @Success 200 {string} json "{"code":200, msg:"鐩綍缁撴瀯鏁版嵁", success:true}"
+// @Failure 500 {string} json "{"code":500, msg:"杩斿洖閿欒淇℃伅", success:false}"
// @Router /data/api-v/dbperson/addDbPerson [PUT]
func (dbc DbPersonController) AddDbPerson(c *gin.Context) {
dbperson := new(models.Dbtablepersons)
@@ -99,8 +108,226 @@
}
}
+// @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
+ }
+
+ analyServerId := ""
+ conf, e := cache.GetServerInfo()
+ if e ==nil && conf.ServerId != "" {
+ analyServerId = conf.ServerId
+ } else {
+ util.ResponseFormat(c, code.ComError, "analyServerId涓虹┖锛岄厤缃湁璇�")
+ return
+ }
+
+ arg := protomsg.CompareArgs{
+ FaceFeature: faceB,
+ CompareThreshold: searchBody.Threshold,
+ }
+ 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) []models.DbPersonsCompVo {
+
+ var resultList = make([]models.DbPersonsCompVo, 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 models.DbPersonsCompVo
+
+ dbP.Id = p.Id
+ dbP.TableId = p.TableId
+ dbP.FaceFeature = p.FaceFeature
+ dbP.PersonPicUrl = p.PersonPicUrl
+ dbP.PersonName = p.PersonName
+ dbP.Age = p.Age
+ dbP.Sex = p.Sex
+ dbP.IdCard = p.IdCard
+ dbP.PhoneNum = p.PhoneNum
+ dbP.MonitorLevel = p.MonitorLevel
+ dbP.Reserved = p.Reserved
+ dbP.IsDelete = int(p.IsDelete)
+ dbP.Enable = int(p.Enable)
+ dbP.CreateTime = p.CreateTime
+ dbP.UpdateTime = p.UpdateTime
+ dbP.CreateBy = p.CreateBy
+ dbP.CompareScore = util.ParseScore(dbPersonM[p.Id].CompareScore)
+ //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
+// @Produce json
+// @Tags 搴曞簱浜哄憳
+// @Param id formData string true "浜哄憳id"
+// @Param file formData file true "浜鸿劯鍥剧墖"
+// @Success 200 {string} json "{"code":200, msg:"", success:true}"
+// @Failure 500 {string} json "{"code":500, msg:"", success:false}"
+// @Router /data/api-v/dbperson/updateFace [POST]
+func (dbc DbPersonController) UpdateFace(c *gin.Context) {
+ file, header, err := c.Request.FormFile("file")
+ id := c.Request.FormValue("id")
+ if err != nil || id == "" {
+ util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
+ return
+ }
+ //鏂囦欢鐨勫悕绉�
+ filename := header.Filename
+ defer file.Close()
+ // weedfs 涓婁紶
+ fileBytes, err := ioutil.ReadAll(file)
+ if err !=nil {
+ util.ResponseFormat(c,code.ComError,"鍥剧墖璇诲彇澶辫触")
+ return
+ }
+
+ //灏嗕笂浼犵殑鍥剧墖浜や汉鑴告娴嬪拰浜鸿劯鎻愬彇锛岃幏寰楃壒寰�
+ var faceBase64=""
+ faceArr, err, pI := service.GetFaceFeaFromSdk(fileBytes, time.Second*5)
+ if faceArr ==nil {
+ util.ResponseFormat(c,code.ComError,"鏈埌鎻愬彇浜鸿劯")
+ return
+ }
+ var rcFace *protomsg.Rect
+ if err ==nil && len(faceArr) >0 {
+ if len(faceArr) >1 {
+ util.ResponseFormat(c,code.ComError,"浜鸿劯澶т簬涓�寮狅紝璇锋崲涓�寮犱汉鑴稿浘鐗�")
+ return
+ }
+ for _,r := range faceArr {
+ //鎷垮埌浜鸿劯鐨勫潗鏍�
+ rcFace = r.Pos.RcFace
+
+ faceBase64 = base64.StdEncoding.EncodeToString(r.Feats)//鑾峰彇鎻愬彇鍒扮殑绗竴寮犱汉鑴哥壒寰�
+ break
+ }
+ }
+ localConf, err2 := cache.GetServerInfo()
+ if err2 !=nil || localConf.WebPicIp == "" {
+ logger.Debug("localConfig is wrong!!!")
+ return
+ }
+ var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit"
+ //鏍规嵁浜鸿劯鍧愭爣鎵e嚭浜鸿劯灏忓浘
+ t1 := time.Now()
+ 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()
+ weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, filename, cutFaceImgData)
+ logger.Debug("涓婁紶鍒皐eedfs鐢ㄦ椂:", time.Since(t1))
+ t1 = time.Now()
+ if e != nil {
+ util.ResponseFormat(c,code.ComError,"浜鸿劯涓婁紶澶辫触")
+ return
+ }
+ 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) {
- url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport +
+ localConf, err2 := cache.GetServerInfo()
+ if err2 !=nil || localConf.AlarmIp == "" || localConf.ServerId == "" {
+ logger.Debug("localConfig is wrong!!!")
+ return "淇敼澶辫触"
+ }
+ url := "http://" + localConf.AlarmIp + ":" + strconv.Itoa(int(localConf.AlarmPort)) +
"/" + config.EsInfo.EsIndex.Dbtablepersons.IndexName + "/_update_by_query?refresh"
jsonDSL := `
{
@@ -164,25 +391,30 @@
}
}
+type DelMultiPerson []string
+
// @Summary 鍒犻櫎搴曞簱浜哄憳
// @Description 鍒犻櫎搴撲汉鍛�
// @Accept json
// @Produce json
// @Tags dbperson 搴曞簱浜哄憳
-// @Param uuids body []string true "搴曞簱浜哄憳ids "
+// @Param uuids body controllers.DelMultiPerson true "搴曞簱浜哄憳ids "
// @Success 200 {string} json "{"code":200, msg:"鐩綍缁撴瀯鏁版嵁", success:true}"
// @Failure 500 {string} json "{"code":500, msg:"杩斿洖閿欒淇℃伅", success:false}"
// @Router /data/api-v/dbperson/deleteMoreDbPerson [POST]
func (dbc DbPersonController) DeleteMoreDbPerson(c *gin.Context) {
- uuids := make([]string, 0, 5)
+ var uuids DelMultiPerson
err := c.BindJSON(&uuids)
if err !=nil || len(uuids)==0{
util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
return
}
+ logger.Debug("DeleteMoreDbPerson len(uuids):",len(uuids))
var pApi dbapi.DbPersonApi
- paramBody := util.Struct2Map(uuids)
- b, _ := pApi.DeleteMoreDbPerson(paramBody)
+ m := map[string]interface{}{
+ "ids": uuids,
+ }
+ b, _ := pApi.DeleteMoreDbPerson(m)
if b {
util.ResponseFormat(c, code.Success, "鍒犻櫎搴曞簱浜哄憳鎴愬姛")
} else {
@@ -195,45 +427,42 @@
// @Accept json
// @Produce json
// @Tags dbperson 搴曞簱浜哄憳
-// @Param reqMap body map false "{"tableId":"","orderName":"uuid","orderType":"desc","contentValue":"","page":1,"size":8}"
+// @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/queryDbPersonsByTbId [POST]
func (dbc DbPersonController) QueryDbPersonsByTbId(c *gin.Context) {
- reqBody := make(map[string]interface{}, 5)
- c.BindJSON(&reqBody)
- tableId := ""
- if reqBody["tableId"] != nil {
- tableId = reqBody["tableId"].(string)
+ //reqBody := make(map[string]interface{}, 5)
+ var reqBody DbtSearch
+ err := c.BindJSON(&reqBody)
+ if err !=nil || reqBody.Page <=0 || reqBody.Size <=0 {
+ util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
+ return
}
- if tableId == "" {
+
+ if reqBody.TableId == "" {
util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎锛屽簳搴搃d涓嶈兘涓虹┖")
return
}
orderName := "id"
- if reqBody["orderName"] != nil {
- orderName = reqBody["orderName"].(string)
+ if reqBody.OrderName != "" {
+ orderName = reqBody.OrderName
} // 鍒楀悕
orderType := "desc"
- if reqBody["orderType"] != nil {
- orderType = reqBody["orderType"].(string)
- } // 鍒楃被鍨�
- contentValue := ""
- if reqBody["contentValue"] != nil {
- contentValue = reqBody["contentValue"].(string)
- } //杈撳叆妗嗗唴瀹�
+ if reqBody.OrderType != "" {
+ orderType = reqBody.OrderType
+ }
+ //鎼滅储鍐呭
+ contentValue := reqBody.ContentValue
+
page := 1
- if reqBody["page"] != nil {
- page = int(reqBody["page"].(float64))
+ if reqBody.Page >1 {
+ page = reqBody.Page
} // 椤电爜
size := 8
- if reqBody["size"] != nil {
- size = int(reqBody["size"].(float64))
+ if reqBody.Size >8 {
+ size = reqBody.Size
} // 鏉℃暟
-
- if tableId == "all" || tableId == "" {
- // / 鎵�鏈変汉鍛�
- }
if orderType == "desc" {
orderType = "desc"
@@ -242,7 +471,7 @@
}
var pApi dbapi.DbPersonApi
paramBody := map[string]interface{}{
- "tableId":tableId,
+ "tableId": reqBody.TableId,
"orderName":orderName,
"orderType":orderType,
"contentValue":contentValue,
@@ -257,92 +486,63 @@
}
}
-// @Summary 鏌ヨ搴曞簱浜哄憳鍒楄〃
-// @Description 鏌ヨ搴撲汉鍛樺垪琛�
+type JoinDbTVo struct {
+ CaptureId string `json:"captureId"`
+ TableIds []string `json:"tableIds"`
+}
+
+// @Summary 鎶撴媿浜哄憳鍔犲叆搴曞簱
+// @Description 鎶撴媿浜哄憳鍔犲叆搴曞簱
// @Accept json
// @Produce json
-// @Tags dbperson 搴曞簱浜哄憳
-// @Param reqMap body map false "{"tableId":"","orderName":"uuid","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
- reqBody := make(map[string]interface{}, 5)
+// @Tags 搴曞簱浜哄憳
+// @Param obj body controllers.JoinDbTVo true "搴曞簱鏁版嵁"
+// @Success 200 {string} json "{"code":200, msg:"鐩綍缁撴瀯鏁版嵁", success:true}"
+// @Failure 500 {string} json "{"code":500, msg:"杩斿洖閿欒淇℃伅", success:false}"
+// @Router /data/api-v/dbperson/joinDbTable [POST]
+func (sc *DbPersonController) JoinDbTable(c *gin.Context) {
+ var reqBody JoinDbTVo
c.BindJSON(&reqBody)
- tableId := ""
- if reqBody["tableId"] != nil {
- tableId = reqBody["tableId"].(string)
- }
- orderName := "_id"
- if reqBody["orderName"] != nil {
- orderName = reqBody["orderName"].(string)
- } // 鍒楀悕
- orderType := "desc"
- if reqBody["orderType"] != nil {
- orderType = reqBody["orderType"].(string)
- } // 鍒楃被鍨�
- 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) // 鍥剧墖璺緞鏈夐棶棰�
+ if reqBody.CaptureId == "" || len(reqBody.TableIds) ==0 {
+ util.ResponseFormat(c,code.RequestParamError, "鍙傛暟鏈夎")
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 + "\"}}" // 搴曞簱浜哄憳
+ localConf, err := cache.GetServerInfo()
+ if err !=nil || localConf.AlarmIp == "" || localConf.AlarmPort <=0 {
+ util.ResponseFormat(c,code.ComError,"鎶ヨ璁剧疆鏈夎")
+ return
}
- if orderType == "desc" {
- orderType = "desc"
- } else {
- orderType = "asc"
+ videopersons, e := esApi.Videopersonsinfosbyid([]string{reqBody.CaptureId}, config.EsInfo.EsIndex.VideoPersons.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort)))
+ if e ==nil && videopersons !=nil && len(videopersons) == 1{
+ var personPicUrl = ""//浜鸿劯鍥剧墖
+ var feature = ""//鐗瑰緛
+ if videopersons[0].PicSmUrl !=nil && len(videopersons[0].PicSmUrl) >0 {
+ personPicUrl = videopersons[0].PicSmUrl[0]
+ }
+ fea, e2 := esApi.GetVideoPersonFaceFeatureById(reqBody.CaptureId, config.EsInfo.EsIndex.VideoPersons.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort)))
+ if e2 == nil && fea !="" {
+ feature = fea
+ }
+ if personPicUrl != "" && feature != "" {
+ var dbpApi dbapi.DbPersonApi
+ b,d := dbpApi.JoinDbTable(reqBody.TableIds, feature, personPicUrl)
+ if b {
+ util.ResponseFormat(c,code.Success,d)
+ return
+ } else {
+ util.ResponseFormat(c,code.ComError,"鍔犲叆澶辫触")
+ return
+ }
+ }
}
+ util.ResponseFormat(c,code.ComError,"鍔犲叆澶辫触")
+}
- //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
- /*fileName := picUrl // picIp 瀹氫箟鍦� fileController weedfs 鏂囦欢鏈嶅姟鍣� 璁块棶 璺緞 鍓嶇紑
- detect := gorun.GetSimpleFaceDetect(fileName)
- if len(detect) != 1 {
- util.ResponseFormat(c,code.TooManyFeatureFindError,"鍥剧墖鐗瑰緛鍊艰繃澶�")
- return
- }else {
- featByte = detect[0]["feature"].([]byte)
- }*/ // 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)
+type DbtSearch struct {
+ TableId string `json:"tableId"`
+ OrderName string `json:"orderName"`
+ OrderType string `json:"orderType"`
+ ContentValue string `json:"contentValue"`
+ Page int `json:"page"`
+ Size int `json:"size"`
}
--
Gitblit v1.8.0