liuxiaolong
2019-08-30 725d54ef5f16ede9c39cb003ed9d474edf02c0e5
controllers/dbtableperson.go
@@ -2,9 +2,15 @@
import (
   "basic.com/dbapi.git"
   "basic.com/fileServer/WeedFSClient.git"
   "basic.com/pubsub/protomsg.git"
   "encoding/base64"
   "encoding/json"
   "io/ioutil"
   "strconv"
   "time"
   "webserver/extend/logger"
   "webserver/service"
   "github.com/gin-gonic/gin"
   "github.com/satori/go.uuid"
@@ -24,9 +30,8 @@
// @Produce json
// @Tags dbperson 底库人员
// @Param obj body models.Dbtablepersons true "底库人员数据"
// @Success 200 {object} json "{"code":200, msg:"目录结构数据", success:true}"
// @Failure 500 {string} json "{"code":500,  msg:"返回错误信息", success:false}"
// @Failure 400 {object} json code.RequestParamError
// @Success 200 {string} json "{"code":200, msg:"目录结构数据", success:true}"
// @Failure 500 {string} json "{"code":500, msg:"返回错误信息", success:false}"
// @Router /data/api-v/dbperson/addDbPerson [PUT]
func (dbc DbPersonController) AddDbPerson(c *gin.Context) {
   dbperson := new(models.Dbtablepersons)
@@ -99,6 +104,76 @@
   }
}
// @Summary 更新底库人脸照片
// @Description 更新底库人脸照片
// @Accept  json
// @Produce json
// @Tags 底库人员
// @Param id formData string true "人员id"
// @Param file formData file true "人脸图片"
// @Success 200 {string} json "{"code":200, msg:"", success:true}"
// @Failure 500 {string} json "{"code":500, msg:"", success:false}"
// @Router /data/api-v/dbperson/updateFace [POST]
func (dbc DbPersonController) UpdateFace(c *gin.Context) {
   file, header, err := c.Request.FormFile("file")
   id := c.Request.FormValue("id")
   if err != nil || id == "" {
      util.ResponseFormat(c,code.RequestParamError,"参数有误")
      return
   }
   //文件的名称
   filename := header.Filename
   defer file.Close()
   // weedfs 上传
   fileBytes, err := ioutil.ReadAll(file)
   if err !=nil {
      util.ResponseFormat(c,code.ComError,"图片读取失败")
      return
   }
   //将上传的图片交人脸检测和人脸提取,获得特征
   var faceBase64=""
   faceArr, err, pI := service.GetFaceFeaFromSdk(fileBytes, time.Second*5)
   if faceArr ==nil {
      util.ResponseFormat(c,code.ComError,"未到提取人脸")
      return
   }
   var rcFace *protomsg.Rect
   if err ==nil && len(faceArr) >0 {
      if len(faceArr) >1 {
         util.ResponseFormat(c,code.ComError,"人脸大于一张,请换一张人脸图片")
         return
      }
      for _,r := range faceArr {
         //拿到人脸的坐标
         rcFace = r.Pos.RcFace
         faceBase64 = base64.StdEncoding.EncodeToString(r.Feats)//获取提取到的第一张人脸特征
         break
      }
   }
   var weedfsUri = "http://"+config.WeedFs.Ip+":"+strconv.Itoa(config.WeedFs.UploadPort)+"/submit"
   //根据人脸坐标扣出人脸小图
   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()
   weedFilePath, e := WeedFSClient.UploadFile(weedfsUri, filename, cutFaceImgData)
   logger.Debug("上传到weedfs用时:", time.Since(t1))
   t1 = time.Now()
   if e != nil {
      util.ResponseFormat(c,code.ComError,"人脸上传失败")
      return
   }
   var dbpApi dbapi.DbPersonApi
   b,d := dbpApi.UpdateFace(id,faceBase64,weedFilePath)
   if b {
      util.ResponseFormat(c,code.UpdateSuccess,d)
   } else {
      util.ResponseFormat(c,code.UpdateFail,"更新人脸失败")
   }
}
func UpdateDbPersonsOfDbTable(id string) (message string) {
   url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport +
      "/" + config.EsInfo.EsIndex.Dbtablepersons.IndexName + "/_update_by_query?refresh"
@@ -164,25 +239,30 @@
   }
}
type DelMultiPerson []string
// @Summary 删除底库人员
// @Description 删除库人员
// @Accept  json
// @Produce json
// @Tags dbperson 底库人员
// @Param uuids body []string true "底库人员ids "
// @Param uuids body controllers.DelMultiPerson true "底库人员ids "
// @Success 200 {string} json "{"code":200, msg:"目录结构数据", success:true}"
// @Failure 500 {string} json "{"code":500,  msg:"返回错误信息", success:false}"
// @Router /data/api-v/dbperson/deleteMoreDbPerson [POST]
func (dbc DbPersonController) DeleteMoreDbPerson(c *gin.Context) {
   uuids := make([]string, 0, 5)
   var uuids DelMultiPerson
   err := c.BindJSON(&uuids)
   if err !=nil || len(uuids)==0{
      util.ResponseFormat(c,code.RequestParamError,"参数有误")
      return
   }
   logger.Debug("DeleteMoreDbPerson len(uuids):",len(uuids))
   var pApi dbapi.DbPersonApi
   paramBody := util.Struct2Map(uuids)
   b, _ := pApi.DeleteMoreDbPerson(paramBody)
   m := map[string]interface{}{
      "ids": uuids,
   }
   b, _ := pApi.DeleteMoreDbPerson(m)
   if b {
      util.ResponseFormat(c, code.Success, "删除底库人员成功")
   } else {
@@ -195,41 +275,41 @@
// @Accept  json
// @Produce json
// @Tags dbperson 底库人员
// @Param reqMap body map false "{"tableId":"","orderName":"uuid","orderType":"desc","contentValue":"","page":1,"size":8}"
// @Param reqMap body controllers.DbtSearch false "{"tableId":"","orderName":"id","orderType":"desc","contentValue":"","page":1,"size":8}"
// @Success 200 {string} json "{"code":200, "msg":"目录结构数据", "success":true,"data":{}}"
// @Failure 500 {string} json "{code:500,  msg:"返回错误信息", success:false,data:{}}"
// @Router /data/api-v/dbperson/queryDbPersonsByTbId [POST]
func (dbc DbPersonController) QueryDbPersonsByTbId(c *gin.Context) {
   reqBody := make(map[string]interface{}, 5)
   c.BindJSON(&reqBody)
   tableId := ""
   if reqBody["tableId"] != nil {
      tableId = reqBody["tableId"].(string)
   //reqBody := make(map[string]interface{}, 5)
   var reqBody DbtSearch
   err := c.BindJSON(&reqBody)
   if err !=nil || reqBody.Page <=0 || reqBody.Size <=0 {
      util.ResponseFormat(c,code.RequestParamError,"参数有误")
      return
   }
   if reqBody.TableId == "" {
      util.ResponseFormat(c,code.RequestParamError,"参数有误,底库id不能为空")
      return
   }
   orderName := "id"
   if reqBody["orderName"] != nil {
      orderName = reqBody["orderName"].(string)
   if reqBody.OrderName != "" {
      orderName = reqBody.OrderName
   } // 列名
   orderType := "desc"
   if reqBody["orderType"] != nil {
      orderType = reqBody["orderType"].(string)
   if reqBody.OrderType != "" {
      orderType = reqBody.OrderType
   } // 列类型
   contentValue := ""
   if reqBody["contentValue"] != nil {
      contentValue = reqBody["contentValue"].(string)
   } //输入框内容
   page := 1
   if reqBody["page"] != nil {
      page = int(reqBody["page"].(float64))
   if reqBody.Page >1 {
      page = reqBody.Page
   } // 页码
   size := 8
   if reqBody["size"] != nil {
      size = int(reqBody["size"].(float64))
   if reqBody.Size >8 {
      size = reqBody.Size
   } // 条数
   if tableId == "all" || tableId == "" {
      // / 所有人员
   }
   if orderType == "desc" {
      orderType = "desc"
@@ -238,7 +318,7 @@
   }
   var pApi dbapi.DbPersonApi
   paramBody := map[string]interface{}{
      "tableId":tableId,
      "tableId": reqBody.TableId,
      "orderName":orderName,
      "orderType":orderType,
      "contentValue":contentValue,
@@ -253,31 +333,41 @@
   }
}
type DbtSearch struct {
   TableId string `json:"tableId"`
   OrderName string `json:"orderName"`
   OrderType string `json:"orderType"`
   ContentValue string `json:"contentValue"`
   Page int `json:"page"`
   Size int `json:"size"`
}
/*
// @Summary 查询底库人员列表
// @Description 查询库人员列表
// @Accept  json
// @Produce json
// @Tags dbperson 底库人员
// @Param reqMap body map false "{"tableId":"","orderName":"uuid","orderType":"desc","contentValue":"","page":1,"size":8}"
// @Success 200 {string} json "{"code":200, "msg":"目录结构数据", "success":true,"data":{}}"
// @Failure 500 {string} json "{code:500,  msg:"返回错误信息", success:false,data:{}}"
// @Param reqMap body controllers.DbtSearch false "{"tableId":"","orderName":"id","orderType":"desc","contentValue":"","page":1,"size":8}"
// @Success 200 {string} json "{"code":200, "msg":"", "success":true,"data":{}}"
// @Failure 500 {string} json "{code:500,  msg:"", success:false,data:{}}"
// @Router /data/api-v/dbperson/queryDbPersonsByCampare [POST]
func (dbc DbPersonController) QueryDbPersonsByCampare(c *gin.Context) {
   url := "http://" + config.EsInfo.Masterip + ":" + config.EsInfo.Httpport +
      "/" + config.EsInfo.EsIndex.Dbtablepersons.IndexName + "/_search" // ?refresh=wait_for
   reqBody := make(map[string]interface{}, 5)
   var reqBody DbtSearch
   c.BindJSON(&reqBody)
   tableId := ""
   if reqBody["tableId"] != nil {
      tableId = reqBody["tableId"].(string)
   if reqBody.TableId != "" {
      tableId = reqBody.TableId
   }
   orderName := "_id"
   if reqBody["orderName"] != nil {
      orderName = reqBody["orderName"].(string)
   if reqBody.OrderName != "" {
      orderName = reqBody.OrderName
   } // 列名
   orderType := "desc"
   if reqBody["orderType"] != nil {
      orderType = reqBody["orderType"].(string)
   if reqBody.OrderType != "" {
      orderType = reqBody.OrderType
   } // 列类型
   faceUrl := ""
   var threshold float32
@@ -319,14 +409,7 @@
   data := esutil.GetEsDataReq(url, params, true)
   featByte := make([]byte, 0, 1024)
   if len(faceUrl) > 3 { //   linux
      /*fileName := picUrl   // picIp 定义在 fileController weedfs 文件服务器 访问 路径 前缀
      detect := gorun.GetSimpleFaceDetect(fileName)
      if len(detect) != 1 {
         util.ResponseFormat(c,code.TooManyFeatureFindError,"图片特征值过多")
         return
      }else {
         featByte = detect[0]["feature"].([]byte)
      }*/ //   linux
   }
   to := page * size
   datalist := sourceCompare(data["datalist"].([]interface{}), false, featByte, threshold)
@@ -341,4 +424,4 @@
   data["total"] = len(datalist)
   //c.JSON(200, data)
   util.ResponseFormat(c, code.Success, data)
}
}*/