diff --git a/api/amqp/consumer/CancelUnPayOrder.go b/api/amqp/consumer/CancelUnPayOrder.go index a7e5323..200fb48 100644 --- a/api/amqp/consumer/CancelUnPayOrder.go +++ b/api/amqp/consumer/CancelUnPayOrder.go @@ -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() diff --git a/api/service/OrderMember.go b/api/service/OrderMember.go index a8c1c34..0f73ed1 100644 --- a/api/service/OrderMember.go +++ b/api/service/OrderMember.go @@ -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() diff --git a/api/service/OrderSingle.go b/api/service/OrderSingle.go index 48dd89f..0b8fd88 100644 --- a/api/service/OrderSingle.go +++ b/api/service/OrderSingle.go @@ -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{})