| | |
| | | package esutil |
| | | |
| | | import ( |
| | | "bytes" |
| | | "encoding/json" |
| | | "errors" |
| | | "fmt" |
| | |
| | | "strings" |
| | | "time" |
| | | |
| | | log "github.com/long/test/log" |
| | | log "andriodServer/log" |
| | | ) |
| | | |
| | | func GetEsDataReq(url string, parama string, isSource bool) (error, map[string]interface{}) { |
| | | //log.Log.Infoln("es 查询请求路径" + url) // 配置信息 获取 |
| | | req, err := http.NewRequest("POST", url, strings.NewReader(parama)) |
| | | func EsReq(method string, url string, parama []byte) (buf []byte, err error) { |
| | | //defer elapsed("page")() |
| | | timeout := time.Duration(100 * time.Second) |
| | | client := http.Client{ |
| | | Timeout: timeout, |
| | | } |
| | | request, err := http.NewRequest(method, url, bytes.NewBuffer(parama)) |
| | | request.Header.Set("Content-type", "application/json") |
| | | |
| | | if err != nil { |
| | | fmt.Println("build request fail !") |
| | | return nil, err |
| | | } |
| | | |
| | | resp, err := client.Do(request) |
| | | if err != nil { |
| | | fmt.Println("request error: ", err) |
| | | return nil, err |
| | | } |
| | | |
| | | defer resp.Body.Close() |
| | | body, err := ioutil.ReadAll(resp.Body) |
| | | if err != nil { |
| | | fmt.Println(err) |
| | | return nil, err |
| | | } |
| | | return body, nil |
| | | } |
| | | |
| | | func GetEsDataReq(url string, param string, isSource bool) (error, map[string]interface{}) { |
| | | req, err := http.NewRequest("POST", url, strings.NewReader(param)) |
| | | |
| | | if err != nil { |
| | | return err, nil |
| | |
| | | resp, err := client.Do(req) |
| | | |
| | | if err != nil { |
| | | return err, nil |
| | | return err, nil |
| | | } |
| | | |
| | | defer resp.Body.Close() |
| | |
| | | } |
| | | // 是否需要 解析 es 返回的 source |
| | | if isSource { |
| | | dat, ok := dat["hits"].(map[string]interface{}) |
| | | dat, ok := dat["hits"].(map[string]interface{}) |
| | | if !ok { |
| | | return errors.New("data is not type of map[string]interface{}"), nil |
| | | } |
| | |
| | | data["total"] = dat["total"] |
| | | sources := []interface{}{} |
| | | for _, value := range dat["hits"].([]interface{}) { |
| | | d := make(map[string]interface{}) |
| | | source, ok := value.(map[string]interface{})["_source"].(map[string]interface{}) |
| | | if !ok { |
| | | return errors.New("value is not type of map[string]interface{}"), nil |
| | | } |
| | | |
| | | source["id"] = value.(map[string]interface{})["_id"] |
| | | sdkType := source["sdkType"] |
| | | if sdkType != nil { |
| | | sdk, err := strconv.Atoi(sdkType.(string)) |
| | | if err != nil { |
| | | return err, nil |
| | | } |
| | | |
| | | source["sdkType"] = sdkTypeToValue(sdk) |
| | | d["id"] = value.(map[string]interface{})["_id"] |
| | | d["picDate"] = source["picDate"] |
| | | pmax, exist := source["picMaxUrl"] |
| | | if !exist { |
| | | continue |
| | | } |
| | | sources = append(sources, source) |
| | | alarmRules, exist := source["alarmRules"] |
| | | if exist { |
| | | if alarmB,ae := json.Marshal(alarmRules);ae ==nil { |
| | | var alarmRArr []AlarmRule |
| | | if ae = json.Unmarshal(alarmB, &alarmRArr);ae ==nil && len(alarmRArr) >0 { |
| | | d["alarmLevel"] = alarmRArr[0].AlarmLevel |
| | | } |
| | | } |
| | | } else { |
| | | d["alarmLevel"] = "" |
| | | } |
| | | pmArr := pmax.([]interface{}) |
| | | if len(pmArr) > 0 { |
| | | d["picMaxUrl"] = pmArr[0] |
| | | } else { |
| | | d["picMaxUrl"] = "" |
| | | } |
| | | d["picAddress"] = source["cameraAddr"] |
| | | |
| | | tB, err := json.Marshal(source["targetInfo"]) |
| | | if err != nil { |
| | | log.Log.Infoln("err:", err) |
| | | continue |
| | | } |
| | | |
| | | tiArr := []TargetInfo{} |
| | | err = json.Unmarshal(tB, &tiArr) |
| | | if err !=nil { |
| | | log.Log.Infoln("err:", err) |
| | | continue |
| | | } |
| | | if len(tiArr) > 0 { |
| | | ti := tiArr[0] |
| | | d["picSmUrl"] = ti.PicSmUrl |
| | | d["targetType"] = ti.TargetType |
| | | if ti.TargetType == "FaceDetect" { |
| | | sLabelStr, ok := source["showLabels"] |
| | | if ok { |
| | | //labelArr := strings.Split(sLabelStr.(string), "/") |
| | | //if len(labelArr) == 3 { |
| | | // d["gender"] = labelArr[0] |
| | | // d["ageDescription"] = labelArr[1] |
| | | // d["race"] = labelArr[2] |
| | | //} |
| | | d["showLabels"] = sLabelStr |
| | | } else { |
| | | d["showLabels"] = "" |
| | | } |
| | | |
| | | |
| | | if bInfos,ok := source["baseInfo"]; ok && bInfos != nil { |
| | | bd := getSourceBaseInfo(bInfos) |
| | | d["baseInfo"] = bd //比对到的底库的人 |
| | | } else { |
| | | d["baseInfo"] = []interface{}{} |
| | | } |
| | | d["sdkType"] = source["taskName"] |
| | | } else { |
| | | d["sdkType"] = source["taskName"] |
| | | d["picSmUrl"] = d["picMaxUrl"] |
| | | } |
| | | } else { |
| | | d["picSmUrl"] = d["picMaxUrl"] |
| | | } |
| | | |
| | | vUri := source["videoUrl"] |
| | | if vUri != nil && vUri.(string) != "" { |
| | | d["videoNum"] = "http://"+vUri.(string) |
| | | } else { |
| | | d["videoNum"] = "" |
| | | } |
| | | |
| | | sources = append(sources, d) |
| | | } |
| | | data["datalist"] = sources |
| | | return nil, data |
| | |
| | | } |
| | | } |
| | | |
| | | //sdk类型 |
| | | func sdkTypeToValue(i int) string { |
| | | value := []string{"人脸", "车辆", "人体", "入侵", "拥挤", "靠右行", "人员异常", "个体静止"} |
| | | |
| | | return value[i-1] |
| | | type AlarmRule struct { |
| | | GroupId string `json:"groupId"` |
| | | AlarmLevel string `json:"alarmLevel"` |
| | | } |
| | | |
| | | func PostAction(sec int, Eurl string) []byte { |
| | | index := "videopersons,personaction" |
| | | type TargetInfo struct { |
| | | TargetId string `json:"targetId"` |
| | | TargetType string `json:"targetType"` |
| | | PicSmUrl string `json:"picSmUrl"` |
| | | TargetScore float32 `json:"targetScore"` |
| | | } |
| | | |
| | | type BaseInfo struct { |
| | | TaskId string `json:"taskId"` |
| | | TaskName string `json:"taskName"` |
| | | LikePer float32 `json:"likePer"` |
| | | TableId string `json:"tableId"` |
| | | TableName string `json:"tableName"` |
| | | PersonId string `json:"personId"` |
| | | PersonPicUrl string `json:"personPicUrl"` |
| | | PersonName string `json:"personName"` |
| | | Gender string `json:"gender"` |
| | | PhoneNum string `json:"phoneNum"` |
| | | IDCard string `json:"IDCard"` |
| | | MonitorLevel string `json:"monitorLevel"` |
| | | Content string `json:"content"` |
| | | } |
| | | |
| | | type TI struct { |
| | | BwType string `json:"bwType"` |
| | | TargetPicUrl string `json:"targetPicUrl"` |
| | | TargetName string `json:"targetName"` |
| | | TargetId string `json:"targetId"` |
| | | TableId string `json:"tableId"` |
| | | CompareScore float32 `json:"compareScore"` |
| | | MonitorLevel string `json:"monitorLevel"` |
| | | Content string `json:"content"` |
| | | TableName string `json:"tableName"` |
| | | Labels string `json:"labels"` |
| | | } |
| | | |
| | | func getSourceBaseInfo(bInfos interface{}) []BaseInfo { |
| | | baseInfoArr := make([]BaseInfo,0) |
| | | |
| | | b, err := json.Marshal(bInfos) |
| | | if err == nil { |
| | | var targetArr []TI |
| | | if err = json.Unmarshal(b, &targetArr); err == nil && len(targetArr) >0 { |
| | | for _,t := range targetArr { |
| | | idCard,sex := "","" |
| | | if t.Labels != "" { |
| | | arr := strings.Split(t.Labels, "/") |
| | | if len(arr) > 0 { |
| | | for _,str := range arr { |
| | | if str == "男" || str == "女" { |
| | | sex = str |
| | | break |
| | | } |
| | | } |
| | | for _,str := range arr { |
| | | if len(str) == 18 { |
| | | idCard = str |
| | | break |
| | | } |
| | | } |
| | | } |
| | | } |
| | | baseInfoArr = append(baseInfoArr, BaseInfo{ |
| | | TaskId: "",//2.0新字段 |
| | | TaskName: "",//2.0新字段 |
| | | LikePer: t.CompareScore, |
| | | TableId: "",//2.0新字段 |
| | | TableName: t.TableName, |
| | | PersonId: t.TargetId, |
| | | PersonName: t.TargetName,//人员姓名,从管理平台获取 |
| | | PersonPicUrl: t.TargetPicUrl, |
| | | Gender: sex, |
| | | PhoneNum: "",//手机号,从管理平台获取 |
| | | IDCard: idCard, |
| | | MonitorLevel: t.MonitorLevel,//2.0新字段 |
| | | Content: t.Content, |
| | | }) |
| | | } |
| | | } else { |
| | | fmt.Println("unmarshal bInfos err:", err) |
| | | } |
| | | } else { |
| | | fmt.Println("marshal bInfos err:", err) |
| | | } |
| | | |
| | | return baseInfoArr |
| | | } |
| | | |
| | | func PostAction(sec int, Eurl string, ishub string, size int, lastT time.Time, curTime time.Time) []byte { |
| | | index := "ai_ocean" |
| | | url := fmt.Sprintf("%s%s%s", Eurl, index, "/_search") |
| | | |
| | | seccond := strconv.Itoa(sec) |
| | | sizeStr :="" |
| | | if size <=0 { |
| | | sizeStr = "1000" |
| | | } else { |
| | | sizeStr = strconv.Itoa(size) |
| | | } |
| | | preSec := "10" |
| | | if sec <=0 { |
| | | preSec = "10" |
| | | } else { |
| | | preSec = strconv.Itoa(sec) |
| | | } |
| | | var filterArr []string |
| | | var mustNotArr []string |
| | | //是否查报警数据 |
| | | if ishub == "hub" { |
| | | mustNotArr = append(mustNotArr,"{\"term\":{\"alarmRules.alarmLevel.raw\":\"五级\"}}") |
| | | } |
| | | |
| | | prama := "{\"query\":{\"bool\":{\"filter\":[{\"term\":{\"personIsHub\":\"1\"}},{\"range\":{\"picDate\":{\"gte\":\"now+8h-" + seccond + "s\",\"lt\":\"now+8h\"}}}]}},\"size\":\"1000\",\"sort\":[{\"picDate\":{\"order\":\"desc\"}}]," + |
| | | "\"_source\":[\"baseInfo\",\"gender\",\"indeviceName\",\"sdkType\",\"ageDescription\",\"content\",\"ID\",\"picAddress\",\"picMaxUrl\",\"picDate\",\"race\",\"videoNum\",\"picSmUrl\",\"taskName\",\"personIsHub\",\"IDCard\",\"videoIp\",\"videoReqNum\"]" + |
| | | filterArr = append(filterArr, "{\"range\":{\"picDate\":{\"gte\":\"now+8h-"+preSec+"s\",\"lt\":\"now+8h\"}}}") |
| | | |
| | | filterStr := "" |
| | | mustNotStr := "" |
| | | if len(filterArr) >0 { |
| | | filterStr = strings.Join(filterArr, ",") |
| | | } |
| | | if len(mustNotArr) > 0 { |
| | | mustNotStr = strings.Join(mustNotArr, ",") |
| | | } |
| | | param := "{\"query\":{\"bool\":{\"filter\":["+filterStr+"],\"must_not\":["+mustNotStr+"]}},\"size\":\""+sizeStr+"\",\"sort\":[{\"picDate\":{\"order\":\"desc\"}}]," + |
| | | "\"_source\":{\"includes\":[\"cameraAddr\",\"baseInfo\",\"targetInfo\",\"content\",\"id\",\"picMaxUrl\",\"picDate\",\"showLabels\",\"taskName\",\"sdkName\",\"videoUrl\",\"alarmRules\"],\"excludes\":[\"*.feature\",\"*.attachTarget\",\"*.targetLocation\"]}" + |
| | | "}" |
| | | err, tokenRes := GetEsDataReq(url, prama, true) |
| | | err, tokenRes := GetEsDataReq(url, param, true) |
| | | |
| | | if err != nil { |
| | | log.Log.Errorln(err) |
| | | log.Log.Errorln("GetEsDataReq err:", err) |
| | | return nil |
| | | } |
| | | jsonstring, _ := json.Marshal(tokenRes) |