From c43750f2f47a8bd8bd7de3d55ded032e2f188949 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 1 May 2019 13:38:41 +0800 Subject: [PATCH] =?UTF-8?q?+=20RemoveSkuFromOrder=20+=20=E7=BE=8E=E5=9B=A2?= =?UTF-8?q?=E9=85=8D=E9=80=81=E8=B0=83=E6=95=B4=E6=B6=88=E6=81=AF=E6=AD=A3?= =?UTF-8?q?=E7=A1=AE=E6=9B=B4=E6=96=B0=E8=AE=A2=E5=8D=95=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxutils/jxutils.go | 39 +++++++++++++++++++++++++ business/partner/purchase/jd/order.go | 22 +++----------- business/partner/purchase/mtwm/order.go | 30 ++++++++++++++----- 3 files changed, 66 insertions(+), 25 deletions(-) diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go index 20a6a5d55..092aade76 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -435,3 +435,42 @@ func RefreshOrderSkuRelated(order *model.GoodsOrder) *model.GoodsOrder { } return order } + +func RemoveSkuFromOrder(order *model.GoodsOrder, removedSkuList []*model.OrderSku) *model.GoodsOrder { + removedSkuMap := make(map[int]*model.OrderSku) + removedSkuMap2 := make(map[string]*model.OrderSku) + for _, sku := range removedSkuList { + if skuID := GetSkuIDFromOrderSku(sku); skuID > 0 { + removedSkuMap[skuID] = sku + } + if vendorSkuID := sku.VendorSkuID; vendorSkuID != "" { + removedSkuMap2[vendorSkuID] = sku + } + } + var skuList []*model.OrderSku + for _, sku := range order.Skus { + var removedSku *model.OrderSku + if skuID := GetSkuIDFromOrderSku(sku); skuID > 0 { + removedSku = removedSkuMap[skuID] + } + if removedSku == nil { + if vendorSkuID := sku.VendorSkuID; vendorSkuID != "" { + removedSku = removedSkuMap2[vendorSkuID] + } + } + copiedSku := *sku + tmp := &copiedSku + if removedSku != nil { + if removedSku.Count >= sku.Count { + tmp = nil + } else { + tmp.Count -= removedSku.Count + } + } + if tmp != nil { + skuList = append(skuList, tmp) + } + } + order.Skus = skuList + return RefreshOrderSkuRelated(order) +} diff --git a/business/partner/purchase/jd/order.go b/business/partner/purchase/jd/order.go index a91ea8776..e7776ceca 100644 --- a/business/partner/purchase/jd/order.go +++ b/business/partner/purchase/jd/order.go @@ -330,27 +330,13 @@ func (c *PurchaseHandler) CancelOrder(ctx *jxcontext.Context, order *model.Goods } func (c *PurchaseHandler) AdjustOrder(ctx *jxcontext.Context, order *model.GoodsOrder, removedSkuList []*model.OrderSku, reason string) (err error) { - removedSkuMap := make(map[int]*model.OrderSku) - for _, sku := range removedSkuList { - removedSkuMap[jxutils.GetSkuIDFromOrderSku(sku)] = sku - } + order = jxutils.RemoveSkuFromOrder(order, removedSkuList) var oaosAdjustDTOList []*jdapi.OAOSAdjustDTO for _, sku := range order.Skus { - skuID := jxutils.GetSkuIDFromOrderSku(sku) - tmp := &jdapi.OAOSAdjustDTO{ - OutSkuID: utils.Int2Str(skuID), + oaosAdjustDTOList = append(oaosAdjustDTOList, &jdapi.OAOSAdjustDTO{ + OutSkuID: utils.Int2Str(jxutils.GetSkuIDFromOrderSku(sku)), SkuCount: sku.Count, - } - if removedSkuMap[skuID] != nil { - if removedSkuMap[skuID].Count >= sku.Count { - tmp = nil - } else { - tmp.SkuCount -= removedSkuMap[skuID].Count - } - } - if tmp != nil { - oaosAdjustDTOList = append(oaosAdjustDTOList, tmp) - } + }) } if globals.EnableStoreWrite { err = api.JdAPI.AdjustOrder(order.VendorOrderID, ctx.GetUserName(), reason, oaosAdjustDTOList) diff --git a/business/partner/purchase/mtwm/order.go b/business/partner/purchase/mtwm/order.go index 8a4dac8b5..e57288b61 100644 --- a/business/partner/purchase/mtwm/order.go +++ b/business/partner/purchase/mtwm/order.go @@ -170,14 +170,30 @@ func (c *PurchaseHandler) onOrderMsg(msg *mtwmapi.CallbackMsg) (response *mtwmap } } else { if status := c.callbackMsg2Status(msg); status != nil { - err = partner.CurOrderManager.OnOrderStatusChanged(status) - if err == nil && msg.Cmd == mtwmapi.MsgTypeOrderFinished { - utils.CallFuncAsync(func() { - orderMap, err := api.MtwmAPI.OrderGetOrderDetail(utils.Str2Int64(GetOrderIDFromMsg(msg)), true) - if err == nil && utils.MustInterface2Int64(orderMap["is_third_shipping"]) == SelfDeliveryCarrierNo { - c.OnOrderDetail(orderMap, partner.UpdatedPeration) + if status.Status == model.OrderStatusAdjust { + var order *model.GoodsOrder + if order, err = c.GetOrder(GetOrderIDFromMsg(msg)); err == nil { + skuList := api.MtwmAPI.GetRefundSkuDetailFromMsg(msg) + var removedSkuList []*model.OrderSku + for _, mtwmSku := range skuList { + removedSkuList = append(removedSkuList, &model.OrderSku{ + SkuID: int(utils.Str2Int64WithDefault(mtwmSku.SkuID, 0)), + Count: mtwmSku.Count, + }) } - }) + order = jxutils.RemoveSkuFromOrder(order, removedSkuList) + err = partner.CurOrderManager.OnOrderAdjust(order, status.VendorStatus) + } + } else { + err = partner.CurOrderManager.OnOrderStatusChanged(status) + if err == nil && msg.Cmd == mtwmapi.MsgTypeOrderFinished { + utils.CallFuncAsync(func() { + orderMap, err := api.MtwmAPI.OrderGetOrderDetail(utils.Str2Int64(GetOrderIDFromMsg(msg)), true) + if err == nil && utils.MustInterface2Int64(orderMap["is_third_shipping"]) == SelfDeliveryCarrierNo { + c.OnOrderDetail(orderMap, partner.UpdatedPeration) + } + }) + } } } }