访问京东API,获取结账必要信息。

This commit is contained in:
lyb
2018-08-09 16:37:38 +08:00
parent c430b997f9
commit 0ef674c072
4 changed files with 89 additions and 3 deletions

View File

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

View File

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

View File

@@ -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 //门店商品促销支出
}
// 同样商品在一个订单中可能重复出现(比如搞活动时,相同商品价格不一样,第一个有优惠)

25
business/util/Contain.go Normal file
View File

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