- ebai activity
- Interface2FloatWithDefault to Interface2Float64WithDefault
This commit is contained in:
@@ -1,6 +1,11 @@
|
|||||||
package ebaiapi
|
package ebaiapi
|
||||||
|
|
||||||
import "git.rosy.net.cn/baseapi/utils"
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
ActivityTypeDirectDown = 2 // 商品直降
|
ActivityTypeDirectDown = 2 // 商品直降
|
||||||
@@ -14,6 +19,35 @@ const (
|
|||||||
ActivityConfilictExclude = 1
|
ActivityConfilictExclude = 1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type ActivitySkuInfo struct {
|
||||||
|
SkuID string `json:"sku_id"`
|
||||||
|
Stock int `json:"stock"`
|
||||||
|
|
||||||
|
PromotionPrice float32 `json:"special_price"` // 直降用
|
||||||
|
StoreUserLimit int `json:"store_user_limit"` // 直降用
|
||||||
|
}
|
||||||
|
|
||||||
|
type ActivitySkuInfoEx struct {
|
||||||
|
ActivitySkuInfo
|
||||||
|
BaiduShopID int64 `json:"baidu_shop_id"`
|
||||||
|
UpcName string `json:"upc_name"`
|
||||||
|
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"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ActivityInfo 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) {
|
func (a *API) ActivityCreate(params map[string]interface{}) (activityID int64, err error) {
|
||||||
result, err := a.AccessAPI("activity.create", params)
|
result, err := a.AccessAPI("activity.create", params)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
@@ -32,19 +66,124 @@ func (a *API) ActivityDisable(activityID int64, shopID string, baiduShopID, supp
|
|||||||
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 map[string]interface{}, err error) {
|
||||||
params := a.genShopIDParams(shopID, baiduShopID, supplierID)
|
params := a.genShopIDParams(shopID, baiduShopID, supplierID)
|
||||||
params[KeyActivityID] = activityID
|
params[KeyActivityID] = activityID
|
||||||
result, err := a.AccessAPI("activity.disable", params)
|
result, err := a.AccessAPI("activity.get", params)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return result.Data.(map[string]interface{}), nil
|
return result.Data.(map[string]interface{}), nil
|
||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *API) ActivitySkuAddBatch(activityID int64, shopID string, baiduShopID, supplierID int64, skuIDs []int64, customSkuIDs []string) (successIDs []int64, err error) {
|
func (a *API) ActivitySkuAddBatch(activityID int64, shopID string, baiduShopID int64, activityType int, skuList []*ActivitySkuInfo, isSkuIDCustom bool) (successIDs []string, err error) {
|
||||||
// params := a.genShopIDParams(shopID, baiduShopID, supplierID)
|
params := a.genShopIDParams(shopID, baiduShopID, 0)
|
||||||
// params[KeyActivityID] = activityID
|
params[KeyActivityID] = activityID
|
||||||
// result, err := a.AccessAPI("activity.sku.add.batch", params)
|
skusKey := "activity_skus"
|
||||||
// if err == nil {
|
if isSkuIDCustom {
|
||||||
// return result.Data.(map[string]interface{}), nil
|
skusKey = "activity_custom_skus"
|
||||||
// }
|
}
|
||||||
|
params[skusKey] = skuList2Str(activityType, skuList, isSkuIDCustom)
|
||||||
|
result, err := a.AccessAPI("activity.sku.add.batch", params)
|
||||||
|
if err == nil {
|
||||||
|
return strings.Split(result.Data.(string), ","), nil
|
||||||
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func skuList2Str(activityType int, skuList []*ActivitySkuInfo, isSkuIDCustom bool) string {
|
||||||
|
skuList2 := []string{}
|
||||||
|
for _, v := range skuList {
|
||||||
|
strList := []string{
|
||||||
|
v.SkuID,
|
||||||
|
utils.Int2Str(v.Stock),
|
||||||
|
}
|
||||||
|
if activityType == ActivityTypeDirectDown {
|
||||||
|
strList = append(strList, fmt.Sprintf("%.2f", v.PromotionPrice))
|
||||||
|
strList = append(strList, utils.Int2Str(v.StoreUserLimit))
|
||||||
|
}
|
||||||
|
skuList2 = append(skuList2, strings.Join(strList, ":"))
|
||||||
|
}
|
||||||
|
return strings.Join(skuList2, ";")
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
skusKey := "sku_id"
|
||||||
|
if isSkuIDCustom {
|
||||||
|
skusKey = "custom_sku_id"
|
||||||
|
}
|
||||||
|
params[skusKey] = strings.Join(skuIDs, ",")
|
||||||
|
result, err := a.AccessAPI("activity.sku.delete.batch", params)
|
||||||
|
if err == nil {
|
||||||
|
return strings.Split(result.Data.(string), ","), nil
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *API) ActivitySkuList(activityID int64, shopID string, baiduShopID, supplierID int64, skuIDs []string, isSkuIDCustom bool) (activityInfo *ActivityInfo, err error) {
|
||||||
|
params := a.genShopIDParams(shopID, baiduShopID, supplierID)
|
||||||
|
params[KeyActivityID] = activityID
|
||||||
|
if len(skuIDs) > 0 {
|
||||||
|
skusKey := "sku_id"
|
||||||
|
if isSkuIDCustom {
|
||||||
|
skusKey = "custom_sku_id"
|
||||||
|
}
|
||||||
|
params[skusKey] = strings.Join(skuIDs, ",")
|
||||||
|
}
|
||||||
|
pageSize := 100
|
||||||
|
page := 1
|
||||||
|
params["page_size"] = pageSize
|
||||||
|
for {
|
||||||
|
var result *ResponseResult
|
||||||
|
params["page"] = page
|
||||||
|
result, err = a.AccessAPI("activity.sku.list", params)
|
||||||
|
if err == nil {
|
||||||
|
resultMap := result.Data.(map[string]interface{})
|
||||||
|
if activityInfo == nil {
|
||||||
|
activityInfo = &ActivityInfo{
|
||||||
|
ActivityID: activityID,
|
||||||
|
ActivityType: int(utils.Str2Int64(utils.Interface2String(resultMap["activity_type"]))),
|
||||||
|
ActivityName: utils.Interface2String(resultMap["activity_name"]),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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"]),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if len(activityInfo.SkuList) >= int(utils.MustInterface2Int64(resultMap["total"])) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
page++
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return activityInfo, err
|
||||||
|
}
|
||||||
|
|
||||||
|
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,
|
||||||
|
"act_sku_info": actSkuInfoList,
|
||||||
|
})
|
||||||
|
if err == nil {
|
||||||
|
return strings.Split(result.Data.(string), ";"), nil
|
||||||
|
}
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|||||||
25
platformapi/ebaiapi/activity_test.go
Normal file
25
platformapi/ebaiapi/activity_test.go
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
package ebaiapi
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"git.rosy.net.cn/baseapi/utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestActivityGet(t *testing.T) {
|
||||||
|
activityInfo, err := api.ActivityGet(6000058442, "", 0, 2233065879)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
} else {
|
||||||
|
t.Log(utils.Format4Output(activityInfo, false))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestActivitySkuList(t *testing.T) {
|
||||||
|
activityInfo, err := api.ActivitySkuList(6000058442, "", 0, 2233065879, nil, false)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
} else {
|
||||||
|
t.Log(utils.Format4Output(activityInfo, false))
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -69,3 +69,14 @@ func TestImageUploadByURL(t *testing.T) {
|
|||||||
}
|
}
|
||||||
t.Log(result)
|
t.Log(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPoiStatus(t *testing.T) {
|
||||||
|
err := api.PoiOnline("6741258")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
err = api.PoiOpen("6741258")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -108,13 +108,6 @@ func Interface2Int64WithDefault(data interface{}, defValue int64) int64 {
|
|||||||
return retVal
|
return retVal
|
||||||
}
|
}
|
||||||
|
|
||||||
func Interface2DirectIntWithDefault(data interface{}, defValue int) int {
|
|
||||||
if data == nil {
|
|
||||||
return defValue
|
|
||||||
}
|
|
||||||
return data.(int)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TryInterface2Float64(data interface{}) (num float64, err error) {
|
func TryInterface2Float64(data interface{}) (num float64, err error) {
|
||||||
if data == nil {
|
if data == nil {
|
||||||
return num, errors.New("data is nil")
|
return num, errors.New("data is nil")
|
||||||
@@ -144,7 +137,7 @@ func MustInterface2Float64(data interface{}) float64 {
|
|||||||
return retVal
|
return retVal
|
||||||
}
|
}
|
||||||
|
|
||||||
func Interface2FloatWithDefault(data interface{}, defValue float64) (retVal float64) {
|
func Interface2Float64WithDefault(data interface{}, defValue float64) (retVal float64) {
|
||||||
retVal, err := TryInterface2Float64(data)
|
retVal, err := TryInterface2Float64(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return defValue
|
return defValue
|
||||||
|
|||||||
Reference in New Issue
Block a user