From f6ca7bb43270474fa876ff6ba62c6b2113b045ad Mon Sep 17 00:00:00 2001
From: sunty <1172534965@qq.com>
Date: 星期五, 31 五月 2024 14:03:29 +0800
Subject: [PATCH] Optimize day and night algorithm, format date and time, batch process by date.
---
EsClient_test.go | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 110 insertions(+), 1 deletions(-)
diff --git a/EsClient_test.go b/EsClient_test.go
index 7c078bf..620b4da 100644
--- a/EsClient_test.go
+++ b/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("鏃堕棿瑙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 {
+ 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
+}
--
Gitblit v1.8.0