From cc962c1b6ffabd9d41e6db0571efbcc1a4568ce7 Mon Sep 17 00:00:00 2001
From: liuxiaolong <736321739@qq.com>
Date: 星期一, 29 七月 2019 11:39:56 +0800
Subject: [PATCH] use mangos req instead of deliver,add recv timeout

---
 controllers/fileController.go |  215 +++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 165 insertions(+), 50 deletions(-)

diff --git a/controllers/fileController.go b/controllers/fileController.go
index 8f97e3e..a82d000 100644
--- a/controllers/fileController.go
+++ b/controllers/fileController.go
@@ -1,16 +1,14 @@
 package controllers
 
 import (
-	"basic.com/pubsub/protomsg.git"
+	"basic.com/dbapi.git"
 	"basic.com/fileServer/WeedFSClient.git"
-	"basic.com/valib/deliver.git"
+	"basic.com/pubsub/protomsg.git"
 	"bytes"
 	"encoding/base64"
-	"encoding/json"
 	"errors"
 	"fmt"
 	"github.com/gin-gonic/gin"
-	"github.com/gogo/protobuf/proto"
 	"github.com/satori/go.uuid"
 	"image"
 	"image/jpeg"
@@ -25,10 +23,10 @@
 	"webserver/extend/code"
 	"webserver/extend/config"
 	"webserver/extend/esutil"
+	"webserver/extend/logger"
 	"webserver/extend/util"
 	"webserver/models"
 	"webserver/service"
-	esApi "basic.com/pubsub/esutil.git"
 )
 
 type FileController struct {
@@ -105,7 +103,13 @@
 }
 var faceExtractedMap = make(map[string]FaceExtract,0)
 
-// @Description 浜鸿劯鎻愬彇
+// @Summary 浜鸿劯鎻愬彇
+// @Description  浜鸿劯鎻愬彇
+// @Produce json
+// @Tags 浠ュ浘鎼滃浘
+// @Param file formData file true "浜哄憳鍥剧墖"
+// @Success 200 {string} json "{"code":200, msg:"", data:"", success:true}"
+// @Failure 500 {string} json "{"code":500, msg:"", data:"", success:false}"
 // @Router /data/api-v/dbperson/faceExtract [POST]
 func (controller FileController) FaceExtract(c *gin.Context) {
 	file, _, err := c.Request.FormFile("file") //image杩欎釜鏄痷plaodify鍙傛暟瀹氫箟涓殑   'fileObjName':'image'
@@ -114,11 +118,12 @@
 		return
 	}
 	var weedfsUri = "http://"+config.WeedFs.Ip+":"+strconv.Itoa(config.WeedFs.UploadPort)+"/submit"
-
+	resultMap :=make(map[string]interface{},0)
 	//灏嗕笂浼犵殑鍥剧墖浜や汉鑴告娴嬪拰浜鸿劯鎻愬彇锛岃幏寰楃壒寰�
 	fileBytes, _ := ioutil.ReadAll(file)
 	faceArr, err, pI := service.GetFaceFeaFromSdk(fileBytes, time.Second*60)
 	if err ==nil && len(faceArr) >0 {
+		//1.鎻愬彇姣忎竴寮犱汉鑴稿皬鍥�
 		urlArr := make([]string,0)
 		for _,r := range faceArr {
 			rcFace := r.Pos.RcFace
@@ -132,67 +137,176 @@
 				urlArr = append(urlArr, weedFilePath)
 			}
 		}
-		if len(urlArr) == 0{
-			util.ResponseFormat(c,code.ComError,"鏈彁鍙栧埌浜鸿劯")
-		} else {
-			util.ResponseFormat(c,code.Success,urlArr)
-		}
+		//2.澶у浘鐢绘,鏍囪瘑浜鸿劯浣嶇疆
+		originFilePath, _ := WeedFSClient.UploadFile(weedfsUri, "FaceUrl", fileBytes)
+		resultMap["uploadImage"] = originFilePath
+		resultMap["smImage"] = urlArr
+		util.ResponseFormat(c,code.Success, resultMap)
 	} else {
 		util.ResponseFormat(c,code.ComError,"鏈彁鍙栧埌浜鸿劯")
 	}
 }
 
-// @Description 浠ュ浘鎼滃浘
+// @Summary 浠ュ浘鎼滃浘
+// @Description  浠ュ浘鎼滃浘
+// @Accept json
+// @Produce json
+// @Tags 浠ュ浘鎼滃浘
+// @Param condition body models.EsSearch true "鎼滅储鍙傛暟"
+// @Success 200 {string} json "{"code":200, msg:"", data:"", success:true}"
+// @Failure 500 {string} json "{"code":500, msg:"", data:"", success:false}"
 // @Router /data/api-v/dbperson/searchByPhoto [POST]
 func (controller FileController) SearchByPhoto(c *gin.Context) {
-	photoUrl := c.Request.FormValue("url")
-	if photoUrl == "" {
+	var searchBody models.EsSearch
+	err := c.BindJSON(&searchBody)
+	if err !=nil || searchBody.PicUrl == "" || len(searchBody.DataBases) == 0 {
 		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎")
 		return
 	}
-	if face,ok := faceExtractedMap[photoUrl];!ok{
-		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎")
+	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"] = []service.CompareResult{}
+			util.ResponseFormat(c,code.CompareResultGone,m)
+		}
+	}
+	var sysSetApi dbapi.SysSetApi
+	analyServerId := ""
+	flag, sysconf := sysSetApi.GetServerInfo()
+	if flag {
+		analyServerId = sysconf.ServerId
+	} else {
+		util.ResponseFormat(c, code.ComError, "analyServerId涓虹┖锛岄厤缃湁璇�")
+		return
+	}
+	if face,ok := faceExtractedMap[searchBody.PicUrl];!ok{
+		util.ResponseFormat(c, code.RequestParamError, "璇烽噸鏂颁笂浼犲浘鐗�")
 		return
 	} else {
-		reqUrl := "tcp://192.168.1.66:40010"
-		reqClient := deliver.NewClient(deliver.ReqRep, reqUrl)
 		arg := protomsg.CompareArgs{
-			FaceFeature:face.FaceBytes,
-			CompareThreshold:0.2,
+			FaceFeature: face.FaceBytes,
+			CompareThreshold: searchBody.Threshold,
 		}
-		b, err := proto.Marshal(&arg)
-		if err !=nil{
-			util.ResponseFormat(c, code.ComError, "璇锋眰marshal澶辫触")
-			return
+
+		if searchBody.DataBases !=nil {
+			for idx,tableId :=range searchBody.DataBases {
+				if tableId == "esData" {
+					searchBody.DataBases = append(searchBody.DataBases[:idx], searchBody.DataBases[idx+1:]...)
+					searchBody.DataBases = append(searchBody.DataBases,service.CaptureTable)
+					break
+				}
+			}
+			arg.TableIds = searchBody.DataBases
 		}
-		err = reqClient.Send(b)
-		if err !=nil{
-			util.ResponseFormat(c, code.ComError, "姣斿鏈嶅姟璇锋眰澶辫触")
-			return
-		}
-		resultB, err := reqClient.Recv()
-		if err !=nil{
-			util.ResponseFormat(c, code.ComError, "姣斿鏈嶅姟鍝嶅簲澶辫触")
-			return
-		}
-		m :=make(map[string]float32,0)
-		err = json.Unmarshal(resultB, &m)
-		if err !=nil{
-			util.ResponseFormat(c, code.ComError, "result Unmarshal err")
-			return
-		}
-		personIds := make([]string,len(m))
-		for k,_ :=range m{
-			personIds = append(personIds,k)
-		}
-		dbpeople, e := esApi.Dbpersoninfosbyid(personIds, "dbtablepersons", "192.168.1.182", "9200")
-		if e !=nil{
-			util.ResponseFormat(c, code.ComError, "result es query err")
+		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 = analyServerId
+
+		logger.Debug("arg.TableIds:", arg.TableIds, ",alarmLevel:",arg.AlarmLevel,",treeNodes:",arg.TreeNodes,",searchTime:",arg.SearchTime,
+			",inputValue:",arg.InputValue,",tasks:",arg.Tasks,",compThreshold:",arg.CompareThreshold)
+		compareService := service.NewFaceCompareService(arg)
+		compareOnce := compareService.Compare()
+		logger.Debug("compareResult:",*compareOnce)
+		dataList := compareOnce.CompareData
+		service.SortByScore(dataList)
+		totalList := len(dataList)
+		m := make(map[string]interface{},3)
+		m["compareNum"] = compareOnce.CompareNum
+		m["total"] = totalList
+		if totalList <= searchBody.Size {
+			m["totalList"] = dataList
 		} else {
-			util.ResponseFormat(c,code.Success,dbpeople)
+			m["totalList"] = dataList[0:searchBody.Size]
 		}
+		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([]service.CompareResult,0)
+	for _,cr :=range co.CompareData {
+		if cr.Id !=""{
+			n :=0
+			if len(camIds) == 0 || isInArr(cr.CameraId,camIds) {
+				n++
+			}
+			if len(tabIds) == 0 {
+				n++
+			}
+			if len(taskIds) == 0 || isInArr(cr.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)
+		}
+	}
+	logger.Debug("GetCompareDataTwice.data:",resultList)
+	service.SortByScore(resultList)
+	from := (arg.Page-1)*arg.Size
+	to := from + arg.Size
+	lenth := len(resultList)
+	m := make(map[string]interface{},0)
+	m["total"] = lenth
+	m["compareNum"] = arg.CompareNum
+
+	if from < len(resultList) {
+		if to <= len(resultList) {
+			m["totalList"] = resultList[from:to]
+		} else {
+			m["totalList"] = resultList[from:len(resultList)]
+		}
+	} else {
+		m["totalList"] = []service.CompareResult{}
+	}
+	return m
+}
+
+func isInArr(id string,arr []string) bool {
+	for _,v :=range arr {
+		if v == id {
+			return true
+		}
+	}
+	return false
+}
+
 
 // @Description 浜哄憳鐓х墖涓婁紶骞惰幏鍙栫壒寰佸��
 // @Router /data/api-v/dbperson/fileUploadTest [POST]
@@ -281,6 +395,7 @@
 	dbperson.PersonPicUrl = field //  鍥剧墖璺粡
 	dbperson.TableId = tableId           //
 	dbperson.PersonName = fileNameOnly       // 鍥剧墖鍚�
+	dbperson.Enable = 1 //榛樿鏈夋晥
 	// 婕旂ずbase64缂栫爜
 
 	dbperson.FaceFeature = faceBase64 // 鐗瑰緛鍊糱ase64 鐮�
@@ -361,7 +476,7 @@
 	//addResult["detail"] = details
 	//fields := fdfsclient.UploadFileByBuffer100(bytess, extNames)     //  fastdfs 涓婁紶
 	if len(successList)>0 {
-		util.ResponseFormat(c, code.Success, addResult)
+		util.ResponseFormat(c, code.DbPersonUploadSuccess, addResult)
 	} else {
 		util.ResponseFormat(c, code.ServiceInsideError, err.Error())
 	}

--
Gitblit v1.8.0