--
panlei
2019-11-13 2d0ec0a2d038f962648f4b5acaea892113ac112f
insertdata/insertDataToEs.go
@@ -40,6 +40,7 @@
   Id              string                `json:"id"`
   CameraId        string                `json:"cameraId"`
   CameraAddr      string                `json:"cameraAddr"`
   CameraName      string                `json:"cameraName"`
   PicDate         string                `json:"picDate"`
   PicMaxUrl       string                `json:"picMaxUrl"`
   TaskId          string                `json:"taskId"`
@@ -67,15 +68,50 @@
   IsCollect       int                   `json:"isCollect"`
   IsDelete        int                   `json:"isDelete"`
   BaseInfo        []*structure.BaseInfo `json:"baseInfo"`
   TargetInfo      []Target
   LinkTag         string          `json:"linkTag"`
   LinkTagInfo     []*PerVideoPicture `json:"linkTagInfo"`
   TargetInfo      []Target              `json:"targetInfo"`
   LinkTag         string                `json:"linkTag"`
   LinkTagInfo     []*LinkInfo           `json:"linkTagInfo"`
}
type LinkInfo struct {
   Id              string                `json:"id"`
   CameraId        string                `json:"cameraId"`
   CameraAddr      string                `json:"cameraAddr"`
   CameraName      string                `json:"cameraName"`
   PicDate         string                `json:"picDate"`
   PicMaxUrl       string                `json:"picMaxUrl"`
   TaskId          string                `json:"taskId"`
   TaskName        string                `json:"taskName"`
   SdkName         string                `json:"sdkName"`
   Content         string                `json:"content"`
   AlarmRules      []AlarmRule           `json:"alarmRules"`
   LikeDate        string                `json:"likeDate"`
   Sex             string                `json:"sex"`
   Age             int32                 `json:"age"`
   AgeDescription  string                `json:"ageDescription"`
   Race            string                `json:"race"`
   SmileLevel      int32                 `json:"smileLevel"`
   BeautyLevel     int32                 `json:"beautyLevel"`
   FaceFeature     string                `json:"faceFeature"`
   PicSmUrl        []string              `json:"picSmUrl"`
   VideoUrl        string                `json:"videoUrl"`
   AnalyServerId   string                `json:"analyServerId"`
   AnalyServerName string                `json:"analyServerName"`
   AnalyServerIp   string                `json:"analyServerIp"`
   ClusterId       string                `json:"clusterId"`
   DetectScore     float64               `json:"detectScore"`
   IsAlarm         int                   `json:"isAlarm"`
   IsAckAlarm      int                   `json:"isAckAlarm"`
   IsCollect       int                   `json:"isCollect"`
   IsDelete        int                   `json:"isDelete"`
   BaseInfo        []*structure.BaseInfo `json:"baseInfo"`
   TargetInfo      []Target              `json:"targetInfo"`
}
type Target struct {
   TargetId       string  `json:"targetId"`
   TargetScore    float64 `json:"targetScore"`
   TargetLocation Points
   TargetLocation Points  `json:"targetLocation"`
}
type Points struct {
@@ -84,8 +120,8 @@
}
type Point struct {
   Lat float64 `json:"lat"`
   Lon float64 `json:"lon"`
   X float64 `json:"x"`
   Y float64 `json:"y"`
}
//  yolo行为的数据结构
@@ -110,9 +146,9 @@
   IsAckAlarm      int         `json:"isAckAlarm"`
   IsCollect       int         `json:"isCollect"`
   IsDelete        int         `json:"isDelete"`
   TargetInfo      []Target
   LinkTag         string          `json:"linkTag"`
   LinkTagInfo     []*PerVideoPicture `json:"linkTagInfo"`
   TargetInfo      []Target    `json:"targetInfo"`
   LinkTag         string      `json:"linkTag"`
   LinkTagInfo     []*LinkInfo `json:"linkTagInfo"`
}
type AlarmRule struct {
@@ -120,7 +156,6 @@
   AlarmLevel   string `json:"alarmLevel"`
   RuleText     string `json:"ruleText"`
   DefenceState bool   `json:"defenceState"`
   IsLink       bool   `json:"isLink"`
   LinkInfo     string `json:"linkInfo"`
}
@@ -168,7 +203,7 @@
            //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, faceResult.IsLink, ""})
               alarmRules = append(alarmRules, AlarmRule{faceResult.RuleGroupId, alarm, faceResult.RuleText, faceResult.DefenceState, ""})
            }
            i := protomsg.Image{}
            err = proto.Unmarshal(bdata, &i)
@@ -202,11 +237,12 @@
            target.TargetLocation = Points{TopLeft: Point{face.Location.X, face.Location.Y}, BottomRight: Point{face.Location.X + face.Location.Width, face.Location.Y + face.Location.Height}}
            //logger.Info("人脸的id:",strconv.FormatUint(face.Id, 10))
            var targetInfos []Target
            targetInfos = append(targetInfos,*target)
            targetInfos = append(targetInfos, *target)
            pervideo := PerVideoPicture{
               face.Uuid,
               msg.Cid,
               msg.Push.Cam.Addr,
               msg.Push.Cam.Name,
               picTime,
               imgMaxUrl,
               msg.Tasklab.Taskid,
@@ -236,7 +272,7 @@
               face.Liker,
               targetInfos,
               "",
               nil,
               []*LinkInfo{},
            }
            requstbody, err := json.Marshal(pervideo)
@@ -248,9 +284,9 @@
            if err1 != nil {
               logger.Error("上传ES出错!---", err1)
            } else {
               logger.Info("插入es返回的信息:", resp1)
               logger.Info("插入es返回的信息(人脸):", resp1)
               // 发出录像信号
               ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: msg.Push.PushId, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid, VideoUrl: msg.Push.VideoUrl, ImgId: i.Id, SdkIds: []string{}, Type: 1})
               ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: face.Uuid, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid, VideoUrl: msg.Push.VideoUrl, ImgId: i.Id, SdkIds: []string{}, Type: 1})
            }
         }
      }
@@ -329,7 +365,7 @@
               if yoloResult.IsLink {
                  linkInfo = "联动任务"
               }
               alarmRules = append(alarmRules, AlarmRule{yoloResult.RuleGroupId, alarm, yoloResult.RuleText, yoloResult.DefenceState, yoloResult.IsLink, linkInfo})
               alarmRules = append(alarmRules, AlarmRule{yoloResult.RuleGroupId, alarm, yoloResult.RuleText, yoloResult.DefenceState, linkInfo})
               // 上传缓存数据的图片拿到url
               if yoloResult.Others.CacheData != nil {
                  //InsertYolo(msg.RuleResult["cacheData"].(ruleserver.ResultMsg))
@@ -375,14 +411,18 @@
            }
         }
         linkTagInfos := []*PerVideoPicture{}
         linkTagInfos := []*LinkInfo{}
         for _, yoloResult := range msg.RuleResult["yolo"].([]structure.Result) {
            if (yoloResult.Others.TimeLabel == "01" || yoloResult.Others.TimeLabel == "10") && yoloResult.Others.LinkCache != nil && len(yoloResult.Others.LinkCache) > 1 {
               for _, msg2 := range yoloResult.Others.LinkCache {
                  // 把msg2的数据装配成一个PerVideoPicture结构体
                  linkTagInfos = append(linkTagInfos,msg2PersonVideo(msg2))
                  linkTagInfos = append(linkTagInfos, msg2PersonVideo(msg2))
               }
            }
         }
         linkTag := ""
         if len(linkTagInfos) > 0 {
            linkTag = "联动任务"
         }
         isAlarm := 0
         resp := make(map[string]interface{})
@@ -433,11 +473,17 @@
               0,
               0,
               targetInfos,
               "",
               linkTag,
               linkTagInfos,
            }
            requstbody, err := json.Marshal(peraction)
            var m map[string]interface{}
            json.Unmarshal(requstbody, &m)
            logger.Info("上传参数json:",m)
            if len(linkTagInfos)>0 {
               logger.Info("联动任务")
            }
            if err != nil {
               logger.Info("json parse error ", err)
               return
@@ -446,7 +492,7 @@
            if err2 != nil {
               logger.Error("往ES插入数据失败", err)
            } else {
               logger.Debug("插入es返回的数据信息是:", resp1)
               logger.Debug("插入es返回的数据信息是(yolo):", resp1)
               // 发出录像信号
               ruleserver.AddLxMessage(&protomsg.VideotapeInfo{EsDataId: msg.Push.PushId, CameraId: msg.Cid, TaskId: msg.Tasklab.Taskid, VideoUrl: msg.Push.VideoUrl, ImgId: i.Id, SdkIds: []string{}, Type: 2})
               logger.Warn("__________________________________________往ES插入yolo数据成功")
@@ -542,7 +588,7 @@
   return race
}
func msg2PersonVideo (msg structure.ResultMsg) *PerVideoPicture{
func msg2PersonVideo(msg structure.ResultMsg) *LinkInfo {
   if msg.RuleResult["yolo"] != nil && len(msg.RuleResult["yolo"].([]structure.Result)) > 0 {
      // 先判断一下数据带的规则标签是否有可以插入的
      flag := false
@@ -568,7 +614,7 @@
               if yoloResult.IsLink {
                  linkInfo = "联动任务"
               }
               alarmRules = append(alarmRules, AlarmRule{yoloResult.RuleGroupId, alarm, yoloResult.RuleText, yoloResult.DefenceState, yoloResult.IsLink, linkInfo})
               alarmRules = append(alarmRules, AlarmRule{yoloResult.RuleGroupId, alarm, yoloResult.RuleText, yoloResult.DefenceState, linkInfo})
               // 上传缓存数据的图片拿到url
               if yoloResult.Others.CacheData != nil {
                  //InsertYolo(msg.RuleResult["cacheData"].(ruleserver.ResultMsg))
@@ -640,10 +686,11 @@
         if resp["fileUrl"] != nil {
            url = append(url, resp["fileUrl"].(string))
            //esDataId := uuid.NewV4().String()
            pervideo := &PerVideoPicture{
            pervideo := &LinkInfo{
               msg.Push.PushId + "-" + uuid.NewV4().String(),
               msg.Cid,
               msg.Push.Cam.Addr,
               msg.Push.Cam.Name,
               i.Timestamp,
               "",
               msg.Tasklab.Taskid,
@@ -652,7 +699,7 @@
               "",
               alarmRules,
               time.Now().Format("2006-01-02 15:04:05"), // 只检测,没有比对时间
               "",                                      //暂改为人脸id strconv.FormatUint(face.Id, 10)
               "",                                       //暂改为人脸id strconv.FormatUint(face.Id, 10)
               0,
               "", // 暂改为分值fmt.Sprintf("%.2f",face.Score)
               "",
@@ -672,8 +719,6 @@
               0,
               nil,
               targetInfos,
               "",
               nil,
            }
            return pervideo
         } else {
@@ -686,4 +731,4 @@
   } else {
      return nil
   }
}
}