package transfersys import ( "context" "fmt" "io/ioutil" "net/http" "strconv" "strings" "time" "com.snow.auto_monitor/app/http/middlewares" orderServ "com.snow.auto_monitor/app/services/orders" "com.snow.auto_monitor/app/utils/rdbdq" "github.com/qit-team/snow-core/log/logger" ) func DoCallBack() { fmt.Println("开始执行周期任务:DoCallBack") // 创建一个新的Ticker,每3秒钟触发一次 ticker := time.NewTicker(1 * time.Second) defer ticker.Stop() // 在函数结束时停止Ticker for range ticker.C { for i := 0; i < 10; i++ { res, err := rdbdq.ReadLatestOne() if err != nil { logger.Error(context.TODO(), "middlewares", err) continue } if res != "" { // fmt.Println("获取到的数据:", res) wait_time, err := strconv.Atoi(strings.Split(res, "_")[0]) if err != nil { logger.Error(context.TODO(), "middlewares", err) continue } order_id, err := strconv.Atoi(strings.Split(res, "_")[1]) if err != nil { logger.Error(context.TODO(), "middlewares", err) continue } order, err := orderServ.GetById(int64(order_id)) if err != nil { logger.Error(context.TODO(), "middlewares", err) continue } // fmt.Println(order) contentType := "application/x-www-form-urlencoded" status := "01" if order.Status != 1 { status = "03" } datamap := map[string]interface{}{ "merchantId": order.MerchantId, "outTradeNo": order.OutTradeNo, "status": status, "rechargeAccount": order.RechargeAccount, } sign, _ := middlewares.GetMD5Sign(datamap) data := fmt.Sprintf("merchantId=%d&outTradeNo=%s&status=%s&rechargeAccount=%s&sign=%s", order.MerchantId, order.OutTradeNo, status, order.RechargeAccount, sign) // fmt.Println(data) notifyUrl := "http://openapi.1688sup.com/notify/JingRongZhuanDan" resp, err := http.Post(notifyUrl, contentType, strings.NewReader(data)) if err != nil { logger.Error(context.TODO(), "middlewares", err) return } defer resp.Body.Close() b, err := ioutil.ReadAll(resp.Body) if err != nil { logger.Error(context.TODO(), "middlewares", err) return } if string(b) != "success" && wait_time < 1024 { wait_time = wait_time * 4 err = rdbdq.WriteOne(strconv.FormatInt(int64(wait_time), 10)+"_"+strconv.FormatInt(int64(order_id), 10), time.Now().Add(time.Duration(wait_time)*time.Second).Unix()) if err != nil { logger.Error(context.TODO(), "middlewares", string(b)) logger.Error(context.TODO(), "middlewares", err) return } } } } } } func init() { go DoCallBack() }