添加出库

master
kanade 3 years ago
parent 82b7fae03d
commit 99a4833a2b

@ -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)
}
})
})
}

@ -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)

@ -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
}

Loading…
Cancel
Save