diff --git a/internal/cron/supply.go b/internal/cron/supply.go index bf7b58b..440b631 100644 --- a/internal/cron/supply.go +++ b/internal/cron/supply.go @@ -49,7 +49,9 @@ func (s *supplyTask) run() { // 拆单 go s.orderSplit() // 订单取消 - go s.orderChange() + go s.orderCancel() + // 订单出库 + go s.orderStockOut() } // @Title 价格更新通知 @@ -130,13 +132,13 @@ func (s *supplyTask) orderSplit() { } // @Title 取消订单通知 -func (s *supplyTask) orderChange() { +func (s *supplyTask) orderCancel() { defer func() { if recoverErr := recover(); recoverErr != nil { log.Println("供应链拆单mq错误", recoverErr) } time.Sleep(time.Second * 3) - s.orderChange() + s.orderCancel() }() pool, _ := ants.NewPool(5) rabbitmq.Rabbitmq.Consume(supply.Api.Mq.OrderCancel(), false, 5, func(delivery amqp.Delivery) { @@ -159,3 +161,34 @@ func (s *supplyTask) orderChange() { }) }) } + +// @Title 订单出库通知 +func (s *supplyTask) orderStockOut() { + defer func() { + if recoverErr := recover(); recoverErr != nil { + log.Println("订单出库mq错误", recoverErr) + } + time.Sleep(time.Second * 3) + s.orderCancel() + }() + pool, _ := ants.NewPool(5) + rabbitmq.Rabbitmq.Consume(supply.Api.Mq.OrderStockOut(), false, 5, func(delivery amqp.Delivery) { + pool.Submit(func() { + defer func() { + if recoverErr := recover(); recoverErr != nil { + log.Println("消息队列调用错误,err:", recoverErr) + } + }() + var orderStockOut supply.OrderStockOut + json.Unmarshal(delivery.Body, &orderStockOut) + + if err := third.SupplyLogic.OrderStockOut(orderStockOut); 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 0681b40..92d78de 100644 --- a/internal/v2/lib/supply/mq.go +++ b/internal/v2/lib/supply/mq.go @@ -14,6 +14,8 @@ const ( queueOrderSplit = "supplyOrderSplit:%s" // queueOrderChange 订单变更 queueOrderCancel = "supplyOrderCancel:%s" + // queueOrderStockOut 订单出库 + queueOrderStockOut = "supplyOrderStockOut:%s" OrderCancelSuccess = 1 // 取消成功 OrderCancelFail = 2 // 取消失败 @@ -38,9 +40,9 @@ func (m *mq) SkuChangeQueue() string { } type OrderSplit struct { - OrderSn uint64 `json:"orderSn"` - RootOrderSn uint64 `json:"rootOrderSn"` - ParentOrderSn uint64 `json:"parentOrderSn"` + OrderSn string `json:"orderSn"` + RootOrderSn string `json:"rootOrderSn"` + ParentOrderSn string `json:"parentOrderSn"` FreightFee decimal.Decimal `json:"freightFee"` OrderFee decimal.Decimal `json:"orderFee"` Skus []OrderSplitSkuItem `json:"skus"` @@ -56,8 +58,10 @@ func (m *mq) OrderSplit() string { } type OrderCancel struct { - OrderSn string `json:"orderSn"` - Status uint `json:"status"` + OrderSn string `json:"orderSn"` + ParentOrderSn string `json:"parentOrderSn"` + RootOrderSn string `json:"rootOrderSn"` + Status uint `json:"status"` } // OrderCancel @Title 订单取消 @@ -65,6 +69,24 @@ func (m *mq) OrderCancel() string { return getQuesuName(queueOrderCancel) } +type OrderStockOut struct { + OrderSn string `json:"orderSn"` + ParentOrderSn string `json:"parentOrderSn"` + RootOrderSn string `json:"rootOrderSn"` + Packages []Package `json:"packages"` +} + +type Package struct { + LogisticsCode string `json:"logisticsCode"` // 物流编码 + LogisticsName string `json:"logisticsName"` // 物流名称 + WaybillCode string `json:"waybillCode"` // 运单号 +} + +// OrderStockOut @Title 订单出库 +func (m *mq) OrderStockOut() string { + return getQuesuName(queueOrderCancel) +} + // @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 1881468..dfe73cc 100644 --- a/internal/v2/logic/third/supply.go +++ b/internal/v2/logic/third/supply.go @@ -14,6 +14,7 @@ import ( order4 "recook/internal/model/order" "recook/internal/v2/lib/supply" after2 "recook/internal/v2/logic/manage/after" + order2 "recook/internal/v2/logic/manage/order" "recook/internal/v2/model/recook/after" "recook/internal/v2/model/recook/goods" manage3 "recook/internal/v2/model/recook/manage" @@ -1005,3 +1006,39 @@ func (s *supplyLogic) OrderCancel(orderCancel supply.OrderCancel) error { } return nil } + +// OrderStockOut @Title 订单出库 +func (s *supplyLogic) OrderStockOut(orderStockOut supply.OrderStockOut) error { + var orderInfo manage2.RecookOrderInfoModel + if err := mysql.Db.First(&orderInfo, "third_party_order_sn = ? and third_party_type = ?", orderStockOut.OrderSn, goods.RecookGoodsInfoThirdPartyTypeSupply).Error; err != nil { + if err != gorm.ErrRecordNotFound { + log.Println(err.Error()) + return err + } else { + return nil + } + } + var orderSku []manage2.RecookOrderGoodsDetailModel + if err := mysql.Db.Find(&orderSku, "order_id =? ", orderInfo.Id).Error; err != nil { + log.Println(err.Error()) + return err + } + + ep := make([]order2.ExpressInfo, 0) + for _, v := range orderStockOut.Packages { + ep = append(ep, order2.ExpressInfo{ + ExpressCompName: v.LogisticsName, + ExpressNo: v.WaybillCode, + }) + } + + for index, j := range orderSku { + if j.ExpressStatus == manage2.RecookOrderGoodsDetailExpressStatusTrue { + continue + } + if err := order2.Expresslogic.Express(j.VendorId, "third_api", orderSku[index], ep); err != nil { + return err + } + } + return nil +}