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