From e4840c7de5ff5f1a816a4fd023ba5bf797a4fa9e Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期二, 16 四月 2024 14:03:33 +0800 Subject: [PATCH] 添加失败缓存重发的功能 --- repository/captureRepo.go | 62 +++++++++++++++--------------- 1 files changed, 31 insertions(+), 31 deletions(-) diff --git a/repository/captureRepo.go b/repository/captureRepo.go index a76fa4d..56a1caf 100644 --- a/repository/captureRepo.go +++ b/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("鏁版嵁杞彂鎴愬姛") } } } @@ -77,7 +82,7 @@ // 鍖归厤妤煎眰 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() } @@ -86,7 +91,7 @@ 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 } @@ -112,7 +117,7 @@ // 鍖归厤妤煎眰 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() } @@ -126,7 +131,7 @@ 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 } @@ -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() + 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) } -- Gitblit v1.8.0