From ad9de83627775d4275c96a1ceb8518bccd36695c Mon Sep 17 00:00:00 2001
From: sunty <1172534965@qq.com>
Date: 星期二, 14 一月 2020 15:39:00 +0800
Subject: [PATCH] fix tools

---
 EsApi.go |  358 ++++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 301 insertions(+), 57 deletions(-)

diff --git a/EsApi.go b/EsApi.go
index a5651cb..4a41462 100644
--- a/EsApi.go
+++ b/EsApi.go
@@ -72,12 +72,86 @@
 	if err != nil {
 		return "", err
 	}
+
 	feature := sources[0]["targetInfo"].([]interface{})[0].(map[string]interface{})["feature"].(string)
 	return feature, nil
 }
 
+//鏍规嵁鐩爣id鏌ヨ宸茶拷鍔犳潯鏁�
+func GetLinkTagInfoSize(id string, indexName string, serverIp string, serverPort string) (size int, err error) {
+	url := "http://" + serverIp + ":" + serverPort + "/" + indexName + "/_search"
+	queryDSL := `{
+		  	"query": {
+		    	"term":{
+		      	"id":"` + id + `"
+			}
+		}
+	}`
+	buf, err := EsReq("POST", url, []byte(queryDSL))
+	if err != nil {
+		return -1, err
+	}
+	source, err := Sourcelist(buf)
+	if err != nil {
+		return -1, err
+	}
+	if source[0]["linkTagInfo"] != nil {
+		size = len(source[0]["linkTagInfo"].([]interface{}))
+	} else {
+		return -1, errors.New("璇ユ暟缁勪笉瀛樺湪")
+	}
+	return size, nil
+}
+
+//鏍规嵁鐩爣id杩藉姞璺熻釜淇℃伅
+func AppendTargetInfo(id string, targetInfo string, indexName string, serverIp string, serverPort string, updateTime 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 + `"
+    }
+  },
+  "script": {
+    "lang": "painless",
+    "inline": "ctx._source.linkTagInfo.add(params.newparam);ctx._source.updateTime='` + updateTime + `'",
+    "params": {
+      "newparam": ` + targetInfo + `
+    }
+  }
+}`
+	fmt.Println(jsonDSL)
+	buf, err := EsReq("POST", url, []byte(jsonDSL))
+	if err != nil {
+		return "", err
+	}
+	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{}")
+	}
+	middle, ok := out["updated"].(float64)
+	if !ok {
+		return "", errors.New("first updated change error!")
+	}
+	mes := ""
+	if middle == 1 {
+		mes = "杩藉姞鎴愬姛"
+	}
+	if middle == 0 {
+		mes = "宸茬粡杩藉姞"
+	}
+	return mes, nil
+
+}
+
 //鏍规嵁鎶撴媿浜哄憳id鏇存柊锛坴ideourl锛夋憚鍍忔満鍦板潃
-func UpdateVideourlById(id string, videoUrl string, indexName string, serverIp string, serverPort string, command int) (statu int) {
+func UpdateVideourlById(id string, videoUrl string, indexName string, serverIp string, serverPort string, command int) (statu int, err error) {
 
 	var info interface{}
 	url := "http://" + serverIp + ":" + serverPort + "/" + indexName + "/_update_by_query?refresh=true"
@@ -102,7 +176,7 @@
 	if err != nil {
 		fmt.Println("http request videoUrlInfo info is err!")
 		statu = 500
-		return
+		return statu, err
 	}
 	json.Unmarshal(buf, &info)
 	//fmt.Println(info)
@@ -110,26 +184,26 @@
 	if !ok {
 		fmt.Println("http response interface can not change map[string]interface{}")
 		statu = 500
-		return
+		return statu, errors.New("http response interface can not change map[string]interface{}")
 	}
 	middle, ok := out["updated"].(float64)
 	if !ok {
 		fmt.Println("first updated change error!")
 		statu = 500
-		return
+		return statu, errors.New("first updated change error!")
 	}
 	if middle == 1 {
 		statu = 200
-		return
+		return statu, nil
 	}
 	if middle == 0 {
 		statu = 201
-		return
+		return statu, errors.New("宸茬粡淇敼")
 	}
-	return statu
+	return statu, nil
 }
 
-//鑾峰彇褰撳墠鑺傜偣鎶撴媿搴撴墍鏈変汉鍛業D
+//鑾峰彇褰撳墠鑺傜偣鎶撴媿搴撴墍鏈変汉鍛業D*缂撳瓨*
 func GetAllLocalVideopersonsId(compareArgs protomsg.CompareArgs, indexName string, serverIp string, serverPort string, alarmLevelTypes string) (capturetable []string) {
 	queryStr := ""
 	queryBody := compareArgs.InputValue
@@ -294,28 +368,32 @@
 }
 
 //鍒濆鍖栧疄鏃舵姄鎷�
-func InitRealTimeCapture(serverIp string, serverPort string, indexName string, isAlarm bool, category string, quantity int) ([]protomsg.AIOcean, error) {
+func InitRealTimeCapture(serverIp string, serverPort string, indexName string, isAlarm string, category string, quantity int) ([]protomsg.AIOcean, error) {
 	var aIOceanInfo []protomsg.AIOcean
 	url := "http://" + serverIp + ":" + serverPort +
 		"/" + indexName + "/_search"
-	categoryStr := ""
-	if category != "" {
-		categoryStr = `				{
+	var filterArr []string
+	if isAlarm != "all" {
+		filterArr = append(filterArr, `				{
 					"term":{
-						"targetInfo.targetType":"` + category + `"
+						"isAlarm":"`+isAlarm+`"
 					}
-				},`
+				}`)
+	}
+
+	if category != "all" {
+		filterArr = append(filterArr, `				{
+					"term":{
+						"targetInfo.targetType":"`+category+`"
+					}
+				}`)
 
 	}
+
 	queryStr := `"query":{
 		"bool":{
 			"filter":[
-				` + categoryStr + `
-				{
-					"term":{
-						"isAlarm":` + strconv.FormatBool(isAlarm) + `
-					}
-				}
+				` + strings.Join(filterArr, ",") + `
 			]
 		}
 	},`
@@ -387,23 +465,29 @@
 }
 
 //缁煎悎缁熻
-func StatisticsComprehensive(serverIp string, serverPort string, indexName string, isAlarm bool) (total int, err error) {
+func StatisticsComprehensive(serverIp string, serverPort string, indexName string, isAlarm string) (total int, err error) {
 	url := "http://" + serverIp + ":" + serverPort +
 		"/" + indexName + "/_search"
+	isAlarmStr := ""
+	if isAlarm != "all" {
+		isAlarmStr = `				{
+					"term":{
+						"isAlarm":"` + isAlarm + `"
+					}
+				},`
+
+	}
 	DSLJson := `{
 	"size":0,
 	"query":{
 		"bool":{
-			"filter":[{
+			"filter":[
+				` + isAlarmStr + `
+				{
 				"range":{
 					"picDate":{
 						"gte":"now+8h/d"
 						}
-					}
-				},
-				{
-					"term":{
-						"isAlarm":` + strconv.FormatBool(isAlarm) + `
 					}
 				}
 				]
@@ -448,9 +532,9 @@
 		}
 	},
 	"aggs":{
-		"sdkId_status":{
+		"sdkName_status":{
 			"terms":{
-				"field":"taskId"
+				"field":"sdkName.raw"
 			}
 		}
 	}
@@ -469,7 +553,7 @@
 	if !ok {
 		return nil, errors.New("first hits change error!")
 	}
-	sdkName_status, ok := middle["sdkId_status"].(map[string]interface{})
+	sdkName_status, ok := middle["sdkName_status"].(map[string]interface{})
 	if !ok {
 		return nil, errors.New("first hits change error!")
 	}
@@ -481,9 +565,9 @@
 			fmt.Println("change to source error!")
 			continue
 		}
-		sdkId := tmpbuf["key"].(string)
+		sdkName := tmpbuf["key"].(string)
 		count := int(tmpbuf["doc_count"].(float64))
-		source["id"] = sdkId
+		source["name"] = sdkName
 		source["value"] = count
 		sources = append(sources, source)
 	}
@@ -577,23 +661,28 @@
 
 }
 
+//娣诲姞鍗冲皢鍒犻櫎淇″彿
+func AddDeleteSignal() {
+
+}
+
 /****************************************浠ヤ笅涓簊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
@@ -613,11 +702,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", "targetInfo.targetLocation", "linkTagInfo.targetInfo.feature", "linkTagInfo.targetInfo.attachTarget.feature", "linkTagInfo.cameraId", "linkTagInfo.targetInfo.targetLocation"}
+	}
 	JsonDSL := `
 				{
 				    "query": {
@@ -625,7 +720,7 @@
 				            "filter": [
 				                {
 				                    "term": {
-				                        "targetInfo.targetType.raw": "face"
+				                        "targetInfo.targetType.raw": "` + targetType + `"
 				                    }
 				                },
 				                {
@@ -640,15 +735,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!")
@@ -659,19 +751,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", "targetInfo.targetLocation", "linkTagInfo.targetInfo.feature", "linkTagInfo.targetInfo.attachTarget.feature", "linkTagInfo.targetInfo.targetLocation"}
+	}
+
 	url := "http://" + serverIp + ":" + serverPort + "/" + indexName + "/_search?preference=_shards:" + shards + "|_only_local"
 	JsonDSL = `  {
                     "from": ` + point + `,        
@@ -680,18 +779,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))
@@ -709,3 +804,152 @@
 	dbpersoninfos := Parsesources(sources)
 	return dbpersoninfos, nil
 }
+
+//************************CORN TASK*******************************
+//鏌ヨ鏃ユ湡鑼冨洿鍐呮槸鍚﹁繕瀛樺湪鏁版嵁
+func QueryAnalyServerData(serverIp string, serverPort string, indexName string, startTime string, endTime string, analyServerId string) (result bool, err error) {
+	url := "http://" + serverIp + ":" + serverPort + "/" + indexName + "/_search"
+	deleteJson := `{
+	"query":{
+		"bool":{
+			"filter":[{
+				"range":{
+					"updateTime":{
+						"gte":"` + startTime + `",
+						"lte":"` + endTime + `"
+					}
+				}
+			},
+			{
+				"term":{
+					"analyServerId":"` + analyServerId + `"
+				}
+			}
+			]
+		}
+	}
+}	`
+	buf, err := EsReq("POST", url, []byte(deleteJson))
+	if err != nil {
+		return false, errors.New("璇锋眰澶辫触")
+	}
+	resTotal, err := SourceTotal(buf)
+	if err != nil {
+		return false, errors.New("瑙g爜澶辫触")
+	}
+	if resTotal == -1 || resTotal == 0{
+		result = false
+	} else {
+		result = true
+	}
+	return result, nil
+}
+
+
+//鎸夋棩鏈熻寖鍥达紝鏈嶅姟鍣↖d鍒犻櫎鏁版嵁
+func DeleteAnalyServerData(serverIp string, serverPort string, indexName string, startTime string, endTime string, analyServerId string) (result bool, err error) {
+	url := "http://" + serverIp + ":" + serverPort + "/" + indexName + "/_delete_by_query"
+	deleteJson := `{
+	"query":{
+		"bool":{
+			"filter":[{
+				"range":{
+					"updateTime":{
+						"gte":"` + startTime + `",
+						"lte":"` + endTime + `"
+					}
+				}
+			},
+			{
+				"term":{
+					"analyServerId":"` + analyServerId + `"
+				}
+			}
+			]
+		}
+	}
+}	`
+	buf, err := EsReq("POST", url, []byte(deleteJson))
+	if err != nil {
+		return false, errors.New("璇锋眰澶辫触")
+	}
+	deleteRes, err := SourceDeleted(buf)
+	if err != nil {
+		return false, errors.New("瑙g爜澶辫触")
+	}
+	if deleteRes == -1 {
+		result = false
+	} else {
+		result = true
+	}
+	return result, nil
+}
+
+//缁欐墍鏈夎妭鐐硅拷鍔犲垹闄や换鍔′俊鎭�
+func AddDelTask(serverIp string, serverPort string, indexName string, startTime string, endTime string, analyServerId string) (result bool, err error) {
+	url := "http://" + serverIp + ":" + serverPort + "/" + indexName + "/_update_by_query"
+	addJson := `{
+    "script": {
+    	"lang":"painless",
+        "inline": "ctx._source.instantTask.add(params.newtask)",
+        "params": {
+            "newtask": {
+                "instantClearId": "` + analyServerId + `",
+                "startTime": "` + startTime + `",
+                "endTime": "` + endTime + `"
+            }
+        }
+    },
+    "query": {
+        "match_all": {}
+    }
+}`
+	buf, err := EsReq("POST", url, []byte(addJson))
+	if err != nil {
+		return false, errors.New("璇锋眰澶辫触")
+	}
+	updateRes, err := SourceUpdated(buf)
+	if err != nil {
+		return false, errors.New("瑙g爜澶辫触")
+	}
+	if updateRes == -1 {
+		result = false
+	} else {
+		result = true
+	}
+	return result, nil
+}
+
+//绉婚櫎宸叉墽琛屽畬鐨勫垹闄や换鍔�
+func DeleteDelTask(serverIp string, serverPort string, indexName string, analyServerId string) (result bool, err error) {
+	url := "http://" + serverIp + ":" + serverPort + "/" + indexName + "/_update_by_query"
+	deleteJson := `{
+    "script": {
+    	"lang":"painless",
+        "inline": "ctx._source.instantTask.remove(0)"
+    },
+    "query": {
+        "bool": {
+        	"filter":[{
+        		"term":{
+        			"id":"` + analyServerId + `"
+        		}
+        	}]
+        }
+    }
+}`
+	buf, err := EsReq("POST", url, []byte(deleteJson))
+	if err != nil {
+		return false, errors.New("璇锋眰澶辫触")
+	}
+	updateRes, err := SourceUpdated(buf)
+	if err != nil {
+		return false, errors.New("瑙g爜澶辫触")
+	}
+	if updateRes == -1 {
+		result = false
+	} else {
+		result = true
+	}
+	return result, nil
+}

--
Gitblit v1.8.0