| | |
| | | package service |
| | | |
| | | import ( |
| | | "encoding/json" |
| | | "gat1400Exchange/client" |
| | | "gat1400Exchange/config" |
| | | "gat1400Exchange/models" |
| | | "gat1400Exchange/pkg/logger" |
| | |
| | | "gat1400Exchange/vo" |
| | | ) |
| | | |
| | | var resendTaskRunning bool |
| | | |
| | | func ResendImageData() { |
| | | if resendTaskRunning { |
| | | return |
| | | } |
| | | resendTaskRunning = true |
| | | defer func() { resendTaskRunning = false }() |
| | | |
| | | var cacheMod models.Cache |
| | | cacheItems, _ := cacheMod.FindAll() |
| | | total, _ := cacheMod.Count() |
| | | if total == 0 { |
| | | return |
| | | } |
| | | |
| | | for _, c := range cacheItems { |
| | | if !SendData([]byte(c.Data), config.ForwardConf.SyncServer) { |
| | | logger.Warn("The data resend failed. retry count %d", c.Retry) |
| | | logger.Info("Start resend task. cache len:%d", total) |
| | | |
| | | c.Retry = c.Retry + 1 |
| | | c.Update() |
| | | } else { |
| | | c.Delete() |
| | | logger.Debug("The data resend successful.") |
| | | for i := 0; i < int(total); i++ { |
| | | var c models.Cache |
| | | err := c.First() |
| | | if err != nil { |
| | | logger.Error(err.Error()) |
| | | return |
| | | } |
| | | if c.Type == "1400-face" { |
| | | if client.FaceCapture([]byte(c.Data)) != vo.StatusSuccess { |
| | | c.UpdateRetryCount() |
| | | logger.Warn("The data resend failed. retry count %d", c.Retry+1) |
| | | return |
| | | } |
| | | } else if c.Type == "1400-person" { |
| | | if client.PersonCapture([]byte(c.Data)) != vo.StatusSuccess { |
| | | c.UpdateRetryCount() |
| | | logger.Warn("The data resend failed. retry count %d", c.Retry+1) |
| | | return |
| | | } |
| | | } else { |
| | | if !util.SendData([]byte(c.Data), config.ForwardConf.SyncServer) { |
| | | c.UpdateRetryCount() |
| | | logger.Warn("The data resend failed. retry count %d", c.Retry+1) |
| | | return |
| | | } |
| | | } |
| | | |
| | | c.Delete() |
| | | logger.Debug("The data resend successful.") |
| | | } |
| | | |
| | | } |
| | | |
| | | func SendData(payload []byte, url string) bool { |
| | | body, err := util.HttpPost(url, nil, payload) |
| | | if err != nil { |
| | | logger.Error("Post request failure, url:%s, err:%s", err.Error()) |
| | | return false |
| | | } |
| | | |
| | | var rsp vo.SyncServerResponse |
| | | err = json.Unmarshal(body, &rsp) |
| | | if err != nil { |
| | | logger.Error("Can't parse response, url:%s, rsp: %v", url, body) |
| | | return false |
| | | } |
| | | |
| | | return rsp.Success |
| | | } |