新增会员订单取消订单

This commit is contained in:
wucongxing8150 2024-08-23 09:51:40 +08:00
parent 98ccf380af
commit 0cb771ecbb
3 changed files with 71 additions and 9 deletions

View File

@ -60,7 +60,7 @@ func CancelUnPayOrder(msg amqp091.Delivery) {
defer func() {
if r := recover(); r != nil {
tx.Rollback()
utils.LogJsonErr("consumer.CouponExpire:", r)
utils.LogJsonErr("consumer.CancelUnPayOrder:", r)
_ = msg.Reject(false)
}
}()
@ -75,7 +75,7 @@ func CancelUnPayOrder(msg amqp091.Delivery) {
orderSingle, err := orderSingleDao.GetOrderSingle(maps)
if err != nil {
tx.Rollback()
utils.LogJsonErr("consumer.CouponExpire:", "订单异常")
utils.LogJsonErr("consumer.CancelUnPayOrder:", "订单异常")
_ = msg.Reject(true)
return
}
@ -84,14 +84,46 @@ func CancelUnPayOrder(msg amqp091.Delivery) {
res, err := orderSingleService.CancelOrderSingle(tx, orderSingle, 3)
if err != nil {
tx.Rollback()
utils.LogJsonErr("consumer.CouponExpire:", err)
utils.LogJsonErr("consumer.CancelUnPayOrder:", err)
_ = msg.Reject(true)
return
}
if res == false {
tx.Rollback()
utils.LogJsonErr("consumer.CouponExpire:", "取消失败")
utils.LogJsonErr("consumer.CancelUnPayOrder:", "取消失败")
_ = msg.Reject(true)
return
}
}
// 会员订单
if data.OrderType == 1 {
// 获取订单数据
orderMemberDao := dao.OrderMemberDao{}
maps := make(map[string]interface{})
maps["user_id"] = userId
maps["order_id"] = orderId
orderMember, err := orderMemberDao.GetOrderMember(maps)
if err != nil {
tx.Rollback()
utils.LogJsonErr("consumer.CancelUnPayOrder:", "订单异常")
_ = msg.Reject(true)
return
}
orderMemberService := service.OrderMemberService{}
res, err := orderMemberService.CancelOrderMember(tx, orderMember, 3)
if err != nil {
tx.Rollback()
utils.LogJsonErr("consumer.CancelUnPayOrder:", err)
_ = msg.Reject(true)
return
}
if res == false {
tx.Rollback()
utils.LogJsonErr("consumer.CancelUnPayOrder:", "取消失败")
_ = msg.Reject(true)
return
}
@ -101,13 +133,13 @@ func CancelUnPayOrder(msg amqp091.Delivery) {
if data.PayChannel == 1 {
// h5支付
err = weChat.CloseJsapiOrder(data.OrderNo)
utils.LogJsonErr("consumer.CouponExpire:", err)
utils.LogJsonErr("consumer.CancelUnPayOrder:", err)
}
if data.PayChannel == 2 {
// app支付
err = weChat.CloseAppOrder(data.OrderNo)
utils.LogJsonErr("consumer.CouponExpire:", err)
utils.LogJsonErr("consumer.CancelUnPayOrder:", err)
}
tx.Commit()

View File

@ -10,6 +10,7 @@ import (
"hepa-calc-api/api/dao"
"hepa-calc-api/api/model"
"hepa-calc-api/config"
"hepa-calc-api/extend/rabbitMq"
"hepa-calc-api/extend/weChat"
"hepa-calc-api/global"
"hepa-calc-api/utils"
@ -181,12 +182,41 @@ func (r *OrderMemberService) AddOrderMember(tx *gorm.DB, UserId, SystemMemberId
}
}
// 增加未支付取消订单延迟队列
if payChannel == 1 || payChannel == 2 {
delay := 30 * time.Minute
if config.C.Env == "dev" {
delay = 1 * time.Minute
}
data := make(map[string]interface{})
data["order_id"] = fmt.Sprintf("%d", orderMember.OrderId)
data["order_no"] = orderMember.OrderNo
data["user_id"] = fmt.Sprintf("%d", orderMember.UserId)
data["order_type"] = 2
data["pay_channel"] = orderMember.PayChannel
p := rabbitMq.PublishS{
QueueName: "cancel.unpay.order.delay.queue",
ExchangeName: "amqp.delay.direct",
RoutingKey: "CancelUnPayOrder",
Message: data,
Delay: delay,
}
err := p.PublishWithDelay()
if err != nil {
utils.LogJsonErr("添加处理取消未支付订单队列失败:", err.Error())
return nil, errors.New("订单创建失败")
}
}
return orderMember, nil
}
// CancelOrderSingle 取消会员订单
// CancelOrderMember 取消会员订单
// cancelReason:订单取消原因1:主动取消 2:后台取消 3:支付超时取消)
func (r *OrderMemberService) CancelOrderSingle(tx *gorm.DB, orderMember *model.OrderMember, cancelReason int) (bool, error) {
func (r *OrderMemberService) CancelOrderMember(tx *gorm.DB, orderMember *model.OrderMember, cancelReason int) (bool, error) {
// 检测多次请求
redisKey := "CancelOrderMember" + fmt.Sprintf("%d", orderMember.UserId) + fmt.Sprintf("%d", orderMember.OrderId)
res, _ := global.Redis.Get(context.Background(), redisKey).Result()

View File

@ -186,7 +186,7 @@ func (r *OrderSingleService) AddOrderSingle(tx *gorm.DB, UserId, QuestionId int6
delay := 30 * time.Minute
if config.C.Env == "dev" {
delay = 3 * time.Minute
delay = 1 * time.Minute
}
data := make(map[string]interface{})