zhangzengfei
2024-04-16 e4840c7de5ff5f1a816a4fd023ba5bf797a4fa9e
repository/captureRepo.go
@@ -1,15 +1,14 @@
package repository
import (
   "bytes"
   "encoding/base64"
   "encoding/json"
   "net/http"
   "time"
   "gat1400Exchange/config"
   "gat1400Exchange/models"
   "gat1400Exchange/pkg/logger"
   "gat1400Exchange/util"
   "gat1400Exchange/vo"
   uuid "github.com/satori/go.uuid"
@@ -46,18 +45,24 @@
      }
      // 转发图像
      logger.Debug("准备转发,deviceId:%s, image len:%d, server:%s", deviceId, len(faceImageStr), config.ForwardConf.SyncServer)
      logger.Debug("Prepare forward image, deviceId:%s, image len:%d, server:%s", deviceId, len(faceImageStr), config.ForwardConf.SyncServer)
      if deviceId != "" && faceImageStr != "" && config.ForwardConf.SyncServer != "" {
         pd := c.PackPushDataV2(deviceId, faceId, faceImageStr, face.FaceAppearTime)
         if pd == nil {
            return
         }
         rsp, err := c.SendData(pd, config.ForwardConf.SyncServer)
         payload, err := json.Marshal(pd)
         if err != nil {
            logger.Warn("数据转发失败:%s", err.Error())
            logger.Warn("Marshal error, %s", err.Error())
            return
         }
         if !c.SendData(payload, config.ForwardConf.SyncServer) {
            c.CacheData(payload)
            logger.Warn("数据转发失败, 添加缓存")
         } else {
            logger.Debug("数据转发成功,id:%s", rsp)
            logger.Debug("数据转发成功")
         }
      }
   }
@@ -154,35 +159,30 @@
   return pd
}
func (c CaptureRepository) SendData(pushDataInfo interface{}, url string) (id string, err error) {
   id = ""
   payload, err := json.Marshal(pushDataInfo)
func (c CaptureRepository) SendData(payload []byte, url string) bool {
   body, err := util.HttpPost(url, nil, payload)
   if err != nil {
      return id, err
      logger.Error("Post request failure, url:%s, err:%s", err.Error())
      return false
   }
   req, err := http.NewRequest("POST", url, bytes.NewBuffer(payload))
   var rsp vo.SyncServerResponse
   err = json.Unmarshal(body, &rsp)
   if err != nil {
      return id, err
      logger.Error("Can't parse response, url:%s, rsp: %v", url, body)
      return false
   }
   client := &http.Client{}
   resp, err := client.Do(req)
   if err != nil {
      return id, err
   }
   defer resp.Body.Close()
   var responseData map[string]interface{}
   err = json.NewDecoder(resp.Body).Decode(&responseData)
   if err != nil {
      return id, err
   return rsp.Success
   }
   id = responseData["data"].(string)
   // 处理响应
   // 这里可以根据实际需求进行处理,例如读取响应内容或检查状态码等
func (c CaptureRepository) CacheData(payload []byte) {
   var cacheItem = models.Cache{
      Data:       string(payload),
      CreateTime: time.Now().Unix(),
      Retry:      0,
   }
   return id, nil
   models.GetDB().Table(cacheItem.TableName()).Create(&c)
}