From bb02e6fe9e8f77a7dfd13530e072c589e48ca859 Mon Sep 17 00:00:00 2001 From: gazebo Date: Sun, 14 Apr 2019 17:01:29 +0800 Subject: [PATCH] - AdjustOrder - CancelOrder --- .../scheduler/basesch/basesch_ext.go | 14 ++++ controllers/jx_order.go | 77 +++++++++++++++++++ 2 files changed, 91 insertions(+) diff --git a/business/jxcallback/scheduler/basesch/basesch_ext.go b/business/jxcallback/scheduler/basesch/basesch_ext.go index 48db51a21..f3ab618b3 100644 --- a/business/jxcallback/scheduler/basesch/basesch_ext.go +++ b/business/jxcallback/scheduler/basesch/basesch_ext.go @@ -114,3 +114,17 @@ func (c *BaseScheduler) GetStoreDeliveryType(order *model.GoodsOrder, storeMap * globals.SugarLogger.Debugf("GetStoreDeliveryType orderID:%s, deliveryType:%d", order.VendorOrderID, deliveryType) return deliveryType } + +func (c *BaseScheduler) AdjustOrder(ctx *jxcontext.Context, order *model.GoodsOrder, removedSkuList []*model.OrderSku, reason string) (err error) { + if c.IsReallyCallPlatformAPI { + err = partner.GetPurchasePlatformFromVendorID(order.VendorID).AdjustOrder(ctx, order, removedSkuList, reason) + } + return err +} + +func (c *BaseScheduler) CancelOrder(ctx *jxcontext.Context, order *model.GoodsOrder, reason string) (err error) { + if c.IsReallyCallPlatformAPI { + err = partner.GetPurchasePlatformFromVendorID(order.VendorID).CancelOrder(ctx, order, reason) + } + return err +} diff --git a/controllers/jx_order.go b/controllers/jx_order.go index 0b1014595..e0c4229f3 100644 --- a/controllers/jx_order.go +++ b/controllers/jx_order.go @@ -5,6 +5,8 @@ import ( "strings" "time" + "git.rosy.net.cn/jx-callback/business/partner" + "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxcallback/orderman" "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler/defsch" @@ -343,3 +345,78 @@ func (c *OrderController) GetPrinterStatus() { return retVal, "", err }) } + +func skuList2Map(skuList []*model.OrderSku) (skuMap map[int]*model.OrderSku) { + skuMap = make(map[int]*model.OrderSku) + for _, sku := range skuList { + skuID := jxutils.GetSkuIDFromOrderSku(sku) + if skuMap[skuID] == nil { + skuMap[skuID] = sku + } else { + skuMap[skuID].Count += sku.Count + } + } + return skuMap +} + +// @Title 调整订单 +// @Description 调整订单 +// @Param token header string true "认证token" +// @Param vendorOrderID formData string true "订单ID" +// @Param vendorID formData int true "订单所属厂商ID)" +// @Param removedSkuInfo formData string true "要去除的商品信息,只有skuID与Count字段有效" +// @Param reason formData string false "调整原因" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /AdjustOrder [put] +func (c *OrderController) AdjustOrder() { + c.callAdjustOrder(func(params *tOrderAdjustOrderParams) (retVal interface{}, errCode string, err error) { + var skuList []*model.OrderSku + err = jxutils.Strings2Objs(params.RemovedSkuInfo, &skuList) + if err == nil { + order, err := partner.CurOrderManager.LoadOrder(params.VendorOrderID, params.VendorID) + if err == nil { + orderSkuMap := skuList2Map(order.Skus) + removeSkuMap := skuList2Map(skuList) + for _, sku := range removeSkuMap { + skuID := jxutils.GetSkuIDFromOrderSku(sku) + if orderSkuMap[skuID] == nil { + err = fmt.Errorf("找不到SKU:%d", skuID) + } else if sku.Count > orderSkuMap[skuID].Count { + err = fmt.Errorf("SKU:%d调整数量:%d大于实际数量:%d", skuID, sku.Count, orderSkuMap[skuID].Count) + } + if err != nil { + break + } else { + count := sku.Count + *sku = *orderSkuMap[skuID] + sku.Count = count + } + } + if err == nil { + err = defsch.FixedScheduler.AdjustOrder(params.Ctx, order, skuList, params.Reason) + } + } + } + return retVal, "", err + }) +} + +// @Title 取消订单 +// @Description 取消订单 +// @Param token header string true "认证token" +// @Param vendorOrderID formData string true "订单ID" +// @Param vendorID formData int true "订单所属厂商ID)" +// @Param reason formData string false "取消原因" +// @Success 200 {object} controllers.CallResult +// @Failure 200 {object} controllers.CallResult +// @router /CancelOrder [put] +func (c *OrderController) CancelOrder() { + c.callCancelOrder(func(params *tOrderCancelOrderParams) (retVal interface{}, errCode string, err error) { + order, err := partner.CurOrderManager.LoadOrder(params.VendorOrderID, params.VendorID) + if err == nil { + err = defsch.FixedScheduler.CancelOrder(params.Ctx, order, params.Reason) + } + return retVal, "", err + }) +}