sunty
2020-08-23 a88cd5f3c40d32fb48e80873667455f1424ae1cf
EsApi.go
@@ -159,6 +159,220 @@
}
//根据摄像机列表和时间查询人员浏览轨迹
func GetPersonDataByCameraIdAndTime(cameraId []string, startTime string, endTime string, serverIp string, ServerPort string, indexName string) ([]map[string]interface{}, error) {
   esCameraId := strings.Replace(strings.Trim(fmt.Sprint(cameraId), "[]"), " ", "\",\"", -1)
   personUrl := "http://" + serverIp + ":" + ServerPort + "/" + indexName + "/_search"
   personBody := `{
    "query": {
        "bool": {
            "filter": [
                {
                    "range": {
                        "picDate": {
                            "gte": "` + startTime + `",
                            "lte": "` + endTime + `"
                        }
                    }
                },
                {
                    "term": {
                        "targetInfo.targetType.raw": "Yolo"
                    }
                },
                {
                    "terms": {
                        "cameraId": [
                           "` + esCameraId + `"
                        ]
                    }
                }
            ]
        }
    },
    "size": 2147483647,
    "_source": {
        "includes": [
            "cameraId",
            "cameraName",
            "cameraAddr",
            "targetInfo.targetScore",
            "picDate",
            "updateTime",
            "picMaxUrl",
            "targetInfo.belongsTargetId",
            "targetInfo.targetLocation",
         "picWH"
        ]
    }
}`
   //fmt.Println(personUrl)
   //fmt.Println(personBody)
   buf, err := EsReq("POST", personUrl, []byte(personBody))
   if err != nil {
      return nil, err
   }
   sources, err := Sourcelist(buf)
   if err != nil {
      return nil, err
   }
   resData,err := PerSonAnalysis(sources)
   //println(sources)
   return resData, nil
}
//根据时间范围,摄像机列表,分组聚合人脸列表
func GetFaceDataBucketsByCameraIdAndTime(cameraId []string, startTime string, endTime string, thresholdTime float64, serverIp string, ServerPort string, indexName string) (buckersDate map[string]interface{}, err error) {
   esCameraId := strings.Replace(strings.Trim(fmt.Sprint(cameraId), "[]"), " ", "\",\"", -1)
   var buckersUrl = "http://" + serverIp + ":" + ServerPort + "/" + indexName + "/_search"
   var buckersBody = `{
    "query": {
        "bool": {
            "filter": [
                {
                    "range": {
                        "picDate": {
                            "gte": "` + startTime + `",
                            "lte": "` + endTime + `"
                        }
                    }
                },
                {
                    "term": {
                        "targetInfo.targetType.raw": "FaceDetect"
                    }
                },
                {
                    "terms": {
                        "cameraId": ["` + esCameraId + `"]
                    }
                }
            ]
        }
    },
    "size": 0,
    "aggs": {
        "buckets_aggs": {
            "composite": {
                "sources": [
                    {
                        "baseInfo.targetId": {
                            "terms": {
                                "field": "baseInfo.targetId"
                            }
                        }
                    },
                    {
                        "cameraId": {
                            "terms": {
                                "field": "cameraId"
                            }
                        }
                    }
                ],
                "size": 100000000
            },
            "aggs":{
                "top_attention_hits":{
                    "top_hits":{
                        "size": 1000000,
                        "sort": [
                            {
                                "picDate": {
                                    "order": "asc"
                                }
                            }
                        ],
                        "_source":{
                            "includes":["baseInfo.targetId","cameraId","cameraName","cameraAddr","targetInfo.targetScore","targetInfo.picSmUrl","showLabels","baseInfo.tableId","baseInfo.tableName","baseInfo.bwType","baseInfo.targetName","baseInfo.compareScore","picDate","picMaxUrl","picWH"]
                        }
                    }
                }
            }
        }
    }
}`
   //fmt.Println(buckersUrl)
   //fmt.Println(buckersBody)
   buf, err := EsReq("POST", buckersUrl, []byte(buckersBody))
   if err != nil {
      return nil, err
   }
   sources, err := SourceAggregations(buf, thresholdTime)
   if err != nil {
      return nil, err
   }
   //println(sources)
   return sources, nil
}
//根据抓拍人员id更新(picurl)图片地址
func UpdatePicUrlById(id string, picUrl string, indexName string, serverIp string, serverPort string) (err error) {
    updateTime := time.Now().Format("2006-01-02 15:04:05")
   tRes, err := AIOceaninfosbyid([]string{id}, indexName, serverIp, serverPort)
   if err != nil || len(tRes) == 0 {
      return err
   }
   picMaxUrls := tRes[0].PicMaxUrl
   sourceStr := `
        "lang":"painless",
        "inline": "ctx._source.picMaxUrl.add('` + picUrl + `');ctx._source.updateTime='`+updateTime+`'"
`
   if len(picMaxUrls) >= 2 {
      sourceStr = `"source": "ctx._source.picMaxUrl[1]='` + picUrl + `';ctx._source.updateTime='`+updateTime+`'"`
   }
   var info interface{}
   url := "http://" + serverIp + ":" + serverPort + "/" + indexName + "/_update_by_query?refresh=true"
   var picUrlInfo = `
        {
          "script": {
           ` + sourceStr + `
          },
              "query": {
              "bool": {
                  "filter": [
                      {
                          "term": {
                              "id": "` + id + `"
                          }
                      }
                  ]
              }
          }
        }
        `
   //logPrint("url: ", url, videoUrlInfo)
   fmt.Println(url, picUrlInfo)
   buf, err := EsReq("POST", url, []byte(picUrlInfo))
   if err != nil {
      logPrint("http request videoUrlInfo info is err!")
      return err
   }
   json.Unmarshal(buf, &info)
   //logPrint(info)
   out, ok := info.(map[string]interface{})
   if !ok {
      logPrint("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 {
      logPrint("first updated change error!")
      return errors.New("first updated change error!")
   }
   if middle == 1 {
      return nil
   }
   if middle == 0 {
      return errors.New("已经修改")
   }
   return nil
}
//根据抓拍人员id更新(videourl)摄像机地址
func UpdateVideourlById(id string, videoUrl string, indexName string, serverIp string, serverPort string, command int) (statu int, err error) {
@@ -770,7 +984,7 @@
func GetOceanFeatures(serverIp string, serverPort string, queryNums int, indexName string, shards string, targetType string) ([]*protomsg.MultiFeaCache, error) {
   //queryIndexNum int
   //var dbinfos []*protomsg.MultiFeaCache
   dbinfos := make([]*protomsg.MultiFeaCache,0)
   dbinfos := make([]*protomsg.MultiFeaCache, 0)
   //dbinfosss := make([]*protomsg.MultiFeaCache,0)
   //dbinfoss = append(dbinfoss, dbinfosss...)
@@ -819,20 +1033,20 @@
         //logPrint("url: ",reqJsonDSL)
         buf, err := EsReq("POST", url, []byte(reqJsonDSL))
         if err != nil {
            logPrint("EsReq: ",err)
            logPrint("EsReq: ", err)
            return
         }
         // 返回 _source 数组
         sources, err := Sourcelistforscroll(buf)
         if err != nil {
            logPrint("EsReq: ",err)
            logPrint("EsReq: ", err)
            return
         }
         // 返回所有查询的数据
         ftmpDatas :=  Parsesources(sources["sourcelist"].([]map[string]interface{}))
         ftmpDatas := Parsesources(sources["sourcelist"].([]map[string]interface{}))
         lock.Lock()
         dbinfos = append(dbinfos,ftmpDatas...)
         dbinfos = append(dbinfos, ftmpDatas...)
         //logPrint("prsLen: ", len(Parsesources(sources["sourcelist"].([]map[string]interface{}))))
         //logPrint("dbinfosLen: ", len(dbinfos))
         lock.Unlock()
@@ -921,14 +1135,13 @@
   if err != nil {
      return false, errors.New("解码失败")
   }
   if resTotal == -1 || resTotal == 0{
   if resTotal == -1 || resTotal == 0 {
      result = false
   } else {
      result = true
   }
   return result, nil
}
//按日期范围,服务器Id删除数据
func DeleteAnalyServerData(serverIp string, serverPort string, indexName string, startTime string, endTime string, analyServerId string) (result bool, err error) {
@@ -985,7 +1198,15 @@
        }
    },
    "query": {
        "match_all": {}
        "bool": {
            "filter": [
                {
                    "term": {
                        "application": "loopCoverage"
                    }
                }
            ]
        }
    }
}`
   buf, err := EsReq("POST", url, []byte(addJson))