From 171d94e0f254b485ed5d09cef9a208b0f5672048 Mon Sep 17 00:00:00 2001
From: sunty <1172534965@qq.com>
Date: 星期二, 08 九月 2020 14:01:26 +0800
Subject: [PATCH] fix source aggs

---
 EsApi.go |  201 +++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 190 insertions(+), 11 deletions(-)

diff --git a/EsApi.go b/EsApi.go
index 4849041..64235bf 100644
--- a/EsApi.go
+++ b/EsApi.go
@@ -180,7 +180,7 @@
 
 /*******************sort []map util*******************/
 //鏍规嵁鏃堕棿鑼冨洿鑱氬悎鎵�鏈夊尯鍩熶汉淇℃伅锛岃繑鍥炲浐瀹氭潯鏁�
-func GetFaceDataByTimeAnd(startTime string, total int, thresholdTime int, thresholdStayTime int, serverIp string, serverPort string, indexName string) (resData []map[string]interface{}, err error) {
+func GetFaceDataByTimeAndTotal(startTime string, endTime string, total int, thresholdTime int, thresholdStayTime int, serverIp string, serverPort string, indexName string) (resData []map[string]interface{}, err error) {
 	var requestUrl = "http://" + serverIp + ":" + serverPort + "/" + indexName + "/_search"
 	var requestBody = `{
     "query": {
@@ -189,7 +189,8 @@
                 {
                     "range": {
                         "picDate": {
-                            "gte": "` + startTime + `"
+                            "gte": "` + startTime + `",
+							"lte": "` + endTime + `"
                         }
                     }
                 },
@@ -256,25 +257,124 @@
 	if err != nil {
 		return nil, err
 	}
-	fmt.Println(len(source))
+	if len(source) == 0{
+		return source,nil
+	}
 	faceSource := make([]map[string]interface{}, 0)
 	for index, info := range source {
 		if int(info["stayTime"].(float64)) > thresholdStayTime {
 			faceSource = append(faceSource, source[index])
 		}
 	}
-	//fmt.Println(len(source))
+	mapsSort := MapsSort{}
+	mapsSort.Key = "endTime"
+	mapsSort.MapList = faceSource
+	sort.Sort(&mapsSort)
 	if len(faceSource) > total {
-		mapsSort := MapsSort{}
-		mapsSort.Key = "endTime"
-		mapsSort.MapList = faceSource
-		sort.Sort(&mapsSort)
 		return mapsSort.MapList[:total], nil
 	}
-	return faceSource, nil
+	return mapsSort.MapList, nil
 }
 
-func GetFaceIdDeduplication(startTime string, endTime string, serverIp string, serverPort string, indexName string) (ids []string, err error) {
+func GetFaceDataByTimeAndId(startTime string, endTime string, id string, thresholdTime int, thresholdStayTime int, serverIp string, serverPort string, indexName string) (resData []map[string]interface{}, err error) {
+	var requestUrl = "http://" + serverIp + ":" + serverPort + "/" + indexName + "/_search"
+	var requestBody = `{
+    "query": {
+        "bool": {
+            "filter": [
+                {
+                    "range": {
+                        "picDate": {
+                            "gte": "` + startTime + `",
+						 	"lte": "` + endTime + `"
+                        }
+                    }
+                },
+                {
+                    "term":{
+                        "targetInfo.targetType.raw": "FaceDetect"
+                    }
+                },
+				{
+                    "term":{
+                        "baseInfo.targetId": "` + id + `"
+                    }
+                }
+            ]
+        }
+    },
+    "size": 0,
+    "aggs": {
+        "buckets_aggs": {
+            "composite": {
+                "sources": [
+                    {
+                        "faceId": {
+                            "terms": {
+                                "field": "baseInfo.targetId"
+                            }
+                        }
+                    },
+                    {
+                        "areaId": {
+                            "terms": {
+                                "field": "targetInfo.areaId"
+                            }
+                        }
+                    }
+                ],
+                "size": 10000000
+            },
+            "aggs": {
+                "top_attention_hits": {
+                    "top_hits": {
+                        "size": 1000000,
+                        "sort": [
+                            {
+                                "picDate": {
+                                    "order": "asc"
+                                }
+                            }
+                        ],
+                        "_source": {
+                            "includes": [
+                                "baseInfo.targetId",
+                                "targetInfo.picSmUrl",
+								"targetInfo.areaId",
+                                "picDate"
+                            ]
+                        }
+                    }
+                }
+            }
+        }
+    }
+}`
+	buf, err := EsReq("POST", requestUrl, []byte(requestBody))
+	if err != nil {
+		return nil, err
+	}
+	source, err := FaceSourceAggregations(buf, thresholdTime, thresholdStayTime)
+	if err != nil {
+		return nil, err
+	}
+	if len(source) == 0{
+		return source,nil
+	}
+	faceSource := make([]map[string]interface{}, 0)
+	for index, info := range source {
+		if int(info["stayTime"].(float64)) > thresholdStayTime {
+			faceSource = append(faceSource, source[index])
+		}
+	}
+	mapsSort := MapsSort{}
+	mapsSort.Key = "startTime"
+	mapsSort.MapList = faceSource
+	sort.Sort(&mapsSort)
+	return mapsSort.MapList, nil
+}
+
+func GetFaceIdDeduplication(startTime string, endTime string, serverIp string, serverPort string, indexName string) (ids []map[string]interface{}, err error) {
 	var requestUrl = "http://" + serverIp + ":" + serverPort + "/" + indexName + "/_search"
 	var requestBody = `{
     "query": {
@@ -310,7 +410,27 @@
                     }
                 ],
                 "size": 10000000
-            }
+            },
+            	"aggs": {
+                	"top_attention_hits": {
+                    	"top_hits": {
+                        	"size": 1,
+                        	"sort": [
+                            	{
+                                	"picDate": {
+                                    	"order": "desc"
+                                	}
+                            	}
+                        	],
+                        	"_source": {
+                            	"includes": [
+                                	"picDate"
+                            	]
+                        	}
+                    	}
+             	   	}
+          	  	}
+        	}
         }
     }
 }`
@@ -324,9 +444,68 @@
 	if err1 != nil {
 		return nil, err1
 	}
+	if len(ids) > 1 {
+		mapsSort := MapsSort{}
+		mapsSort.Key = "lastTime"
+		mapsSort.MapList = ids
+		sort.Sort(&mapsSort)
+		return mapsSort.MapList, nil
+	}
 	return ids, nil
 }
 
+//缁熻鍚勪釜鍖哄煙浜烘暟
+func StatisticsEveryAreaPersonsNumber(startTime string, endTime string, serverIp string, serverPort string, indexName string) ([]map[string]interface{}, error) {
+	var requestUrl = "http://" + serverIp + ":" + serverPort + "/" + indexName + "/_search"
+	var requestBody = `{
+    "query": {
+        "bool": {
+            "filter": [
+                {
+                    "range": {
+                        "picDate": {
+                            "gte": "` + startTime + `",
+                            "lte": "` + endTime + `"
+                        }
+                    }
+                },
+                {
+                    "term": {
+                        "targetInfo.targetType.raw": "Yolo"
+                    }
+                }
+            ]
+        }
+    },
+    "size": 0,
+    "aggs": {
+        "buckets_aggs": {
+            "composite": {
+                "sources": [
+                    {
+                        "areaId": {
+                            "terms": {
+                                "field": "targetInfo.areaId"
+                            }
+                        }
+                    }
+                ],
+                "size": 10000000
+            }
+        }
+    }
+}`
+	buf, err := EsReq("POST", requestUrl, []byte(requestBody))
+	if err != nil {
+		return nil, err
+	}
+	result, err := SourceStatistics(buf)
+	if err != nil {
+		return nil, err
+	}
+	return result, nil
+}
+
 /**************************************customer analysis util end**************************************/
 //鏍规嵁鎽勫儚鏈哄垪琛ㄥ拰鏃堕棿鏌ヨ浜哄憳娴忚杞ㄨ抗
 func GetPersonDataByCameraIdAndTime(cameraId []string, startTime string, endTime string, serverIp string, serverPort string, indexName string) (map[string]interface{}, error) {

--
Gitblit v1.8.0