重构交易相关逻辑,优化异步任务处理,更新支付状态查询逻辑

This commit is contained in:
2025-06-03 09:53:50 +08:00
parent 41dcc14f5f
commit a9de63c3f9
9 changed files with 239 additions and 219 deletions

View File

@@ -87,7 +87,7 @@ func (s *resourceService) CreateResource(uid int32, now time.Time, ser *CreateRe
return nil
}
func (s *resourceService) PrepareResource(uid int32, now time.Time, method trade2.Method, ser *CreateResourceSerializer) (*TransactionPrepareResult, error) {
func (s *resourceService) PrepareResource(uid int32, now time.Time, method trade2.Method, ser *CreateResourceSerializer) (*TradeCreateResult, error) {
data, err := ser.ToData()
if err != nil {
@@ -98,12 +98,12 @@ func (s *resourceService) PrepareResource(uid int32, now time.Time, method trade
amount := data.GetPrice()
// 保存到数据库
var result *TransactionPrepareResult
var result *TradeCreateResult
err = q.Q.Transaction(func(q *q.Query) error {
var err error
// 生成交易订单
result, err = Transaction.PrepareTransaction(q, uid, now, &TransactionPrepareData{
result, err = Trade.SendCreateTradeByQrcode(q, uid, now, &TradeCreateData{
Subject: "购买套餐 - " + name,
Amount: amount,
ExpireAt: time.Now().Add(30 * time.Minute),
@@ -140,7 +140,7 @@ func (s *resourceService) PrepareResource(uid int32, now time.Time, method trade
return result, nil
}
func (s *resourceService) CompleteResource(tradeNo string, now time.Time, opResult ...*TransactionVerifyResult) error {
func (s *resourceService) CompleteResource(tradeNo string, now time.Time, opResult ...*TradeSuccessResult) error {
// 获取请求缓存
reqStr, err := g.Redis.Get(context.Background(), tradeNo).Result()
@@ -153,12 +153,12 @@ func (s *resourceService) CompleteResource(tradeNo string, now time.Time, opResu
}
// 检查交易结果
var rs *TransactionVerifyResult
var rs *TradeSuccessResult
if len(opResult) > 0 && opResult[0] != nil {
rs = opResult[0]
} else {
var err error
rs, err = Transaction.VerifyTransaction(&TransactionVerifyData{
rs, err = Trade.VerifyTrade(&TradeVerifyData{
TradeNo: tradeNo,
Method: cache.Method,
})
@@ -175,10 +175,19 @@ func (s *resourceService) CompleteResource(tradeNo string, now time.Time, opResu
// 保存交易信息
err = q.Q.Transaction(func(q *q.Query) error {
// 完成交易
_, err = Trade.OnTradeCreated(q, &OnTradeCreateData{
TradeNo: tradeNo,
TradeSuccessResult: *rs,
})
if err != nil {
return fmt.Errorf("完成交易失败: %w", err)
}
// 保存套餐
resource, err := createResource(q, cache.Uid, now, data)
if err != nil {
return err
return fmt.Errorf("创建套餐失败: %w", err)
}
// 更新账单
@@ -189,22 +198,13 @@ func (s *resourceService) CompleteResource(tradeNo string, now time.Time, opResu
ResourceID: &resource.ID,
})
if err != nil {
return err
}
// 完成交易
_, err = Transaction.CompleteTransaction(q, &TransactionCompleteData{
TradeNo: tradeNo,
TransactionVerifyResult: *rs,
})
if err != nil {
return err
return fmt.Errorf("更新账单失败: %w", err)
}
// 删除缓存
err = g.Redis.Del(context.Background(), tradeNo).Err()
if err != nil {
return err
return fmt.Errorf("删除缓存失败: %w", err)
}
return nil
@@ -229,14 +229,14 @@ func (s *resourceService) CancelResource(tradeNo string, now time.Time, opRevoke
// 取消交易
if len(opRevoked) <= 0 {
err = Transaction.RevokeTransaction(tradeNo, cache.Method)
err = Trade.SendCancelTrade(tradeNo, cache.Method)
if err != nil {
return err
}
}
// 更新订单状态
err = Transaction.FinishTransaction(q.Q, tradeNo, now)
err = Trade.OnTradeCanceled(q.Q, tradeNo, now)
if err != nil {
return err
}