package esutil import( "math" "testing" "fmt" "encoding/json" "time" ) func TestEsReq(t *testing.T){ requstbody, err := json.Marshal(map[string]interface{}{ "content":"v2.0.0", "collection": "0", }) if err != nil { fmt.Println("json parse error ", err) return } EsReq("PUT","http://192.168.1.203:9200/personaction/perVideoAction/fcddbddf-4580-43f3-b79a-32343c823df2?pretty", requstbody) } func TestGetDbinfo(t *testing.T){ dbinfos, err := DbPersoninfos(0,10) if err != nil { fmt.Println(err) return } 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 }