From adbcd8f2d5407cc5351a9fee39f13596f5b6c2c0 Mon Sep 17 00:00:00 2001 From: sunty <1172534965@qq.com> Date: 星期二, 01 九月 2020 14:09:41 +0800 Subject: [PATCH] add endTime GetFaceDataByTimeAndTotal --- EsClient.go | 240 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 218 insertions(+), 22 deletions(-) diff --git a/EsClient.go b/EsClient.go index 8481e19..70c3073 100644 --- a/EsClient.go +++ b/EsClient.go @@ -476,6 +476,162 @@ return tmpinfos } + +func FaceSourceAggregations(buf []byte, thresholdTime int,thresholdStayTime int) (sources []map[string]interface{}, err error) { + loc, err := time.LoadLocation("Asia/Shanghai") + if err != nil { + return nil, errors.New("鏃跺尯璁剧疆閿欒") + } + var info interface{} + json.Unmarshal(buf, &info) + out, ok := info.(map[string]interface{}) + if !ok { + return nil, errors.New("http response interface can not change map[string]interface{}") + } + middle, ok := out["aggregations"].(map[string]interface{}) + if !ok { + return nil, errors.New("first hits change error!") + } + bucketsAggs := middle["buckets_aggs"].(map[string]interface{}) + buckets := bucketsAggs["buckets"].([]interface{}) + if len(buckets) == 0 { + return nil, nil + } + allSource := make([]map[string]interface{}, 0) + for _, inf := range buckets { + hitsSources := make([]map[string]interface{}, 0) + topAttentionHits := inf.(map[string]interface{})["top_attention_hits"].(map[string]interface{}) + middleHits := topAttentionHits["hits"].(map[string]interface{}) + finalHits := middleHits["hits"].([]interface{}) + startTime := "" + indexLength := len(finalHits) + point := 0 + for _, in := range finalHits { + point = point+1 + tmpHitSource := make(map[string]interface{}) + tmpBuf, ok := in.(map[string]interface{}) + if !ok { + fmt.Println("change to source error!") + continue + } + source, ok := tmpBuf["_source"].(map[string]interface{}) + if !ok { + fmt.Println("change _source error!") + continue + } + baseInfo := source["baseInfo"].([]interface{})[0].(map[string]interface{}) + targetInfo := source["targetInfo"].([]interface{})[0].(map[string]interface{}) + tmpTime := source["picDate"].(string) + mTime, err := time.ParseInLocation("2006-01-02 15:04:05", tmpTime, loc) + if err != nil { + return nil, errors.New("鏃堕棿瑙f瀽閿欒") + } + + sTime := tmpTime + eTime := mTime.Add(time.Second*1).Format("2006-01-02 15:04:05") + stayTime := 1.0 + if startTime != "" && point < indexLength{ + sinTime, _ := time.ParseInLocation("2006-01-02 15:04:05", startTime, loc) + passTime := math.Abs(mTime.Sub(sinTime).Seconds()) + hitsSources[len(hitsSources)-1]["stayTime"] = stayTime + //fmt.Println("passTime: ", passTime) + if int(passTime) <= thresholdTime || point == indexLength{ + startTime = tmpTime + hitsSources[len(hitsSources)-1]["endTime"] = tmpTime + if point == indexLength{ + hitStartTime := hitsSources[len(hitsSources)-1]["startTime"].(string) + realStartTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hitStartTime, loc) + stayTime = math.Abs(mTime.Sub(realStartTime).Seconds()) + hitsSources[len(hitsSources)-1]["stayTime"] = stayTime + startTime = "" + } + continue + } else { + hitStartTime := hitsSources[len(hitsSources)-1]["startTime"].(string) + hitEndTime := hitsSources[len(hitsSources)-1]["endTime"].(string) + realStartTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hitStartTime, loc) + realEndTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hitEndTime, loc) + stayTime = math.Abs(realEndTime.Sub(realStartTime).Seconds()) + if sinTime.Sub(mTime).Seconds() == 0 { + sinTime.Add(time.Second * 1) + sinTime.Format("2006-01-02 15:04:05") + hitsSources[len(hitsSources)-1]["endTime"] = tmpTime + stayTime = 1 + } + hitsSources[len(hitsSources)-1]["stayTime"] = stayTime + startTime = "" + continue + //fmt.Println(hitsSources[len(hitsSources)-1]) + } + } + //fmt.Println("========================================================") + startTime = tmpTime + tmpHitSource["faceId"] = baseInfo["targetId"].(string) + if targetInfo["areaId"] == nil { + continue + } + tmpHitSource["areaId"] = targetInfo["areaId"].(string) + tmpHitSource["startTime"] = sTime + tmpHitSource["faceImg"] = targetInfo["picSmUrl"].(string) + tmpHitSource["endTime"] = eTime + tmpHitSource["stayTime"] = stayTime + hitsSources = append(hitsSources, tmpHitSource) + } + allSource = append(allSource, hitsSources...) + } + return allSource, nil +} + +func SourceDeduplication(buf [] byte) ([]string,error) { + var info interface{} + json.Unmarshal(buf, &info) + out, ok := info.(map[string]interface{}) + if !ok { + return nil, errors.New("http response interface can not change map[string]interface{}") + } + middle, ok := out["aggregations"].(map[string]interface{}) + if !ok { + return nil, errors.New("first hits change error!") + } + bucketsAggs := middle["buckets_aggs"].(map[string]interface{}) + buckets := bucketsAggs["buckets"].([]interface{}) + if len(buckets) == 0 { + return nil, nil + } + faceId := make([]string,0) + for _, in := range buckets { + faceId = append(faceId, in.(map[string]interface{})["key"].(map[string]interface{})["faceId"].(string)) + } + return faceId,nil +} + +//瑙f瀽鑱氬悎璁℃暟缁撴瀯 +func SourceStatistics(buf [] byte) ([]map[string]interface{},error) { + var info interface{} + json.Unmarshal(buf, &info) + out, ok := info.(map[string]interface{}) + if !ok { + return nil, errors.New("http response interface can not change map[string]interface{}") + } + middle, ok := out["aggregations"].(map[string]interface{}) + if !ok { + return nil, errors.New("first hits change error!") + } + bucketsAggs := middle["buckets_aggs"].(map[string]interface{}) + buckets := bucketsAggs["buckets"].([]interface{}) + if len(buckets) == 0 { + return nil, nil + } + resultData := make([]map[string]interface{},0) + for _, pick := range buckets { + data := make(map[string]interface{},0) + data["areaId"] = pick.(map[string]interface{})["key"].(map[string]interface{})["areaId"].(string) + data["peopleNum"] = int(pick.(map[string]interface{})["doc_count"].(float64)) + resultData = append(resultData, data) + } + return resultData,nil +} + func SourceAggregations(buf [] byte, thresholdTime float64, queryUseTime float64) (sources map[string]interface{}, err error) { s := make(map[string]interface{}) loc, err := time.LoadLocation("Asia/Shanghai") @@ -506,9 +662,12 @@ topAttentionHits := inf.(map[string]interface{})["top_attention_hits"].(map[string]interface{}) middleHits := topAttentionHits["hits"].(map[string]interface{}) finalHits := middleHits["hits"].([]interface{}) - tmpHitSource := make(map[string]interface{}) startTime := "" + indexLength := len(finalHits) + point := 0 for _, in := range finalHits { + point = point+1 + tmpHitSource := make(map[string]interface{}) tmpbuf, ok := in.(map[string]interface{}) if !ok { fmt.Println("change to source error!") @@ -528,23 +687,42 @@ } sTime := tmpTime - eTime := tmpTime - stayTime := 0.0 - if startTime != "" { + eTime := mTime.Add(time.Second*1).Format("2006-01-02 15:04:05") + stayTime := 1.0 + if startTime != "" && point < indexLength{ sinTime, _ := time.ParseInLocation("2006-01-02 15:04:05", startTime, loc) - stayTime = math.Abs(sinTime.Sub(mTime).Seconds()) - if stayTime <= thresholdTime { + passTime := math.Abs(mTime.Sub(sinTime).Seconds()) + hitsSources[len(hitsSources)-1]["stayTime"] = stayTime + //fmt.Println("passTime: ", passTime) + if passTime <= thresholdTime || point == indexLength{ startTime = tmpTime hitsSources[len(hitsSources)-1]["endTime"] = tmpTime + if point == indexLength{ + hitStartTime := hitsSources[len(hitsSources)-1]["startTime"].(string) + realStartTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hitStartTime, loc) + stayTime = math.Abs(mTime.Sub(realStartTime).Seconds()) + hitsSources[len(hitsSources)-1]["stayTime"] = stayTime + } continue } else { + hitStartTime := hitsSources[len(hitsSources)-1]["startTime"].(string) + hitEndTime := hitsSources[len(hitsSources)-1]["endTime"].(string) + realStartTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hitStartTime, loc) + realEndTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hitEndTime, loc) + stayTime = math.Abs(realEndTime.Sub(realStartTime).Seconds()) if sinTime.Sub(mTime).Seconds() == 0 { sinTime.Add(time.Second * 1) sinTime.Format("2006-01-02 15:04:05") - hitsSources[len(hitsSources)-1]["endTime"] = sinTime + hitsSources[len(hitsSources)-1]["endTime"] = tmpTime + stayTime = 1 } + hitsSources[len(hitsSources)-1]["stayTime"] = stayTime + startTime = "" + continue + //fmt.Println(hitsSources[len(hitsSources)-1]) } } + //fmt.Println("========================================================") startTime = tmpTime tmpHitSource["personId"] = baseInfo["targetId"].(string) tmpHitSource["cameraId"] = source["cameraId"].(string) @@ -565,15 +743,11 @@ tmpHitSource["endTBackGroundPicUrl"] = source["picMaxUrl"].([]interface{}) tmpHitSource["endTFacePicUrl"] = targetInfo["picSmUrl"].(string) if source["picWH"] != nil { - tmpHitSource["picWH"] = source["picWH"].(map[string]interface{}) + tmpHitSource["picWH"] = source["picWH"].(map[string]interface{}) } hitsSources = append(hitsSources, tmpHitSource) } allSource = append(allSource, hitsSources...) - // tmpSources["groupKey"] = groupKey - // tmpSources["doc_count"] = docCount - // tmpSources["hits_sources"] = hitsSources - // sources = append(sources, tmpSources) } count := len(allSource) //fmt.Println(count) @@ -610,9 +784,13 @@ topAttentionHits := inf.(map[string]interface{})["top_attention_hits"].(map[string]interface{}) middleHits := topAttentionHits["hits"].(map[string]interface{}) finalHits := middleHits["hits"].([]interface{}) - tmpHitSource := make(map[string]interface{}) + indexLength := len(finalHits) + point := 0 startTime := "" + //fmt.Println("finalHits: ",finalHits) for _, in := range finalHits { + point = point+1 + tmpHitSource := make(map[string]interface{}) tmpbuf, ok := in.(map[string]interface{}) if !ok { fmt.Println("change to source error!") @@ -632,21 +810,39 @@ } sTime := tmpTime - eTime := tmpTime - stayTime := 0.0 - if startTime != "" { + eTime := mTime.Add(time.Second*1).Format("2006-01-02 15:04:05") + stayTime := 1.0 + if startTime != "" && point < indexLength{ sinTime, _ := time.ParseInLocation("2006-01-02 15:04:05", startTime, loc) - stayTime = math.Abs(sinTime.Sub(mTime).Seconds()) - if stayTime <= thresholdTime { + passTime := math.Abs(mTime.Sub(sinTime).Seconds()) + hitsSources[len(hitsSources)-1]["stayTime"] = stayTime + //fmt.Println("passTime: ", passTime) + if passTime <= thresholdTime || point == indexLength{ startTime = tmpTime hitsSources[len(hitsSources)-1]["endTime"] = tmpTime + if point == indexLength{ + hitStartTime := hitsSources[len(hitsSources)-1]["startTime"].(string) + realStartTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hitStartTime, loc) + stayTime = math.Abs(mTime.Sub(realStartTime).Seconds()) + hitsSources[len(hitsSources)-1]["stayTime"] = stayTime + } continue } else { + hitStartTime := hitsSources[len(hitsSources)-1]["startTime"].(string) + hitEndTime := hitsSources[len(hitsSources)-1]["endTime"].(string) + realStartTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hitStartTime, loc) + realEndTime, _ := time.ParseInLocation("2006-01-02 15:04:05", hitEndTime, loc) + stayTime = math.Abs(realEndTime.Sub(realStartTime).Seconds()) if sinTime.Sub(mTime).Seconds() == 0 { sinTime.Add(time.Second * 1) sinTime.Format("2006-01-02 15:04:05") - hitsSources[len(hitsSources)-1]["endTime"] = sinTime + hitsSources[len(hitsSources)-1]["endTime"] = tmpTime + stayTime = 1 } + hitsSources[len(hitsSources)-1]["stayTime"] = stayTime + startTime = "" + continue + //fmt.Println(hitsSources[len(hitsSources)-1]) } } startTime = tmpTime @@ -673,9 +869,9 @@ } hitsSources = append(hitsSources, tmpHitSource) } - tmpSources["groupKey"] = groupKey - tmpSources["hits_sources"] = hitsSources - sources = append(sources, tmpSources) + tmpSources["groupKey"] = groupKey + tmpSources["hits_sources"] = hitsSources + sources = append(sources, tmpSources) } return sources, nil } -- Gitblit v1.8.0