From 2bd2068c999cda5bda8c0787ed0dcaac6cb7afdb Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@iotlink.com> Date: 星期四, 31 十月 2019 13:27:46 +0800 Subject: [PATCH] feat: add system reboot api --- controllers/fileController.go | 313 +++++++++++++++++++++++++++++++++------------------ 1 files changed, 201 insertions(+), 112 deletions(-) diff --git a/controllers/fileController.go b/controllers/fileController.go index 99cce1b..aba0b1f 100644 --- a/controllers/fileController.go +++ b/controllers/fileController.go @@ -6,6 +6,7 @@ "basic.com/pubsub/protomsg.git" "bytes" "encoding/base64" + "encoding/json" "errors" "fmt" "github.com/gin-gonic/gin" @@ -49,6 +50,7 @@ //var weedfsUri = "http://192.168.1.182:9500/submit" +// @Security ApiKeyAuth // @Summary 渚濇嵁鍥剧墖娣诲姞搴曞簱浜哄憳 // @Description 渚濇嵁鍥剧墖娣诲姞搴曞簱杩斿洖鏁版嵁浜哄憳 // @Accept mpfd @@ -109,6 +111,7 @@ } var faceExtractedMap = make(map[string]FaceExtract,0) +// @Security ApiKeyAuth // @Summary 浜鸿劯鎻愬彇 // @Description 浜鸿劯鎻愬彇 // @Produce json @@ -195,6 +198,7 @@ BaseInfo []DbPersonVo `json:"baseInfo"` VideoUrl string `json:"videoUrl"` SdkName string `json:"sdkName"` + AlarmRules []AlarmRuleVo `json:"alarmRules"` } type DbPersonVo struct { BwType string `json:"bwType"` @@ -214,6 +218,15 @@ type ScoreIndex struct { CompareScore float32 Index int +} + +type AlarmRuleVo struct { + GroupId string `json:"groupId"` + AlarmLevel string `json:"alarmLevel"` + RuleText string `json:"ruleText"` + DefenceState bool `json:"defenceState"` + IsLink bool `json:"isLink"` + LinkInfo string `json:"linkInfo"` } //濉厖鍚戝墠绔繑鍥炵殑鏁版嵁 @@ -280,6 +293,7 @@ logger.Debug("localConfig is wrong!!!") return nil } + logger.Debug("captureIds:",strings.Join(captureIds,",")) videopersons, _ := esApi.Videopersonsinfosbyid(captureIds, config.EsInfo.EsIndex.VideoPersons.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort))) logger.Debug("comp videoPersons.len:",len(videopersons)) for _,vp :=range videopersons { @@ -300,6 +314,19 @@ TableName: p.TableName, }) } + var alarmRules []AlarmRuleVo + if vp.AlarmRules !=nil && len(vp.AlarmRules) >0 { + for _,ar :=range vp.AlarmRules { + alarmRules = append(alarmRules, AlarmRuleVo{ + GroupId: ar.GroupId, + AlarmLevel: ar.AlarmLevel, + RuleText: ar.RuleText, + DefenceState: ar.DefenceState, + IsLink: ar.IsLink, + LinkInfo: ar.LinkInfo, + }) + } + } vpE := CompareResult{ Id: vp.Id, CompareScore: util.ParseScore(captureM[vp.Id].CompareScore), @@ -317,6 +344,7 @@ VideoUrl: vp.VideoUrl, BaseInfo: bi, SdkName: "浜鸿劯", + AlarmRules: alarmRules, } resultList[captureM[vp.Id].Index] = vpE } @@ -367,6 +395,7 @@ } } +// @Security ApiKeyAuth // @Summary 浠ュ浘鎼滃浘 // @Description 浠ュ浘鎼滃浘 // @Accept json @@ -390,56 +419,56 @@ return } var faceB []byte - var uploadImage string - var smImages []string - //if searchBody.CaptureId != "" {//鍋氭煡鎵炬浜�,鎼滄墍鏈夋姄鎷嶅拰搴曞簱 - // searchBase64Fea, err := esApi.GetVideoPersonFaceFeatureById(searchBody.CaptureId, config.EsInfo.EsIndex.VideoPersons.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort))) - // if err !=nil { - // util.ResponseFormat(c, code.ComError, "鎶撴媿鏁版嵁涓嶅瓨鍦紝璇锋鏌�") - // return - // } - // if searchBase64Fea !=""{ - // decodeF, err := base64.StdEncoding.DecodeString(searchBase64Fea) - // if err !=nil { - // util.ResponseFormat(c, code.ComError, "鏈潯鎶撴�曠壒寰佷笉鏄痓ase64锛岃妫�鏌�") - // return - // } - // faceB = decodeF - // } - //} else {//鍋氫互鍥炬悳鍥� - // - //} + logger.Debug("compTargetId:",searchBody.CompTargetId,",compTargetType:",searchBody.CompTargetType) + if searchBody.CompTargetId != "" {//鍋氭煡鎵炬浜�,鎸夋姄鎷嶇殑浜鸿劯鎴栬�呭簳搴撶殑浜鸿劯浠ュ浘鎼滃浘 + if searchBody.CompTargetType == 0 {//鏈紶浜鸿劯鏄簳搴撲汉鑴� + var dbpApi dbapi.DbPersonApi + dbPersons, e := dbpApi.Dbpersoninfosbyid([]string{searchBody.CompTargetId}) + if e ==nil && dbPersons !=nil && len(dbPersons) ==1 { + searchBase64Fea := dbPersons[0].FaceFeature + if searchBase64Fea != "" { + decodeF, err := base64.StdEncoding.DecodeString(dbPersons[0].FaceFeature) + if err !=nil { + util.ResponseFormat(c, code.ComError, "鏈潯搴曞簱浜哄憳鐗瑰緛涓嶆槸base64锛岃妫�鏌�") + return + } + faceB = decodeF + } else { + util.ResponseFormat(c, code.ComError, "鏈潯搴曞簱浜哄憳鐗瑰緛涓虹┖锛岃妫�鏌�") + return + } + } else { + util.ResponseFormat(c, code.ComError, "搴曞簱浜哄憳鏌ヨ澶辫触锛岃妫�鏌�") + return + } + } else { + searchBase64Fea, err := esApi.GetVideoPersonFaceFeatureById(searchBody.CompTargetId, config.EsInfo.EsIndex.VideoPersons.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort))) + if err !=nil { + util.ResponseFormat(c, code.ComError, "鎶撴媿鏁版嵁涓嶅瓨鍦紝璇锋鏌�") + return + } - if searchBody.PicUrl == "" || len(searchBody.DataBases) == 0 { - util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎") - return - } - if face,ok := faceExtractedMap[searchBody.PicUrl];!ok{ - httpPicUrl := "" - idx := strings.LastIndex(searchBody.PicUrl, ":") - if idx>-1 { - httpPicUrl = "http://"+localConf.WebPicIp+searchBody.PicUrl[idx:] - } else { - util.ResponseFormat(c, code.RequestParamError, "璇烽噸鏂颁笂浼犲浘鐗�") + if searchBase64Fea !=""{ + decodeF, err := base64.StdEncoding.DecodeString(searchBase64Fea) + if err !=nil { + util.ResponseFormat(c, code.ComError, "鏈潯鎶撴�曠壒寰佷笉鏄痓ase64锛岃妫�鏌�") + return + } + faceB = decodeF + } + } + + } else {//鍋氫互鍥炬悳鍥� + if searchBody.PicUrl == "" || len(searchBody.DataBases) == 0 { + util.ResponseFormat(c, code.RequestParamError, "浠ュ浘鎼滃浘PicUrl涓嶈兘涓虹┖") return } - logger.Debug("httpPicUrl:",httpPicUrl) - rb,err := util.ReadImgData(httpPicUrl) - if err !=nil { - util.ResponseFormat(c, code.RequestParamError, "璇烽噸鏂颁笂浼犲浘鐗�") - return - } - feaB, oriImg, smImgs, e := GetFeaFromOneFaceImg(rb) - if e !=nil { - util.ResponseFormat(c, code.RequestParamError, "璇烽噸鏂颁笂浼犲浘鐗�") + if face,ok := faceExtractedMap[searchBody.PicUrl];!ok{ + util.ResponseFormat(c, code.RequestParamError, "浜鸿劯鐗瑰緛鏈娴嬶紝璇烽噸鏂颁笂浼犲浘鐗�") return } else { - uploadImage = oriImg - smImages = smImgs - faceB = feaB + faceB = face.FaceBytes } - } else { - faceB = face.FaceBytes } if faceB == nil { @@ -499,9 +528,7 @@ CompareData: &totalData, }) - m := make(map[string]interface{},5) - m["uploadImage"] = uploadImage - m["smImage"] = smImages + m := make(map[string]interface{},3) if totalData != nil && totalData.Len() > 0{ sort.Sort(totalData) total := totalData.Len() @@ -526,76 +553,136 @@ util.ResponseFormat(c,code.Success,m) } -func GetCompareDataTwice(co *service.CompareOnce,arg *models.EsSearch) map[string]interface{} { - //camIds := arg.TreeNodes - //tabIds := arg.Tabs - //taskIds := arg.Tasks - //alarmLevels := arg.AlarmLevel - //timeArr := arg.SearchTime - //input := arg.InputValue - //resultList := make([]CompareResult,0) - //for _,each :=range *co.CompareData { - // if each.Id !=""{ - // n :=0 - // if len(camIds) == 0 || isInArr(each.CameraId,camIds) { - // n++ - // } - // if len(tabIds) == 0 { - // n++ - // } - // if len(taskIds) == 0 || isInArr(each.TaskId, taskIds) { - // n++ - // } - // //鍒ゆ柇鎶ヨ绛夌骇 - // if len(alarmLevels) == 0 { - // - // } - // n++ - // //鍒ゆ柇鏃堕棿 - // if len(timeArr) == 0 { - // - // } - // n++ - // if input == ""{ - // - // } - // n++ - // if n == 6 { - // resultList = append(resultList,cr) - // } - // } else { - // resultList = append(resultList,cr) - // } - //} +type PersonId struct { + Id string `json:"id"` +} - //logger.Debug("GetCompareDataTwice.data:",resultList) - //service.SortByScore(resultList) - from := (arg.Page-1)*arg.Size - to := from + arg.Size - var sCompResult protomsg.SdkCompareResult - total := len(*co.CompareData) - if total <= to { - sCompResult.CompareResult = (*co.CompareData)[from:total] - } else { - sCompResult.CompareResult = (*co.CompareData)[from:to] - } - resultList := FillDataToCompareResult(&sCompResult) - +func GetCompareDataTwice(co *service.CompareOnce,searchBody *models.EsSearch) map[string]interface{} { m := make(map[string]interface{},0) - m["total"] = total - m["compareNum"] = arg.CompareNum - m["totalList"] = resultList - //if from < len(resultList) { - // if to <= len(resultList) { - // m["totalList"] = resultList[from:to] - // } else { - // lte := len(resultList) - // m["totalList"] = resultList[from:lte] - // } + + from := (searchBody.Page-1)*searchBody.Size + to := from + searchBody.Size + + var hasCompEsPerson = false + if searchBody.DataBases !=nil { + for idx,tableId :=range searchBody.DataBases { + if tableId == "esData" { + hasCompEsPerson = true + searchBody.DataBases = append(searchBody.DataBases[:idx], searchBody.DataBases[idx+1:]...) + break + } + } + } + if hasCompEsPerson {//浜屾妫�绱S姣斿缁撴灉 + arg := protomsg.CompareArgs{ + CompareThreshold: searchBody.Threshold, + } + localConf, err := cache.GetServerInfo() + if err ==nil && localConf.AlarmIp != "" && localConf.ServerId != "" { + arg.Source = true // 鏍囪瘑鏉ユ簮鏄痺eb + arg.AlarmLevel = searchBody.AlarmLevel + arg.Tasks = searchBody.Tasks + arg.TreeNodes = searchBody.TreeNodes + arg.Tabs = searchBody.Tabs + arg.SearchTime = searchBody.SearchTime + arg.InputValue = searchBody.InputValue + arg.Collection = searchBody.Collection + arg.AnalyServerId = localConf.ServerId + alarmLevelTypes := strings.Replace(strings.Trim(fmt.Sprint(getAlarmLevel(searchBody.AlarmLevel)), "[]"), " ", "\",\"", -1) + captureIds := esApi.GetAllLocalVideopersonsId(arg, config.EsInfo.EsIndex.VideoPersons.IndexName, localConf.AlarmIp, strconv.Itoa(int(localConf.AlarmPort)), alarmLevelTypes) + logger.Debug("searchPhoto first Result.len:",len(*co.CompareData),"twice len(captureIds):",len(captureIds)) + if captureIds !=nil { + var aResult protomsg.SdkCompareResult + aList := getTwiceSearchResult(co, &captureIds, searchBody) + aTotal := aList.Len() + if aTotal <= to { + aResult.CompareResult = (*aList)[from:aTotal] + } else { + aResult.CompareResult = (*aList)[from:to] + } + out := FillDataToCompareResult(&aResult) + m["total"] = aTotal + m["compareNum"] = searchBody.CompareNum + m["totalList"] = out + return m + } else { + m["total"] = 0 + m["compareNum"] = searchBody.CompareNum + m["totalList"] = []interface{}{} + return m + } + } + } else {//搴曞簱鏁版嵁鐨勪簩娆℃绱� + var dbpApi dbapi.DbPersonApi + personIds, _ := dbpApi.FindLikePersonIds(searchBody.DataBases, searchBody.InputValue) + logger.Debug("searchPhoto first Result.len:",len(*co.CompareData),"personIds:",personIds) + if personIds !=nil { + var pIds []PersonId + b, _ := json.Marshal(personIds) + json.Unmarshal(b, &pIds) + if len(pIds) >0 { + var personIdArr []string + for _,pid :=range pIds{ + personIdArr = append(personIdArr, pid.Id) + } + var aResult protomsg.SdkCompareResult + aList := getTwiceSearchResult(co, &personIdArr, searchBody) + aTotal := aList.Len() + if aTotal <= to { + aResult.CompareResult = (*aList)[from:aTotal] + } else { + aResult.CompareResult = (*aList)[from:to] + } + out := FillDataToCompareResult(&aResult) + m["total"] = aTotal + m["compareNum"] = searchBody.CompareNum + m["totalList"] = out + return m + } + + } else { + m["total"] = 0 + m["compareNum"] = searchBody.CompareNum + m["totalList"] = []interface{}{} + return m + } + } + + + //var sCompResult protomsg.SdkCompareResult + //total := len(*co.CompareData) + //if total <= to { + // sCompResult.CompareResult = (*co.CompareData)[from:total] //} else { - // m["totalList"] = []CompareResult{} + // sCompResult.CompareResult = (*co.CompareData)[from:to] //} + //resultList := FillDataToCompareResult(&sCompResult) + + + m["total"] = 0 + m["compareNum"] = searchBody.CompareNum + m["totalList"] = []interface{}{} + return m +} + +func getTwiceSearchResult(co *service.CompareOnce, scopeIds *[]string, searchBody *models.EsSearch) *service.CompareList{ + m := make(map[string]string) + for _,capId :=range *scopeIds { + m[capId] = capId + } + var totalData service.CompareList + for _,each :=range *co.CompareData { + if _,ok :=m[each.Id];ok && each.CompareScore >= searchBody.Threshold { + totalData = append(totalData, each) + } + } + + if totalData != nil && totalData.Len() > 0{ + sort.Sort(totalData) + } + + return &totalData } func isInArr(id string,arr []string) bool { @@ -717,6 +804,7 @@ /**涓婁紶鏂规硶**/ +// @Security ApiKeyAuth // @Summary 鎵归噺娣诲姞搴曞簱浜哄憳 // @Description 渚濇嵁鍥剧墖鎵归噺娣诲姞搴曞簱浜哄憳 // @Accept mpfd @@ -797,6 +885,7 @@ IdCard string `json:"idCard"` } +// @Security ApiKeyAuth // @Summary 涓婁紶鍥剧墖 骞跺垏鍥� // @Description 涓婁紶鍥剧墖 骞跺垏鍥� // @Accept mpfd -- Gitblit v1.8.0