| | |
| | | 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" |
| | |
| | | } |
| | | |
| | | // 转发图像 |
| | | 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("数据转发成功") |
| | | } |
| | | } |
| | | } |
| | |
| | | // 匹配楼层 |
| | | faceAppearTime, err := time.ParseInLocation("20060102150405", appearTime, time.Local) |
| | | if err != nil { |
| | | logger.Warn("Parse face appear time error,%s", err.Error()) |
| | | logger.Warn("Parse face appear time error, %s", err.Error()) |
| | | faceAppearTime = time.Now() |
| | | } |
| | | |
| | |
| | | |
| | | imageBytes, err := base64.StdEncoding.DecodeString(faceImage) |
| | | if err != nil { |
| | | logger.Warn("Decode Image Base64 String failure,%s", err.Error()) |
| | | logger.Warn("Decode Image Base64 String failure, %s", err.Error()) |
| | | return pd |
| | | } |
| | | |
| | |
| | | // 匹配楼层 |
| | | faceAppearTime, err := time.ParseInLocation("20060102150405", appearTime, time.Local) |
| | | if err != nil { |
| | | logger.Warn("Parse face appear time error,%s", err.Error()) |
| | | logger.Warn("Parse face appear time error, %s", err.Error()) |
| | | faceAppearTime = time.Now() |
| | | } |
| | | |
| | |
| | | |
| | | imageBytes, err := base64.StdEncoding.DecodeString(faceImage) |
| | | if err != nil { |
| | | logger.Warn("Decode Image Base64 String failure,%s", err.Error()) |
| | | logger.Warn("Decode Image Base64 String failure, %s", err.Error()) |
| | | return pd |
| | | } |
| | | |
| | |
| | | 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() |
| | | return rsp.Success |
| | | } |
| | | |
| | | var responseData map[string]interface{} |
| | | err = json.NewDecoder(resp.Body).Decode(&responseData) |
| | | if err != nil { |
| | | return id, err |
| | | func (c CaptureRepository) CacheData(payload []byte) { |
| | | var cacheItem = models.Cache{ |
| | | Data: string(payload), |
| | | CreateTime: time.Now().Unix(), |
| | | Retry: 0, |
| | | } |
| | | |
| | | id = responseData["data"].(string) |
| | | // 处理响应 |
| | | // 这里可以根据实际需求进行处理,例如读取响应内容或检查状态码等 |
| | | |
| | | return id, nil |
| | | models.GetDB().Table(cacheItem.TableName()).Create(&c) |
| | | |
| | | } |