| | |
| | | "basic.com/pubsub/protomsg.git" |
| | | "bytes" |
| | | "encoding/base64" |
| | | "encoding/json" |
| | | "errors" |
| | | "fmt" |
| | | "github.com/gin-gonic/gin" |
| | |
| | | util.ResponseFormat(c, code.ComError, "抓拍数据不存在,请检查") |
| | | return |
| | | } |
| | | logger.Debug("es person base64:",searchBase64Fea) |
| | | |
| | | if searchBase64Fea !=""{ |
| | | decodeF, err := base64.StdEncoding.DecodeString(searchBase64Fea) |
| | | if err !=nil { |
| | |
| | | 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 {//二次检索ES比对结果 |
| | | arg := protomsg.CompareArgs{ |
| | | CompareThreshold: searchBody.Threshold, |
| | | } |
| | | localConf, err := cache.GetServerInfo() |
| | | if err ==nil && localConf.AlarmIp != "" && localConf.ServerId != "" { |
| | | arg.Source = true // 标识来源是web |
| | | 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) |
| | | 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) |
| | | 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) *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{ |
| | | totalData = append(totalData, each) |
| | | } |
| | | } |
| | | |
| | | if totalData != nil && totalData.Len() > 0{ |
| | | sort.Sort(totalData) |
| | | } |
| | | |
| | | return &totalData |
| | | } |
| | | |
| | | func isInArr(id string,arr []string) bool { |
| | | for _,v :=range arr { |
| | | if v == id { |