panlei
2019-09-02 0562b97177523da4a6776f8bce713957075d9d06
insertdata/insertDataToEs.go
@@ -7,10 +7,8 @@
   "fmt"
   "io/ioutil"
   "net"
   "os"
   "ruleprocess/cache"
   "ruleprocess/logger"
   "strings"
   "time"
   "basic.com/pubsub/protomsg.git"
@@ -111,6 +109,8 @@
   AlarmLevel   string `json:"alarmLevel"`
   RuleText     string `json:"ruleText"`
   DefenceState bool   `json:"defenceState"`
   IsLink       bool   `json:"isLink"`
   LinkInfo    string `json:"linkInfo"`
}
// 一个face对多个规则组的归置人脸的结构体
@@ -165,7 +165,9 @@
func InsertFace(msg ruleserver.ResultMsg, linkId string) {
   if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]ruleserver.FaceResult)) > 0 {
      logger.Info("往ES插人脸数据")
      faces := PutFace(msg)
      faces := []*FaceAndRules{}
      faces = PutFace(faces,msg)
      //logger.Info("整理后的数据:",faces)
      if faces != nil {
         for _,face := range faces {
            // 上传大图
@@ -175,11 +177,11 @@
               panic("解压缩图片时出现错误")
            }
            alarmRules := []AlarmRule{}
            logger.Warn("人脸的规则长度为:",len(face.rules))
            os.Exit(1)
            logger.Warn("人脸id为:",face.Id,"人脸的规则长度为:",len(face.rules))
            //os.Exit(1)
            for _,faceResult := range face.rules {
               alarm := ChangeToString(faceResult.DefenceState, faceResult.AlarmLevel)
               alarmRules = append(alarmRules, AlarmRule{faceResult.RuleGroupId, alarm, faceResult.RuleText, faceResult.DefenceState})
               alarmRules = append(alarmRules, AlarmRule{faceResult.RuleGroupId, alarm, faceResult.RuleText, faceResult.DefenceState,faceResult.IsLink,""})
            }
            i := protomsg.Image{}
            err = proto.Unmarshal(bdata, &i)
@@ -202,7 +204,7 @@
            if err != nil {
               logger.Error("上传小图出错")
            }
            logger.Info("================小图地址:", resp["fileUrl"].(string))
            //logger.Info("================小图地址:", resp["fileUrl"].(string))
            sex := ""
            if face.ThftRes.Gender == 1 {
               sex = "男"
@@ -221,7 +223,7 @@
               msg.Cid,
               camera.Addr,
               i.Timestamp,
               strings.Split(bigPhotoUrl["fileUrl"].(string), "/")[1],
               bigPhotoUrl["fileUrl"].(string),
               msg.Tasklab.Taskid,
               msg.Tasklab.Taskname,
               "人脸",
@@ -235,7 +237,7 @@
               face.ThftRes.Smile,
               face.ThftRes.Beauty,
               base64.StdEncoding.EncodeToString(face.Feature),
               []string{strings.Split(resp["fileUrl"].(string), "/")[1]},
               []string{resp["fileUrl"].(string)},
               "暂无集群",
               localConfig.ServerId,
               localConfig.ServerName,
@@ -269,31 +271,48 @@
}
// 归置人脸
func PutFace(msg ruleserver.ResultMsg) []FaceAndRules{
func PutFace(faces []*FaceAndRules,msg ruleserver.ResultMsg)[]*FaceAndRules{
   if msg.RuleResult["face"] != nil && len(msg.RuleResult["face"].([]ruleserver.FaceResult)) > 0 {
      logger.Info("整理人脸数据")
      faces := []FaceAndRules{}
      for _, faceResult := range msg.RuleResult["face"].([]ruleserver.FaceResult) {
         hebingFace(faces, faceResult)
         faces = hebingFace(faces, faceResult)
      }
      return faces
   } else {
      return nil
   }
   return nil
}
func hebingFace(faces []FaceAndRules, faceResult ruleserver.FaceResult) {
func hebingFace(faces []*FaceAndRules, faceResult ruleserver.FaceResult) []*FaceAndRules{
   for _, arg := range faceResult.Args {
      // 拿到每一张人脸
      logger.Info("归置人脸时相似者的数量:",len(arg.Liker))
      flag := false
      for _, face := range faces {
         for _,lik := range face.Liker {
            logger.Warn("--------合并人脸时相似者:",lik.PersonId,lik.TableName)
         }
         if arg.Id == face.Id {
            flag = true
            face.rules = append(face.rules,faceResult.Result)
            // 相似者去重归并
            for _,liker := range arg.Liker {
               flag1 := true
               for _,liker1 := range face.Liker {
                  if liker.PersonId == liker1.PersonId {
                     flag1 = false
                  }
               }
               if flag1 {
                  face.Liker = append(face.Liker,liker)
               }
            }
            //face.Liker = append(face.Liker,arg.Liker...)
         }
      }
      if flag {
         faces = append(faces, FaceAndRules{arg, []ruleserver.Result{faceResult.Result}})
      if !flag {
         faces = append(faces, &FaceAndRules{arg, []ruleserver.Result{faceResult.Result}})
      }
   }
   return faces
}
// 往es中插入yolo数据
@@ -318,7 +337,11 @@
               //logger.Info("应该进来才对的")
               sdkNames = sdkNames + yoloResult.SdkName
               alarm := ChangeToString(yoloResult.DefenceState, yoloResult.AlarmLevel)
               alarmRules = append(alarmRules, AlarmRule{yoloResult.RuleGroupId, alarm, yoloResult.RuleText, yoloResult.DefenceState})
               linkInfo := ""
               if yoloResult.IsLink {
                  linkInfo = "联动任务"
               }
               alarmRules = append(alarmRules, AlarmRule{yoloResult.RuleGroupId, alarm, yoloResult.RuleText, yoloResult.DefenceState,yoloResult.IsLink,linkInfo})
               // 上传缓存数据的图片拿到url
               if yoloResult.Others.CacheData != nil {
                  //InsertYolo(msg.RuleResult["cacheData"].(ruleserver.ResultMsg))
@@ -338,7 +361,7 @@
                     } else {
                        logger.Info("上传的图片信息:", resp1)
                     }
                     url = append(url, strings.Split(resp1["fileUrl"].(string), "/")[1])
                     url = append(url, resp1["fileUrl"].(string))
                  }
               }
            }
@@ -376,6 +399,7 @@
            resp, err = util.DrawPolygonOnImage(msg.Cid, i, msg.RuleResult["yolo"].([]ruleserver.Result), weedfsUrl)
            if err != nil {
               logger.Error("画框或上传图片服务器出错", err)
               return
            } else {
               logger.Info("上传的图片信息:", resp)
            }
@@ -396,52 +420,53 @@
            logger.Error("查询摄像机信息失败")
         }
         serverIp, err := GetLocalIP()
         if resp["fileUrl"] != nil {
            url = append(url, resp["fileUrl"].(string))
            esDataId := uuid.NewV4().String()
            linksId := ""
            if linkId != "" {
               linksId = linkId
            }
            peraction := Personaction{
               esDataId,
               msg.Cid,
               camera.Name,
               camera.Addr,
               msg.Tasklab.Taskid,
               msg.Tasklab.Taskname,
               sdkNames,
               "",
               alarmRules,
               localConfig.ServerId,
               localConfig.ServerName,
               serverIp,
               "",
               url,
               i.Timestamp,
               linksId,
               "",
               isAlarm,
               0,
               0,
               0,
            }
            requstbody, err := json.Marshal(peraction)
         url = append(url, strings.Split(resp["fileUrl"].(string), "/")[1])
         esDataId := uuid.NewV4().String()
         linksId := ""
         if linkId != "" {
            linksId = linkId
         }
         peraction := Personaction{
            esDataId,
            msg.Cid,
            camera.Name,
            camera.Addr,
            msg.Tasklab.Taskid,
            msg.Tasklab.Taskname,
            sdkNames,
            "",
            alarmRules,
            localConfig.ServerId,
            localConfig.ServerName,
            serverIp,
            "",
            url,
            i.Timestamp,
            linksId,
            "",
            isAlarm,
            0,
            0,
            0,
         }
         requstbody, err := json.Marshal(peraction)
            if err != nil {
               logger.Info("json parse error ", err)
               return
         if err != nil {
            logger.Info("json parse error ", err)
            return
         }
         resp1, err2 := EsReq("POST", personAction, requstbody)
         if err2 != nil {
            logger.Error("往ES插入数据失败", err)
         } else {
            logger.Debug("插入es返回的数据信息是:", resp1)
            // 发出录像信号
            ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: esDataId, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid, ImgId: i.Id, SdkIds: []string{}, Type: 2})
            logger.Warn("__________________________________________往ES插入yolo数据成功")
            //os.Exit(1)
            }
            resp1, err2 := EsReq("POST", personAction, requstbody)
            if err2 != nil {
               logger.Error("往ES插入数据失败", err)
            } else {
               logger.Debug("插入es返回的数据信息是:", resp1)
               // 发出录像信号
               ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: esDataId, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid, ImgId: i.Id, SdkIds: []string{}, Type: 2})
               logger.Warn("__________________________________________往ES插入yolo数据成功")
               //os.Exit(1)
            }
         }
      } else {
         logger.Debug("timeLabel条件都不符合!")
@@ -492,7 +517,7 @@
      localConfig.ServerName,
      serverIp,
      "",
      []string{strings.Split(resp["fileUrl"].(string), "/")[1]},
      []string{resp["fileUrl"].(string)},
      i.Timestamp,
      "",
      "",
@@ -550,7 +575,7 @@
      msg.Cid,
      camera.Addr,
      i.Timestamp,
      strings.Split(bigPhotoUrl["fileUrl"].(string), "/")[1],
      bigPhotoUrl["fileUrl"].(string),
      msg.Tasklab.Taskid,
      msg.Tasklab.Taskname,
      "人脸",