From b5e236e28dee3e9481a48c615be22d70df44a42c Mon Sep 17 00:00:00 2001
From: liuxiaolong <736321739@qq.com>
Date: 星期二, 19 十一月 2019 15:25:49 +0800
Subject: [PATCH] add log
---
controllers/fileController.go | 346 +++++++++++++++++++++++++++++++++++++--------------------
1 files changed, 223 insertions(+), 123 deletions(-)
diff --git a/controllers/fileController.go b/controllers/fileController.go
index 89438a4..dc54ec3 100644
--- a/controllers/fileController.go
+++ b/controllers/fileController.go
@@ -6,6 +6,7 @@
"basic.com/pubsub/protomsg.git"
"bytes"
"encoding/base64"
+ "encoding/json"
"errors"
"fmt"
"github.com/gin-gonic/gin"
@@ -49,9 +50,10 @@
//var weedfsUri = "http://192.168.1.182:9500/submit"
+// @Security ApiKeyAuth
// @Summary 渚濇嵁鍥剧墖娣诲姞搴曞簱浜哄憳
// @Description 渚濇嵁鍥剧墖娣诲姞搴曞簱杩斿洖鏁版嵁浜哄憳
-// @Accept mpfd
+// @Accept multipart/form-data
// @Produce json
// @Tags dbperson 搴曞簱浜哄憳
// @Param file formData file true "搴曞簱浜哄憳鍥剧墖"
@@ -109,8 +111,10 @@
}
var faceExtractedMap = make(map[string]FaceExtract,0)
+// @Security ApiKeyAuth
// @Summary 浜鸿劯鎻愬彇
// @Description 浜鸿劯鎻愬彇
+// @Accept multipart/form-data
// @Produce json
// @Tags 浠ュ浘鎼滃浘
// @Param file formData file true "浜哄憳鍥剧墖"
@@ -195,6 +199,7 @@
BaseInfo []DbPersonVo `json:"baseInfo"`
VideoUrl string `json:"videoUrl"`
SdkName string `json:"sdkName"`
+ AlarmRules []AlarmRuleVo `json:"alarmRules"`
}
type DbPersonVo struct {
BwType string `json:"bwType"`
@@ -214,6 +219,15 @@
type ScoreIndex struct {
CompareScore float32
Index int
+}
+
+type AlarmRuleVo struct {
+ GroupId string `json:"groupId"`
+ AlarmLevel string `json:"alarmLevel"`
+ RuleText string `json:"ruleText"`
+ DefenceState bool `json:"defenceState"`
+ IsLink bool `json:"isLink"`
+ LinkInfo string `json:"linkInfo"`
}
//濉厖鍚戝墠绔繑鍥炵殑鏁版嵁
@@ -280,11 +294,12 @@
logger.Debug("localConfig is wrong!!!")
return nil
}
+ logger.Debug("captureIds:",strings.Join(captureIds,","))
videopersons, _ := esApi.Videopersonsinfosbyid(captureIds, config.EsInfo.EsIndex.VideoPersons.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort)))
logger.Debug("comp videoPersons.len:",len(videopersons))
for _,vp :=range videopersons {
isAlarmInt, _ := strconv.Atoi(vp.IsAlarm)
- bi := make([]DbPersonVo,0)
+ var bi []DbPersonVo
for _,p :=range vp.BaseInfo {
bi = append(bi, DbPersonVo{
PersonId: p.PersonId,
@@ -296,9 +311,22 @@
PhoneNum: p.PhoneNum,
Sex: p.Sex,
TableId: p.TableId,
- BwType: strconv.Itoa(int(p.BwType)),
+ BwType: p.BwType,
TableName: p.TableName,
})
+ }
+ var alarmRules []AlarmRuleVo
+ if vp.AlarmRules !=nil && len(vp.AlarmRules) >0 {
+ for _,ar :=range vp.AlarmRules {
+ alarmRules = append(alarmRules, AlarmRuleVo{
+ GroupId: ar.GroupId,
+ AlarmLevel: ar.AlarmLevel,
+ RuleText: ar.RuleText,
+ DefenceState: ar.DefenceState,
+ IsLink: ar.IsLink,
+ LinkInfo: ar.LinkInfo,
+ })
+ }
}
vpE := CompareResult{
Id: vp.Id,
@@ -317,6 +345,7 @@
VideoUrl: vp.VideoUrl,
BaseInfo: bi,
SdkName: "浜鸿劯",
+ AlarmRules: alarmRules,
}
resultList[captureM[vp.Id].Index] = vpE
}
@@ -367,6 +396,7 @@
}
}
+// @Security ApiKeyAuth
// @Summary 浠ュ浘鎼滃浘
// @Description 浠ュ浘鎼滃浘
// @Accept json
@@ -390,56 +420,56 @@
return
}
var faceB []byte
- var uploadImage string
- var smImages []string
- //if searchBody.CaptureId != "" {//鍋氭煡鎵炬浜�,鎼滄墍鏈夋姄鎷嶅拰搴曞簱
- // searchBase64Fea, err := esApi.GetVideoPersonFaceFeatureById(searchBody.CaptureId, config.EsInfo.EsIndex.VideoPersons.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort)))
- // if err !=nil {
- // util.ResponseFormat(c, code.ComError, "鎶撴媿鏁版嵁涓嶅瓨鍦紝璇锋鏌�")
- // return
- // }
- // if searchBase64Fea !=""{
- // decodeF, err := base64.StdEncoding.DecodeString(searchBase64Fea)
- // if err !=nil {
- // util.ResponseFormat(c, code.ComError, "鏈潯鎶撴�曠壒寰佷笉鏄痓ase64锛岃妫�鏌�")
- // return
- // }
- // faceB = decodeF
- // }
- //} else {//鍋氫互鍥炬悳鍥�
- //
- //}
+ logger.Debug("compTargetId:",searchBody.CompTargetId,",compTargetType:",searchBody.CompTargetType)
+ if searchBody.CompTargetId != "" {//鍋氭煡鎵炬浜�,鎸夋姄鎷嶇殑浜鸿劯鎴栬�呭簳搴撶殑浜鸿劯浠ュ浘鎼滃浘
+ if searchBody.CompTargetType == 0 {//鏈紶浜鸿劯鏄簳搴撲汉鑴�
+ var dbpApi dbapi.DbPersonApi
+ dbPersons, e := dbpApi.Dbpersoninfosbyid([]string{searchBody.CompTargetId})
+ if e ==nil && dbPersons !=nil && len(dbPersons) ==1 {
+ searchBase64Fea := dbPersons[0].FaceFeature
+ if searchBase64Fea != "" {
+ decodeF, err := base64.StdEncoding.DecodeString(dbPersons[0].FaceFeature)
+ if err !=nil {
+ util.ResponseFormat(c, code.ComError, "鏈潯搴曞簱浜哄憳鐗瑰緛涓嶆槸base64锛岃妫�鏌�")
+ return
+ }
+ faceB = decodeF
+ } else {
+ util.ResponseFormat(c, code.ComError, "鏈潯搴曞簱浜哄憳鐗瑰緛涓虹┖锛岃妫�鏌�")
+ return
+ }
+ } else {
+ util.ResponseFormat(c, code.ComError, "搴曞簱浜哄憳鏌ヨ澶辫触锛岃妫�鏌�")
+ return
+ }
+ } else {
+ searchBase64Fea, err := esApi.GetVideoPersonFaceFeatureById(searchBody.CompTargetId, config.EsInfo.EsIndex.VideoPersons.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort)))
+ if err !=nil {
+ util.ResponseFormat(c, code.ComError, "鎶撴媿鏁版嵁涓嶅瓨鍦紝璇锋鏌�")
+ return
+ }
- if searchBody.PicUrl == "" || len(searchBody.DataBases) == 0 {
- util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎")
- return
- }
- if face,ok := faceExtractedMap[searchBody.PicUrl];!ok{
- httpPicUrl := ""
- idx := strings.LastIndex(searchBody.PicUrl, ":")
- if idx>-1 {
- httpPicUrl = "http://"+localConf.WebPicIp+searchBody.PicUrl[idx:]
- } else {
- util.ResponseFormat(c, code.RequestParamError, "鍥剧墖璺緞鏈夎锛岃閲嶆柊涓婁紶鍥剧墖")
+ if searchBase64Fea !=""{
+ decodeF, err := base64.StdEncoding.DecodeString(searchBase64Fea)
+ if err !=nil {
+ util.ResponseFormat(c, code.ComError, "鏈潯鎶撴�曠壒寰佷笉鏄痓ase64锛岃妫�鏌�")
+ return
+ }
+ faceB = decodeF
+ }
+ }
+
+ } else {//鍋氫互鍥炬悳鍥�
+ if searchBody.PicUrl == "" || len(searchBody.DataBases) == 0 {
+ util.ResponseFormat(c, code.RequestParamError, "浠ュ浘鎼滃浘PicUrl涓嶈兘涓虹┖")
return
}
- logger.Debug("httpPicUrl:",httpPicUrl)
- rb,err := util.ReadImgData(httpPicUrl)
- if err !=nil {
- util.ResponseFormat(c, code.RequestParamError, "璇诲彇鍥剧墖澶辫触锛岃閲嶆柊涓婁紶鍥剧墖")
- return
- }
- feaB, oriImg, smImgs, e := GetFeaFromOneFaceImg(rb)
- if e !=nil {
- util.ResponseFormat(c, code.RequestParamError, "鏈彁鍙栧埌鐗瑰緛锛岃閲嶆柊涓婁紶鍥剧墖")
+ if face,ok := faceExtractedMap[searchBody.PicUrl];!ok{
+ util.ResponseFormat(c, code.RequestParamError, "浜鸿劯鐗瑰緛鏈娴嬶紝璇烽噸鏂颁笂浼犲浘鐗�")
return
} else {
- uploadImage = oriImg
- smImages = smImgs
- faceB = feaB
+ faceB = face.FaceBytes
}
- } else {
- faceB = face.FaceBytes
}
if faceB == nil {
@@ -499,9 +529,7 @@
CompareData: &totalData,
})
- m := make(map[string]interface{},5)
- m["uploadImage"] = uploadImage
- m["smImage"] = smImages
+ m := make(map[string]interface{},3)
if totalData != nil && totalData.Len() > 0{
sort.Sort(totalData)
total := totalData.Len()
@@ -526,76 +554,136 @@
util.ResponseFormat(c,code.Success,m)
}
-func GetCompareDataTwice(co *service.CompareOnce,arg *models.EsSearch) map[string]interface{} {
- //camIds := arg.TreeNodes
- //tabIds := arg.Tabs
- //taskIds := arg.Tasks
- //alarmLevels := arg.AlarmLevel
- //timeArr := arg.SearchTime
- //input := arg.InputValue
- //resultList := make([]CompareResult,0)
- //for _,each :=range *co.CompareData {
- // if each.Id !=""{
- // n :=0
- // if len(camIds) == 0 || isInArr(each.CameraId,camIds) {
- // n++
- // }
- // if len(tabIds) == 0 {
- // n++
- // }
- // if len(taskIds) == 0 || isInArr(each.TaskId, taskIds) {
- // n++
- // }
- // //鍒ゆ柇鎶ヨ绛夌骇
- // if len(alarmLevels) == 0 {
- //
- // }
- // n++
- // //鍒ゆ柇鏃堕棿
- // if len(timeArr) == 0 {
- //
- // }
- // n++
- // if input == ""{
- //
- // }
- // n++
- // if n == 6 {
- // resultList = append(resultList,cr)
- // }
- // } else {
- // resultList = append(resultList,cr)
- // }
- //}
+type PersonId struct {
+ Id string `json:"id"`
+}
- //logger.Debug("GetCompareDataTwice.data:",resultList)
- //service.SortByScore(resultList)
- from := (arg.Page-1)*arg.Size
- to := from + arg.Size
- var sCompResult protomsg.SdkCompareResult
- total := len(*co.CompareData)
- if total <= to {
- sCompResult.CompareResult = (*co.CompareData)[from:total]
- } else {
- sCompResult.CompareResult = (*co.CompareData)[from:to]
- }
- resultList := FillDataToCompareResult(&sCompResult)
-
+func GetCompareDataTwice(co *service.CompareOnce,searchBody *models.EsSearch) map[string]interface{} {
m := make(map[string]interface{},0)
- m["total"] = total
- m["compareNum"] = arg.CompareNum
- m["totalList"] = resultList
- //if from < len(resultList) {
- // if to <= len(resultList) {
- // m["totalList"] = resultList[from:to]
- // } else {
- // lte := len(resultList)
- // m["totalList"] = resultList[from:lte]
- // }
+
+ from := (searchBody.Page-1)*searchBody.Size
+ to := from + searchBody.Size
+
+ var hasCompEsPerson = false
+ if searchBody.DataBases !=nil {
+ for idx,tableId :=range searchBody.DataBases {
+ if tableId == "esData" {
+ hasCompEsPerson = true
+ searchBody.DataBases = append(searchBody.DataBases[:idx], searchBody.DataBases[idx+1:]...)
+ break
+ }
+ }
+ }
+ if hasCompEsPerson {//浜屾妫�绱S姣斿缁撴灉
+ arg := protomsg.CompareArgs{
+ CompareThreshold: searchBody.Threshold,
+ }
+ localConf, err := cache.GetServerInfo()
+ if err ==nil && localConf.AlarmIp != "" && localConf.ServerId != "" {
+ arg.Source = true // 鏍囪瘑鏉ユ簮鏄痺eb
+ arg.AlarmLevel = searchBody.AlarmLevel
+ arg.Tasks = searchBody.Tasks
+ arg.TreeNodes = searchBody.TreeNodes
+ arg.Tabs = searchBody.Tabs
+ arg.SearchTime = searchBody.SearchTime
+ arg.InputValue = searchBody.InputValue
+ arg.Collection = searchBody.Collection
+ arg.AnalyServerId = localConf.ServerId
+ alarmLevelTypes := strings.Replace(strings.Trim(fmt.Sprint(getAlarmLevel(searchBody.AlarmLevel)), "[]"), " ", "\",\"", -1)
+ captureIds := esApi.GetAllLocalVideopersonsId(arg, config.EsInfo.EsIndex.VideoPersons.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort)), alarmLevelTypes)
+ logger.Debug("searchPhoto first Result.len:",len(*co.CompareData),"twice len(captureIds):",len(captureIds))
+ if captureIds !=nil {
+ var aResult protomsg.SdkCompareResult
+ aList := getTwiceSearchResult(co, &captureIds, searchBody)
+ aTotal := aList.Len()
+ if aTotal <= to {
+ aResult.CompareResult = (*aList)[from:aTotal]
+ } else {
+ aResult.CompareResult = (*aList)[from:to]
+ }
+ out := FillDataToCompareResult(&aResult)
+ m["total"] = aTotal
+ m["compareNum"] = searchBody.CompareNum
+ m["totalList"] = out
+ return m
+ } else {
+ m["total"] = 0
+ m["compareNum"] = searchBody.CompareNum
+ m["totalList"] = []interface{}{}
+ return m
+ }
+ }
+ } else {//搴曞簱鏁版嵁鐨勪簩娆℃绱�
+ var dbpApi dbapi.DbPersonApi
+ personIds, _ := dbpApi.FindLikePersonIds(searchBody.DataBases, searchBody.InputValue)
+ logger.Debug("searchPhoto first Result.len:",len(*co.CompareData),"personIds:",personIds)
+ if personIds !=nil {
+ var pIds []PersonId
+ b, _ := json.Marshal(personIds)
+ json.Unmarshal(b, &pIds)
+ if len(pIds) >0 {
+ var personIdArr []string
+ for _,pid :=range pIds{
+ personIdArr = append(personIdArr, pid.Id)
+ }
+ var aResult protomsg.SdkCompareResult
+ aList := getTwiceSearchResult(co, &personIdArr, searchBody)
+ aTotal := aList.Len()
+ if aTotal <= to {
+ aResult.CompareResult = (*aList)[from:aTotal]
+ } else {
+ aResult.CompareResult = (*aList)[from:to]
+ }
+ out := FillDataToCompareResult(&aResult)
+ m["total"] = aTotal
+ m["compareNum"] = searchBody.CompareNum
+ m["totalList"] = out
+ return m
+ }
+
+ } else {
+ m["total"] = 0
+ m["compareNum"] = searchBody.CompareNum
+ m["totalList"] = []interface{}{}
+ return m
+ }
+ }
+
+
+ //var sCompResult protomsg.SdkCompareResult
+ //total := len(*co.CompareData)
+ //if total <= to {
+ // sCompResult.CompareResult = (*co.CompareData)[from:total]
//} else {
- // m["totalList"] = []CompareResult{}
+ // sCompResult.CompareResult = (*co.CompareData)[from:to]
//}
+ //resultList := FillDataToCompareResult(&sCompResult)
+
+
+ m["total"] = 0
+ m["compareNum"] = searchBody.CompareNum
+ m["totalList"] = []interface{}{}
+
return m
+}
+
+func getTwiceSearchResult(co *service.CompareOnce, scopeIds *[]string, searchBody *models.EsSearch) *service.CompareList{
+ m := make(map[string]string)
+ for _,capId :=range *scopeIds {
+ m[capId] = capId
+ }
+ var totalData service.CompareList
+ for _,each :=range *co.CompareData {
+ if _,ok :=m[each.Id];ok && each.CompareScore >= searchBody.Threshold {
+ totalData = append(totalData, each)
+ }
+ }
+
+ if totalData != nil && totalData.Len() > 0{
+ sort.Sort(totalData)
+ }
+
+ return &totalData
}
func isInArr(id string,arr []string) bool {
@@ -717,9 +805,10 @@
/**涓婁紶鏂规硶**/
+// @Security ApiKeyAuth
// @Summary 鎵归噺娣诲姞搴曞簱浜哄憳
// @Description 渚濇嵁鍥剧墖鎵归噺娣诲姞搴曞簱浜哄憳
-// @Accept mpfd
+// @Accept multipart/form-data
// @Produce json
// @Tags dbperson 搴曞簱浜哄憳
// @Param files formData file[] true "澶氫釜搴曞簱浜哄憳鍥剧墖"
@@ -739,8 +828,10 @@
}
extNames := make([]string, 0)
addResult := make(map[string]interface{}, 0)
- successList := make([]string, 0)
+ successList := make([]string,0)
failList := make([]string,0)
+ noFaceList := make([]string,0)
+ multiFaceList := make([]string,0)
tAllStart := time.Now()
var wg sync.WaitGroup
var lock sync.Mutex
@@ -768,7 +859,13 @@
field, _, err1 := uploadFileReturnAddr(file, filename, tableId)
lock.Lock()
if err1 != nil || field == "" {
- failList = append(failList, filename)
+ if err1 !=nil && err1.Error() == "NotFeatureFindError" {
+ noFaceList = append(noFaceList, filename)
+ } else if err1 !=nil && err1.Error() == "TooManyFaces" {
+ multiFaceList = append(multiFaceList, filename)
+ } else {
+ failList = append(failList, filename)
+ }
} else {
successList = append(successList, filename)
}
@@ -780,13 +877,15 @@
logger.Debug("鍒�",len(fileHeaders),"寮犱汉鑴哥敤鏃讹細", time.Since(tAllStart))
addResult["successList"] = successList
addResult["failList"] = failList
+ addResult["noFaceList"] = noFaceList
+ addResult["multiFaceList"] = multiFaceList
addResult["fields"] = extNames
- //if len(successList)>0 {
+ if len(successList)>0 {
util.ResponseFormat(c, code.DbPersonUploadSuccess, addResult)
- //} else {
- // util.ResponseFormat(c, code.DbPersonUploadFail, addResult)
- //}
+ } else {
+ util.ResponseFormat(c, code.DbPersonUploadFail, addResult)
+ }
}
type EsPersonSave struct {
@@ -797,9 +896,10 @@
IdCard string `json:"idCard"`
}
+// @Security ApiKeyAuth
// @Summary 涓婁紶鍥剧墖 骞跺垏鍥�
// @Description 涓婁紶鍥剧墖 骞跺垏鍥�
-// @Accept mpfd
+// @Accept multipart/form-data
// @Produce json
// @Tags dbperson 搴曞簱浜哄憳
// @Param file formData file true "搴曞簱浜哄憳鍥剧墖"
--
Gitblit v1.8.0