From 9303b69ea569bcb5e581147543a3fd58e90d0d25 Mon Sep 17 00:00:00 2001
From: sunty <1172534965@qq.com>
Date: 星期四, 20 八月 2020 20:05:23 +0800
Subject: [PATCH] add get buckets contrl

---
 controllers/fileController.go |  199 +++++++++++++++++++++++++++----------------------
 1 files changed, 111 insertions(+), 88 deletions(-)

diff --git a/controllers/fileController.go b/controllers/fileController.go
index 07cb985..1f591af 100644
--- a/controllers/fileController.go
+++ b/controllers/fileController.go
@@ -3,22 +3,22 @@
 import (
 	"basic.com/dbapi.git"
 	"basic.com/fileServer/WeedFSClient.git"
+	esApi "basic.com/pubsub/esutil.git"
 	"basic.com/pubsub/protomsg.git"
+	"basic.com/valib/godraw.git"
+	"basic.com/valib/logger.git"
 	"bytes"
 	"encoding/base64"
 	"encoding/json"
 	"errors"
 	"fmt"
 	"github.com/gin-gonic/gin"
-	"github.com/satori/go.uuid"
-	"gocv.io/x/gocv"
 	"image"
 	"image/color"
 	"image/jpeg"
 	"io/ioutil"
 	"log"
 	"mime/multipart"
-	"net/http"
 	"path"
 	"sort"
 	"strconv"
@@ -29,11 +29,9 @@
 	"webserver/extend/code"
 	"webserver/extend/config"
 	"webserver/extend/esutil"
-	"basic.com/valib/logger.git"
 	"webserver/extend/util"
 	"webserver/models"
 	"webserver/service"
-	esApi "basic.com/pubsub/esutil.git"
 )
 
 type FileController struct {
@@ -51,57 +49,64 @@
 //var weedfsUri = "http://192.168.1.182:9500/submit"
 
 // @Security ApiKeyAuth
-// @Summary 渚濇嵁鍥剧墖娣诲姞搴曞簱浜哄憳
-// @Description  渚濇嵁鍥剧墖娣诲姞搴曞簱杩斿洖鏁版嵁浜哄憳
+// @Summary 鍥剧墖涓婁紶
+// @Description  鍥剧墖涓婁紶
 // @Accept  multipart/form-data
 // @Produce json
-// @Tags dbperson 搴曞簱浜哄憳
-// @Param file formData file true "搴曞簱浜哄憳鍥剧墖"
-// @Param tableId formData string false "搴曞簱id,鏈塱d 鍒欏姞鍏ュ簳搴擄紝鏃犲垯鍙笂浼犲浘鐗�"
-// @Success 200 {string} json "{"code":200, msg:"鐩綍缁撴瀯鏁版嵁", success:true}"
-// @Failure 500 {string} json "{"code":500,  msg:"杩斿洖閿欒淇℃伅", success:false}"
+// @Tags 鍥剧墖涓婁紶
+// @Param file formData file true "鍥剧墖"
+// @Param picType formData string true "鍥剧墖绫诲瀷锛�0锛氳溅杈嗙収鐗囷紝1锛氫汉鑴哥収鐗�"
+// @Success 200 {string} json "{"code":200, msg:"", success:true}"
+// @Failure 500 {string} json "{"code":500, msg:"", success:false}"
 // @Router /data/api-v/dbperson/fileupload [POST]
 func (fc FileController) Fileupload(c *gin.Context) {
 	//寰楀埌涓婁紶鐨勬枃浠�
 	file, header, err := c.Request.FormFile("file") //image杩欎釜鏄痷plaodify鍙傛暟瀹氫箟涓殑   'fileObjName':'image'
-	tableId := c.Request.FormValue("tableId")
-	if err != nil {
-		c.String(http.StatusBadRequest, "Bad request")
+	picType := c.Request.FormValue("picType") //鍥剧墖绫诲瀷
+	if err != nil || (picType != "0" && picType != "1") {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟鏈夎")
 		return
 	}
 	//鏂囦欢鐨勫悕绉�
 	filename := header.Filename
-	fmt.Println(file, err, filename)
-	if err != nil {
-		log.Fatal(err)
-		filename = uuid.NewV4().String()
-	}
-	// fastdfs
-	{
-		//fileSuffix := path.Ext(filename)[1:] //鑾峰彇鏂囦欢鍚庣紑
-		//fmt.Println("鏂囦欢鍚庣紑 =", fileSuffix)
-		//data, _ := ioutil.ReadAll(file)
-		// fastdfs 涓婁紶  鏆傚簾寮�
-		//field := fdfsclient.UploadFileByBuffer(data, fileSuffix)
-	}
-	fileNameOnly, result, err := uploadFileReturnAddr(file, filename, tableId)
-	if err != nil {
-		if err.Error() == "NotFeatureFindError" {
-			util.ResponseFormat(c, code.NotFeatureFindError, filename)
-		} else {
-			util.ResponseFormat(c, code.ServiceInsideError, err.Error())
+	var result = make(map[string]string)
+	if picType == "1" {
+		_, _, err, faceFeature, faceUrlPath := uploadFileReturnAddr(file, filename, "", false)
+		if err != nil {
+			if err.Error() == "NotFeatureFindError" {
+				util.ResponseFormat(c, code.NotFeatureFindError, filename)
+			} else {
+				util.ResponseFormat(c, code.ServiceInsideError, err.Error())
+			}
+			return
 		}
-		return
-	}
-	if tableId != "" { //  涓婁紶
-		if result["success"].(bool) {
-			util.ResponseFormat(c, code.Success, result["data"])
-		} else {
-			util.ResponseFormat(c, code.ServiceInsideError, result["data"])
-		}
+		result["picUrl"] = faceUrlPath
+		result["faceFeature"] = faceFeature
 	} else {
-		util.ResponseFormat(c, code.Success, fileNameOnly)
+		localConf, err2 := cache.GetServerInfo()
+		if err2 !=nil || localConf.WebPicIp == "" {
+			logger.Debug("localConfig is wrong!!!")
+			util.ResponseFormat(c,code.ComError,"")
+			return
+		}
+		defer file.Close()
+		// weedfs 涓婁紶
+		fileBytes, err := ioutil.ReadAll(file)
+		if err !=nil {
+			util.ResponseFormat(c,code.ComError,"")
+			return
+		}
+		var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit?collection=persistent"
+		weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, filename, fileBytes)
+		if e != nil {
+			logger.Debug("WeedFSClient.UploadFile err:", e)
+			util.ResponseFormat(c,code.ComError,"UploadFile err")
+			return
+		}
+		result["picUrl"] = weedFilePath
 	}
+
+	util.ResponseFormat(c, code.Success, result)
 }
 
 
@@ -132,7 +137,7 @@
 		logger.Debug("localConfig is wrong!!!")
 		return
 	}
-	var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit"
+	var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit?collection=persistent"
 	logger.Debug("weedfsUri:",weedfsUri)
 	resultMap :=make(map[string]interface{},0)
 	//灏嗕笂浼犵殑鍥剧墖浜や汉鑴告娴嬪拰浜鸿劯鎻愬彇锛岃幏寰楃壒寰�
@@ -143,7 +148,11 @@
 		urlArr := make([]string,0)
 		for _,r := range faceArr {
 			rcFace := r.Pos.RcFace
-			cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom))
+			cutFaceImgData,cutErr := util.SubCutImg(pI, rcFace, 20)
+			if cutErr != nil {
+				logger.Debug("util.SubCutImg err:", cutErr)
+				continue
+			}
 			weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, "FaceUrl", cutFaceImgData)
 			if e == nil{
 				faceExtractedMap[weedFilePath] = FaceExtract{
@@ -166,19 +175,19 @@
 }
 
 func drawPolygonOnImg(i *protomsg.Image,faceArr *[]*protomsg.ResultFaceDetect) (*[]byte,error) {
-	rook, _ := gocv.NewMatFromBytes(int(i.Height), int(i.Width), gocv.MatTypeCV8UC3, i.Data)
-	defer rook.Close()
-	//yellow := color.RGBA{255, 255, 0, 0}
+	img,err := godraw.ToImage(i.Data, int(i.Width), int(i.Height))
+	if err != nil {
+		return nil,err
+	}
 	red := color.RGBA{255, 0, 0, 0}
 	for _,faceResult := range *faceArr {
-		left := int(faceResult.Pos.RcFace.Left)
-		top := int(faceResult.Pos.RcFace.Top)
-		right := int(faceResult.Pos.RcFace.Right)
-		bottom := int(faceResult.Pos.RcFace.Bottom)
-		gocv.Rectangle(&rook, image.Rect(left,top,right,bottom), red, 1)
+		util.DrawRect(img.(*image.RGBA),int(faceResult.Pos.RcFace.Left),int(faceResult.Pos.RcFace.Top),int(faceResult.Pos.RcFace.Right),
+			int(faceResult.Pos.RcFace.Bottom), red)
 	}
-	fData,err := gocv.IMEncode(".jpg", rook)
-	return &fData,err
+
+	quantity := 100
+	jpgData, err := godraw.ImageToJpeg(img, &quantity)
+	return &jpgData,err
 }
 
 type CompareResult struct {
@@ -190,8 +199,7 @@
 	PicDate string `json:"picDate"`
 	Content string `json:"content"`
 	IsAlarm bool `json:"isAlarm"`
-	PicMaxUrl string `json:"picMaxUrl"`
-	PicSmUrl []string `json:"picSmUrl"`
+	PicMaxUrl []string `json:"picMaxUrl"`
 	TargetInfo []TargetInfo `json:"targetInfo"`
 	TaskId string `json:"taskId"`
 	TaskName string `json:"taskName"`
@@ -203,6 +211,7 @@
 
 type TargetInfo struct {
 	TargetId       string `json:"targetId"`
+	TargetType     string `json:"targetType"`
 	TargetScore    float64 `json:"targetScore"`
 	Feature        string `json:"feature"`
 	PicSmUrl       string `json:"picSmUrl"`
@@ -215,15 +224,16 @@
 }
 
 type DbPersonVo struct {
+	TableId string `json:"tableId"`
+	TableName string `json:"tableName"`
 	BwType string `json:"bwType"`
 	CompareScore float64 `json:"compareScore"`
-	MonitorLevel string `json:"monitorLevel"`
 	TargetId string `json:"targetId"`
 	TargetName string `json:"targetName"`
 	TargetPicUrl string `json:"targetPicUrl"`
+	MonitorLevel string `json:"monitorLevel"`
 	Labels string `json:"labels"`
-	TableId string `json:"tableId"`
-	TableName string `json:"tableName"`
+	Content string `json:"content"`
 	Enable int32 `json:"enable"`
 }
 
@@ -253,13 +263,13 @@
 		if v.Tableid == service.CaptureTable {
 			captureM[v.Id] = ScoreIndex{
 				Index: idx,
-				CompareScore: float64(v.CompareScore),
+				CompareScore: util.ParseScore64(float64(v.CompareScore)),
 			}
 			captureIds = append(captureIds,v.Id)
 		} else {
 			dbPersonM[v.Id] = ScoreIndex{
 				Index: idx,
-				CompareScore: float64(v.CompareScore),
+				CompareScore: util.ParseScore64(float64(v.CompareScore)),
 			}
 			personIds = append(personIds,v.Id)
 		}
@@ -282,8 +292,9 @@
 				MonitorLevel: p.MonitorLevel,
 				TargetName: p.PersonName,
 				TargetPicUrl: p.PersonPicUrl,
-				Labels: p.Sex+" / "+p.IdCard+" / "+p.IdCard,
+				Labels: p.PhoneNum+"/"+p.Sex+"/"+p.IdCard,
 				TableId: p.TableId,
+				Content: p.Reserved,
 				Enable: p.Enable,
 			}
 			dbTableInfos, _ := dtApi.DbtablesById([]string{ p.TableId })
@@ -311,8 +322,8 @@
 			for _,p :=range vp.BaseInfo {
 				bi = append(bi, DbPersonVo{
 					TargetId: p.TargetId,
-					CompareScore: float64(p.CompareScore),
-					MonitorLevel: parseMonitorLevel(p.MonitorLevel),
+					CompareScore: util.ParseScore64(p.CompareScore),
+					MonitorLevel: p.MonitorLevel,
 					TargetName: p.TargetName,
 					TargetPicUrl: p.TargetPicUrl,
 					Labels: p.Labels,
@@ -347,6 +358,7 @@
 					}
 					tInfo := TargetInfo{
 						TargetId: vti.TargetId,
+						TargetType: vti.TargetType,
 						TargetScore: vti.TargetScore,
 						Feature: vti.Feature,
 						PicSmUrl: vti.PicSmUrl,
@@ -400,12 +412,12 @@
 		logger.Debug("localConfig is wrong!!!")
 		return nil,"",nil,errors.New("localConf err")
 	}
-	var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit"
+	var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit?collection=persistent"
 	logger.Debug("weedfsUri:",weedfsUri)
 	faceArr, err, pI := service.GetFaceFeaFromSdk(fileBytes, time.Second*60)
 	if err ==nil && len(faceArr) ==1 {
 		rcFace := faceArr[0].Pos.RcFace
-		cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom))
+		cutFaceImgData,_ := util.SubCutImg(pI, rcFace, 20)
 		weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, "FaceUrl", cutFaceImgData)
 		if e == nil{
 			faceExtractedMap[weedFilePath] = FaceExtract{
@@ -484,6 +496,9 @@
 					return
 				}
 				faceB = decodeF
+			} else {
+				util.ResponseFormat(c, code.ComError, "鏈潯浜鸿劯鎶撴媿鐗瑰緛涓虹┖锛岃妫�鏌�")
+				return
 			}
 		}
 
@@ -739,7 +754,7 @@
 		logger.Debug("localConfig is wrong!!!")
 		return
 	}
-	var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit"
+	var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit?collection=persistent"
 
 	//灏嗕笂浼犵殑鍥剧墖浜や汉鑴告娴嬪拰浜鸿劯鎻愬彇锛岃幏寰楃壒寰�
 	fileBytes, _ := ioutil.ReadAll(file)
@@ -753,7 +768,7 @@
 			break
 		}
 		//鏍规嵁浜鸿劯鍧愭爣鎵e嚭浜鸿劯灏忓浘
-		cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom))
+		cutFaceImgData,_ := util.SubCutImg(pI, rcFace, 20)
 		weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, "testCutFace", cutFaceImgData)
 		if e !=nil{
 			util.ResponseFormat(c,code.ComError,"鏂囦欢涓婁紶澶辫触")
@@ -771,24 +786,24 @@
 log.Fatalln(err)
 }*/
 
-func uploadFileReturnAddr(file multipart.File, filename string, tableId string) (string, map[string]interface{}, error) {
+func uploadFileReturnAddr(file multipart.File, filename string, tableId string, add2Db bool) (string, map[string]interface{}, error, string, string) {
 	defer file.Close()
 	// weedfs 涓婁紶
 	fileBytes, err := ioutil.ReadAll(file)
 	if err !=nil {
-		return "",nil,err
+		return "",nil,err,"",""
 	}
 
 	//灏嗕笂浼犵殑鍥剧墖浜や汉鑴告娴嬪拰浜鸿劯鎻愬彇锛岃幏寰楃壒寰�
 	var faceBase64=""
 	faceArr, err, pI := service.GetFaceFeaFromSdk(fileBytes, time.Second*5)
 	if faceArr ==nil {
-		return "",nil,errors.New("NotFeatureFindError")
+		return "",nil,errors.New("NotFeatureFindError"),"",""
 	}
 	var rcFace *protomsg.Rect
 	if err ==nil && len(faceArr) >0 {
 		if len(faceArr) >1 {
-			return "",nil, errors.New("TooManyFaces")
+			return "",nil, errors.New("TooManyFaces"),"",""
 		}
 		for _,r := range faceArr {
 			//鎷垮埌浜鸿劯鐨勫潗鏍�
@@ -801,12 +816,16 @@
 	localConf, err2 := cache.GetServerInfo()
 	if err2 !=nil || localConf.WebPicIp == "" {
 		logger.Debug("localConfig is wrong!!!")
-		return "",nil,err2
+		return "",nil,err2,"",""
 	}
-	var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit"
+	var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit?collection=persistent"
 	//鏍规嵁浜鸿劯鍧愭爣鎵e嚭浜鸿劯灏忓浘
 	t1 := time.Now()
-	cutFaceImgData := util.SubImg(*pI, int(rcFace.Left), int(rcFace.Top), int(rcFace.Right), int(rcFace.Bottom))
+	cutFaceImgData,cutErr := util.SubCutImg(pI, rcFace, 20)
+	if cutErr != nil {
+		logger.Debug("util.SubCutImg err:", cutErr)
+		return "", nil, cutErr,"",""
+	}
 	logger.Debug("SubImg鐢ㄦ椂锛�", time.Since(t1))
 	t1 = time.Now()
 	weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, filename, cutFaceImgData)
@@ -814,22 +833,26 @@
 	t1 = time.Now()
 	if e != nil {
 		logger.Debug("WeedFSClient.UploadFile err:", e)
-		return "", nil, e
+		return "", nil, e,"",""
 	}
 
 	ext := path.Ext(filename)
 	fileNameOnly := strings.TrimSuffix(filename, ext)
 
-	dbperson := new(models.Dbtablepersons)
-	dbperson.PersonPicUrl = weedFilePath //  鍥剧墖璺粡
-	dbperson.TableId = tableId           //
-	dbperson.PersonName = fileNameOnly       // 鍥剧墖鍚�
-	dbperson.Enable = 1 //榛樿鏈夋晥
-	dbperson.FaceFeature = faceBase64 // 鐗瑰緛鍊糱ase64 鐮�
+	var result map[string]interface{}
+	if add2Db {
+		dbperson := new(models.Dbtablepersons)
+		dbperson.PersonPicUrl = weedFilePath //  鍥剧墖璺粡
+		dbperson.TableId = tableId           //
+		dbperson.PersonName = fileNameOnly       // 鍥剧墖鍚�
+		dbperson.Enable = 1 //榛樿鏈夋晥
+		dbperson.FaceFeature = faceBase64 // 鐗瑰緛鍊糱ase64 鐮�
 
-	result := addDbPerson(dbperson)
-	logger.Debug("addDbPerson鐢ㄦ椂锛�", time.Since(t1))
-	return fileNameOnly, result, nil
+		result = addDbPerson(dbperson)
+	}
+
+	logger.Debug("addDbPerson鐢ㄦ椂锛�", time.Since(t1), "result:", result)
+	return fileNameOnly, result, nil,faceBase64, weedFilePath
 
 }
 
@@ -886,7 +909,7 @@
 				lock.Unlock()
 				return
 			}
-			field, _, err1 := uploadFileReturnAddr(file, filename, tableId)
+			field, _, err1,_,_ := uploadFileReturnAddr(file, filename, tableId, true)
 			lock.Lock()
 			if err1 != nil || field == "" {
 				if err1 !=nil && err1.Error() == "NotFeatureFindError" {
@@ -963,7 +986,7 @@
 		logger.Debug("localConfig is wrong!!!")
 		return
 	}
-	var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit"
+	var weedfsUri = "http://"+localConf.WebPicIp+":"+strconv.Itoa(int(localConf.WebPicPort))+"/submit?collection=persistent"
 	{
 		uri := weedfsUri
 		fileInfo, e := esutil.PostFormBufferData(uri, filename, "file", uploadData)

--
Gitblit v1.8.0