package controllers
|
|
import (
|
"basic.com/dbapi.git"
|
"basic.com/valib/logger.git"
|
"fmt"
|
"github.com/gin-gonic/gin"
|
"strconv"
|
"strings"
|
"webserver/cache"
|
"webserver/extend/code"
|
"webserver/extend/config"
|
"webserver/extend/esutil"
|
"webserver/extend/util"
|
"webserver/models"
|
)
|
|
type EsSearchController struct{}
|
|
// @Security ApiKeyAuth
|
// @Summary 检索
|
// @Description 信息检索和比对检索
|
// @Accept json
|
// @Produce json
|
// @Tags es
|
// @Param obj body models.EsSearch true "底库数据"
|
// @Success 200 {string} json "{"code":200, msg:"目录结构数据", success:true}"
|
// @Failure 500 {string} json "{"code":500, msg:"返回错误信息", success:false}"
|
// @Router /data/api-v/es/esSearch [POST]
|
func (sc *EsSearchController) PostEsSearch(c *gin.Context) {
|
//searchBody := make(map[string]interface{}, 0)
|
//c.BindJSON(&searchBody)
|
//data := findEsData(searchBody)
|
|
var arg models.EsSearch
|
err := c.BindJSON(&arg)
|
if err != nil || arg.Page <= 0 && arg.Size <= 0 {
|
util.ResponseFormat(c, code.RequestParamError, "参数有误")
|
return
|
}
|
data := findEsData(&arg)
|
|
util.ResponseFormat(c, code.Success, data)
|
}
|
|
//获取监控等级
|
func getAlarmLevel(alarmlevel []int32) []string {
|
d := dbapi.DicApi{}
|
res, data := d.FindByType("ALARMLEVEL")
|
if data == nil {
|
logger.Debug("data is nil")
|
}
|
logger.Debug(res)
|
// logger.Debug(data)
|
alarmLevel := make(map[int32]string)
|
tmp := data.(map[string]interface{})
|
for _, value := range tmp["ALARMLEVEL"].([]interface{}) {
|
// logger.Debug(value.(map[string]interface{})["value"]," ",value.(map[string]interface{})["name"])
|
val := value.(map[string]interface{})["value"].(string)
|
name := value.(map[string]interface{})["name"].(string)
|
vl, err := strconv.Atoi(val)
|
if err != nil {
|
logger.Debug(err)
|
}
|
alarmLevel[int32(vl)] = name
|
}
|
alarmLevelRes := make([]string, len(alarmlevel))
|
for i, v := range alarmlevel {
|
if v < 0 {
|
alarmLevelRes[i] = "撤防"
|
} else {
|
alarmLevelRes[i] = alarmLevel[v]
|
}
|
}
|
return alarmLevelRes
|
}
|
|
func findEsData(searchBody *models.EsSearch) map[string]interface{} {
|
webPage := searchBody.Page
|
|
webSize := searchBody.Size
|
from := strconv.Itoa((webPage - 1) * webSize)
|
//esFrom := strconv.Itoa(from)
|
//esSize := strconv.Itoa(webSize)
|
size := strconv.Itoa(webSize)
|
//请求索引
|
index := config.EsInfo.EsIndex.AiOcean.IndexName
|
queryStr := ""
|
queryBody := searchBody.InputValue
|
//检索框
|
if queryBody != "" {
|
queryStr = "\"must\":[{\"multi_match\":{\"query\":\"" + queryBody + "\",\"fields\":[\"cameraAddr^1.5\",\"taskName^1.5\",\"sdkName^1.5\",\"showLabels^3.0\",\"baseInfo.tableName^1.5\",\"baseInfo.targetName^1.5\",\"baseInfo.labels^1.5\",\"alarmRules.alarmLevel^1.5\",\"linkTag^1.5\",\"linkTagInfo.cameraAddr\",\"linkTagInfo.taskName^1.5\",\"linkTagInfo.sdkName^1.5\",\"linkTagInfo.showLabels^1.5\",\"linkTagInfo.baseInfo.tableName^1.5\",\"linkTagInfo.baseInfo.targetName^1.5\",\"linkTagInfo.baseInfo.labels^1.5\",\"linkTagInfo.alarmRules.alarmLevel^1.5\"]," +
|
"\"type\":\"cross_fields\",\"operator\":\"OR\",\"slop\":0,\"prefix_length\":0,\"max_expansions\":50,\"zero_terms_query\":\"NONE\",\"auto_generate_synonyms_phrase_query\":true,\"fuzzy_transpositions\":true,\"boost\":1}}],"
|
}
|
|
searchTime := searchBody.SearchTime
|
if searchTime == nil || len(searchTime) < 2 {
|
info := make(map[string]interface{}, 0)
|
info["err"] = "请输入时间范围"
|
return info
|
}
|
|
gteDate := searchTime[0]
|
lteDate := searchTime[1]
|
|
//判断数据ID
|
idStr := ""
|
linkTagInfoIdStr := ""
|
//personId := searchBody.Id
|
id := []string{}
|
if id != nil && len(id) > 0 {
|
esId := strings.Replace(strings.Trim(fmt.Sprint(id), "[]"), " ", "\",\"", -1)
|
idStr = "{\"terms\":{\"id\":[\"" + esId + "\"]}},"
|
linkTagInfoIdStr = "{\"terms\":{\"linkTagInfo.id\":[\"" + esId + "\"]}},"
|
}
|
|
//判断任务ID
|
taskIdStr := ""
|
linkTagInfoTaskIdStr := ""
|
taskId := searchBody.Tasks
|
if taskId != nil && len(taskId) > 0 {
|
esTaskId := strings.Replace(strings.Trim(fmt.Sprint(taskId), "[]"), " ", "\",\"", -1)
|
taskIdStr = "{\"terms\":{\"taskId\":[\"" + esTaskId + "\"]}},"
|
linkTagInfoTaskIdStr = "{\"terms\":{\"linkTagInfo.taskId\":[\"" + esTaskId + "\"]}},"
|
}
|
|
//判断摄像机ID
|
cameraIdStr := ""
|
linkTagInfoCameraIdStr := ""
|
cameraId := searchBody.TreeNodes
|
if cameraId != nil && len(cameraId) > 0 {
|
esCameraId := strings.Replace(strings.Trim(fmt.Sprint(cameraId), "[]"), " ", "\",\"", -1)
|
cameraIdStr = "{\"terms\":{\"cameraId\":[\"" + esCameraId + "\"]}},"
|
linkTagInfoCameraIdStr = "{\"terms\":{\"linkTagInfo.cameraId\":[\"" + esCameraId + "\"]}},"
|
}
|
|
//判断库表ID
|
tableId := searchBody.Tabs
|
esTableId := ""
|
esTableIdStr := ""
|
linkTagInfoEsTableIdStr := ""
|
if tableId != nil && len(tableId) > 0 {
|
esTableId = strings.Replace(strings.Trim(fmt.Sprint(tableId), "[]"), " ", "\",\"", -1)
|
esTableIdStr = "{\"terms\":{\"baseInfo.tableId\":[\"" + esTableId + "\"]}},"
|
linkTagInfoEsTableIdStr = "{\"terms\":{\"linkTagInfo.baseInfo.tableId\":[\"" + esTableId + "\"]}},"
|
}
|
//判断收藏状态
|
isCollectStr := ""
|
linkTagInfoIsCollectStr := ""
|
isCollect := searchBody.Collection
|
if isCollect != "" {
|
isCollectStr = "{\"term\":{\"isCollect\":" + isCollect + "}},"
|
linkTagInfoIsCollectStr = "{\"term\":{\"linkTagInfo.isCollect\":" + isCollect + "}},"
|
}
|
//判断布防等级id
|
alarmLevelId := searchBody.AlarmLevel
|
alarmLevelStr := ""
|
linkTagInfoAlarmLevelStr := ""
|
if len(alarmLevelId) > 0 {
|
alarmLevelTypes := strings.Replace(strings.Trim(fmt.Sprint(getAlarmLevel(alarmLevelId)), "[]"), " ", "\",\"", -1)
|
alarmLevelStr = "{\"terms\":{\"alarmRules.alarmLevel.raw\":[\"" + alarmLevelTypes + "\"]}},"
|
linkTagInfoAlarmLevelStr = "{\"terms\":{\"linkTagInfo.alarmRules.alarmLevel.raw\":[\"" + alarmLevelTypes + "\"]}},"
|
}
|
|
//使用es底层机制处理分页
|
//请求头
|
localConf, err2 := cache.GetServerInfo()
|
if err2 != nil || localConf.AlarmIp == "" || localConf.ServerId == "" {
|
logger.Debug("localConfig is wrong!!!")
|
return nil
|
}
|
url := "http://" + localConf.AlarmIp + ":" + strconv.Itoa(int(localConf.AlarmPort)) +
|
"/" + index + "/_search?search_type=dfs_query_then_fetch"
|
|
analyServerFilterStr := "{\"term\":{\"analyServerId\":\"" + localConf.ServerId + "\"}},"
|
linkTagInfoAnalyServerFilterStr := "{\"term\":{\"linkTagInfo.analyServerId\":\"" + localConf.ServerId + "\"}},"
|
|
//请求体
|
prama := "{\"from\":\"" + from + "\"," +
|
"\"size\":\"" + size + "\"," +
|
"\"query\":{\"bool\":{" + queryStr +
|
"\"should\":[" +
|
"{\"bool\":{\"filter\":[" +
|
cameraIdStr +
|
alarmLevelStr +
|
idStr +
|
taskIdStr +
|
isCollectStr +
|
esTableIdStr +
|
analyServerFilterStr +
|
"{\"range\":{\"picDate\":{\"from\":\"" + gteDate + "\",\"to\":\"" + lteDate + "\",\"include_lower\":true,\"include_upper\":true,\"boost\":1}}}" +
|
"]}}," +
|
"{\"bool\":{\"filter\":[" +
|
linkTagInfoCameraIdStr +
|
linkTagInfoAlarmLevelStr +
|
linkTagInfoIdStr +
|
linkTagInfoTaskIdStr +
|
linkTagInfoIsCollectStr +
|
linkTagInfoEsTableIdStr +
|
linkTagInfoAnalyServerFilterStr +
|
"{\"range\":{\"linkTagInfo.picDate\":{\"from\":\"" + gteDate + "\",\"to\":\"" + lteDate + "\",\"include_lower\":true,\"include_upper\":true,\"boost\":1}}}" +
|
"]}}" +
|
"],\"minimum_should_match\":1}}," +
|
"\"sort\":[{\"_score\":{\"order\":\"desc\"}},{\"updateTime\":{\"order\":\"desc\"}}]," +
|
"\"_source\":{\"includes\":[],\"excludes\":[\"*.feature\"]}" +
|
"}"
|
logger.Debug("findEsData.param:", prama)
|
//数据解析
|
tokenRes := esutil.GetEsDataReq(url, prama, true)
|
tmpAllDate := esutil.ResponseData(tokenRes)
|
//fmt.Println(tokenRes)
|
//tmpAllDate := make(map[string]interface{})
|
//tmpDate := make(map[string][]interface{})
|
//tmpAllDate["total"] = tokenRes["total"]
|
//data := tokenRes["datalist"]
|
//for _, masterInfoValues := range data.([]interface{}) {
|
// masterInfo := masterInfoValues.(map[string]interface{})
|
// sources := make(map[string]interface{}, 0)
|
// activateInfo := make(map[string]interface{})
|
// if masterInfo["linkTagInfo"] != nil {
|
// linkTagInfo := masterInfo["linkTagInfo"].([]interface{})
|
// delete(masterInfo, "linkTagInfo")
|
// if len(linkTagInfo) > 0 {
|
// slaveList := make([]interface{}, 0)
|
// slaveList = append(slaveList, masterInfo)
|
// slaveList = append(slaveList, linkTagInfo...)
|
// for i, j := 0, len(slaveList)-1; i < j; i, j = i+1, j-1 {
|
// slaveList[i], slaveList[j] = slaveList[j], slaveList[i]
|
// }
|
// sources["list"] = slaveList
|
// activateInfo = slaveList[0].(map[string]interface{})
|
// } else {
|
// sources["list"] = []interface{}{
|
// masterInfo,
|
// }
|
// activateInfo = masterInfo
|
// }
|
// } else {
|
// if _, ok := masterInfo["linkTagInfo"]; ok {
|
// delete(masterInfo, "linkTagInfo")
|
// }
|
// sources["list"] = []interface{}{
|
// masterInfo,
|
// }
|
// activateInfo = masterInfo
|
//
|
// }
|
//
|
// sources["activeObject"] = activateInfo
|
//
|
// tmpDate["datalist"] = append(tmpDate["datalist"], sources)
|
//}
|
//tmpAllDate["datalist"] = tmpDate["datalist"]
|
return tmpAllDate
|
}
|
|
//sdkTYype字典"\"_source\":[\"BaseName\",\"Gender\",\"Race\",\"content\",\"idcard\",\"picAddress\",\"picDate\",\"sdkType\",\"Age\",\"personId\",\"personIsHub\",\"personPicUrl\",\"picLocalUrl\",\"picSmUrl\",\"videoIp\",\"videoNum\",\"cameraId\",\"ageDescription\",\"likePer\"]" +
|
//func sdkTypeToValue(i int) string {
|
// value := []string{"人脸", "车辆", "人体", "入侵", "拥挤", "靠右行", "人员异常", "个体静止"}
|
// return value[i-1]
|
//}
|
|
//获取Dbtablepersons信息
|
/*func getDBPersonInfo(personId string) map[string]string {
|
url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport +
|
"/" + config.EsInfo.EsIndex.Dbtablepersons.IndexName + "/_search"
|
|
prama := "{\"query\":{\"term\":{\"uuid\":\"" + personId + "\"}},\"_source\":[\"personName\",\"phoneNum\"]}"
|
|
tokenRes := esutil.GetEsDataReq(url, prama, true)
|
personRes := make(map[string]string)
|
//logger.Debug(tokenRes["datalist"].([]interface{}))
|
result := tokenRes["datalist"].([]interface{})
|
for _, value := range result {
|
userMap := value.(map[string]interface{})
|
if personName, ok := userMap["personName"]; ok {
|
personRes["personName"] = personName.(string)
|
} else {
|
personRes["personName"] = ""
|
}
|
if phoneNum, ok := userMap["phoneNum"]; ok {
|
personRes["phoneNum"] = phoneNum.(string)
|
} else {
|
personRes["phoneNum"] = ""
|
}
|
if sex, ok := userMap["sex"]; ok {
|
personRes["sex"] = sex.(string)
|
} else {
|
personRes["sex"] = ""
|
}
|
// personRes["phoneNum"] = value.(map[string]interface{})["phoneNum"].(string)
|
// personRes["sex"] = value.(map[string]interface{})["sex"].(string)
|
}
|
//logger.Debug(personRes)
|
if len(personRes) < 1 {
|
personRes["personName"] = ""
|
personRes["phoneNum"] = ""
|
personRes["sex"] = ""
|
}
|
return personRes
|
}*/
|