fix
This commit is contained in:
parent
c7676ee926
commit
347c44ce01
|
@ -1,6 +1,7 @@
|
|||
package orders
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
common "com.snow.auto_monitor/app/http/controllers"
|
||||
|
@ -83,6 +84,12 @@ func FinishOrder(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
err = transServ.AddCallback(strconv.Itoa(int(orders.Id)))
|
||||
if err != nil {
|
||||
common.Error(c, 400, "添加回调失败")
|
||||
return
|
||||
}
|
||||
|
||||
response := &transEnt.FinishOrderResp{
|
||||
Id: orders.Id,
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ func getMD5Hash(input string) string {
|
|||
return hex.EncodeToString(hash[:])
|
||||
}
|
||||
|
||||
func GenMD5Sign(data map[string]interface{}, secretKey string) (string,string) {
|
||||
func GenMD5Sign(data map[string]interface{}, secretKey string) (string, string) {
|
||||
keys := make([]string, 0, len(data))
|
||||
for key := range data {
|
||||
if key != "sign" && key != "Sign" {
|
||||
|
@ -45,7 +45,7 @@ func GenMD5Sign(data map[string]interface{}, secretKey string) (string,string) {
|
|||
rawStr += "&key=" + secretKey
|
||||
// fmt.Println(rawStr)
|
||||
sign := strings.ToUpper(getMD5Hash(rawStr))
|
||||
return sign,rawStr
|
||||
return sign, rawStr
|
||||
}
|
||||
|
||||
func VerifySign() gin.HandlerFunc {
|
||||
|
@ -83,7 +83,7 @@ func VerifySign() gin.HandlerFunc {
|
|||
}
|
||||
//验证签名是否正确
|
||||
data["time_stamp"] = int(data["time_stamp"].(float64))
|
||||
hash,rawStr := GenMD5Sign(data, merchant.PrivateKey)
|
||||
hash, rawStr := GenMD5Sign(data, merchant.PrivateKey)
|
||||
// fmt.Println(hash)
|
||||
logger.Info(c, "RawStr", rawStr)
|
||||
logger.Info(c, "Sign", hash)
|
||||
|
@ -95,3 +95,17 @@ func VerifySign() gin.HandlerFunc {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func GetMD5Sign(data map[string]interface{}) (string, string) {
|
||||
merchanId := data["merchantId"].(int64)
|
||||
merchant, has, err := mermod.GetInstance().GetById(merchanId)
|
||||
if err != nil {
|
||||
return "", ""
|
||||
}
|
||||
if !has {
|
||||
return "", ""
|
||||
}
|
||||
//验证签名是否正确
|
||||
hash, rawStr := GenMD5Sign(data, merchant.PrivateKey)
|
||||
return hash, rawStr
|
||||
}
|
||||
|
|
|
@ -2,10 +2,12 @@ package transfersys
|
|||
|
||||
import (
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
mermod "com.snow.auto_monitor/app/models/merchant"
|
||||
models "com.snow.auto_monitor/app/models/orders"
|
||||
promod "com.snow.auto_monitor/app/models/product"
|
||||
"com.snow.auto_monitor/app/utils/rdbdq"
|
||||
)
|
||||
|
||||
func GetOrder() (res *models.Orders, err error) {
|
||||
|
@ -44,3 +46,8 @@ func FinishOrder(orders *models.Orders) (affected int64, err error) {
|
|||
affected, err = models.GetInstance().SetDealingOrder(orders)
|
||||
return
|
||||
}
|
||||
|
||||
func AddCallback(order_id string) (err error) {
|
||||
err = rdbdq.WriteOne("1_"+order_id, time.Now().Add(1*time.Second).Unix())
|
||||
return
|
||||
}
|
||||
|
|
|
@ -0,0 +1,92 @@
|
|||
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()
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
package rdbdq
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
goredis "github.com/go-redis/redis/v8"
|
||||
"github.com/qit-team/snow-core/redis"
|
||||
)
|
||||
|
||||
func WriteOne(value string, executeIime int64) (err error) {
|
||||
rdb := redis.GetRedis(redis.SingletonMain)
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)
|
||||
defer cancel()
|
||||
|
||||
err = rdb.ZAdd(ctx, "dealy_queue", &goredis.Z{
|
||||
Score: float64(executeIime),
|
||||
Member: value,
|
||||
}).Err()
|
||||
return
|
||||
}
|
||||
|
||||
func ReadLatestOne() (res string, err error) {
|
||||
rdb := redis.GetRedis(redis.SingletonMain)
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)
|
||||
defer cancel()
|
||||
|
||||
// XReadGroup,读取消费者中消息
|
||||
tasks, err := rdb.ZRangeByScore(ctx, "dealy_queue", &goredis.ZRangeBy{
|
||||
Min: "-inf",
|
||||
Max: fmt.Sprintf("%d", time.Now().Unix()),
|
||||
}).Result()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if len(tasks) > 0 {
|
||||
res := tasks[0]
|
||||
err = rdb.ZRem(ctx, "dealy_queue", res).Err()
|
||||
return res, nil
|
||||
}
|
||||
|
||||
return "", nil
|
||||
}
|
Loading…
Reference in New Issue