sunty
2020-09-08 171d94e0f254b485ed5d09cef9a208b0f5672048
fix source aggs
2个文件已修改
138 ■■■■■ 已修改文件
EsClient.go 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EsClient_test.go 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EsClient.go
@@ -540,24 +540,27 @@
                        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
                    }
                    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 {
                    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
                    } 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 {
@@ -708,24 +711,27 @@
                        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
                    }
                    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 {
                    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
                    } 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 {
@@ -835,24 +841,27 @@
                        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
                    }
                    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 {
                    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
                    } 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 {
EsClient_test.go
@@ -1,9 +1,11 @@
package esutil
import(
        "testing"
    "math"
    "testing"
        "fmt"
        "encoding/json"
    "time"
)
func TestEsReq(t  *testing.T){
@@ -28,3 +30,110 @@
    }
    fmt.Println(dbinfos)
}
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("时间解析错误")
            }
            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 {
                    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 = ""
                    } else {
                        startTime = tmpTime
                        hitsSources[len(hitsSources)-1]["endTime"] = tmpTime
                        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
                    if point == indexLength {
                        stayTime = 1
                    }
                    startTime = ""
                }
            }
            //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
}