From 7c811247ecf143e08c576986a884bedadc57dd66 Mon Sep 17 00:00:00 2001 From: liuxiaolong <liuxiaolong@aiotlink.com> Date: 星期五, 05 六月 2020 18:29:41 +0800 Subject: [PATCH] add refresh token to resp --- controllers/dbtableperson.go | 465 ++++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 322 insertions(+), 143 deletions(-) diff --git a/controllers/dbtableperson.go b/controllers/dbtableperson.go index 966de9d..c0ed8ac 100644 --- a/controllers/dbtableperson.go +++ b/controllers/dbtableperson.go @@ -4,26 +4,28 @@ "basic.com/dbapi.git" "basic.com/fileServer/WeedFSClient.git" "basic.com/pubsub/protomsg.git" + "basic.com/valib/logger.git" "encoding/base64" - "encoding/json" "io/ioutil" + "sort" "strconv" "time" - "webserver/extend/logger" + "webserver/cache" "webserver/service" "github.com/gin-gonic/gin" - "github.com/satori/go.uuid" "webserver/extend/code" "webserver/extend/config" - "webserver/extend/esutil" "webserver/extend/util" "webserver/models" + + esApi "basic.com/pubsub/esutil.git" ) type DbPersonController struct { } +// @Security ApiKeyAuth // @Summary 娣诲姞搴曞簱浜哄憳 // @Description 娣诲姞搴曞簱浜哄憳 // @Accept json @@ -45,26 +47,58 @@ paramBody := util.Struct2Map(dbperson) b, data := pApi.AddDbPerson(paramBody) if b { - util.ResponseFormat(c, code.Success, data) + util.ResponseFormat(c, code.AddSuccess, data) } else { - util.ResponseFormat(c, code.ServiceInsideError, "") + util.ResponseFormat(c, code.ComError, "") + } +} + + +type MultiCarNo struct { + TableId string `json:"tableId" binding:"required"` + CarNos []string `json:"carNos" binding:"required"` +} + +// @Security ApiKeyAuth +// @Summary 鎵归噺娣诲姞搴曞簱杞﹁締 +// @Description 鎵归噺娣诲姞搴曞簱杞﹁締 +// @Accept json +// @Produce json +// @Tags dbperson 搴曞簱浜哄憳 +// @Param reqBody body controllers.MultiCarNo true "鎵归噺杞︾墝鍙�" +// @Success 200 {string} json "{"code":200, msg:"", success:true}" +// @Failure 500 {string} json "{"code":500, msg:"", success:false}" +// @Router /data/api-v/dbperson/multiUploadCarNo [post] +func (dbc DbPersonController) MultiUploadCarNo(c *gin.Context) { + var reqBody MultiCarNo + err := c.BindJSON(&reqBody) + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "") + return + } + logger.Debug("multiUploadCarNo reqBody:", reqBody) + var pApi dbapi.DbPersonApi + paramBody := util.Struct2Map(reqBody) + if pApi.MultiUploadCarNo(paramBody) { + util.ResponseFormat(c,code.UploadSuccess,"涓婁紶鎴愬姛") + } else { + util.ResponseFormat(c,code.ComError,"") } } func addDbPerson(dbperson *models.Dbtablepersons) (result map[string]interface{}) { - personId := uuid.NewV4().String() - dbperson.Id = personId dbperson.PriInsert() var pApi dbapi.DbPersonApi paramBody := util.Struct2Map(dbperson) - b, _ := pApi.AddDbPerson(paramBody) + b, d := pApi.AddDbPerson(paramBody) result = map[string]interface{}{} if b { result["code"] = 200 + personMap := util.Struct2Map(d) data := make(map[string]interface{}) - data["uuid"] = personId + data["uuid"] = personMap["id"] result["data"] = data result["success"] = true result["msg"] = "娣诲姞鎴愬姛" @@ -77,6 +111,7 @@ return result } +// @Security ApiKeyAuth // @Summary 淇敼搴曞簱浜哄憳 // @Description 淇敼搴曞簱浜哄憳 // @Accept json @@ -98,17 +133,151 @@ paramBody := util.Struct2Map(dbperson) b, data := pApi.UpdateDbPerson(paramBody) if b { - util.ResponseFormat(c, code.Success, data) + util.ResponseFormat(c, code.UpdateSuccess, data) } else { - util.ResponseFormat(c, code.ServiceInsideError, "") + util.ResponseFormat(c, code.UpdateFail, "") } } -// @Summary 鏇存柊搴曞簱浜鸿劯鐓х墖 -// @Description 鏇存柊搴曞簱浜鸿劯鐓х墖 +// @Security ApiKeyAuth +// @Summary 搴曞簱浜哄憳浠ュ浘鎼滃浘 +// @Description 搴曞簱浜哄憳浠ュ浘鎼滃浘 // @Accept json // @Produce json -// @Tags 搴曞簱浜哄憳 +// @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: float64(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 = 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 +} + +// @Security ApiKeyAuth +// @Summary 鏇存柊搴曞簱浜鸿劯鐓х墖 +// @Description 鏇存柊搴曞簱浜鸿劯鐓х墖 +// @Accept multipart/form-data +// @Produce json +// @Tags dbperson 搴曞簱浜哄憳 // @Param id formData string true "浜哄憳id" // @Param file formData file true "浜鸿劯鍥剧墖" // @Success 200 {string} json "{"code":200, msg:"", success:true}" @@ -152,10 +321,15 @@ break } } - var weedfsUri = "http://"+config.WeedFs.Ip+":"+strconv.Itoa(config.WeedFs.UploadPort)+"/submit" + 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?collection=persistent" //鏍规嵁浜鸿劯鍧愭爣鎵e嚭浜鸿劯灏忓浘 t1 := time.Now() - cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom)) + cutFaceImgData,_ := util.SubCutImg(pI, rcFace, 20) logger.Debug("SubImg鐢ㄦ椂锛�", time.Since(t1)) t1 = time.Now() weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, filename, cutFaceImgData) @@ -165,55 +339,22 @@ 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) { - url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport + - "/" + config.EsInfo.EsIndex.Dbtablepersons.IndexName + "/_update_by_query?refresh" - jsonDSL := ` - { - "script": { - "lang": "painless", - "inline": "ctx._source.enable = 0" - }, - "query": { - "term": { - "tableId": "` + id + `" - } - } -} -` - buf, err := esutil.EsReq("POST", url, []byte(jsonDSL)) - if err != nil { - logger.Debug("http request info is err!") - message = "淇敼澶辫触" - } - var info interface{} - json.Unmarshal(buf, &info) - out, ok := info.(map[string]interface{}) - if !ok { - logger.Debug("http response interface can not change map[string]interface{}") - message = "淇敼澶辫触" - } - middle, ok := out["updated"].(float64) - if !ok { - logger.Debug("first result change error!") - message = "淇敼澶辫触" - } - if middle >= 0 { - logger.Debug("淇敼鎴愬姛") - message = "淇敼鎴愬姛,鏇存柊鐘舵�佹潯鏁颁负" + strconv.Itoa(int(middle)) - } - return message -} - +// @Security ApiKeyAuth // @Summary 鍒犻櫎搴曞簱浜哄憳 // @Description 鍒犻櫎搴撲汉鍛� // @Accept x-www-form-urlencoded @@ -241,6 +382,7 @@ type DelMultiPerson []string +// @Security ApiKeyAuth // @Summary 鍒犻櫎搴曞簱浜哄憳 // @Description 鍒犻櫎搴撲汉鍛� // @Accept json @@ -270,6 +412,7 @@ } } +// @Security ApiKeyAuth // @Summary 鏌ヨ搴曞簱浜哄憳鍒楄〃 // @Description 鏌ヨ搴撲汉鍛樺垪琛� // @Accept json @@ -299,8 +442,9 @@ orderType := "desc" if reqBody.OrderType != "" { orderType = reqBody.OrderType - } // 鍒楃被鍨� - contentValue := "" + } + //鎼滅储鍐呭 + contentValue := reqBody.ContentValue page := 1 if reqBody.Page >1 { @@ -333,95 +477,130 @@ } } -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"` +type JoinDbTVo struct { + CaptureId string `json:"captureId"` + TableIds []string `json:"tableIds"` } -/* -// @Summary 鏌ヨ搴曞簱浜哄憳鍒楄〃 -// @Description 鏌ヨ搴撲汉鍛樺垪琛� +// @Security ApiKeyAuth +// @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 +// @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 (dbc *DbPersonController) JoinDbTable(c *gin.Context) { + var reqBody JoinDbTVo 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) // 鍥剧墖璺緞鏈夐棶棰� + 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" - } + aiOceans, e := esApi.AIOceaninfosbyid([]string{reqBody.CaptureId}, config.EsInfo.EsIndex.AiOcean.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort))) + if e ==nil && aiOceans !=nil && len(aiOceans) == 1{ + var personPicUrl = ""//浜鸿劯鍥剧墖 + var feature = ""//鐗瑰緛 + if aiOceans[0].TargetInfo !=nil && len(aiOceans[0].TargetInfo) >0 { + personPicUrl = aiOceans[0].TargetInfo[0].PicSmUrl + } + fea, e2 := esApi.GetVideoPersonFaceFeatureById(reqBody.CaptureId, config.EsInfo.EsIndex.AiOcean.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort))) + if e2 == nil && fea !="" { + feature = fea + } + if personPicUrl != "" && feature != "" { + //灏嗚繖寮犳姄鎷嶇殑鐓х墖涓嬭浇涓嬫潵涓婁紶鍒癱ollection=persistent鐨勯泦鍚堜腑锛岄槻姝㈣娓呯悊鎺� + picB, e3 := util.DownLoad("http://" + personPicUrl) + if e3 == nil { + var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit?collection=persistent" + newPersonPicUrl, e4 := WeedFSClient.UploadFile(weedfsUri, "capturePerson", picB) + if e4 == nil { + var dbpApi dbapi.DbPersonApi + b,d := dbpApi.JoinDbTable(reqBody.TableIds, feature, newPersonPicUrl) + if b { + util.ResponseFormat(c,code.Success,d) + return + } else { + util.ResponseFormat(c,code.ComError,"鍔犲叆澶辫触") + return + } + } + } - //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 + } + } + util.ResponseFormat(c,code.ComError,"鍔犲叆澶辫触") +} +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"` +} + +type DbPersonMove struct { + PersonId string `json:"personId"` + TableIds []string `json:"tableIds"` +} + +// @Security ApiKeyAuth +// @Summary 浜哄憳绉诲姩 +// @Description 浜哄憳绉诲姩 +// @Accept json +// @Produce json +// @Tags dbperson 搴曞簱浜哄憳 +// @Param obj body controllers.DbPersonMove true "绉诲姩鍙傛暟" +// @Success 200 {string} json "{"code":200, msg:"", success:true}" +// @Failure 500 {string} json "{"code":500, msg:"", success:false}" +// @Router /data/api-v/dbperson/move [POST] +func (dbc *DbPersonController) Move(c *gin.Context) { + var reqBody DbPersonMove + c.BindJSON(&reqBody) + if reqBody.PersonId == "" || len(reqBody.TableIds) == 0 { + util.ResponseFormat(c,code.RequestParamError, "鍙傛暟鏈夎") + return } - to := page * size - datalist := sourceCompare(data["datalist"].([]interface{}), false, featByte, threshold) - total := len(datalist) - if from > total { - from = total + var dbpApi dbapi.DbPersonApi + b,d := dbpApi.Move(reqBody.PersonId, reqBody.TableIds) + if b { + util.ResponseFormat(c,code.Success,d) + } else { + util.ResponseFormat(c,code.ComError,"") } - if to > total { - to = total +} + +// @Security ApiKeyAuth +// @Summary 浜哄憳澶嶅埗 +// @Description 浜哄憳澶嶅埗 +// @Accept json +// @Produce json +// @Tags dbperson 搴曞簱浜哄憳 +// @Param obj body controllers.DbPersonMove true "澶嶅埗鍙傛暟" +// @Success 200 {string} json "{"code":200, msg:"", success:true}" +// @Failure 500 {string} json "{"code":500, msg:"", success:false}" +// @Router /data/api-v/dbperson/copy [POST] +func (dbc *DbPersonController) Copy(c *gin.Context) { + var reqBody DbPersonMove + c.BindJSON(&reqBody) + if reqBody.PersonId == "" || len(reqBody.TableIds) == 0 { + util.ResponseFormat(c,code.RequestParamError, "鍙傛暟鏈夎") + return } - data["datalist"] = datalist[from:to] - data["total"] = len(datalist) - //c.JSON(200, data) - util.ResponseFormat(c, code.Success, data) -}*/ + var dbpApi dbapi.DbPersonApi + b,d := dbpApi.Copy(reqBody.PersonId, reqBody.TableIds) + if b { + util.ResponseFormat(c,code.Success,d) + } else { + util.ResponseFormat(c,code.ComError,"") + } +} \ No newline at end of file -- Gitblit v1.8.0