From 1d06cf290dcdfc17705516c651c7a4b87f66bf34 Mon Sep 17 00:00:00 2001
From: liuxiaolong <736321739@qq.com>
Date: 星期三, 07 八月 2019 14:16:56 +0800
Subject: [PATCH] add search this person

---
 controllers/fileController.go |  121 ++++++++++++++++++----------------------
 1 files changed, 55 insertions(+), 66 deletions(-)

diff --git a/controllers/fileController.go b/controllers/fileController.go
index febd9cc..6d3318f 100644
--- a/controllers/fileController.go
+++ b/controllers/fileController.go
@@ -20,6 +20,7 @@
 	"sort"
 	"strconv"
 	"strings"
+	"sync"
 	"time"
 	"webserver/extend/code"
 	"webserver/extend/config"
@@ -202,7 +203,7 @@
 
 	dbPersonM := make(map[string]*protomsg.SdkCompareEach, 0)
 	captureM := make(map[string]*protomsg.SdkCompareEach, 0)
-	personIds :=make([]string,0)
+	personIds := make([]string,0)
 	captureIds := make([]string,0)
 	for _,v :=range compResult.CompareResult{
 		if v.Tableid == service.CaptureTable {
@@ -320,12 +321,12 @@
 func (controller FileController) SearchByPhoto(c *gin.Context) {
 	var searchBody models.EsSearch
 	err := c.BindJSON(&searchBody)
-	if err !=nil || searchBody.PicUrl == "" || len(searchBody.DataBases) == 0 {
+	if err !=nil{
 		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎")
 		return
 	}
 	var faceB []byte
-	if searchBody.CaptureId != "" {//鍋氭煡鎵炬浜�
+	if searchBody.CaptureId != "" {//鍋氭煡鎵炬浜�,鎼滄墍鏈夋姄鎷嶅拰搴曞簱
 		searchPeople, err := esApi.Dbpersoninfosbyid([]string{searchBody.CaptureId}, config.EsInfo.EsIndex.VideoPersons.IndexName, config.EsInfo.Masterip, config.EsInfo.Httpport)
 		if err !=nil {
 			util.ResponseFormat(c, code.ComError, "鎶撴媿鏁版嵁涓嶅瓨鍦紝璇锋鏌�")
@@ -339,22 +340,19 @@
 			}
 			faceB = decodeF
 		}
+	} else {//鍋氫互鍥炬悳鍥�
+		if searchBody.PicUrl == "" || len(searchBody.DataBases) == 0 {
+			util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎")
+			return
+		}
+		if face,ok := faceExtractedMap[searchBody.PicUrl];!ok{
+			util.ResponseFormat(c, code.RequestParamError, "璇烽噸鏂颁笂浼犲浘鐗�")
+			return
+		} else {
+			faceB = face.FaceBytes
+		}
 	}
-	//if searchBody.CompareNum !="" {
-	//	//浜屾鎼滅储锛屼笉闇�瑕佸啀姣斿浜�
-	//	co := service.GetCompResultByNum(searchBody.CompareNum)
-	//	if co != nil {
-	//		//浜屾鎼滅储鍜屾帓搴�
-	//		twiceM := GetCompareDataTwice(co,&searchBody)
-	//		util.ResponseFormat(c,code.Success,twiceM)
-	//	} else {
-	//		m :=make(map[string]interface{},0)
-	//		m["compareNum"] = searchBody.CompareNum
-	//		m["total"] = 0
-	//		m["totalList"] = []CompareResult{}
-	//		util.ResponseFormat(c,code.CompareResultGone,m)
-	//	}
-	//}
+
 	var sysSetApi dbapi.SysSetApi
 	analyServerId := ""
 	flag, sysconf := sysSetApi.GetServerInfo()
@@ -364,14 +362,7 @@
 		util.ResponseFormat(c, code.ComError, "analyServerId涓虹┖锛岄厤缃湁璇�")
 		return
 	}
-	if searchBody.CaptureId == ""{
-		if face,ok := faceExtractedMap[searchBody.PicUrl];!ok{
-			util.ResponseFormat(c, code.RequestParamError, "璇烽噸鏂颁笂浼犲浘鐗�")
-			return
-		} else {
-			faceB = face.FaceBytes
-		}
-	}
+
 	if faceB == nil {
 		util.ResponseFormat(c, code.RequestParamError, "璇烽噸鏂颁笂浼犲浘鐗�")
 		return
@@ -390,6 +381,8 @@
 			}
 		}
 		arg.TableIds = searchBody.DataBases
+	} else {
+		arg.TableIds = []string{}
 	}
 	arg.Source = true // 鏍囪瘑鏉ユ簮鏄痺eb
 	arg.AlarmLevel = searchBody.AlarmLevel
@@ -598,8 +591,13 @@
 	}
 	var weedfsUri = "http://"+config.WeedFs.Ip+":"+strconv.Itoa(config.WeedFs.UploadPort)+"/submit"
 	//鏍规嵁浜鸿劯鍧愭爣鎵e嚭浜鸿劯灏忓浘
+	t1 := time.Now()
 	cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom))
+	logger.Debug("SubImg鐢ㄦ椂锛�", time.Since(t1))
+	t1 = time.Now()
 	fileInfo, e := esutil.PostFormData(weedfsUri, filename, "file", cutFaceImgData)
+	logger.Debug("涓婁紶鍒皐eedfs鐢ㄦ椂:", time.Since(t1))
+	t1 = time.Now()
 	if e != nil {
 		fmt.Println(e.Error())
 		return "", nil, e
@@ -623,30 +621,10 @@
 	dbperson.FaceFeature = faceBase64 // 鐗瑰緛鍊糱ase64 鐮�
 
 	result := addDbPerson(dbperson)
+	logger.Debug("addDbPerson鐢ㄦ椂锛�", time.Since(t1))
 	return fileNameOnly, result, nil
 
 }
-
-//func getFaceFeaFromSdk(fileBytes []byte) ([]*protomsg.ResultFaceExtCom,error,*protomsg.Image){
-//	s := service.NewFaceSdkService(fileBytes)
-//	i, err := s.ReadFromUploadImg()
-//	if err !=nil{
-//		fmt.Println("readFromUploadImg err:",err)
-//		return nil,err,i
-//	}
-//	bc, err := service.ImgCompress(i)
-//	if err !=nil {
-//		fmt.Println("ImgCompress err:",err)
-//		return nil,err,i
-//	}
-//	s.PushImgMsg(bc)
-//	s.GetFaceFea()
-//	if s.Result == nil{
-//		return nil,errors.New("no fea"),i
-//	} else {
-//		return s.Result,nil,i
-//	}
-//}
 
 /**涓婁紶鏂规硶**/
 
@@ -674,33 +652,44 @@
 	addResult := make(map[string]interface{}, 0)
 	successList := make([]string, 0)
 	failList := make([]string,0)
+	tAllStart := time.Now()
+	var wg sync.WaitGroup
+	var lock sync.Mutex
 	for _, head := range fileHeaders {
-		//鏂囦欢鐨勫悕绉�
-		filename := head.Filename
-		file, err := head.Open()
-		fmt.Println(file, err, filename)
-		if err != nil {
-			log.Fatal(err)
-		}
-
-		field, _, err1 := uploadFileReturnAddr(file, filename, tableId)
-		//extNames = append(extNames, field)
-
-		if err1 != nil || field == "" {
-			failList = append(failList, filename)
-		} else {
-			successList = append(successList, filename)
-		}
+		wg.Add(1)
+		go func(head *multipart.FileHeader,tableId string) {
+			defer wg.Done()
+			tIStart := time.Now()
+			filename := head.Filename
+			file, err := head.Open()
+			fmt.Println(file, err, filename)
+			if err != nil {
+				lock.Lock()
+				failList = append(failList, filename)
+				lock.Unlock()
+				return
+			}
+			field, _, err1 := uploadFileReturnAddr(file, filename, tableId)
+			lock.Lock()
+			if err1 != nil || field == "" {
+				failList = append(failList, filename)
+			} else {
+				successList = append(successList, filename)
+			}
+			lock.Unlock()
+			logger.Debug(filename,"鍒囧浘鐢ㄦ椂锛�",time.Since(tIStart))
+		}(head, tableId)
+		wg.Wait()
 	}
+	logger.Debug("鍒�",len(fileHeaders),"寮犱汉鑴哥敤鏃讹細", time.Since(tAllStart))
 	addResult["successList"] = successList
 	addResult["failList"] = failList
 	addResult["fields"] = extNames
-	//addResult["detail"] = details
-	//fields := fdfsclient.UploadFileByBuffer100(bytess, extNames)     //  fastdfs 涓婁紶
+
 	if len(successList)>0 {
 		util.ResponseFormat(c, code.DbPersonUploadSuccess, addResult)
 	} else {
-		util.ResponseFormat(c, code.ServiceInsideError, err.Error())
+		util.ResponseFormat(c, code.DbPersonUploadFail, addResult)
 	}
 }
 

--
Gitblit v1.8.0