diff --git a/platformapi/ebaiapi/activity.go b/platformapi/ebaiapi/activity.go index ec2e4540..88c682b0 100644 --- a/platformapi/ebaiapi/activity.go +++ b/platformapi/ebaiapi/activity.go @@ -8,8 +8,8 @@ import ( ) const ( - ActivityTypeDirectDown = 2 // 商品直降 - ActivityTypeFullDiscount = 8 // 品类满减 + ActivityTypeDirectDown = 2 // 商品直降 + ActivityTypeFullDiscount = 8 // 品类满减 ActivityPFBaidu = 1 ActivityPFELM = 2 @@ -17,8 +17,38 @@ const ( ActivityConflictShare = 0 ActivityConfilictExclude = 1 + + ActivityShowStatusEnabled = 2 + ActivityShowStatusDisabled = 4 ) +type ActivityRule struct { + Accords int `json:"accords"` // 订单达到的金额,正整数,单位元。 + Sale int `json:"sale"` // 每单减价额度,正整数,单位元。 +} + +type ActivityInfo struct { + ActivityID int64 `json:"-"` + ActivityName string `json:"activity_name"` + ActivityType int `json:"activity_type"` + StartTime int64 `json:"start_time"` // 活动开始时间,时间戳,需大于当前时间。 + EndTime int64 `json:"end_time"` + OpenTime string `json:"open_time"` // "22:47" + CloseTime string `json:"close_time"` + WeekDay string `json:"weekday"` // 活动开始时间段内,每周具体星期几支持,默认活动生效时间段内全周支持。0,1,2,3,4,5,6代表周日到周六。 + ActivityPlatform int `json:"activity_platform"` + IsConflictActivity int `json:"is_conflict_activity"` + DayLimit int `json:"day_limit"` // 每日限购X单,1-1000整数。 + OrderLimit int `json:"order_limit"` // 每单限购商品数量。直降用到,满减没用到。1-1000整数。 + ActivityDesc string `json:"activity_desc"` + ShowCategory string `json:"show_category"` + PromotionSkuDesc string `json:"promotion_sku_desc"` // 店铺页活动商品的分类名称,不超过8个字。 + Rule []*ActivityRule `json:"rule"` + + BaiduShopID int64 `json:"-"` + ShowStatus int `json:"-"` +} + type ActivitySkuInfo struct { SkuID string `json:"sku_id"` Stock int `json:"stock"` @@ -41,17 +71,49 @@ type ActivitySkuInfo4Update struct { CustomSkuID string `json:"custom_sku_id"` } -type ActivityInfo struct { +type ActivitySkuListInfo struct { ActivityID int64 `json:"activity_id"` ActivityType int `json:"activity_type"` ActivityName string `json:"activity_name"` SkuList []*ActivitySkuInfoEx `json:"sku_list"` } -func (a *API) ActivityCreate(params map[string]interface{}) (activityID int64, err error) { - result, err := a.AccessAPI("activity.create", params) +var ( + ignoreActivityInfo = ActivityInfo{} +) + +func (a *API) ActivityCreate(shopID string, baiduShopID, supplierID int64, activity *ActivityInfo) (activityID int64, err error) { + params := utils.Struct2MapWithIgnore(activity, map[string]interface{}{ + "open_time": ignoreActivityInfo.OpenTime, + "close_time": ignoreActivityInfo.CloseTime, + "is_conflict_activity": ignoreActivityInfo.IsConflictActivity, + "order_limit": ignoreActivityInfo.OrderLimit, + "rule": ignoreActivityInfo.Rule, + }) + result, err := a.AccessAPI("activity.create", utils.MergeMaps(params, a.genShopIDParams(shopID, baiduShopID, supplierID))) if err == nil { - return utils.MustInterface2Int64(result.Data.(map[string]interface{})["activity_id"]), nil + return utils.Str2Int64(utils.Interface2String(result.Data.(map[string]interface{})["activity_id"])), nil + } + return 0, err +} + +func (a *API) ActivityUpdate(activityID int64, shopID string, baiduShopID, supplierID int64, activity *ActivityInfo) (newActivityID int64, err error) { + params := utils.Struct2MapWithIgnore(activity, map[string]interface{}{ + "open_time": ignoreActivityInfo.OpenTime, + "close_time": ignoreActivityInfo.CloseTime, + "weekday": ignoreActivityInfo.WeekDay, + "day_limit": ignoreActivityInfo.DayLimit, + "order_limit": ignoreActivityInfo.OrderLimit, + "activity_desc": ignoreActivityInfo.ActivityDesc, + "show_category": ignoreActivityInfo.ShowCategory, + "promotion_sku_desc": ignoreActivityInfo.PromotionSkuDesc, + "is_conflict_activity": ignoreActivityInfo.IsConflictActivity, + "rule": ignoreActivityInfo.Rule, + }) + params[KeyActivityID] = activityID + result, err := a.AccessAPI("activity.update", utils.MergeMaps(params, a.genShopIDParams(shopID, baiduShopID, supplierID))) + if err == nil { + return utils.Str2Int64(utils.Interface2String(result.Data.(map[string]interface{})["activity_id"])), nil } return 0, err } @@ -63,12 +125,42 @@ func (a *API) ActivityDisable(activityID int64, shopID string, baiduShopID, supp return err } -func (a *API) ActivityGet(activityID int64, shopID string, baiduShopID, supplierID int64) (activityInfo map[string]interface{}, err error) { +func (a *API) ActivityGet(activityID int64, shopID string, baiduShopID, supplierID int64) (activityInfo *ActivityInfo, err error) { params := a.genShopIDParams(shopID, baiduShopID, supplierID) params[KeyActivityID] = activityID result, err := a.AccessAPI("activity.get", params) if err == nil { - return result.Data.(map[string]interface{}), nil + dataMap := result.Data.(map[string]interface{}) + activityInfo = &ActivityInfo{ + ActivityID: utils.Str2Int64(utils.Interface2String(dataMap["activity_id"])), + ActivityName: utils.Interface2String(dataMap["activity_name"]), + ActivityType: int(utils.Str2Int64(utils.Interface2String(dataMap["activity_type"]))), + StartTime: utils.Str2Int64(utils.Interface2String(dataMap["start_time"])), + EndTime: utils.Str2Int64(utils.Interface2String(dataMap["end_time"])), + OpenTime: utils.Interface2String(dataMap["open_time"]), + CloseTime: utils.Interface2String(dataMap["close_time"]), + WeekDay: utils.Interface2String(dataMap["weekday"]), + ActivityPlatform: int(utils.Str2Int64(utils.Interface2String(dataMap["activity_platform"]))), + IsConflictActivity: int(utils.Str2Int64(utils.Interface2String(dataMap["is_conflict_activity"]))), + DayLimit: int(utils.Str2Int64(utils.Interface2String(dataMap["day_limit"]))), + OrderLimit: int(utils.Str2Int64(utils.Interface2String(dataMap["order_limit"]))), + ActivityDesc: utils.Interface2String(dataMap["activity_desc"]), + ShowCategory: utils.Interface2String(dataMap["show_category"]), + PromotionSkuDesc: utils.Interface2String(dataMap["promotion_sku_desc"]), + + BaiduShopID: utils.Str2Int64(utils.Interface2String(dataMap["baidu_shop_id"])), + ShowStatus: int(utils.Str2Int64(utils.Interface2String(dataMap["show_status"]))), + } + if rule, ok := dataMap["rule"].([]interface{}); ok { + for _, v := range rule { + vMap := v.(map[string]interface{}) + activityInfo.Rule = append(activityInfo.Rule, &ActivityRule{ + Accords: int(utils.MustInterface2Int64(vMap["accords"])), + Sale: int(utils.MustInterface2Int64(vMap["sale"])), + }) + } + } + return activityInfo, nil } return nil, err } @@ -119,7 +211,7 @@ func (a *API) ActivitySkuDeleteBatch(activityID int64, shopID string, baiduShopI return nil, err } -func (a *API) ActivitySkuList(activityID int64, shopID string, baiduShopID, supplierID int64, skuIDs []string, isSkuIDCustom bool) (activityInfo *ActivityInfo, err error) { +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 if len(skuIDs) > 0 { @@ -139,7 +231,7 @@ func (a *API) ActivitySkuList(activityID int64, shopID string, baiduShopID, supp if err == nil { resultMap := result.Data.(map[string]interface{}) if activityInfo == nil { - activityInfo = &ActivityInfo{ + activityInfo = &ActivitySkuListInfo{ ActivityID: activityID, ActivityType: int(utils.Str2Int64(utils.Interface2String(resultMap["activity_type"]))), ActivityName: utils.Interface2String(resultMap["activity_name"]), @@ -179,11 +271,3 @@ func (a *API) ActivitySkuUpdateBatch(activityID int64, actSkuInfoList []*Activit } return nil, err } - -func (a *API) ActivityUpdate(activityID int64, params map[string]interface{}) (newActivityID int64, err error) { - result, err := a.AccessAPI("activity.update", utils.MergeMaps(utils.Params2Map(KeyActivityID, activityID), params)) - if err == nil { - return utils.MustInterface2Int64(result.Data.(map[string]interface{})["activity_id"]), nil - } - return 0, err -} diff --git a/platformapi/ebaiapi/activity_test.go b/platformapi/ebaiapi/activity_test.go index 55e1976e..122043b5 100644 --- a/platformapi/ebaiapi/activity_test.go +++ b/platformapi/ebaiapi/activity_test.go @@ -2,12 +2,26 @@ package ebaiapi import ( "testing" + "time" "git.rosy.net.cn/baseapi/utils" ) -func TestActivityGet(t *testing.T) { - activityInfo, err := api.ActivityGet(6000058442, "", 0, 2233065879) +func TestActivityCreate(t *testing.T) { + activityInfo, err := api.ActivityCreate("", 2235877569, 0, &ActivityInfo{ + ActivityName: "测试活动0403", + StartTime: time.Now().Unix(), + EndTime: time.Now().Add(24 * time.Hour).Unix(), + OpenTime: "22:00", + CloseTime: "23:00", + WeekDay: "0,1", + ActivityPlatform: ActivityPFAll, + DayLimit: 1, + ActivityDesc: "测试活动0403描述", + ShowCategory: "店铺页活动商品", + PromotionSkuDesc: "PromotionSkuDesc", + ActivityType: ActivityTypeDirectDown, + }) if err != nil { t.Fatal(err) } else { @@ -15,6 +29,44 @@ func TestActivityGet(t *testing.T) { } } +func TestActivityUpdate(t *testing.T) { + activityInfo, err := api.ActivityUpdate(6000268610, "", 2235877569, 0, &ActivityInfo{ + ActivityName: "测试活动0403", + StartTime: time.Now().Unix(), + EndTime: time.Now().Add(24 * time.Hour).Unix(), + OpenTime: "22:00", + CloseTime: "23:00", + WeekDay: "0,1", + ActivityPlatform: ActivityPFAll, + DayLimit: 1, + ActivityDesc: "测试活动0403描述", + ShowCategory: "店铺页活动商品", + PromotionSkuDesc: "PromotionSkuDesc", + ActivityType: ActivityTypeDirectDown, + }) + if err != nil { + t.Fatal(err) + } else { + t.Log(utils.Format4Output(activityInfo, false)) + } +} + +func TestActivityGet(t *testing.T) { + activityInfo, err := api.ActivityGet(6000268610, "", 2235877569, 0) + if err != nil { + t.Fatal(err) + } else { + t.Log(utils.Format4Output(activityInfo, false)) + } +} + +func TestActivityDisable(t *testing.T) { + err := api.ActivityDisable(6000268604, "", 2235877569, 0) + if err != nil { + t.Fatal(err) + } +} + func TestActivitySkuList(t *testing.T) { activityInfo, err := api.ActivitySkuList(6000058442, "", 0, 2233065879, nil, false) if err != nil {