From 0ef674c0728f4b978052157ef93df7e29f7b4e49 Mon Sep 17 00:00:00 2001 From: lyb Date: Thu, 9 Aug 2018 16:37:38 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BF=E9=97=AE=E4=BA=AC=E4=B8=9CAPI?= =?UTF-8?q?=EF=BC=8C=E8=8E=B7=E5=8F=96=E7=BB=93=E8=B4=A6=E5=BF=85=E8=A6=81?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/controller/jd/order.go | 45 ++++++++++++++++++++++++++++++++- business/model/const.go | 9 +++++++ business/model/order.go | 13 ++++++++-- business/util/Contain.go | 25 ++++++++++++++++++ 4 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 business/util/Contain.go diff --git a/business/controller/jd/order.go b/business/controller/jd/order.go index 142a570ea..cbd686685 100644 --- a/business/controller/jd/order.go +++ b/business/controller/jd/order.go @@ -10,6 +10,7 @@ import ( "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/scheduler" + "git.rosy.net.cn/jx-callback/business/util" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" "git.rosy.net.cn/jx-callback/legacy/freshfood" @@ -70,8 +71,10 @@ func (c *OrderController) onOrderMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi func (c *OrderController) GetOrder(orderID string) (order *model.GoodsOrder, err error) { result, err := api.JdAPI.QuerySingleOrder(orderID) + bussResult, bussErr := api.JdAPI.QueryOassBussMoney(orderID) // globals.SugarLogger.Info(result) - if err == nil { + //todo 将API获取的信息填入新字段里 + if err == nil && bussErr == nil { order = &model.GoodsOrder{ VendorOrderID: orderID, VendorID: model.VendorIDJD, @@ -91,6 +94,7 @@ func (c *OrderController) GetOrder(orderID string) (order *model.GoodsOrder, err ActualPayPrice: utils.MustInterface2Int64(result["orderBuyerPayableMoney"]), Skus: []*model.OrderSku{}, } + order.Status = c.GetStatusFromVendorStatus(order.VendorStatus) businessTage := utils.Interface2String(result["businessTag"]) if strings.Index(businessTage, "dj_aging_immediately") >= 0 { @@ -137,9 +141,48 @@ func (c *OrderController) GetOrder(orderID string) (order *model.GoodsOrder, err order.Weight += sku.Weight * sku.Count } } + setOrederDetailFee(bussResult, result, order) return order, err } +func setOrederDetailFee(bussResult []interface{}, result map[string]interface{}, order *model.GoodsOrder) { + var skuTotalPmFee, orderPmFee, skuTotalPmSubsidy, orderPmSubsidy int64 + for _, value := range bussResult { + OassBussinessSkusNew := value.(map[string]interface{}) + discountlist := OassBussinessSkusNew["discountlist"].([]interface{}) + promotionType := utils.MustInterface2Int64(OassBussinessSkusNew["promotionType"]) + skuId := utils.MustInterface2Int64(OassBussinessSkusNew["skuId"]) + for _, value := range discountlist { + OrderBussiDiscountMoney := value.(map[string]interface{}) + if isHave, _ := util.Contain(promotionType, model.JdSkuPromotion); isHave == true { + singleSkuPmFee := utils.MustInterface2Int64(OrderBussiDiscountMoney["saleMoney"]) + skuTotalPmFee += singleSkuPmFee + singleSkuPmSubsidy := utils.MustInterface2Int64(OrderBussiDiscountMoney["costMoney"]) + skuTotalPmSubsidy += singleSkuPmSubsidy + setSkuDetailFee(singleSkuPmFee, singleSkuPmSubsidy, order, skuId) + } else { + orderPmFee += utils.MustInterface2Int64(OrderBussiDiscountMoney["saleMoney"]) + orderPmSubsidy += utils.MustInterface2Int64(OrderBussiDiscountMoney["costMoney"]) + } + } + } + order.SkuTotalPmFee = skuTotalPmFee + order.OrderPmFee = orderPmFee + order.SkuTotalPmSubsidy = skuTotalPmSubsidy + order.OrderPmSubsidy = orderPmSubsidy + order.BoxFee = utils.MustInterface2Int64(result["packagingMoney"]) + order.PlatformFeeRate = model.JdPlatformFeeRate +} + +func setSkuDetailFee(skuPmFee int64, skuPmSubsidy int64, order *model.GoodsOrder, skuId int64) { + for _, value := range order.Skus { + if value.SkuID == int(skuId) { + value.SkuPmSubsidy = skuPmSubsidy + value.SkuPmFee = skuPmFee + } + } +} + // func (c *OrderController) onOrderNew(msg *jdapi.CallbackOrderMsg) (response *jdapi.CallbackResponse) { order, err := c.GetOrder(msg.BillID) diff --git a/business/model/const.go b/business/model/const.go index bc99e4245..93c64fbb1 100644 --- a/business/model/const.go +++ b/business/model/const.go @@ -123,3 +123,12 @@ const ( BusinessTypeImmediate = 1 BusinessTypeDingshida = 2 ) + +var ( + JdSkuPromotion = [10]int64{2, 3, 4, 1203, 6, 9998, 9997, 9996, 8, 8001} +) + +const ( + JdPlatformFeeRate = 10 + MtPlatformFeeRate = 10 +) diff --git a/business/model/order.go b/business/model/order.go index 2bfc4e331..705292902 100644 --- a/business/model/order.go +++ b/business/model/order.go @@ -44,8 +44,15 @@ type GoodsOrder struct { OrderFinishedAt time.Time `orm:"type(datetime)"` StatusTime time.Time `orm:"type(datetime)"` // last status time ModelTimeInfo - OriginalData string `orm:"type(text)"` - Skus []*OrderSku `orm:"-"` + OriginalData string `orm:"type(text)"` + Skus []*OrderSku `orm:"-"` + SkuTotalPmFee int64 //门店商品促销总支出 + OrderPmFee int64 //门店订单促销支出 + SkuTotalPmSubsidy int64 //平台商品促销总补贴 + OrderPmSubsidy int64 //平台订单促销补贴 + BoxFee int64 //餐盒费 + PlatformFeeRate int16 //平台费 + BillStoreFreightFee int64 //需要回调,门店所承担的运费 } func (o *GoodsOrder) TableUnique() [][]string { @@ -69,6 +76,8 @@ type OrderSku struct { SkuType int // 当前如果为gift就为1,否则缺省为0 PromotionType int // todo 当前是用于记录京东的PromotionType(生成jxorder用),没有做转换 OrderCreatedAt time.Time `orm:"type(datetime);index"` // 分区考虑 + SkuPmSubsidy int64 //平台商品活动补贴 + SkuPmFee int64 //门店商品促销支出 } // 同样商品在一个订单中可能重复出现(比如搞活动时,相同商品价格不一样,第一个有优惠) diff --git a/business/util/Contain.go b/business/util/Contain.go new file mode 100644 index 000000000..f55b945e3 --- /dev/null +++ b/business/util/Contain.go @@ -0,0 +1,25 @@ +package util + +import ( + "errors" + "reflect" +) + +// 判断obj是否在target中,target支持的类型arrary,slice,map +func Contain(obj interface{}, target interface{}) (bool, error) { + targetValue := reflect.ValueOf(target) + switch reflect.TypeOf(target).Kind() { + case reflect.Slice, reflect.Array: + for i := 0; i < targetValue.Len(); i++ { + if targetValue.Index(i).Interface() == obj { + return true, nil + } + } + case reflect.Map: + if targetValue.MapIndex(reflect.ValueOf(obj)).IsValid() { + return true, nil + } + } + + return false, errors.New("not in array") +}