From e550a24ce154ed5105a792a0adeeba07f1849a09 Mon Sep 17 00:00:00 2001 From: gazebo Date: Tue, 2 Apr 2019 14:30:13 +0800 Subject: [PATCH] - ebai activity - Interface2FloatWithDefault to Interface2Float64WithDefault --- platformapi/ebaiapi/activity.go | 157 +++++++++++++++++++++++++-- platformapi/ebaiapi/activity_test.go | 25 +++++ platformapi/mtwmapi/poi_test.go | 11 ++ utils/typeconv.go | 9 +- 4 files changed, 185 insertions(+), 17 deletions(-) create mode 100644 platformapi/ebaiapi/activity_test.go diff --git a/platformapi/ebaiapi/activity.go b/platformapi/ebaiapi/activity.go index 584b07df..fedf3900 100644 --- a/platformapi/ebaiapi/activity.go +++ b/platformapi/ebaiapi/activity.go @@ -1,6 +1,11 @@ package ebaiapi -import "git.rosy.net.cn/baseapi/utils" +import ( + "fmt" + "strings" + + "git.rosy.net.cn/baseapi/utils" +) const ( ActivityTypeDirectDown = 2 // 商品直降 @@ -14,6 +19,35 @@ const ( 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) { result, err := a.AccessAPI("activity.create", params) 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) { params := a.genShopIDParams(shopID, baiduShopID, supplierID) params[KeyActivityID] = activityID - result, err := a.AccessAPI("activity.disable", params) + result, err := a.AccessAPI("activity.get", params) if err == nil { return result.Data.(map[string]interface{}), nil } return nil, err } -func (a *API) ActivitySkuAddBatch(activityID int64, shopID string, baiduShopID, supplierID int64, skuIDs []int64, customSkuIDs []string) (successIDs []int64, err error) { - // params := a.genShopIDParams(shopID, baiduShopID, supplierID) - // params[KeyActivityID] = activityID - // result, err := a.AccessAPI("activity.sku.add.batch", params) - // if err == nil { - // return result.Data.(map[string]interface{}), nil - // } +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, 0) + params[KeyActivityID] = activityID + skusKey := "activity_skus" + if isSkuIDCustom { + 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 } + +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 +} diff --git a/platformapi/ebaiapi/activity_test.go b/platformapi/ebaiapi/activity_test.go new file mode 100644 index 00000000..55e1976e --- /dev/null +++ b/platformapi/ebaiapi/activity_test.go @@ -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)) + } +} diff --git a/platformapi/mtwmapi/poi_test.go b/platformapi/mtwmapi/poi_test.go index a5233801..151ded8e 100644 --- a/platformapi/mtwmapi/poi_test.go +++ b/platformapi/mtwmapi/poi_test.go @@ -69,3 +69,14 @@ func TestImageUploadByURL(t *testing.T) { } 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) + } +} diff --git a/utils/typeconv.go b/utils/typeconv.go index 34b6d484..619d1140 100644 --- a/utils/typeconv.go +++ b/utils/typeconv.go @@ -108,13 +108,6 @@ func Interface2Int64WithDefault(data interface{}, defValue int64) int64 { 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) { if data == nil { return num, errors.New("data is nil") @@ -144,7 +137,7 @@ func MustInterface2Float64(data interface{}) float64 { return retVal } -func Interface2FloatWithDefault(data interface{}, defValue float64) (retVal float64) { +func Interface2Float64WithDefault(data interface{}, defValue float64) (retVal float64) { retVal, err := TryInterface2Float64(data) if err != nil { return defValue