From d954048516bbac65ea9c9640bfc14fc5c5fc41bf Mon Sep 17 00:00:00 2001 From: kanade Date: Wed, 7 Sep 2022 11:18:11 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/cron/supply.go | 33 +++++++++++++++++++++++++++++++ internal/v2/lib/supply/mq.go | 13 ++++++++++++ internal/v2/logic/third/supply.go | 19 ++++++++++++++++++ 3 files changed, 65 insertions(+) diff --git a/internal/cron/supply.go b/internal/cron/supply.go index 440b631..9a89637 100644 --- a/internal/cron/supply.go +++ b/internal/cron/supply.go @@ -52,6 +52,8 @@ func (s *supplyTask) run() { go s.orderCancel() // 订单出库 go s.orderStockOut() + // 订单完成 + go s.orderFinish() } // @Title 价格更新通知 @@ -192,3 +194,34 @@ func (s *supplyTask) orderStockOut() { }) }) } + +// @Title 订单完成通知 +func (s *supplyTask) orderFinish() { + defer func() { + if recoverErr := recover(); recoverErr != nil { + log.Println("订单完成mq错误", recoverErr) + } + time.Sleep(time.Second * 3) + s.orderFinish() + }() + pool, _ := ants.NewPool(5) + rabbitmq.Rabbitmq.Consume(supply.Api.Mq.OrderFinish(), false, 5, func(delivery amqp.Delivery) { + pool.Submit(func() { + defer func() { + if recoverErr := recover(); recoverErr != nil { + log.Println("消息队列调用错误,err:", recoverErr) + } + }() + var orderFinish supply.OrderFinish + json.Unmarshal(delivery.Body, &orderFinish) + + if err := third.SupplyLogic.OrderFinish(orderFinish); err != nil { + log.Println("订单出库处理失败,skuId:", string(delivery.Body), ",err:", err) + delivery.Reject(true) + return + } else { + defer delivery.Ack(false) + } + }) + }) +} diff --git a/internal/v2/lib/supply/mq.go b/internal/v2/lib/supply/mq.go index 92d78de..2870d81 100644 --- a/internal/v2/lib/supply/mq.go +++ b/internal/v2/lib/supply/mq.go @@ -16,6 +16,8 @@ const ( queueOrderCancel = "supplyOrderCancel:%s" // queueOrderStockOut 订单出库 queueOrderStockOut = "supplyOrderStockOut:%s" + // queueOrderFinish 订单出库 + queueOrderFinish = "supplyOrderFinish:%s" OrderCancelSuccess = 1 // 取消成功 OrderCancelFail = 2 // 取消失败 @@ -87,6 +89,17 @@ func (m *mq) OrderStockOut() string { return getQuesuName(queueOrderCancel) } +type OrderFinish struct { + OrderSn string `json:"orderSn"` + ParentOrderSn string `json:"parentOrderSn"` + RootOrderSn string `json:"rootOrderSn"` +} + +// OrderFinish @Title 订单完成 +func (m *mq) OrderFinish() string { + return getQuesuName(queueOrderFinish) +} + // @Title 获取队列名称 func getQuesuName(queue string) string { return fmt.Sprintf(queue, Api.Config.AppKey) diff --git a/internal/v2/logic/third/supply.go b/internal/v2/logic/third/supply.go index dfe73cc..e9aa62c 100644 --- a/internal/v2/logic/third/supply.go +++ b/internal/v2/logic/third/supply.go @@ -1042,3 +1042,22 @@ func (s *supplyLogic) OrderStockOut(orderStockOut supply.OrderStockOut) error { } return nil } + +// OrderFinish @Title 订单完成 +func (s *supplyLogic) OrderFinish(orderFinish supply.OrderFinish) error { + var orderInfo manage2.RecookOrderInfoModel + if err := mysql.Db.First(&orderInfo, "third_party_order_sn = ? and third_party_type = ?", orderFinish.OrderSn, goods.RecookGoodsInfoThirdPartyTypeSupply).Error; err != nil { + if err != gorm.ErrRecordNotFound { + log.Println(err.Error()) + return err + } else { + return nil + } + } + if mysql.Db.Model(&orderInfo).Updates(map[string]interface{}{ + "third_party_status": 1, + }).Error != nil { + return errors.New("保存失败") + } + return nil +}