- 调整饿百营销活动API
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package ebaiapi
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
@@ -11,15 +10,16 @@ const (
|
||||
ActivityTypeDirectDown = 2 // 商品直降
|
||||
ActivityTypeFullDiscount = 8 // 品类满减
|
||||
|
||||
ActivityPFBaidu = 1
|
||||
ActivityPFELM = 2
|
||||
ActivityPFAll = 4
|
||||
ActivityPFBaidu = 1 // 星选
|
||||
ActivityPFELM = 2 // 饿了么
|
||||
ActivityPFAll = 4 // 星选&饿了么
|
||||
|
||||
ActivityConflictShare = 0
|
||||
ActivityConfilictExclude = 1
|
||||
ActivityConflictShare = 0 // 与全店满减等其他活动同享
|
||||
ActivityConfilictExclude = 1 // 与全店满减等其他活动互斥
|
||||
|
||||
ActivityShowStatusEnabled = 2
|
||||
ActivityShowStatusDisabled = 4
|
||||
// 下面两个是做什么用的?
|
||||
// ActivityShowStatusEnabled = 2
|
||||
// ActivityShowStatusDisabled = 4
|
||||
)
|
||||
|
||||
type ActivityRule struct {
|
||||
@@ -45,40 +45,50 @@ type ActivityInfo struct {
|
||||
PromotionSkuDesc string `json:"promotion_sku_desc,omitempty"` // 店铺页活动商品的分类名称,不超过8个字。
|
||||
Rule []*ActivityRule `json:"rule,omitempty"`
|
||||
|
||||
BaiduShopID int64 `json:"baiduShopID,omitempty"`
|
||||
ShowStatus int `json:"showStatus,omitempty"`
|
||||
BaiduShopID int64 `json:"baidu_shop_id,omitempty"` // 这个用于查询时返回值,设置时这里设置的值会被忽略
|
||||
// ShowStatus int `json:"showStatus,omitempty"`
|
||||
}
|
||||
|
||||
type ActivitySkuInfo struct {
|
||||
type ActivitySkuInfo4Add struct {
|
||||
SkuID string `json:"sku_id"`
|
||||
Stock int `json:"stock"`
|
||||
|
||||
PromotionPrice float32 `json:"special_price"` // 直降用,复用
|
||||
StoreUserLimit int `json:"store_user_limit"` // 直降用
|
||||
StoreUserLimit int `json:"store_user_limit"`
|
||||
SpecialPrice int64 `json:"special_price"`
|
||||
}
|
||||
|
||||
type ActivitySkuInfoEx struct {
|
||||
ActivitySkuInfo
|
||||
BaiduShopID int64 `json:"baidu_shop_id"`
|
||||
UpcName string `json:"upc_name"`
|
||||
OriginalPrice float32 `json:"original_price"`
|
||||
type ActivitySkuInfo4List struct {
|
||||
BaiduShopID int64 `json:"baidu_shop_id"`
|
||||
SkuID string `json:"sku_id"`
|
||||
UpcName string `json:"upc_name"`
|
||||
Stock int `json:"stock"`
|
||||
|
||||
PromotionPrice float32 `json:"promotion_price"` // 商品活动价,单位元,品类满减活动不返回活动价。
|
||||
OriginalPrice float32 `json:"original_price"` // 添加商品时商品原价,单位元。
|
||||
}
|
||||
|
||||
type ActivitySkuInfo4Update struct {
|
||||
ActivitySkuInfo
|
||||
BaiduShopID int64 `json:"baidu_shop_id"`
|
||||
ShopID string `json:"shop_id"`
|
||||
CustomSkuID string `json:"custom_sku_id"`
|
||||
BaiduShopID int64 `json:"baidu_shop_id,omitempty"`
|
||||
ShopID string `json:"shop_id,omitempty"`
|
||||
SkuID string `json:"sku_id,omitempty"`
|
||||
CustomSkuID string `json:"custom_sku_id,omitempty"`
|
||||
Stock int `json:"stock,omitempty"`
|
||||
|
||||
StoreUserLimit int `json:"store_user_limit,omitempty"`
|
||||
SpecialPrice int64 `json:"special_price,omitempty"`
|
||||
}
|
||||
|
||||
type ActivitySkuListInfo struct {
|
||||
ActivityID int64 `json:"activity_id"`
|
||||
ActivityType int `json:"activity_type"`
|
||||
ActivityName string `json:"activity_name"`
|
||||
SkuList []*ActivitySkuInfoEx `json:"sku_list"`
|
||||
ActivityID int64 `json:"activity_id"`
|
||||
ActivityType int `json:"activity_type"`
|
||||
ActivityName string `json:"activity_name"`
|
||||
SkuList []*ActivitySkuInfo4List `json:"sku_list"`
|
||||
}
|
||||
|
||||
// 创建商品营销活动
|
||||
// https://open-be.ele.me/dev/api/doc/v3/#api-Marketing-activity_create
|
||||
func (a *API) ActivityCreate(shopID string, baiduShopID, supplierID int64, activity *ActivityInfo) (activityID int64, err error) {
|
||||
activity.BaiduShopID = 0
|
||||
params := utils.Struct2FlatMap(activity)
|
||||
result, err := a.AccessAPI("activity.create", utils.MergeMaps(params, a.genShopIDParams(shopID, baiduShopID, supplierID)))
|
||||
if err == nil {
|
||||
@@ -87,7 +97,10 @@ func (a *API) ActivityCreate(shopID string, baiduShopID, supplierID int64, activ
|
||||
return 0, err
|
||||
}
|
||||
|
||||
// 更新活动信息
|
||||
// https://open-be.ele.me/dev/api/doc/v3/#api-Marketing-activity_update
|
||||
func (a *API) ActivityUpdate(activityID int64, shopID string, baiduShopID, supplierID int64, activity *ActivityInfo) (newActivityID int64, err error) {
|
||||
activity.BaiduShopID = 0
|
||||
params := utils.Struct2FlatMap(activity)
|
||||
params[KeyActivityID] = activityID
|
||||
result, err := a.AccessAPI("activity.update", utils.MergeMaps(params, a.genShopIDParams(shopID, baiduShopID, supplierID)))
|
||||
@@ -97,6 +110,8 @@ func (a *API) ActivityUpdate(activityID int64, shopID string, baiduShopID, suppl
|
||||
return 0, err
|
||||
}
|
||||
|
||||
// 下线商品营销活动
|
||||
// https://open-be.ele.me/dev/api/doc/v3/#api-Marketing-activity_disable
|
||||
func (a *API) ActivityDisable(activityID int64, shopID string, baiduShopID, supplierID int64) (err error) {
|
||||
params := a.genShopIDParams(shopID, baiduShopID, supplierID)
|
||||
params[KeyActivityID] = activityID
|
||||
@@ -104,6 +119,8 @@ func (a *API) ActivityDisable(activityID int64, shopID string, baiduShopID, supp
|
||||
return err
|
||||
}
|
||||
|
||||
// 查看活动信息
|
||||
// https://open-be.ele.me/dev/api/doc/v3/#api-Marketing-activity_get
|
||||
func (a *API) ActivityGet(activityID int64, shopID string, baiduShopID, supplierID int64) (activityInfo *ActivityInfo, err error) {
|
||||
params := a.genShopIDParams(shopID, baiduShopID, supplierID)
|
||||
params[KeyActivityID] = activityID
|
||||
@@ -115,7 +132,9 @@ func (a *API) ActivityGet(activityID int64, shopID string, baiduShopID, supplier
|
||||
return activityInfo, err
|
||||
}
|
||||
|
||||
func (a *API) ActivitySkuAddBatch(activityID int64, shopID string, baiduShopID int64, activityType int, skuList []*ActivitySkuInfo, isSkuIDCustom bool) (successIDs []string, err error) {
|
||||
// 批量添加活动商品
|
||||
// https://open-be.ele.me/dev/api/doc/v3/#api-Marketing-activity_sku_add_batch
|
||||
func (a *API) ActivitySkuAddBatch(activityID int64, shopID string, baiduShopID int64, activityType int, skuList []*ActivitySkuInfo4Add, isSkuIDCustom bool) (successIDs []string, err error) {
|
||||
params := a.genShopIDParams(shopID, baiduShopID, 0)
|
||||
params[KeyActivityID] = activityID
|
||||
skusKey := "activity_skus"
|
||||
@@ -130,7 +149,7 @@ func (a *API) ActivitySkuAddBatch(activityID int64, shopID string, baiduShopID i
|
||||
return nil, err
|
||||
}
|
||||
|
||||
func skuList2Str(activityType int, skuList []*ActivitySkuInfo, isSkuIDCustom bool) string {
|
||||
func skuList2Str(activityType int, skuList []*ActivitySkuInfo4Add, isSkuIDCustom bool) string {
|
||||
skuList2 := []string{}
|
||||
for _, v := range skuList {
|
||||
strList := []string{
|
||||
@@ -138,14 +157,18 @@ func skuList2Str(activityType int, skuList []*ActivitySkuInfo, isSkuIDCustom boo
|
||||
utils.Int2Str(v.Stock),
|
||||
}
|
||||
if activityType == ActivityTypeDirectDown {
|
||||
strList = append(strList, fmt.Sprintf("%.2f", v.PromotionPrice))
|
||||
strList = append(strList, utils.Int2Str(v.StoreUserLimit))
|
||||
strList = append(strList, utils.Int64ToStr(v.SpecialPrice))
|
||||
if v.StoreUserLimit > 0 {
|
||||
strList = append(strList, utils.Int2Str(v.StoreUserLimit))
|
||||
}
|
||||
}
|
||||
skuList2 = append(skuList2, strings.Join(strList, ":"))
|
||||
}
|
||||
return strings.Join(skuList2, ";")
|
||||
}
|
||||
|
||||
// 批量删除活动商品
|
||||
// https://open-be.ele.me/dev/api/doc/v3/#api-Marketing-activity_sku_delete_batch
|
||||
func (a *API) ActivitySkuDeleteBatch(activityID int64, shopID string, baiduShopID int64, skuIDs []string, isSkuIDCustom bool) (successIDs []string, err error) {
|
||||
params := a.genShopIDParams(shopID, baiduShopID, 0)
|
||||
params[KeyActivityID] = activityID
|
||||
@@ -161,6 +184,8 @@ func (a *API) ActivitySkuDeleteBatch(activityID int64, shopID string, baiduShopI
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 批量添加活动商品
|
||||
// https://open-be.ele.me/dev/api/doc/v3/#api-Marketing-activity_sku_add_batch
|
||||
func (a *API) ActivitySkuList(activityID int64, shopID string, baiduShopID, supplierID int64, skuIDs []string, isSkuIDCustom bool) (activityInfo *ActivitySkuListInfo, err error) {
|
||||
params := a.genShopIDParams(shopID, baiduShopID, supplierID)
|
||||
params[KeyActivityID] = activityID
|
||||
@@ -179,35 +204,17 @@ func (a *API) ActivitySkuList(activityID int64, shopID string, baiduShopID, supp
|
||||
params["page"] = page
|
||||
result, err = a.AccessAPI("activity.sku.list", params)
|
||||
if err == nil {
|
||||
// tmpActivityInfo := &ActivitySkuListInfo{}
|
||||
// if err = utils.Map2StructByJson(result.Data, tmpActivityInfo, true); err != nil {
|
||||
// return nil, err
|
||||
// }
|
||||
// if activityInfo == nil {
|
||||
// activityInfo = tmpActivityInfo
|
||||
// } else {
|
||||
// activityInfo.SkuList = append(activityInfo.SkuList, tmpActivityInfo.SkuList...)
|
||||
// }
|
||||
resultMap := result.Data.(map[string]interface{})
|
||||
if activityInfo == nil {
|
||||
activityInfo = &ActivitySkuListInfo{
|
||||
ActivityID: activityID,
|
||||
ActivityType: int(utils.Str2Int64(utils.Interface2String(resultMap["activity_type"]))),
|
||||
ActivityName: utils.Interface2String(resultMap["activity_name"]),
|
||||
if err = utils.Map2StructByJson(resultMap, &activityInfo, true); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
for _, v := range resultMap["sku_list"].([]interface{}) {
|
||||
skuMap := v.(map[string]interface{})
|
||||
activityInfo.SkuList = append(activityInfo.SkuList, &ActivitySkuInfoEx{
|
||||
ActivitySkuInfo: ActivitySkuInfo{
|
||||
SkuID: utils.Interface2String(skuMap["sku_id"]),
|
||||
Stock: int(utils.Str2Int64(utils.Interface2String(skuMap["stock"]))),
|
||||
PromotionPrice: float32(utils.Interface2Float64WithDefault(skuMap["promotion_price"], 0)),
|
||||
},
|
||||
BaiduShopID: utils.Str2Int64(utils.Interface2String(skuMap["baidu_shop_id"])),
|
||||
OriginalPrice: float32(utils.Interface2Float64WithDefault(skuMap["original_price"], 0)),
|
||||
UpcName: utils.Interface2String(skuMap["upc_name"]),
|
||||
})
|
||||
} else {
|
||||
var skuList []*ActivitySkuInfo4List
|
||||
if err = utils.Map2StructByJson(resultMap["sku_list"], &skuList, true); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
activityInfo.SkuList = append(activityInfo.SkuList, skuList...)
|
||||
}
|
||||
if len(activityInfo.SkuList) >= int(utils.MustInterface2Int64(resultMap["total"])) {
|
||||
break
|
||||
@@ -220,6 +227,8 @@ func (a *API) ActivitySkuList(activityID int64, shopID string, baiduShopID, supp
|
||||
return activityInfo, err
|
||||
}
|
||||
|
||||
// 批量更新活动商品
|
||||
// https://open-be.ele.me/dev/api/doc/v3/#api-Marketing-activity_sku_update_batch
|
||||
func (a *API) ActivitySkuUpdateBatch(activityID int64, actSkuInfoList []*ActivitySkuInfo4Update) (faildInfoList []string, err error) {
|
||||
result, err := a.AccessAPI("activity.sku.update.batch", map[string]interface{}{
|
||||
KeyActivityID: activityID,
|
||||
|
||||
@@ -7,8 +7,10 @@ import (
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
)
|
||||
|
||||
const testActivityID = 3000000000517188
|
||||
|
||||
func TestActivityCreate(t *testing.T) {
|
||||
activityInfo, err := api.ActivityCreate("", 2235877569, 0, &ActivityInfo{
|
||||
activityInfo, err := api.ActivityCreate("", testShopBaiduID, 0, &ActivityInfo{
|
||||
ActivityName: "测试活动0403",
|
||||
StartTime: time.Now().Unix(),
|
||||
EndTime: time.Now().Add(24 * time.Hour).Unix(),
|
||||
@@ -29,8 +31,24 @@ func TestActivityCreate(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestActivitySkuAddBatch(t *testing.T) {
|
||||
result, err := api.ActivitySkuAddBatch(testActivityID, "", testShopBaiduID, ActivityTypeDirectDown, []*ActivitySkuInfo4Add{
|
||||
&ActivitySkuInfo4Add{
|
||||
SkuID: "3594",
|
||||
Stock: 9,
|
||||
SpecialPrice: 100,
|
||||
StoreUserLimit: 9,
|
||||
},
|
||||
}, true)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
} else {
|
||||
t.Log(utils.Format4Output(result, false))
|
||||
}
|
||||
}
|
||||
|
||||
func TestActivityUpdate(t *testing.T) {
|
||||
activityInfo, err := api.ActivityUpdate(6000268610, "", 2235877569, 0, &ActivityInfo{
|
||||
activityInfo, err := api.ActivityUpdate(6000268610, "", testShopBaiduID, 0, &ActivityInfo{
|
||||
ActivityName: "测试活动0403",
|
||||
StartTime: time.Now().Unix(),
|
||||
EndTime: time.Now().Add(24 * time.Hour).Unix(),
|
||||
@@ -52,7 +70,7 @@ func TestActivityUpdate(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestActivityGet(t *testing.T) {
|
||||
activityInfo, err := api.ActivityGet(6000268610, "", 2235877569, 0)
|
||||
activityInfo, err := api.ActivityGet(3000000000517188, "", testShopBaiduID, 0)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
} else {
|
||||
@@ -61,14 +79,14 @@ func TestActivityGet(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestActivityDisable(t *testing.T) {
|
||||
err := api.ActivityDisable(6000268604, "", 2235877569, 0)
|
||||
err := api.ActivityDisable(6000268604, "", testShopBaiduID, 0)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestActivitySkuList(t *testing.T) {
|
||||
activityInfo, err := api.ActivitySkuList(6000058442, "", 0, 2233065879, nil, false)
|
||||
activityInfo, err := api.ActivitySkuList(3000000000517188, "", testShopBaiduID, 0, nil, false)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
} else {
|
||||
|
||||
@@ -12,8 +12,8 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
testShopBaiduID = 2233976901
|
||||
testShopID = "100077"
|
||||
testShopBaiduID = 2267254343
|
||||
testShopID = "2"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -25,9 +25,8 @@ func init() {
|
||||
logger, _ := zap.NewDevelopment()
|
||||
sugarLogger = logger.Sugar()
|
||||
baseapi.Init(sugarLogger)
|
||||
|
||||
// sandbox
|
||||
api = New("62923", "aa4cdc6c1108486b")
|
||||
// sandbox,果园测试门店
|
||||
api = New("62289", "d3ec2358d6a819ea")
|
||||
// prod
|
||||
// api = New("34665", "c3db75b754ea2d89")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user