From 845f643c1aaaa37a53219b6f11b77a1b333cf619 Mon Sep 17 00:00:00 2001
From: sunty <1172534965@qq.com>
Date: 星期一, 09 十二月 2019 20:42:28 +0800
Subject: [PATCH] add track cache util

---
 EsClient.go |   29 +++++++++++++-
 EsApi.go    |   91 ++++++++++++++++++++++++---------------------
 2 files changed, 75 insertions(+), 45 deletions(-)

diff --git a/EsApi.go b/EsApi.go
index ccf41b4..1ab935d 100644
--- a/EsApi.go
+++ b/EsApi.go
@@ -72,45 +72,46 @@
 	if err != nil {
 		return "", err
 	}
+
 	feature := sources[0]["targetInfo"].([]interface{})[0].(map[string]interface{})["feature"].(string)
 	return feature, nil
 }
 
 //鏍规嵁鐩爣id杩藉姞璺熻釜淇℃伅
-func AppendTargetInfo(id string,targetInfo string, indexName string, serverIp string, serverPort string)(string,error){
-	if targetInfo == ""{
-		return "",errors.New("append data is nil")
+func AppendTargetInfo(id string, targetInfo string, indexName string, serverIp string, serverPort string) (string, error) {
+	if targetInfo == "" {
+		return "", errors.New("append data is nil")
 	}
 	var info interface{}
 	url := "http://" + serverIp + ":" + serverPort + "/" + indexName + "/_update_by_query?refresh=true"
 	jsonDSL := `{
   "query": {
     "term":{
-      "id":"`+id+`"
+      "id":"` + id + `"
     }
   },
   "script": {
     "lang": "painless",
     "inline": "ctx._source.linkTagInfo.add(params.newparam)",
     "params": {
-      "newparam": `+targetInfo+`
+      "newparam": ` + targetInfo + `
     }
   }
 }`
 	fmt.Println(jsonDSL)
 	buf, err := EsReq("POST", url, []byte(jsonDSL))
 	if err != nil {
-		return "",err
+		return "", err
 	}
-	json.Unmarshal(buf,&info)
+	json.Unmarshal(buf, &info)
 	out, ok := info.(map[string]interface{})
 	fmt.Println(out)
 	if !ok {
-		return "",errors.New("http response interface can not change map[string]interface{}")
+		return "", errors.New("http response interface can not change map[string]interface{}")
 	}
 	middle, ok := out["updated"].(float64)
 	if !ok {
-		return "",errors.New("first updated change error!")
+		return "", errors.New("first updated change error!")
 	}
 	mes := ""
 	if middle == 1 {
@@ -119,7 +120,7 @@
 	if middle == 0 {
 		mes = "宸茬粡杩藉姞"
 	}
-	return mes,nil
+	return mes, nil
 
 }
 
@@ -176,7 +177,7 @@
 	return statu
 }
 
-//鑾峰彇褰撳墠鑺傜偣鎶撴媿搴撴墍鏈変汉鍛業D
+//鑾峰彇褰撳墠鑺傜偣鎶撴媿搴撴墍鏈変汉鍛業D*缂撳瓨*
 func GetAllLocalVideopersonsId(compareArgs protomsg.CompareArgs, indexName string, serverIp string, serverPort string, alarmLevelTypes string) (capturetable []string) {
 	queryStr := ""
 	queryBody := compareArgs.InputValue
@@ -347,26 +348,26 @@
 		"/" + indexName + "/_search"
 	var filterArr []string
 	if isAlarm != "all" {
-		filterArr = append(filterArr,`				{
+		filterArr = append(filterArr, `				{
 					"term":{
-						"isAlarm":"` + isAlarm + `"
+						"isAlarm":"`+isAlarm+`"
 					}
 				}`)
 	}
 
 	if category != "all" {
-		filterArr = append(filterArr,`				{
+		filterArr = append(filterArr, `				{
 					"term":{
-						"targetInfo.targetType":"` + category + `"
+						"targetInfo.targetType":"`+category+`"
 					}
 				}`)
 
 	}
 
- 	queryStr := `"query":{
+	queryStr := `"query":{
 		"bool":{
 			"filter":[
-				`+strings.Join(filterArr,",")+`
+				` + strings.Join(filterArr, ",") + `
 			]
 		}
 	},`
@@ -635,22 +636,22 @@
 }
 
 /****************************************浠ヤ笅涓簊dkCompare姣斿缂撳瓨浣跨敤鏂规硶*********************************************/
-//鑾峰彇鏌ヨ鎬绘暟
-func GetTotal(serverIp string, serverPort string, indexName string, shards string) (total int) {
+//鑾峰彇鏌ヨ鎬绘暟 *缂撳瓨*
+func GetTotal(serverIp string, serverPort string, indexName string, shards string, targetType string) (total int) {
 	JsonDSL := `{
 	"size": 0,
 	"query": {
 		"bool": {
 			"filter": [{
 				"term": {
-					"targetInfo.targetType.raw": "face"
+					"targetInfo.targetType.raw": "`+targetType+`"
 				}
 			}]
 		}
 	}
 }`
 
-	url := "http://" + serverIp + ":" + serverPort + "/" + indexName + "/_search"
+	url := "http://" + serverIp + ":" + serverPort + "/" + indexName + "/_search?preference=_shards:" + shards + "|_only_local"
 	buf, err := EsReq("POST", url, []byte(JsonDSL))
 	if err != nil {
 		return
@@ -670,11 +671,17 @@
 
 }
 
-//鏌ヨ鏃堕棿娈垫暟鎹�
-func GetPeriodInfos(serverIp string, serverPort string, startTime string, endTime string, indexName string, shards string) ([]*protomsg.Esinfo, error) {
-	var capdbinfo []*protomsg.Esinfo
+//鏌ヨ鏃堕棿娈垫暟鎹� *缂撳瓨*
+func GetPeriodInfos(serverIp string, serverPort string, startTime string, endTime string, indexName string, shards string, targetType string) ([]*protomsg.MultiFeaCache, error) {
+	var capdbinfo []*protomsg.MultiFeaCache
 	url := "http://" + serverIp + ":" + serverPort + "/" + indexName + "/_search?preference=_shards:" + shards + "|_only_local"
-
+	var source []string
+	switch targetType {
+	case "face":
+		source = []string{"id","targetInfo.feature","analyServerId","cameraId"}
+	case "track":
+		source = []string{"id","targetInfo.feature","analyServerId","cameraId","targetInfo.attachTarget.feature","linkTagInfo.targetInfo.feature","linkTagInfo.targetInfo.attachTarget.feature","linkTagInfo.cameraId"}
+	}
 	JsonDSL := `
 				{
 				    "query": {
@@ -682,7 +689,7 @@
 				            "filter": [
 				                {
 				                    "term": {
-				                        "targetInfo.targetType.raw": "face"
+				                        "targetInfo.targetType.raw": "`+targetType+`"
 				                    }
 				                },
 				                {
@@ -697,15 +704,12 @@
 				        }
 				    },
 				    "size": 1000000,
-				    "_source": [
-				        "id",
-				        "targetInfo.feature",
-				        "analyServerId"
-				    ]
+				    "_source": ["`+strings.Replace(strings.Trim(fmt.Sprint(source), "[]"), " ", "\",\"", -1)+`"]
 				}
     `
 	//logger.Debug(url)
 	//logger.Debug(JsonDSL)
+	//fmt.Println(JsonDSL)
 	buf, err := EsReq("POST", url, []byte(JsonDSL))
 	if err != nil {
 		return capdbinfo, errors.New("http request dbtablename info is err!")
@@ -716,19 +720,26 @@
 	if err != nil {
 		return capdbinfo, err
 	}
-
+	//fmt.Println(sources)
 	// 杩斿洖鎵�鏈夋煡璇㈢殑鏁版嵁
 	capdbinfos := Parsesources(sources)
 	return capdbinfos, nil
-
 }
 
-// 鏌ヨ搴曞簱浜哄憳淇℃伅
-func GetOceanFeatures(serverIp string, serverPort string, queryIndexNum int, queryNums int, indexName string, shards string) ([]*protomsg.Esinfo, error) {
-	var dbinfos []*protomsg.Esinfo
+// 鏌ヨ搴曞簱浜哄憳淇℃伅*缂撳瓨*
+func GetOceanFeatures(serverIp string, serverPort string, queryIndexNum int, queryNums int, indexName string, shards string, targetType string) ([]*protomsg.MultiFeaCache, error) {
+	var dbinfos []*protomsg.MultiFeaCache
 	point := strconv.Itoa(queryIndexNum)
 	number := strconv.Itoa(queryNums)
 	JsonDSL := ""
+	var source []string
+	switch targetType {
+	case "face":
+		source = []string{"id","targetInfo.feature","analyServerId"}
+	case "track":
+		source = []string{"id","targetInfo.feature","analyServerId","targetInfo.attachTarget.feature","linkTagInfo.targetInfo.feature","linkTagInfo.targetInfo.attachTarget.feature"}
+	}
+
 	url := "http://" + serverIp + ":" + serverPort + "/" + indexName + "/_search?preference=_shards:" + shards + "|_only_local"
 	JsonDSL = `  {
                     "from": ` + point + `,        
@@ -737,18 +748,14 @@
 							"filter": [
 								{
 									"term": {
-										"targetInfo.targetType.raw": "face"
+										"targetInfo.targetType.raw": "`+targetType+`"
 								}
 									}
 							]
 						}	
 					},
                      "size":` + number + `,
-                     "_source": [
-							"id",
-							"targetInfo.feature",
-							"analyServerId"
-                       ]
+                     "_source": ["`+strings.Replace(strings.Trim(fmt.Sprint(source), "[]"), " ", "\",\"", -1)+`"]
                     }`
 
 	buf, err := EsReq("POST", url, []byte(JsonDSL))
diff --git a/EsClient.go b/EsClient.go
index 5bb105d..6064067 100644
--- a/EsClient.go
+++ b/EsClient.go
@@ -57,9 +57,10 @@
 	}
 }
 
-func Parsesources(sources []map[string]interface{}) (esinfos []*protomsg.Esinfo) {
+func Parsesources(sources []map[string]interface{}) (multiInfos []*protomsg.MultiFeaCache) {
 	var ok bool
 	for _, source := range sources {
+		var multiInfo protomsg.MultiFeaCache
 		var tmpinfo protomsg.Esinfo
 		tmpinfo.Id, ok = source["id"].(string)
 		if !ok {
@@ -72,14 +73,36 @@
 				if !ok {
 					continue
 				}
+				if m["attachTarget"] != nil {
+				multiInfo.AttachFeature, ok = m["attachTarget"].(map[string]interface{})["feature"].(string)
+				}
 			}
 		}
 		tmpinfo.AnalyServerId, ok = source["analyServerId"].(string)
 		if !ok {
 			continue
 		}
-		esinfos = append(esinfos, &tmpinfo)
-
+		multiInfo.EsInfo = &tmpinfo
+		multiInfo.CameraId, ok = source["cameraId"].(string)
+		//fmt.Println(source["cameraId"])
+		leis := make([]*protomsg.LinkEsInfo,0)
+		if source["linkTagInfo"] != nil{
+			for _,v := range source["linkTagInfo"].([]interface{}) {
+				var lei protomsg.LinkEsInfo
+				mi := v.(map[string]interface{})
+				lei.CameraId, ok = mi["feature"].(string)
+				if mi["targetInfo"] != nil {
+					for _,val := range mi["targetInfo"].([]interface{}){
+						fmi := val.(map[string]interface{})
+						lei.Feature,ok = fmi["feature"].(string)
+						lei.AttachFeature, ok = fmi["attachTarget"].(map[string]interface{})["feature"].(string)
+					}
+				}
+				leis = append(leis, &lei)
+			}
+		}
+		multiInfo.LinkEsInfo = leis
+		multiInfos = append(multiInfos, &multiInfo)
 	}
 	return
 }

--
Gitblit v1.8.0