From 15574512dca10c90c9c872c8049d8f4cd4135998 Mon Sep 17 00:00:00 2001
From: sunty <1172534965@qq.com>
Date: 星期五, 01 十一月 2019 18:10:13 +0800
Subject: [PATCH] fix add cluster

---
 controllers/fileController.go |  250 +++++++++++++++++++++++++++++++++++---------------
 1 files changed, 175 insertions(+), 75 deletions(-)

diff --git a/controllers/fileController.go b/controllers/fileController.go
index 876246e..4e596a1 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"`
 }
 
 //濉厖鍚戝墠绔繑鍥炵殑鏁版嵁
@@ -285,7 +298,7 @@
 		logger.Debug("comp videoPersons.len:",len(videopersons))
 		for _,vp :=range videopersons {
 			isAlarmInt, _ := strconv.Atoi(vp.IsAlarm)
-			bi := make([]DbPersonVo,0)
+			var bi []DbPersonVo
 			for _,p :=range vp.BaseInfo {
 				bi = append(bi, DbPersonVo{
 					PersonId: p.PersonId,
@@ -297,9 +310,22 @@
 					PhoneNum: p.PhoneNum,
 					Sex: p.Sex,
 					TableId: p.TableId,
-					BwType: strconv.Itoa(int(p.BwType)),
+					BwType: p.BwType,
 					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,
@@ -318,6 +344,7 @@
 				VideoUrl: vp.VideoUrl,
 				BaseInfo: bi,
 				SdkName: "浜鸿劯",
+				AlarmRules: alarmRules,
 			}
 			resultList[captureM[vp.Id].Index] = vpE
 		}
@@ -368,6 +395,7 @@
 	}
 }
 
+// @Security ApiKeyAuth
 // @Summary 浠ュ浘鎼滃浘
 // @Description  浠ュ浘鎼滃浘
 // @Accept json
@@ -419,7 +447,7 @@
 				util.ResponseFormat(c, code.ComError, "鎶撴媿鏁版嵁涓嶅瓨鍦紝璇锋鏌�")
 				return
 			}
-			logger.Debug("es person base64:",searchBase64Fea)
+
 			if searchBase64Fea !=""{
 				decodeF, err := base64.StdEncoding.DecodeString(searchBase64Fea)
 				if err !=nil {
@@ -525,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 {
@@ -716,6 +804,7 @@
 
 /**涓婁紶鏂规硶**/
 
+// @Security ApiKeyAuth
 // @Summary 鎵归噺娣诲姞搴曞簱浜哄憳
 // @Description  渚濇嵁鍥剧墖鎵归噺娣诲姞搴曞簱浜哄憳
 // @Accept  mpfd
@@ -738,8 +827,10 @@
 	}
 	extNames := make([]string, 0)
 	addResult := make(map[string]interface{}, 0)
-	successList := make([]string, 0)
-	failList := make([]string,0)
+	var successList []string
+	var failList []string
+	var noFaceList []string
+	var multiFaceList []string
 	tAllStart := time.Now()
 	var wg sync.WaitGroup
 	var lock sync.Mutex
@@ -767,7 +858,13 @@
 			field, _, err1 := uploadFileReturnAddr(file, filename, tableId)
 			lock.Lock()
 			if err1 != nil || field == "" {
-				failList = append(failList, filename)
+				if err1 !=nil && err1.Error() == "NotFeatureFindError" {
+					noFaceList = append(noFaceList, filename)
+				} else if err1 !=nil && err1.Error() == "TooManyFaces" {
+					multiFaceList = append(multiFaceList, filename)
+				} else {
+					failList = append(failList, filename)
+				}
 			} else {
 				successList = append(successList, filename)
 			}
@@ -779,13 +876,15 @@
 	logger.Debug("鍒�",len(fileHeaders),"寮犱汉鑴哥敤鏃讹細", time.Since(tAllStart))
 	addResult["successList"] = successList
 	addResult["failList"] = failList
+	addResult["noFaceList"] = noFaceList
+	addResult["multiFaceList"] = multiFaceList
 	addResult["fields"] = extNames
 
-	//if len(successList)>0 {
+	if len(successList)>0 {
 		util.ResponseFormat(c, code.DbPersonUploadSuccess, addResult)
-	//} else {
-	//	util.ResponseFormat(c, code.DbPersonUploadFail, addResult)
-	//}
+	} else {
+		util.ResponseFormat(c, code.DbPersonUploadFail, addResult)
+	}
 }
 
 type EsPersonSave struct {
@@ -796,6 +895,7 @@
 	IdCard string `json:"idCard"`
 }
 
+// @Security ApiKeyAuth
 // @Summary 涓婁紶鍥剧墖 骞跺垏鍥�
 // @Description  涓婁紶鍥剧墖 骞跺垏鍥�
 // @Accept  mpfd

--
Gitblit v1.8.0