From e189b1942c8130d473a1a4128c3d9ef5edfaa564 Mon Sep 17 00:00:00 2001 From: sunty <1172534965@qq.com> Date: 星期五, 23 十月 2020 10:58:30 +0800 Subject: [PATCH] fix --- EsClient.go | 165 ++++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 120 insertions(+), 45 deletions(-) diff --git a/EsClient.go b/EsClient.go index 8e08e76..8df5b8e 100644 --- a/EsClient.go +++ b/EsClient.go @@ -476,8 +476,7 @@ return tmpinfos } -func FaceSourceAggregations(buf [] byte, thresholdTime float64, queryUseTime float64) (sources map[string]interface{}, err error) { - s := make(map[string]interface{}) +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("鏃跺尯璁剧疆閿欒") @@ -507,14 +506,14 @@ indexLength := len(finalHits) point := 0 for _, in := range finalHits { - point = point+1 + point = point + 1 tmpHitSource := make(map[string]interface{}) - tmpbuf, ok := in.(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{}) + source, ok := tmpBuf["_source"].(map[string]interface{}) if !ok { fmt.Println("change _source error!") continue @@ -528,21 +527,24 @@ } sTime := tmpTime - eTime := mTime.Add(time.Second*1).Format("2006-01-02 15:04:05") + eTime := mTime.Add(time.Second * 1).Format("2006-01-02 15:04:05") stayTime := 1.0 - if startTime != "" && point < indexLength{ + 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 passTime <= thresholdTime || point == indexLength{ - startTime = tmpTime - hitsSources[len(hitsSources)-1]["endTime"] = tmpTime - if point == indexLength{ + if int(passTime) <= thresholdTime { + 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 + hitsSources[len(hitsSources)-1]["endTime"] = tmpTime + startTime = "" + } else { + startTime = tmpTime + hitsSources[len(hitsSources)-1]["endTime"] = tmpTime } continue } else { @@ -551,35 +553,94 @@ 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 { + 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 + stayTime = 1 + } else if stayTime == 0{ + stayTime = 1 + hitsSources[len(hitsSources)-1]["endTime"] = realEndTime.Add(time.Second*1).Format("2006-01-02 15:04:05") } hitsSources[len(hitsSources)-1]["stayTime"] = stayTime + if point == indexLength { + stayTime = 1 + } startTime = "" - continue - //fmt.Println(hitsSources[len(hitsSources)-1]) } } //fmt.Println("========================================================") startTime = tmpTime - tmpHitSource["personId"] = baseInfo["targetId"].(string) + tmpHitSource["faceId"] = baseInfo["targetId"].(string) + if targetInfo["areaId"] == nil { + continue + } + tmpHitSource["areaId"] = targetInfo["areaId"].(string) tmpHitSource["startTime"] = sTime - tmpHitSource["startFacePicUrl"] = targetInfo["picSmUrl"].(string) + tmpHitSource["faceImg"] = targetInfo["picSmUrl"].(string) tmpHitSource["endTime"] = eTime tmpHitSource["stayTime"] = stayTime hitsSources = append(hitsSources, tmpHitSource) } allSource = append(allSource, hitsSources...) } - count := len(allSource) - //fmt.Println(count) - s["count"] = count - s["allSource"] = allSource - s["queryUseTime"] = queryUseTime - return s, nil + return allSource, nil +} + +func SourceDeduplication(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 + } + faceId := make([]map[string]interface{}, 0) + for _, in := range buckets { + tmpInfo := make(map[string]interface{}) + topAttentionHits := in.(map[string]interface{})["top_attention_hits"].(map[string]interface{}) + middleHits := topAttentionHits["hits"].(map[string]interface{}) + finalHits := middleHits["hits"].([]interface{}) + tmpInfo["faceId"] = in.(map[string]interface{})["key"].(map[string]interface{})["faceId"].(string) + tmpInfo["lastTime"] = finalHits[0].(map[string]interface{})["_source"].(map[string]interface{})["picDate"].(string) + faceId = append(faceId, tmpInfo) + } + 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) { @@ -616,7 +677,7 @@ indexLength := len(finalHits) point := 0 for _, in := range finalHits { - point = point+1 + point = point + 1 tmpHitSource := make(map[string]interface{}) tmpbuf, ok := in.(map[string]interface{}) if !ok { @@ -637,21 +698,24 @@ } sTime := tmpTime - eTime := mTime.Add(time.Second*1).Format("2006-01-02 15:04:05") + eTime := mTime.Add(time.Second * 1).Format("2006-01-02 15:04:05") stayTime := 1.0 - if startTime != "" && point < indexLength{ + 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 passTime <= thresholdTime || point == indexLength{ - startTime = tmpTime - hitsSources[len(hitsSources)-1]["endTime"] = tmpTime - if point == indexLength{ + if passTime <= thresholdTime { + 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 + hitsSources[len(hitsSources)-1]["endTime"] = tmpTime + startTime = "" + } else { + startTime = tmpTime + hitsSources[len(hitsSources)-1]["endTime"] = tmpTime } continue } else { @@ -660,16 +724,20 @@ 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 { + 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 + stayTime = 1 + } else if stayTime == 0{ + stayTime = 1 + hitsSources[len(hitsSources)-1]["endTime"] = realEndTime.Add(time.Second*1).Format("2006-01-02 15:04:05") } hitsSources[len(hitsSources)-1]["stayTime"] = stayTime + if point == indexLength { + stayTime = 1 + } startTime = "" - continue - //fmt.Println(hitsSources[len(hitsSources)-1]) } } //fmt.Println("========================================================") @@ -739,7 +807,7 @@ startTime := "" //fmt.Println("finalHits: ",finalHits) for _, in := range finalHits { - point = point+1 + point = point + 1 tmpHitSource := make(map[string]interface{}) tmpbuf, ok := in.(map[string]interface{}) if !ok { @@ -760,21 +828,24 @@ } sTime := tmpTime - eTime := mTime.Add(time.Second*1).Format("2006-01-02 15:04:05") + eTime := mTime.Add(time.Second * 1).Format("2006-01-02 15:04:05") stayTime := 1.0 - if startTime != "" && point < indexLength{ + 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 passTime <= thresholdTime || point == indexLength{ - startTime = tmpTime - hitsSources[len(hitsSources)-1]["endTime"] = tmpTime - if point == indexLength{ + if passTime <= thresholdTime { + 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 + hitsSources[len(hitsSources)-1]["endTime"] = tmpTime + startTime = "" + } else { + startTime = tmpTime + hitsSources[len(hitsSources)-1]["endTime"] = tmpTime } continue } else { @@ -783,16 +854,20 @@ 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 { + 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 + stayTime = 1 + } else if stayTime == 0{ + stayTime = 1 + hitsSources[len(hitsSources)-1]["endTime"] = realEndTime.Add(time.Second*1).Format("2006-01-02 15:04:05") } hitsSources[len(hitsSources)-1]["stayTime"] = stayTime + if point == indexLength { + stayTime = 1 + } startTime = "" - continue - //fmt.Println(hitsSources[len(hitsSources)-1]) } } startTime = tmpTime -- Gitblit v1.8.0