40 lines
947 B
Go
40 lines
947 B
Go
package handle
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/assimon/luuu/config"
|
|
"github.com/assimon/luuu/model/data"
|
|
"github.com/assimon/luuu/model/mdb"
|
|
"github.com/hibiken/asynq"
|
|
)
|
|
|
|
const QueueOrderExpiration = "order:expiration"
|
|
|
|
func NewOrderExpirationQueue(tradeId string) (*asynq.Task, error) {
|
|
return asynq.NewTask(QueueOrderExpiration, []byte(tradeId),
|
|
asynq.Retention(config.GetOrderExpirationTimeDuration()),
|
|
), nil
|
|
}
|
|
|
|
// OrderExpirationHandle 设置订单过期
|
|
func OrderExpirationHandle(ctx context.Context, t *asynq.Task) error {
|
|
tradeId := string(t.Payload())
|
|
orderInfo, err := data.GetOrderInfoByTradeId(tradeId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if orderInfo.ID <= 0 || orderInfo.Status != mdb.StatusWaitPay {
|
|
return nil
|
|
}
|
|
err = data.UpdateOrderIsExpirationById(orderInfo.ID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = data.UnLockTransaction(orderInfo.Token, orderInfo.ActualAmount)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|